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

如何扩展SyntaxHighlighter

xjtudll16年前 (2010-04-20)技术心得6340

    在做这个工作之前,你需要对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://xjtudll.cn/Exp/76/

分享给朋友:

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

光耦应用笔记

1、光耦的简介及分类 光耦合器(opticalcoupler,英文缩写为OC)亦称光电隔离器或光电耦合器,简称光耦。它是以光为媒介来传输电信号的器件,通常把发光器(红外线发光二极管LED)与受光器(光敏半导体管)封装在同一管壳内。当输入端加电信号时发光器发出光线,受光器接受光线之后就产生光电流,从...

BMP2PCB使用教程

BMP2PCB使用教程

BMP2PCB是一款将BMP图片转换成PCB图的工具软件,我们可以用它在Protel99SE中添加汉字或图形。如果要添加文字的话,首先就要将文字转化成图片了。需要注意的是,图片最好是单色位图。可先将BMP转化成单色位图,如图所示。 新版的BMP2PCB不仅仅支持转换成Protel PCB格式,...

ListView.setOnItemClickListener 点击无效

如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效, 事件会被子View捕获到,ListView无法捕获处理该事件. 解决方法: 在checkbox、button对应的view处加...

ML610Q4xx LCD Simulate仿真

ML610Q4xx LCD Simulate仿真

通过DTU8 Debugger和LCD Image Assignment Tool,可以实现LCD仿真,这样可以很方便的调试程序。 如何实现LCD仿真,可以查看《LCD Image Tool User’s Manual》,文件名为:FEXTLcdImgToolU8_UM-07.pdf。这...

如何查看bat文件运行后的显示信息

@echo off 接着中间是批处理的命令! 最后用pause做为结尾,可以是窗口不自动关闭,就可以看到窗口内的运行信息...

C# WinForm中禁止改变窗口大小的方法

C# WinForm中禁止改变窗口大小的方法

在Form类下面有一个FormBorderStyle的字段,我们可以通过设置它的值来让窗体不能被拉大拉小。FormBorderStyle的值设置为FormBorderStyle.FixedSingle或Fixed3D时,窗体大小是不能被改变的。 当然,还有一种情况,我们也应该要考虑到,那就是窗体最...

发表评论

访客

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