MyHTML:基于线程的 C/C++ HTML 5 解析器
MyHTML 是个快速 HTML 解析器,使用线程来实现一个类似纯 C99 库,无任何外部依赖。
MyHTML 当前版本是 1.0.1,扩展了一个 MyCSS 开源库。MyCSS 是个快速的 CSS 解析器,GitHub 地址:
https://github.com/lexborisov/mycss
MyHTML 主要特性:
- 异步解析,构建树和指数
- 和 HTML5 规范完全一致
- 两个 API – 高和低水平
- 操作元素:添加,修改,删除和其他
- 操作元素属性:添加,修改,删除和其他
- 支持 39 种字符编码 encoding.spec.whatwg.org
- 支持字符编码检测
- 支持单模解析
- 支持无 POSIX 线程构建
- 支持片段解析
- 支持 parsing by chunks
- 无外部依赖
- C99 支持
- 通过了所有 html5lib-tests
扩展库
- MyCSS — Fast C/C++ CSS Parser (Cascading Style Sheets Parser)
支持的 InputStream 编码
X_USER_DEFINED, UTF_8, UTF_16LE, UTF_16BE, BIG5, EUC_KR, GB18030,
IBM866, ISO_8859_10, ISO_8859_13, ISO_8859_14, ISO_8859_15, ISO_8859_16, ISO_8859_2, ISO_8859_3,
ISO_8859_4, ISO_8859_5, ISO_8859_6, ISO_8859_7, ISO_8859_8, KOI8_R, KOI8_U, MACINTOSH,
WINDOWS_1250, WINDOWS_1251, WINDOWS_1252, WINDOWS_1253, WINDOWS_1254, WINDOWS_1255, WINDOWS_1256,
WINDOWS_1257, WINDOWS_1258, WINDOWS_874, X_MAC_CYRILLIC, ISO_2022_JP, GBK, SHIFT_JIS, EUC_JP, ISO_8859_8_I
支持 UTF-8 编码
可检测的字符编码
UTF-8, UTF-16LE, UTF16BE 和 russian windows-1251, koi8-r, iso-8859-5, x-mac-cyrillic, ibm866
构建和安装
Make
make
MyHTML_OPTIMIZATION_LEVEL=-O2
set compiler optimization level. Default: -O2MyHTML_BUILD_WITHOUT_THREADS=YES
build without POSIX Threads. Default: NO
示例
make MyHTML_BUILD_WITHOUT_THREADS=NO
cp lib/* /usr/local/lib
cp -r include/* /usr/local/include
CMake
在 myhtml/project 目录:
cmake .
make
sudo make install
MyHTML_OPTIMIZATION_LEVEL=-O2
set compiler optimization level. Default: -O2CMAKE_INSTALL_LIBDIR=lib
set path to install created library. Default: libMyHTML_BUILD_SHARED=ON
build shared library. Default: ONMyHTML_BUILD_STATIC=ON
build static library. Default: ONMyHTML_INSTALL_HEADER=OFF
install header files. Default OFFMyHTML_BUILD_WITHOUT_THREADS=YES
build without POSIX Threads. Default: NOMyHTML_EXTERN_MALLOC=my_malloc_func
set extern malloc function. Default: UNDEFINEDMyHTML_EXTERN_REALLOC=my_realloc_func
set extern realloc function. Default: UNDEFINEDMyHTML_EXTERN_CALLOC=my_calloc_func
set extern calloc function. Default: UNDEFINEDMyHTML_EXTERN_FREE=my_free_func
set extern free function. Default: UNDEFINED
示例
cmake . -DCMAKE_INSTALL_LIBDIR=lib64 -DMyHTML_INSTALL_HEADER=ON
程序构建示例
构建共享库
gcc -Wall -Werror -O2 -lmyhtml your_program.c -o your_program
构建静态库
gcc -Wall -Werror -O2 your_program.c /path/to/libmyhtml_static.a -o your_program
其他语言绑定
简单示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <myhtml/api.h>
int main(int argc, const char * argv[])
{
char html[] = "<div><span>HTML</span></div>";
// basic init
myhtml_t* myhtml = myhtml_create();
myhtml_init(myhtml, MyHTML_OPTIONS_DEFAULT, 1, 0);
// first tree init
myhtml_tree_t* tree = myhtml_tree_create();
myhtml_tree_init(tree, myhtml);
// parse html
myhtml_parse(tree, MyHTML_ENCODING_UTF_8, html, strlen(html));
// release resources
myhtml_tree_destroy(tree);
myhtml_destroy(myhtml);
return 0;
}
MyHTML 遵循 LGPL 开源授权协议,GitHub 地址:https://github.com/lexborisov/myhtml
发表回复