项目

AngleSharp 即将推出的特性

GitHub 的项目管理功能确实不错,但它们没有足够的空间进行讨论和深入介绍即将推出的特性。这个列表没有按照任何顺序(重要性、发布日期等)排列,只应被视为想法和提醒的集合。

CSSOM 视图模块

渲染可能是 AngleSharp 最有趣的功能之一。AngleSharp 不会直接涵盖渲染,而是很容易连接到自定义渲染引擎。可能会提供一个(示例)库,就像 AngleSharp.Scripting 一样,它是包含 JavaScript 引擎的例子。渲染的一个基石是包括 CSSOM 视图模块,它定义了许多方法、接口等。这在连接到实际设备(如屏幕)时至关重要。同样,用于分析(见 Window)的假设备也会受益于 CSSOM 视图模块。

并非所有的接口和方法都需要由 AngleSharp 核心库实现/提供。在这个工作包的主要任务之一是确定一个良好的层次结构,既提供了灵活性,又提供了可用于多种目的的信息。

状态:部分包含。一旦开始处理渲染(外部库),大部分这些事情将被确定下来。

更多信息可以在:

渲染

好的,现在有了渲染,不过不是直接在 AngleSharp 中。然而,为了从核心角度看清楚到底需要什么,需要提供一个参考实现。该实现应该遵循 CSS 2.1 规范中描述的官方标准以及后来发布的模块。

状态:草图化,概述了,但目前还没有进展。

更多信息可以在:

定义 UI 处理

这个部分的大部分是对 IWindow 的扩展。我们需要考虑以下几点:

  • UI 特定的树遍历,跟踪样式
  • 事件循环(目前放在 Document 中)
  • ...

一旦完成了样本渲染实现并发布,大部分这些问题就会变得更明显。这将在 v0.7 之后发生,可能在十月,更有可能在十一月。

核心源应该是浏览上下文。然而,这是一个单独的问题。浏览上下文将优于紧密绑定到 IDocument 实例的 IWindow 实例。浏览上下文还将携带设备信息,目前这些信息在 IWindow 层面上可用。

状态:完全缺失。

完成样式解析

在简单层面上,样式解析已经完成。但是,由于伪元素仍然缺失,IWindow 还未完成以及其他悬而未决的问题,无法认为样式解析已经解决。

在 v0.7 中,除了修复一些小错误和添加一些次要功能更新外,当前状态不会有任何变化。首先需要完善 CSS 对象模型。一旦生成的 CSS 树满足要求,样式解析就会被列入议程。

实际上,样式解析对于(任何)渲染项目非常重要。拥有样式信息是绘制视觉树的最重要因素。最终,视觉树主要基于样式信息。一般规则是:样式 + 文本 = 展现。

状态:在 CSSOM 完成后完成。这可能会在 v1.0 时发生。

更多信息可以在:

提供更多的扩展点

例如,自动文件系统缓冲区,显然需要访问文件系统。此外,存储可能需要以不同的形式访问文件系统。同时,媒体类型(如视频、音频或图像)也需要访问视频和音频流播放以及图像显示。

v0.7 很可能已经引入了一些媒体扩展,如从原始字节获取图像或音频信息,或者为离线 API 访问存储。这也将引入扩展配置管道。

扩展配置管道将在 DOM 交互期间成为核心。虽然解析器在源解析期间是核心,但配置管道包含了所有相关数据。

已经存在的有,例如:

  • 样式解析器
  • 脚本引擎
  • HTTP 请求者

缺少的有,例如:

  • MIME 到媒体类型的转换
  • 资源数据库
  • 当地存储

最终目标是拥有大量的扩展点,然后可以完全自定义、扩展和使用。这样,AngleSharp 保持相当原子(解析器、DOM),并提供了扩展(超越本地)的能力。一个完全可定制和可扩展的无头浏览器。

状态:已提供,需要更多想法。

MathML

MathML 是一种标记语言,允许像 LaTeX 一样编写方程式。因此,MathML 有特殊的标签,具有语义含义,如运算符、标识符、符号、空白和更多。HTML5 规范允许嵌入 MathML。

目前,AngleSharp 可以处理 MathML 作为 HTML 的外联元素。这应该是这样。目前没有计划支持“Math 文档”或其他类似结构。然而,AngleSharp 目前仅限于少数 MathML 元素。所有其他元素都将被视为具有自定义 NodeNameMathElement 元素。

为了在 AngleSharp 中包含更多 MathML(子)DOM 的信息,有几个原因。因此,至关重要的是要在 AngleSharp 中包含所有其他特定定义的元素。最终,MathFactory 需要扩展以支持这些其他元素。这应该足以支持 MathML。

需要调查是否还需要包括其他属性,如特殊实体。如果是这样,问题是:如何更改实体检索模式?有几种选择,但解决方案必须是稳健的、易于扩展的,并且性能良好。

状态:基本功能已包含,推迟到 v1.0。

更多信息可以在:

SVG

SVG 是一种基于 XML 的矢量文件格式。HTML5 规范允许通过指定在文档中嵌入 SVG 图像。一些较旧的浏览器可能需要外部引用 SVG 图像。AngleSharp 支持 HTML5,因此可以直接在文档中包含 SVG。

尽管没有计划支持 “Math 文档” ,AngleSharp 应考虑使用 IXmlDocument 接口(带有 XMLDocument 实现)来创建“SVG 文档”。这样,外部 SVG 图像也可以被解析。目前还不清楚这些文档是否会使用 HTML 解析器,还是 XML 解析器会被恢复用于此目的。如果是这样,可能会降级,以放弃对 DTD 等的支持。这样,XML 解析器将是非验证的。这可能是最好的解决方案。

有许多特殊的元素和属性需要覆盖。然而,最终,这个努力将远小于实现 HTML DOM。

状态:基本功能已包含,推迟到 v1.0。

更多信息可以在:

瘦身 AngleSharp

AngleSharp 并不真正庞大,但它在不断增长。虽然项目永远不会放弃其核心,包括

  • HTML 解析器,
  • CSS 解析器,
  • (核心)IDL 接口,
  • (核心)DOM 实现,
  • 配置和扩展,

但其中的一些能力应该转移到其他(扩展)项目中。随着 v0.8 完成,将开始进行全面评估,以确定哪些部分是核心/重要的,哪些是扩展。评估的主要目的是:

  • 使 AngleSharp 对小型任务保持小巧
  • 减少足迹
  • 使 AngleSharp 更加可扩展
  • 只提供所需的扩展

如果用户仅需解析几行 HTML 或单个 HTML 文档,那么这项任务应该仅使用核心库就能完成。如果他们想截取网页屏幕截图、模拟完整的浏览上下文或完全集成 JavaScriptAngleSharp(而不仅仅是文档上),那么扩展就在那里提供帮助。

最终的想法是只为用户提供他们需要的东西,而不是更多。如果他们想要更多,他们可以选择获取更高级别的 NuGet 包,作为核心库的扩展。

状态:CSS 已经移出,直到 v1.0 还会有更多。

在本文档中