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

如何扩展SyntaxHighlighter

xjtudll15年前 (2010-04-20)技术心得3660

    在做这个工作之前,你需要对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” 的相关文章

常用电平标准

常用电平标准

现在常用的电平标准有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232、RS485等,还有一些速度比较高的LVDS、GTL、PGTL、CML、HSTL、SSTL等。下面简单介绍一下各自的供电电源、电平标准以及使用注意事项。 1、TTL电平 TTL:Transi...

Protel99SE交互布局

Protel99SE交互布局

我们在PCB布局的时候,如果元件比较多,经常要花大量的时间找元件。一直以来在找寻Protel99SE交互布局的办法,后在网上发现大牛wang1jin写的一篇文章,讲述了Protel99SE交互布局的方法,但其描述了过多的无关内容,因此花了一些时间整理出了此文。 何谓交互布局?实际上通俗的讲,交互布...

运放运用中容易忽视的问题

本文收集于网络,原文作者:djyos。 在嵌入式设计中,数字部分的功能越来越强大,而模拟电路大有被边沿化的趋势,但不管怎样,传感器以及其调理电路,还是离不开模拟电路的,其中运放是不可或缺的模拟器件。 本文谈谈在设计运放电路中容易被设计人员疏忽的问题,不注意这些问题,可能导致你的电路看起来能够工作...

Proteus error:

Proteus error:"probe object xxx is ambigously placed"

Proteus仿真时,在添加电流探针以后,提示error "probe object xxx is ambigously placed" 如图所示: 原因: 电流探针仿真的时候那个电流的符号要和导线的方向一致 出现问题就是因为这个 解决办法: 改变电流探针方向,使之与导线方向...

Win7 64bit安装usb blaster驱动

Win7 64bit安装usb blaster驱动

前面我就不讲了,直接到驱动搜索这一步。如下: 选择第二项“浏览计算机以查找驱动程序软件”; 关键步骤到了,很容易出错,导致无法安装成功 在下图中一定要将驱动程序位置设置为 “D:\altera\90\quartus\drivers\usb-blaster...

BL51: WARNING L13 (RECURSIVE CALL TO SEGMENT) WITH CONSTANTS 解决

问题描述:   将函数名存储在table里,通过函数指针的方式调用函数。 编译提示: BL51: WARNING L13 (RECURSIVE CALL TO SEGMENT) WITH CONSTANTS 使用环境: C51 Version 7.00 代码例程(使用Keil官方资料来说...

发表评论

访客

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