5个版本
0.2.0 | 2022年9月7日 |
---|---|
0.1.3 | 2022年9月6日 |
0.1.2 | 2022年9月5日 |
0.1.1 | 2022年9月5日 |
0.1.0 | 2021年11月30日 |
1010 在 解析器实现 中
每月下载量25次
17KB
188 行
OpenFOAM字典的独立语法高亮器
免责声明:本产品未经OpenCFD Limited批准或认可,OpenCFD Limited是OpenFOAM软件的生产商和分销商,也是OPENFOAM®和OpenCFD®商标的所有者。
安装与使用
由于这是一个Rust(迷你)项目,您需要安装cargo
cargo install foam-highlighter
然后,提供输出格式和要解析的输入文件名
foam-highlighter html /path/to/foam/Dict
如果解析成功,将带有样式的HTML片段发送到您的stdout
。
配置
输出格式的选项是html
和pygtex
- html输出为您提供已填充的
<code>
标签,并使用highlight.js类进行样式化。目前没有提供更改类名的方法(除了在src/main.rs
中更改硬编码的名称)。如果希望在网页和基于HTML的演示文稿中突出显示OpenFOAM代码,则此输出格式显然是理想的。 - pygtex输出以
pygtex
格式提供(虚假但有效的)Pygments输出。这是minted
包在LaTeX中突出显示代码所使用的格式。从空的minted环境开始,将输出复制到相应的*pytex
文件的空Verbatim环境中,然后重新编译,将在学术出版物中正确突出显示OpenFOAM片段。
从效率的角度来看,解析器和高亮器都相当快。遗憾的是,没有OpenFOAM的Pygments词法分析器,因此无法进行比较。
我们还依赖于OpenFOAM的Tree-Sitter语法,它可以解析来自OpenFOAM 8和Foam-Extend 4仓库的所有教程文件。如果您怀疑解析器存在问题,请在那里打开一个问题。
潜在用例
突出显示的HTML代码块
考虑以下OpenFOAM字典
// this is ?{\color{orange} \LaTeX code}?
key val;
dict {
key1 "val";
key2 {
/*
More ?\LaTeX code if you want: $\phi$?
*/
}
}
使用命令foam-highlighter html dictName
运行高亮器,返回一个填充的代码标签,可以在HTML文档中使用。
<pre><code class="language-foam hljs">
<span class="hljs-comment">// this is ?{\color{orange} \LaTeX code}?</span>
<span class="hljs-title">key</span> val<span class="hljs-punctuation">;</span>
<span class="hljs-type">dict</span> <span class="hljs-punctuation">{</span>
<span class="hljs-title">key1</span> <span class="hljs-string">"val"</span><span class="hljs-punctuation">;</span>
<span class="hljs-type">key2</span> <span class="hljs-punctuation">{</span>
<span class="hljs-comment">/*
More ?\LaTeX code if you want: $\phi$?
*/</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>
</code></pre>
在TeX文档中,通过minted
进行高亮显示代码列表。
在LaTeX文档中使用时,需要一些特殊处理,这可以通过示例文件进行演示,其中对minted宏进行了修改,使其在真正的代码高亮操作中调用高亮器而不是pygmentize
。
为了方便,minted-openfoam.sty文件的用户可以在这种行为和原始行为之间切换(用于高亮其他代码片段)。
TeX文件看起来像这样
\documentclass[9pt]{article}
%% A minimal example of working OpenFOAM highlighting using minted
%% Compiles with all major engines (pdflatex, lualatex and xelatex)
\usepackage{amsmath, amsfonts}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage[cachedir=_minted-cache]{minted}
\makeatletter
\def\minted@jobname{openfoam-highlight}
\makeatother
%% Step 0: include the provided sty file
\input{minted-openfoam.sty}
\begin{document}
%% Turn on Foam Highlighter in this section
\usefoamhlttrue
%% Use ?? for Tex escape inside the highlighter
\renewcommand{\escapeinsidechar}{?}
\LaTeX code and math mode in OpenFOAM comments
\tikz[remember picture,overlay,baseline=0pt] \draw[->,thick,dashed,blue] (0,-0.5em)
to[bend left] ([shift={(1ex,1ex)}]pic cs:code); and even inline OpenFOAM expressions
\mintinline{cpp}{key val;} get highlighted.
\inputminted[escapeinside=??]{cpp}{of-dicts/sampleDict}
%% Turn if off to render other code snippets normally
\usefoamhltfalse
\end{document}
通过这种方式,您可以在LaTeX文档中获取到样式优美的OpenFOAM字典,并且可以在OpenFOAM注释中运行任意TeX代码。
注意1:minted的选项
escapeinside=??
需要与OpenFOAM字典中使用的内容相匹配,以及高亮器的最后一个(可选)参数。
注意2:
escapeinside
是唯一支持与输入文件内容相关的minted选项。例如,mathescape
等不被高亮器支持。
听起来很痛苦?嗯,这是我们能做到的最好的——唯一的另一个选择是为OpenFOAM案例文件编写Pygments词法分析器;没有人会这么做!
要查看解析器支持的功能,请访问OpenFOAM语法Tree-Sitter
依赖关系
~3.5–5MB
~103K SLoC