#syntect #themes #syntax #regex #extra #syntaxes

two-face

为 syntect 提供额外的语法和主题定义

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解析器实现

Download history 2004/week @ 2024-04-19 2266/week @ 2024-04-26 2163/week @ 2024-05-03 2462/week @ 2024-05-10 4155/week @ 2024-05-17 2834/week @ 2024-05-24 2853/week @ 2024-05-31 2871/week @ 2024-06-07 3135/week @ 2024-06-14 3013/week @ 2024-06-21 2728/week @ 2024-06-28 3085/week @ 2024-07-05 2623/week @ 2024-07-12 2678/week @ 2024-07-19 2546/week @ 2024-07-26 2444/week @ 2024-08-02

10,625 每月下载次数
用于 30 个crate (5 个直接使用)

MIT/Apache 协议

3MB
373

two-face

build status Crates.io codecov

致力于追逐 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 的底层正则表达式实现 Onigurumaonig 作为默认值和 fancy-regexfancy 作为纯 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-APACHELICENSE-MIT 文件以获取许可证详情。

嵌入的语法定义和资产也有自己的许可证,这些许可证已编译到 此Markdown文件,并在 acknowledgement 模块中提供编程访问。

bat 的声明

版权所有 (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat)。

bat可在MIT许可证或Apache许可证2.0的条款下提供,由您选择。

请参阅 LICENSE-APACHELICENSE-MIT 文件以获取许可证详情。

依赖项

~3–12MB
~148K SLoC