使用 CodeHighlighter 将代码语法高亮

代码语法高亮的现成类有很多,基本上都是只能高亮有限种代码语法,其中我知道之中最全的是 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);



二,编程形式动态生成
下面是关键代码(以下代码部分参考自国外一同行)
 1      /// <summary>
 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值