rouge是用ruby实现,兼容python pygments的语法高亮工具。
安装
sudo gem install rouge |
主要有以下几种用法:
生成代码高亮的html片段
require 'rouge'# make some nice lexed htmlsource = File.read('/etc/bashrc')formatter = Rouge::Formatters::HTML.new(css_class: 'highlight')lexer = Rouge::Lexers::Shell.newhtml = formatter.format(lexer.lex(source))puts html |
运行以上ruby脚本后,会输出如下类似html片段:
<pre class="highlight"><code><span class="c"># System-wide .bashrc file for interactive bash(1) shells.</span><span class="k">if</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$PS1</span><span class="s2">"</span> <span class="o">]</span>; <span class="k">then returnfi</span><span class="nv">PS1</span><span class="o">=</span><span class="s1">'\h:\W \u\$ '</span><span class="c"># Make bash check its window size after a process completes</span><span class="nb">shopt</span> -s checkwinsize<span class="c"># Tell the terminal about the working directory at each prompt.</span><span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$TERM_PROGRAM</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"Apple_Terminal"</span> <span class="o">]</span> <span class="o">&&</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$INSIDE_EMACS</span><span class="s2">"</span> <span class="o">]</span>; <span class="k">then </span>update_terminal_cwd<span class="o">()</span> <span class="o">{</span> <span class="c"># Identify the directory using a "file:" scheme URL,</span> <span class="c"># including the host name to disambiguate local vs.</span> <span class="c"># remote connections. Percent-escape spaces.</span>true<span class="nb">local </span><span class="nv">SEARCH</span><span class="o">=</span><span class="s1">' '</span>true<span class="nb">local </span><span class="nv">REPLACE</span><span class="o">=</span><span class="s1">'%20'</span>true<span class="nb">local </span><span class="nv">PWD_URL</span><span class="o">=</span><span class="s2">"file://</span><span class="nv">$HOSTNAME</span><span class="k">${</span><span class="nv">PWD</span><span class="p">//</span><span class="nv">$SEARCH</span><span class="p">/</span><span class="nv">$REPLACE</span><span class="k">}</span><span class="s2">"</span>true<span class="nb">printf</span> <span class="s1">'\e]7;%s\a'</span> <span class="s2">"</span><span class="nv">$PWD_URL</span><span class="s2">"</span> <span class="o">}</span> <span class="nv">PROMPT_COMMAND</span><span class="o">=</span><span class="s2">"update_terminal_cwd; </span><span class="nv">$PROMPT_COMMAND</span><span class="s2">"</span><span class="k">fi</span></code></pre> |
生成css样式文件
require 'rouge'puts Rouge::Themes::Base16.mode(:light).render(scope: '.highlight') |
运行以上ruby脚本,得到如下css样式输出内容:
.codeblock lang:table td { padding: 5px; }.codeblock lang:table pre { margin: 0; }.highlight, .codeblock lang:.w { color: #303030;}.codeblock lang:.err { color: #151515; background-color: #ac4142;}.codeblock lang:.c, .codeblock lang:.cd, .highlight .cm, .highlight .c1, .highlight .cs { color: #505050;}.codeblock lang:.cp { color: #f4bf75;}.codeblock lang:.nt { color: #f4bf75;}.codeblock lang:.o, .codeblock lang:.ow { color: #d0d0d0;}.codeblock lang:.p, .codeblock lang:.pi { color: #d0d0d0;}.codeblock lang:.gi { color: #90a959;}.codeblock lang:.gd { color: #ac4142;}.codeblock lang:.gh { color: #6a9fb5; background-color: #151515; font-weight: bold;}.codeblock lang:.k, .codeblock lang:.kn, .highlight .kp, .highlight .kr, .highlight .kv { color: #aa759f;}.codeblock lang:.kc { color: #d28445;}.codeblock lang:.kt { color: #d28445;}.codeblock lang:.kd { color: #d28445;}.codeblock lang:.s, .codeblock lang:.sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 { color: #90a959;}.codeblock lang:.sr { color: #75b5aa;}.codeblock lang:.si { color: #8f5536;}.codeblock lang:.se { color: #8f5536;}.codeblock lang:.nn { color: #f4bf75;}.codeblock lang:.nc { color: #f4bf75;}.codeblock lang:.no { color: #f4bf75;}.codeblock lang:.na { color: #6a9fb5;}.codeblock lang:.m, .codeblock lang:.mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx { color: #90a959;}.codeblock lang:.ss { color: #90a959;} |
rougify命令在控制台高亮输出脚本文件内容
rougify jquery.js |
这个命令会在命令行里高亮输出文件内容,但不支持less/more分页查看。
将内置配色主题导出css样式文件
rougify style monokai.sublime > sublime.css rougify style monokai > monokai.css rougify style github > github.css |
将内置的配色主题导出为css文件。