使用 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.必须注册自定义控件
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# CODE
 
 
ActiproSoftware.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); }
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值