5 个版本 (3 个破坏性更新)
0.4.0 | 2024年4月27日 |
---|---|
0.3.0 | 2023年8月31日 |
0.2.0 | 2023年8月13日 |
0.1.1 | 2023年7月4日 |
0.1.0 | 2023年7月4日 |
#197 在 解析器实现 中
10,625 每月下载次数
用于 30 个crate (5 个直接使用)
3MB
373 行
two-face
致力于追逐 bat
man
为 syntect
提供额外的语法和主题定义,包括许多默认集合中缺少的常见定义,如 TOML、TypeScript 和 Dockerfile。由 bat
项目 精选
示例
以下
$ cargo add two-face --features syntect-default-onig
use two_face::re_exports::syntect;
const TOML_TEXT: &str = "\
[section]
key = 123
";
fn main() {
let syn_set = two_face::syntax::extra_newlines();
let theme_set = two_face::theme::extra();
let syn_ref = syn_set.find_syntax_by_extension("toml").unwrap();
let theme = theme_set.get(two_face::theme::EmbeddedThemeName::Nord);
let htmlified = syntect::html::highlighted_html_for_string(
TOML_TEXT,
&syn_set,
syn_ref,
theme
).unwrap();
println!("{htmlified}");
}
将打印此内容
<pre style="background-color:#2e3440;">
<span style="color:#d8dee9;">[section]
</span><span style="color:#81a1c1;">key </span><span style="color:#d8dee9;">= </span><span style="color:#b48ead;">123
</span></pre>
功能标志
功能标志由 syntect 的底层正则表达式实现 Oniguruma
即 onig
作为默认值和 fancy-regex
即 fancy
作为纯 Rust 实现。然而,fancy 不支持某些语法定义中使用的所有功能,因此当选择 fancy 时,一些定义被排除以保持正则表达式编译的可靠性。这意味着需要匹配 syntect 使用的正则表达式实现
* 这也是为什么 fancy 的捆绑语法定义比 onig 小的原因
默认:syntect-onig
功能 | 描述 |
---|---|
syntect-onig / syntect-fancy |
启用我们从 syntect 需要的最小功能集 |
syntect-default-onig / syntect-default-fancy |
最小功能集以及 syntect 的默认功能集(当使用 syntect 重新导出时很有用) |
嵌入资产大小
这个crate将一些相当大的资产嵌入到最终二进制文件中以便工作。幸运的是,链接器足够智能,可以丢弃未使用的资产,所以你通常只需为使用的部分付费
以下是不同功能的大小
功能 | two-face (KiB) |
syntect (KiB) |
---|---|---|
two_face::acknowledgement::listing() |
10 | - |
two_face::syntax::extra_newlines() (onig) |
859 | 360 |
^^ (fancy) | 804 | 360 |
two_face::syntax::extra_no_newlines() (onig) |
858 | 359 |
^^ (fancy) | 803 | 359 |
two_face::主题::额外() |
45 | 5 |
简而言之,语法定义是真正的“重”部分,如果你从syntect
切换到two-face
,那么你可能会在这些语法定义上看到二进制大小增加约~0.5MiB(以换取大量语法定义)
语法
two_face::syntax
中包含的所有语法的完整列表
- 使用
fancy-regex
实现时排除 - † 包含在
syntect
捆绑的默认设置中
语法定义 | |
---|---|
A | ActionScript†, Ada, Apache Conf, AppleScript†, AsciiDoc, ASP†, ARM Assembly*, Assembly (x86_64), AWK |
B | Bash†, Batch File†, BibTeX† |
C | C†, C#†, C++†, Cabal, Clojure†, CMake, CoffeeScript, Crontab, Crystal, CSS†, CSV† |
D | D†, Dart, Dockerfile, DotENV, Diff† |
E | Elixir, Elm, Email, Erlang† |
F | F#, Fish, Fortran, fstab |
G | Git (commit, config, ignore, etc.)†, GLSL, Go†, GraphQL, Graphviz (DOT)†, Groff/troff†, Groovy† |
H | Haskell†, HTML† |
I | INI |
J | Java†, Javadoc†, Java Server Page (JSP)†, JavaScript†, JavaScript (Babel)*, Jinja2, JQ, JSON†, Julia |
K | Kotlin |
L | LaTeX†, LaTeX Log†, Lean, LESS, Lisp†, Literate Haskell†, LiveScript*, LLVM, Lua† |
M | Makefile†, Manpage, Markdown†, MATLAB†, Mediawiki, MutliMarkdown† |
N | NAnt Build File†, Nginx, Nim, Ninja, Nix |
O | Objective-C†, Objective-C++†, OCaml†, OCamllex†, OCamlyacc†, Org Mode |
P | Pascal†, Perl†, PHP†, PowerShell*, Protobuf, Puppet, PureScript, Python† |
Q | QML |
R | R†, Racket, Rd†, Rego, Regular Expression†, Requirements.txt, reStructuredText†, Robot Framework, Ruby†, Ruby Haml†, Ruby on Rails†, Ruby Slim, Rust† |
S | Sass*, Scala†, SCSS, Salt State SLS*, SML, Solidity, SQL†, Strace, Stylus, Svelte, Swift, SystemVerilog |
T | Tcl†, Terraform, TeX†, Textile†, Todo.txt, TOML, TypeScript, TypescriptReact |
V | Varlink, Verilog, VimL, Vue, Vyper |
X | XML† |
Y | YAML† |
Z | Zig |
主题
注意:有关所有嵌入主题的视觉示例,请参阅two_face::theme::EmbeddedThemeName
的文档
two_face::theme
提供主题的完整列表。其中许多主题仅在特定情况下才有意义,因此你可能只想公开其中的一小部分
- † 包含在
syntect
捆绑的默认设置中
主题 | |
---|---|
1 | 1337 (又名leet) |
A | Ansi |
B | Base16, Base16-256, Base16-Eighties (dark)†, Base16-Mocha (dark)†, Base16-Ocean (light/dark)† |
C | Coldark (cold/dark,即light/dark) |
D | DarkNeon, Dracula |
G | GitHub, gruvbox (light/dark) |
I | InspiredGitHub† |
M | Monokai Extended (plain, bright, light, and origin) |
N | Nord |
O | One Half (light/dark) |
S | Solarized (light/dark)† |
T | TwoDark |
V | Visual Studio Dark+ |
Z | Zenburn |
法律
生成语法和主题转储以及整理这些语法的代码大部分来自 bat
。因此,我们也通过MIT和Apache-2.0双重许可来镜像 bat
的许可证。
请参阅 LICENSE-APACHE 和 LICENSE-MIT 文件以获取许可证详情。
嵌入的语法定义和资产也有自己的许可证,这些许可证已编译到 此Markdown文件,并在 acknowledgement
模块中提供编程访问。
bat
的声明
版权所有 (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat)。
bat可在MIT许可证或Apache许可证2.0的条款下提供,由您选择。
请参阅 LICENSE-APACHE 和 LICENSE-MIT 文件以获取许可证详情。
依赖项
~3–12MB
~148K SLoC