编写浏览器和学习 rust 的微弱尝试。
注意:主分支中的代码目前不稳定,甚至可能无法编译。
_ | | __ _ ___ ___ _ _| |__ / _` |/ _ \/ __| | | | '_ \ | (_| | (_) \__ \ |_| | |_) | \__, |\___/|___/\__,_|_.__/ __/ | The Gateway to |___/ Optimized Searching and Unlimited Browsing
此存储库是 GoSub 浏览器项目的一部分。目前只有一个组件/存储库(这个),但这个想法是还有许多其他组件作为一个整体构成了一个成熟的浏览器。每个组件都可以作为独立的东西运行(即:html5解析器,css解析器等)。
将来,此组件(html5 解析器)将通过 API 接收字节流并输出事件流。这些事件将被下一个组件使用,依此类推,直到我们可以在窗口/用户代理中显示某些内容。这很可能是一个文本模式浏览器,但这个想法是有一个图形浏览器。
这是一项正在进行的工作。目前的状态是解析器可以解析一些html5文档,但还远远没有准备好。主要目标是能够正确解析html5lib-tests存储库(https://github.com/html5lib/html5lib-tests)中的所有测试。一旦我们可以做到这一点,我们就可以尝试看看我们是否可以生成一个 DOM 树,然后我们可以开始考虑下一个组件(css 解析器)。
该项目使用货物(https://doc.rust-lang.org/cargo/)。要构建项目,只需运行:
cargo build
这将创建以下二进制文件和库:
文件 | 类型 | 描述 |
---|---|---|
go子引擎 | 自由 | 实际的 html5 解析器/分词器 |
gosub-browser | .bin | 虚拟浏览器(见下文) |
parser_test | .bin | 解析器的测试套件 |
tokenizer_test | .bin | 分词器的测试套件 |
这是实际的html5解析器/分词器。它是一个可以被其他项目使用的库。它不是一个独立的项目。它由gosub浏览器项目使用。
这是一个虚拟浏览器。它不是一个真正的浏览器,它只是一个测试项目,以查看解析器/分词器是否正常工作并尝试在命令行上解析给定的 url:
$ gosub-browser https://www.google.com
这是解析器的测试套件。它不是一个独立的项目。它由gosub引擎项目使用。你需要为 html5lib-test 指定目录才能运行,否则它将使用默认的目录 (./html5lib-tests)。
$ parser_test /path/to/html5lib-tests