1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018 年 3 月 8 日 |
---|
#13 在 #语法高亮器
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