javascript - 支持 LLVM 的 HTML/JS/CSS 语法高亮器

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

我目前正在使用 google-code-prettify用于语法高亮。它似乎不支持 LLVM。这是格式化 LLVM 时的样子:

enter image description here

真的很丑。是否有支持 LLVM 的前端语法高亮器?

最佳答案

我从 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 jsFiddle 的链接和一个 Gist带有演示页面和自述文件。

关于javascript - 支持 LLVM 的 HTML/JS/CSS 语法高亮器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791614/

相关文章:

javascript - 找出用户是否在前端登录(Laravel)

Jquery 动画左图像 css

html - 如何响应式地缩小行中元素之间的空白

html - Facebook iframe 不受 css 影响

javascript - 页面可见性 API - 检查浏览器是否在后台?

javascript - Angularjs - 使用 Typeahead 必须显示 2 个值

html - CSS:网格中的部分透明图像显示它们后面的相邻图像,如何让它们完全隐藏在它们自己的 div 之外?

html - Bootstrap 网格中的垂直对齐

javascript - 在 Javascript 中循环对象数组

javascript - 未捕获错误 : Syntax error, 无法识别的表达式:href