1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018 年 3 月 8 日

#13#语法高亮器

MIT 许可证

370KB
976

paint

类似 Sublime 的语法高亮器

# highlight a file
paint ./file.xx --theme="oceanic next" > index.html

# replace <pre> blocks with highlighted code
paint replace --watch ./plain.html -o highlighted.html

👉 输出演示
💾 预编译的二进制文件

使用 Rust 编写,使用了 @trishume 的出色的 syntect 库。

原因(不是 pygments)

我想得到看起来像我的文本编辑器的 HTML 代码片段。

对于某些语言,pygments(或 highlight.js)有点平淡无奇

Sublime 和 VS Code 有更多的细节!为什么?它们使用的解析语法比 pygments 更复杂。比较 pygments 用于 JavaScript 的 约 70 行 规则集,与 Sublime 的这个 1500 行语法。这些语法允许在颜色方案中实现更复杂的样式。

现在这个例子有点牵强。JavaScript 通常是最糟糕的,pygments 并非所有主题都充分利用了 Sublime 提供的额外信息。但一般来说,我认为增加的细节在视觉上解析文本时会产生影响。

为了解决我的问题,我想得到一些东西,

  • 看起来像我在 Sublime / VS Code / Github 看到的
  • 有一些好的默认设置
  • 可以融入某种工作流程中

如何使用

我考虑了几种可能的使用方式,并将其分解为一些工作流程

• 一次性获取 css,然后高亮显示单个代码片段

1- 获取 css

paint css "github" >> main.css

2- 获取高亮的 html,粘贴到 <body>

# Get contents of whole file, or parts with --selection=X-Y
paint ./file.xx --html-only | clip

# Or, copy the text you want to add to a page:
paste | paint --filetype="xx" --html-only | clip

通过 clip(或 pbcopy 或 xclip)是最佳选择。

• 自动高亮显示文档中的所有代码块

paint replace ./raw.html > highlighted.html

# also with watch mode, will re-highlight on file save
paint replace --watch ./raw.html --out highlighted.html

查找文档中 <pre data-paint="xx"></pre> 块,并高亮显示其中的所有内容,其中 xx 是要使用的文件类型(如使用 markdown 中的代码围栏:```rust)。添加其他数据属性以启用其他设置。

👉 示例

• 将所有内容打包成脚本,嵌入到 gist 中

模拟 GitHub gists 的功能。输出一个可以在另一页加载的小脚本。可以用来保持页面干净,避免突出示例的嘈杂标记。

paint ./file.xx --embed > example.js
<div class="embedded">
    <script src="./example.js"></script>
</div>

👉 示例

安装

最新版本 中获取预编译的二进制文件或从源代码安装

cargo install paint

注意

  • 在 Windows 上,您需要先运行 vcvarsall.bat x64 以编译 syntect
    我的 vcvarsall (VS2015) 位置在:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat

完整用法和功能

一些值得注意的功能尚未提及

  • 行号
  • 选择文件中的 X-Y 行
  • 在特定行添加高亮

USAGE:
    paint.exe [FLAGS] [OPTIONS] [FILE] [SUBCOMMAND]

FLAGS:
    -b, --border          Wrap output in a border
        --css-inline      Put styles inline instead of using classes
        --css-only        Output css only
        --embed           Emit a js embed script instead of html
    -f, --footer          Adds footer
    -g, --gist-like       Adds line numbers, border, and header
        --help            Prints help information
    -h, --header          Adds header
        --html-only       Output html only
    -n, --line-numbers    Include line numbers
    -V, --version         Prints version information

OPTIONS:
        --css-prefix <prefix>    CSS style prefix, defaults to ".paint"
        --filetype <type>        Specify the filetype when using stdin
        --highlight <lines>      Highlight lines: X[-Y][,...]
    -o, --out <file>             Save result to file instead of stdout
        --selection <lines>      Only include range of lines: N-M
        --syntax <file>          Use given .sublime-syntax for syntax parsing
    -t, --theme <name/path>      Theme name or .tmTheme path, (defaults to "github")
        --title <string>         Title to use for the header or footer

ARGS:
    <FILE>    File to highlight

SUBCOMMANDS:
    css              Generate css for a theme
    dump-syntaxes
    dump-themes
    help             Prints this message or the help of the given subcommand(s)
    list-syntaxes
    list-themes
    replace          Replaces html <pre> blocks in <FILE> with a highlighted version.
                     You need to specify language type w/: <pre data-paint="xx">
                     Enable watch mode with --watch

许可证

MIT

依赖项

~8–17MB
~203K SLoC