代码语法高亮的现成类有很多,基本上都是只能高亮有限种代码语法,其中我知道之中最全的是 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.必须注册自定义控件
<%@ Register TagPrefix="CH" Namespace="ActiproSoftware.CodeHighlighter"
Assembly="ActiproSoftware.CodeHighlighter.Net20"
%>
2.添加控件
<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>
这样就行了,编程动态添加也是很简单,只是你已注册了该自定义控件,形如下面的形式使用就行了
ActiproSoftware.CodeHighlighter.CodeHighlighter ch =
new ActiproSoftware.CodeHighlighter.CodeHighlighter();
ch.Text = "原代码文本在这里";
ch.LanguageKey = "CSS";
Panel1.Controls.Add(ch);
二,编程形式动态生成
下面是关键代码(以下代码部分参考自国外一同行)
2 /// 解析代码高亮
3 /// </summary>
4 /// <param name="code">代码</param>
5 /// <param name="languageKey">语法类型</param>
6 /// <param name="isShowLineNum">是否显示行号</param>
7 /// <returns>将代码解析高亮后组织成HTML的字符串</returns>
8 public static string GeneralCodeHighlight(string code, string languageKey, bool isShowLineNum)
9 {
10 SyntaxLanguage lang = null ;
11 //尝试从缓存获取配置节
12 CodeHighlighterConfiguration config = HttpContext.Current.Cache["CodeHighlighterConfig"] as CodeHighlighterConfiguration;
13 if (config == null )
14 {
15 //缓存不存在,重新从 web.config 获取并保存缓存
16 config = (CodeHighlighterConfiguration)ConfigurationManager.GetSection("codeHighlighter" );
17 HttpContext.Current.Cache.Insert("CodeHighlighterConfig" , config);
18 }
19 //获取语言
20 foreach (string key in config.LanguageConfigs.Keys)
21 {
22 if (key.ToLower() == languageKey.ToLower())
23 {
24 lang = CodeHighlighter.GetLanguage(config, key);
25 break ;
26 }
27 }
28 //不明语言,不理会返回
29 if (lang == null )
30 return code;
31 CodeHighlighterEngine engine = new CodeHighlighterEngine();
32 engine.OutliningEnabled = false ;
33 engine.LineNumberMarginVisible = isShowLineNum;
34 return engine.GenerateHtmlInline(string .Empty, code, lang);
35 }
使用时调用该方法就 OK 了。
另外,以 UBB 代码形式使用也是完全没有问题的。
以上两上形式的演示代码下载请到 http://www.fs2you.com/files/a2d01957-a637-11dc-ab89-00142218fc6e/
该类的具体使用请考虑文档(英文)
来源:http://www.cnblogs.com/iRed/archive/2007/12/09/988472.html