我为了使HTML文件创建在C ++一个Linux程序的便携式装置。

的问题是,该设备在RAM的限制,从而不可能开大文件(实际的软件)。

一个解决方案是动态加载/卸载文件的部分,但我不知道如何实现这一点。

滚动的能力是必须的,以及如果可能的平滑体验

我想听听您的意见是什么这样的情况,最好的方法? 你可以提出一个算法,一个开源项目,看一看,或库,支持什么,我试图做(webkit的?)。

修改 我正在写一个电子书阅读器,所以我只需要纯HTML的渲染,不需要JavaScript,CSS没有,...

有帮助吗?

解决方案

要能够浏览树文档(如HTML)不完全加载,你将不得不作出一些假设 - 如文件是一个实际的树。所以,不要打扰检查关闭标签。关闭标签供人消费的,无论如何,计算机将很高兴与<>了。

的第一步是,认为你的文件的第一部分是通过将文档的第一部分表示。这听起来像一个同义反复,但与“现代”的HTML和JS肯定在技术上不再是真实的。尽管如此,如果HTML的任何线路可影响任何像素,则根本不能部分加载的页面。

所以,如果有位置的HTML文件,并在屏幕上的网页之间的简单的关系,下一个步骤是在各页的端部,以限定所述解析状态。那么这将包括一个单一的文件在段落的结束偏移,可能(但不一定)。同样在此状态的一部分是开放标签的堆叠。

为使分页更简单,它的智能,以保持这种“页边界”状态,到目前为止您所遇到的每一页。这使得寻呼背面容易。

现在,呈现一个新页面时,之前的页面边界的国家会给您最初的渲染状态。您只需读取HTML和元素使它元素,直到溢出单页。然后,回溯了一下,确定新的页面边界状态。

平滑滚动基本上呈现两个相邻的页和表示所述第二的第一和100-X%X%的问题。一旦你实现了这个位,就可能成为智能渲染每一个页面时,完成一个段落。这会给你稍有不同页面的长度,但你没有对付碎段,而这又使你的页面边界状态有点小。

其他提示

Dillo 是重量最轻的Linux的Web浏览器,我所知道的。

修改:如果它(或它的渲染组件)不能满足你的需求,那么你可能会发现维基百科的名单和的布局引擎的是有帮助的。

修改2:我怀疑的HTML文件的动态加载和卸载部件将是棘手;例如,你怎么会知道该文件的随机选择的块是不是在标签的中间?你可能不得不使用类似SAX将文件解析成中间表示,节省了中间表示到永久存储的离散块,使它们不会占用太多的内存。或者你可以分析该文件使用SAX显示无论在RAM一次然后配合重新分析它,每当用户滚动太远。 (样式表和Javascript会毁了这个方法,一些普通的HTML可能了。)如果是我,我会试图找到一个简单的标记语言或者某种富文本浏览器,而不是将所有的困难

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top