当前位置:首页 > 技术心得 > 正文内容

如何扩展SyntaxHighlighter

xjtudll17年前 (2010-04-20)技术心得9780

    在做这个工作之前,你需要对JavaScript有比较深入的了解,尤其需要熟悉正则表达式。如果网络已经存在你需要拓展的加亮库,那就不用自己搞了,直接选用。另外,如果你需要拓展的语言跟已经存在的加亮库类似,那么可以修改它。比如,C51是在C上扩展而成,所以我们可以选择修改shBrushCpp.js来获得C51的加亮库。

    本文以新增一种语言为例。

    新建一个js文件,并定义一个SyntaxHighlighter.brushes对象。

    例如:

    SyntaxHighlighter.brushes.Custom = function()
    {
    };

    SyntaxHighlighter.brushes.Custom.prototype = new SyntaxHighlighter.Highlighter();

    Custom为扩展的语言,可取其他名字。

    下面是最关键的部分,你需要建立自己的匹配规则,也就是在regexList定义段写入一些匹配规则,具体怎么搞就需要一些正则技巧了。

    例如:

    SyntaxHighlighter.brushes.Custom = function()
   {
       var funcs        = 'abs avg case cast';
       var keywords    = 'absolute action add';
       var operators    = 'all and any between cross';

       this.regexList = [
          { regex: /--(.*)$/gm,                                               css: 'comments' },
          { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,    css: 'string' },
          { regex: new RegExp(this.getKeywords(funcs), 'gmi'),                css: 'color2' },
          { regex: new RegExp(this.getKeywords(operators), 'gmi'),            css: 'color1' },
          { regex: new RegExp(this.getKeywords(keywords), 'gmi'),             css: 'keyword' }
        ];
   }; 
   SyntaxHighlighter.brushes.Custom.prototype = new SyntaxHighlighter.Highlighter();

   最后,可以定义一些别名,用于调用。

  SyntaxHighlighter.brushes.Custom = function()
  {
   ...
  };
  SyntaxHighlighter.brushes.Custom.prototype    = new SyntaxHighlighter.Highlighter();
  SyntaxHighlighter.brushes.Custom.aliases    = ['custom', 'ctm', 'ct'];

  也就是说调用的时候custom,ctm,ct将被视为同一种。

 

SyntaxHighlighter 使用

  <pre class="brush: custom">
   ...此处插入代码
  </pre>

参考资料:Developing a custom brush

http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes:Custom

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://www.xjtudll.cn/Exp/76/

分享给朋友:

“如何扩展SyntaxHighlighter” 的相关文章

OKI DSR警告解决

OKI DSR警告解决

使用OKI编译ML610Q473程序的时候,偶然发现编译器出了一堆warning,表面上看起来似乎不影响使用,但是看起来也是不爽。警告内容如下: 经查,所有的warning都与中断相关,所有的警告都在中断函数里产生的。 为什么中断函数会产生DSR警告呢? 这是因为在每次进入中断时,都会做push...

PHP安装之后没有php.ini文件

问题: 多数教程都说修改php.ini,但是在安装目录里找了半天,根本没有php.ini,只有: php.ini-development php.ini-production 答案: 其实php.ini就是上述两个文件任选一修改而来。 当然,测试的话更合适的是php.ini-develo...

Xcode Warning: Multiple build commands for output file /xxx 解决

Xcode Warning: Multiple build commands for output file /xxx 解决

 现象: 编译后有如下警告: [WARN]Warning: Multiple build commands for output file /xxx 解决步骤如下: 1、选择你的工程 2、选择target 3、点击 Build Phases 4、展开...

验证datatable是否被修改的问题

问题: 举个例子: 会员管理的修改  我先将会员详细信息存在一个datatable  User里面   然后 界面上的控件与该datatable一一绑定, 在用户保存的时候  验证该datatable是否被修改 来判断是否需要操作数据库 &...

Xcode:failed to get the task for process XXX 解决办法

问题:     iOS真机调试程序,报如下错误信息:failed to get the task for process XXX 原因: 证书问题,project和target的证书都必须是开发证书,不能用分发证书。 解决方案:     p...

使用Doxygen生成Html文档

使用Doxygen生成Html文档

Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#。注释的语法与Qt-Doc、KDoc和JavaDoc兼容。Doxgen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LA...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。