支持LLVM的HTML / JS / CSS语法高亮显示器

时间:2012-05-28 23:56:49

标签: javascript html css syntax-highlighting google-code-prettify

我目前正在使用google-code-prettify进行语法突出显示。它似乎不支持LLVM。以下是格式化LLVM时的样子:

enter image description here

这很难看。是否有支持LLVM的前端语法高亮显示器?

4 个答案:

答案 0 :(得分:3)

我从LLVM TextMate Bundle project抓取了LLVM程序集语法突出显示的模式,并为google-code-prettify 编写了一个插件。

PR['registerLangHandler'](
    PR['createSimpleLexer'](
        [
         // Whitespace
         [PR['PR_PLAIN'],       /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],

         // A double quoted, possibly multi-line, string.
         [PR['PR_STRING'],      /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"'],

         // comment.llvm
         [PR['PR_COMMENT'],       /^;[^\r\n]*/, null, ';'],
        ],
        [
         // llvm instructions
         [PR['PR_KEYWORD'],     /^\b(?:add|alloca|and|ashr|bitcast|br|call|eq|exact|extractelement|extractvalue|fadd|fcmp|fdiv|fmul|fpext|fptosi|fptoui|fptrunc|free|frem|fsub|getelementptr|icmp|inbounds|indirectbr|insertelement|insertvalue|inttoptr|invoke|load|lshr|malloc|mul|ne|nsw|nuw|oeq|oge|ogt|ole|olt|one|or|ord|phi|ptrtoint|ret|sdiv|select|sext|sge|sgt|shl|shufflevector|sitofp|sle|slt|srem|store|sub|switch|trunc|udiv|ueq|uge|uge|ugt|ugt|uitofp|ule|ule|ult|ult|une|uno|unreachable|unwind|urem|va_arg|xor|zext)\b/, null],

         // llvm keywords
         [PR['PR_KEYWORD'],     /^\b(?:addrspace|alias|align|alignstack|alwaysinline|appending|asm|blockaddress|byval|c|cc|ccc|coldcc|common|constant|datalayout|declare|default|define|deplibs|dllexport|dllimport|except|extern_weak|external|fastcc|gc|global|hidden|inlinehint|inreg|internal|linkonce|linkonce_odr|metadata|module|naked|nest|noalias|nocapture|noimplicitfloat|noinline|noredzone|noreturn|nounwind|optsize|private|protected|ptx_device|ptx_kernel|readnone|readonly|section|sideeffect|signext|sret|ssp|sspreq|tail|target|thread_local|to|triple|uwtable|volatile|weak|weak_odr|x86_fastcallcc|x86_stdcallcc|zeroext)\b/, null],

         // variable.llvm
         [PR['PR_TYPE'],       /^\s(?:[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*)/],

         // variable.language.llvm
         [PR['PR_TYPE'],       /^\s(?:[%]\d+)/],

         // storage.type.language.llvm
         [PR['PR_PLAIN'],       /^\b(?:i\d+\**)/],

         // variable.metadata.llvm
         [PR['PR_PLAIN'],       /^(!\d+)/],

         // constant.numeric.float.llvm
         [PR['PR_LITERAL'],       /^\b\d+\.\d+\b/],

         // constant.numeric.integer.llvm
         [PR['PR_LITERAL'],       /^\b(?:\d+|0(?:x|X)[a-fA-F0-9]+)\b/],
        ]),
    ['llvm', 'll']);

以下是指向demo jsFiddleGist的链接,其中包含演示页和自述文件。

答案 1 :(得分:1)

Pyments支持LLVM。它基于python后端,用户可以在样式之间进行选择。

输出模式:

  • HTML
  • ANSI序列(控制台输出)
  • LaTeX与包minted
  • 结合使用
  • RTF

http://pygments.org/demo/45402/

答案 2 :(得分:0)

考虑到LLVM是一种相当模糊的编程语言,你会发现专门为它设计的语法高亮显示器是值得怀疑的。然而,这并不意味着你不能作弊,并使一些事情发挥作用。我建议使用SyntaxHighlighter。 http://alexgorbatchev.com/SyntaxHighlighter

虽然它本身不支持LLVM,但它为各种其他编程语言提供了许多内置画笔。我会尝试一下,并尝试将不同的画笔(语法高亮显示器)应用于您的LLVM代码。有些人会很好地匹配,而有些人看起来很平淡,就像你演示的例子一样。

如果你看here,你也会看到许多非官方画笔也存在。这是使用SyntaxHighlighter的一个好处 - 如果设计了LLVM的刷子(或者如果您决定自己设计它),它将很容易实现。

祝你好运!

答案 3 :(得分:0)

不知道你是不是一个Linux家伙,因为你使用Python我认为你这样做。 Emacs和Vim似乎支持LLVM语法高亮。见http://llvm.org/docs/GettingStarted.html。 如果您不想使用它们,也许可以使用其他IDE或编辑器中提供的语法文件(带有一些小问题)。 谷歌搜索,所以无法帮助你。 如果这还不够,你的任务就会成功。