#高亮 #解析 #展示 #语法高亮 #解析器 #语法高亮器 #openfoam

app foam-highlighter

将OpenFOAM字典高亮显示为HTML和/或Pygtex片段

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

MIT/Apache

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

配置

输出格式的选项是htmlpygtex

  • 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