首先我们要强烈地谴责小T,在集成代码高亮时把Delphi高亮功能给去掉了,本来highlighter有这个功能的,他居然把选项给丢了,谴责、谴责、再谴责。

虽然对PHP不精通,但是还是看的懂的,呵呵,在网上也找了highlighter的代码,发现boblog都加了Delphi代码高亮的,为啥SA就歧视偶们Borland Fans呢,居然把Delphi代码高亮给去掉了,郁闷中,其实要给某种编程语言加上代码高亮也不是什么难事,因为highlighter已经有这种功能,只需要把关键字加上就OK了。

今天有空偶好好看了一下编辑高亮的代码,发现admin\editor\plugins\insertcode\fckplugin.js 文件里有Delphi代码转换的函数,如下代码

JavaScript代码
  1. /* Delphi brush is contributed by Eddie Shipman */  
  2. dp.sh.Brushes.Delphi = function()   
  3. {   
  4.     var keywords =  'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +   
  5.                     'case char class comp const constructor currency destructor div do double ' +   
  6.                     'downto else end except exports extended false file finalization finally ' +   
  7.                     'for function goto if implementation in inherited int64 initialization ' +   
  8.                     'integer interface is label library longint longword mod nil not object ' +   
  9.                     'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +    
  10.                     'pint64 pointer private procedure program property pshortstring pstring ' +    
  11.                     'pvariant pwidechar pwidestring protected public published raise real real48 ' +   
  12.                     'record repeat set shl shortint shortstring shr single smallint string then ' +   
  13.                     'threadvar to true try type unit until uses val var varirnt while widechar ' +   
  14.                     'widestring with word write writeln xor';   
  15.   
  16.     this.regexList = [   
  17.         { regex: new RegExp('\\(\\*[\\s\\S]*?\\*\\)''gm'),        css: 'comment' },           // multiline comments (* *)  
  18.         { regex: new RegExp('{(?!\\$)[\\s\\S]*?}''gm'),           css: 'comment' },           // multiline comments { }  
  19.         { regex: dp.sh.RegexLib.SingleLineCComments,                css: 'comment' },           // one line  
  20.         { regex: dp.sh.RegexLib.SingleQuotedString,                 css: 'string' },            // strings  
  21.         { regex: new RegExp('\\{\\$[a-zA-Z]+ .+\\}''g'),          css: 'directive' },         // Compiler Directives and Region tags  
  22.         { regex: new RegExp('\\b[\\d\\.]+\\b''g'),                css: 'number' },            // numbers 12345  
  23.         { regex: new RegExp('\\$[a-zA-Z0-9]+\\b''g'),             css: 'number' },            // numbers $F5D3  
  24.         { regex: new RegExp(this.GetKeywords(keywords), 'gm'),      css: 'keyword' }            // keyword  
  25.         ];   
  26.   
  27.     this.CssClass = 'dp-delphi';   
  28.     this.Style =    '.dp-delphi .number { color: blue; }' +   
  29.                     '.dp-delphi .directive { color: #008284; }' +   
  30.                     '.dp-delphi .vars { color: #000; }';   
  31. }   
  32.   
  33. dp.sh.Brushes.Delphi.prototype  = new dp.sh.Highlighter();   
  34. dp.sh.Brushes.Delphi.Aliases    = ['delphi''pascal'];  

对应其它的函数,这个功能是齐全的,但是为什么Delphi代码就不能高亮呢,原来高亮接口文件fck_insertcode.html没有Delphi这个选项(小T啊小T,你可害苦我了)

XML/HTML代码
  1. <select id="icLan">                
  2.               <option value="xhtml">XML/HTML</option>  
  3.               <option value="javascript">JavaScript</option>  
  4.               <option value="css">CSS</option>  
  5.               <option value="csharp">C#</option>  
  6.               <option value="cpp">C++</option>  
  7.               <option value="java">Java</option>  
  8.               <option value="php">PHP</option>  
  9.               <option value="python">Python</option>  
  10.               <option value="ruby">Ruby</option>  
  11.               <option value="sql">SQL</option>  
  12.               <option value="vb">ASP/Visual Basic</option>  
  13.             </select>  

凭直觉偶把select里多加了一个选项,代码如下:

XML/HTML代码
  1. <option value="delphi">delphi</option>  

复制了一段Delphi代码进去,哈哈,搞定了,如下代码演示,最后我们再谴责一下小T和小A把偶们的最爱Delphi给去掉了。

最后偶把fck_insertcode.html文件发出来,你可以直接覆盖原admin\editor\plugins\insertcode\下的fck_insertcode.html即可,或者自己加上代码也行,说了这么多,还是感谢一下小T给Sablog加了代码高亮插件!

delphi代码
  1. unit u17288;   
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   
  7.   Dialogs, OleCtrls, SHDocVw, StdCtrls,mshtml, AppEvnts, ExtCtrls;   
  8.   
  9. type  
  10.   TFrm_main = class(TForm)   
  11.     wb1: TWebBrowser;   
  12.     pnl1: TPanel;   
  13.     lbl1: TLabel;   
  14.     ApplicationEvents1: TApplicationEvents;   
  15.     procedure wb1DocumentComplete(Sender: TObject; const pDisp: IDispatch;   
  16.       var URL: OleVariant);   
  17.     procedure ApplicationEvents1Message(var Msg: tagMSG;   
  18.       var Handled: Boolean);   
  19.     procedure FormCreate(Sender: TObject);   
  20.   private  
  21.     { Private declarations }  
  22.   public  
  23.     { Public declarations }  
  24.   end;   
  25.   
  26. var  
  27.   Frm_main: TFrm_main;   
  28.   
  29. implementation  
  30.   
  31. {$R *.dfm}  
  32.   
  33. procedure TFrm_main.wb1DocumentComplete(Sender: TObject;   
  34.   const pDisp: IDispatch; var URL: OleVariant);   
  35. var doc:IHTMLDocument2;   
  36. begin    
  37.    doc:=IHTMLDocument2(wb1.Document);    
  38.    if(doc<>niland (doc.body<>nilthen  
  39.    begin  
  40.       doc.body.style.borderstyle:='none';   
  41.    end;   
  42.    try  
  43.      wb1.oleobject.Document.body.Scroll := 'no';   
  44.    except  
  45.    end;   
  46. end;   
  47.   
  48. procedure TFrm_main.ApplicationEvents1Message(var Msg: tagMSG;   
  49.   var Handled: Boolean);   
  50. var    
  51.  p: TPoint;    
  52. begin    
  53.  if Msg.message = WM_MOUSEMOVE then    
  54.  begin    
  55.    p := ScreenToClient(Msg.pt);    
  56.    lbl1.Caption := Inttostr(p.x) + ', ' + Inttostr(p.y);    
  57.  end;   
  58.  {如果要取得 WebBrowser 的点击坐标,这么写:  
  59.  if (Msg.hwnd = WebBrowser1.Handle) and (Msg.message = WM_LBUTTONDOWN) then  
  60.  begin  
  61.    p := ScreenToClient(Msg.pt);  
  62.    ShowMessage(Inttostr(p.x) + ', ' + Inttostr(p.y));  
  63.  end;}    
  64. end;    
  65.   
  66.   
  67. procedure TFrm_main.FormCreate(Sender: TObject);   
  68. begin  
  69. wb1.Navigate('http://ha.17288.com');   
  70. end;   
  71.   
  72. end.   


fck_insertcode.rar

最后修改:2009 年 08 月 16 日
一分也是爱