代码语法高亮的现成类有很多,基本上都是只能高亮有限种代码语法,其中我知道之中最全的是 Actipro Software 的 CodeHighlighter,支持 BatchFile, C#, CSS, HTML, INIFile, Java, JScript, Perl, PHP, Python, SQL, VB.NET, VBScript, XML。高达12种,很遗憾的是不支持 C/C++,大概是 Actipro Software 认为可以用 C# 代替吧。(偷偷的告诉你,CSDN 用的就是这个,汗~~)
最新版本的 CodeHighlighter 请到 http://www.actiprosoftware.com/Products/DotNet/ASPNET/CodeHighlighter/Default.aspx 下载,此次演示代码使用的是v4.0.0050(09/27/2007 发行)。不同版本使用方法可能有所差异,请参考类文档。
CodeHighlighter 既可以控件形式使用,也可以编程生成,当然,你也可以自行编写代码对 UBB 代码形式使用(Cool!)。
将 CodeHighlighter 下载后,可能看到ActiproSoftware.Shared.Net20.dll,ActiproSoftware.CodeHighlighter.Net20.dll,CodeHighlighterTest.dll 三个 DLL,使用时,全部引用到 Bin 文夹下,还要将 Languages 文件夹整个复制到网站目录下,放哪随便,不过要记得修改配置文件,一般放在根目录就行了,之后要将 CodeHighlighter 配置添加到 Web.config,具体请参照类文档。
所以,使用 CodeHighlighter 必须的三步是:
1. 引用 DLL
2. 复制 Languages
3. 添加配置
好了,下面看具体演示。
一,以控件形式使用
1.必须注册自定义控件
2.添加控件
这样就行了,编程动态添加也是很简单,只是你已注册了该自定义控件,形如下面的形式使用就行了
二,编程形式动态生成
下面是关键代码(以下代码部分参考自国外一同行)
最新版本的 CodeHighlighter 请到 http://www.actiprosoftware.com/Products/DotNet/ASPNET/CodeHighlighter/Default.aspx 下载,此次演示代码使用的是v4.0.0050(09/27/2007 发行)。不同版本使用方法可能有所差异,请参考类文档。
CodeHighlighter 既可以控件形式使用,也可以编程生成,当然,你也可以自行编写代码对 UBB 代码形式使用(Cool!)。
将 CodeHighlighter 下载后,可能看到ActiproSoftware.Shared.Net20.dll,ActiproSoftware.CodeHighlighter.Net20.dll,CodeHighlighterTest.dll 三个 DLL,使用时,全部引用到 Bin 文夹下,还要将 Languages 文件夹整个复制到网站目录下,放哪随便,不过要记得修改配置文件,一般放在根目录就行了,之后要将 CodeHighlighter 配置添加到 Web.config,具体请参照类文档。
所以,使用 CodeHighlighter 必须的三步是:
1. 引用 DLL
2. 复制 Languages
3. 添加配置
好了,下面看具体演示。
一,以控件形式使用
1.必须注册自定义控件
XML CODE< %@ Register TagPrefix ="CH" Namespace ="ActiproSoftware.CodeHighlighter" Assembly ="ActiproSoftware.CodeHighlighter.Net20" % >
2.添加控件
XML CODE< pre >< CH:CodeHighlighter runat ="server" ID ="CssCodeHighlighter" LanguageKey ="CSS" > A { color: #336699; text-decoration: none; } A:Hover { color: #DD6900; text-decoration: underline; } BODY { background-color: White; color: Black; font-family: Tahoma, Verdana, Sans-Serif; margin: 0px; } </ CH:CodeHighlighter ></ pre >
这样就行了,编程动态添加也是很简单,只是你已注册了该自定义控件,形如下面的形式使用就行了
C# CODEActiproSoftware.CodeHighlighter.CodeHighlighter ch = new ActiproSoftware.CodeHighlighter.CodeHighlighter(); ch.Text = " 原代码文本在这里 " ; ch.LanguageKey = " CSS " ; Panel1.Controls.Add(ch);
二,编程形式动态生成
下面是关键代码(以下代码部分参考自国外一同行)
C# CODE/// <summary> /// 解析代码高亮 /// </summary> /// <param name="code"> 代码 </param> /// <param name="languageKey"> 语法类型 </param> /// <param name="isShowLineNum"> 是否显示行号 </param> /// <returns> 将代码解析高亮后组织成HTML的字符串 </returns> public static string GeneralCodeHighlight( string code, string languageKey, bool isShowLineNum) { SyntaxLanguage lang = null ; // 尝试从缓存获取配置节 CodeHighlighterConfiguration config = HttpContext.Current.Cache[ " CodeHighlighterConfig " ] as CodeHighlighterConfiguration; if (config == null ) { // 缓存不存在,重新从 web.config 获取并保存缓存 config = (CodeHighlighterConfiguration)ConfigurationManager.GetSection( " codeHighlighter " ); HttpContext.Current.Cache.Insert( " CodeHighlighterConfig " , config); } // 获取语言 foreach ( string key in config.LanguageConfigs.Keys) { if (key.ToLower() == languageKey.ToLower()) { lang = CodeHighlighter.GetLanguage(config, key); break ; } } // 不明语言,不理会返回 if (lang == null ) return code; CodeHighlighterEngine engine = new CodeHighlighterEngine(); engine.OutliningEnabled = false ; engine.LineNumberMarginVisible = isShowLineNum; return engine.GenerateHtmlInline( string .Empty, code, lang); }