代码高亮工具CodeHighlighter 使用配置
作者:翅膀的初衷 来源:本站原创 发布时间:2013-09-25 查看数:62664
CodeHighlighter 是一款基于.NET平台的优秀的代码高亮工具,相比Syntaxhighlight,后者是在页面运行时,由javascript对代码进行高亮处理,如果代码量很多时有可能会有点卡,且每加次都须重新处理,而CodeHighlighter 会在后台直接生成HTML,不依赖javascript与css,使用更加方便!
当然,凡事有利必有弊,在灵活性上CodeHighlighter 略差,本文在此不对此做优劣评比,仅分享如何配置使用CodeHighlighter !
首先:我们必须下载CodeHighlighter ,它的最新版本,我们可以在http://www.actiprosoftware.com/Products/DotNet/ASPNET/CodeHighlighter/Default.aspx{target="_blank" rel="nofollow"} 下载得到!
第二步:将下载的文件包解压,把 "
ActiproSoftware.Shared.Net20.dll
ActiproSoftware.CodeHighlighter.Net20.dll
CodeHighlighterTest.dll
" 三个DLL文件引用到Bin目录下,然后将整个Languages文件夹拷贝到网站根目录!
第三步:打开Web.Config,在configurations节点下增加如下配置:
1 <configSections>
2 <section name="codeHighlighter" requirePermission="false" type="ActiproSoftware.CodeHighlighter.CodeHighlighterConfigurationSectionHandler, ActiproSoftware.CodeHighlighter.Net20"/>
3 </configSections>
4
5 <codeHighlighter>
6 <cache languageTimeout="3"/>
7 <keywordLinking enabled="true" target="_blank" defaultKeywordCollectionKey="ActiproKeywords">
8 <keywordCollection key="ActiproKeywords">
9 <explicitKeyword tokenKey="IdentifierToken" patternValue="Actipro" url="http://www.actiprosoftware.com" caseSensitive="false"/>
10 <explicitKeyword tokenKey="IdentifierToken" patternValue="CodeHighlighter" url="http://www.codehighlighter.com" caseSensitive="false"/>
11 </keywordCollection>
12 </keywordLinking>
13 <languages>
14 <language key="Assembly" definitionPath="~/Languages/Lexers/ActiproSoftware.Assembly.xml"/>
15 <language key="BatchFile" definitionPath="~/Languages/Lexers/ActiproSoftware.BatchFile.xml"/>
16 <language key="C#" definitionPath="~/Languages/Lexers/ActiproSoftware.CSharp.xml"/>
17 <language key="CSS" definitionPath="~/Languages/Lexers/ActiproSoftware.CSS.xml"/>
18 <language key="HTML" definitionPath="~/Languages/Lexers/ActiproSoftware.HTML.xml"/>
19 <language key="INIFile" definitionPath="~/Languages/Lexers/ActiproSoftware.INIFile.xml"/>
20 <language key="Java" definitionPath="~/Languages/Lexers/ActiproSoftware.Java.xml"/>
21 <language key="JScript" definitionPath="~/Languages/Lexers/ActiproSoftware.JScript.xml"/>
22 <language key="Lua" definitionPath="~/Languages/Lexers/ActiproSoftware.Lua.xml"/>
23 <language key="MSIL" definitionPath="~/Languages/Lexers/ActiproSoftware.MSIL.xml"/>
24 <language key="Pascal" definitionPath="~/Languages/Lexers/ActiproSoftware.Pascal.xml"/>
25 <language key="Perl" definitionPath="~/Languages/Lexers/ActiproSoftware.Perl.xml"/>
26 <language key="PHP" definitionPath="~/Languages/Lexers/ActiproSoftware.PHP.xml"/>
27 <language key="PowerShell" definitionPath="~/Languages/Lexers/ActiproSoftware.PowerShell.xml"/>
28 <language key="Python" definitionPath="~/Languages/Lexers/ActiproSoftware.Python.xml"/>
29 <language key="SQL" definitionPath="~/Languages/Lexers/ActiproSoftware.SQL.xml"/>
30 <language key="VB.NET" definitionPath="~/Languages/Lexers/ActiproSoftware.VBDotNet.xml"/>
31 <language key="VBScript" definitionPath="~/Languages/Lexers/ActiproSoftware.VBScript.xml"/>
32 <language key="XAML" definitionPath="~/Languages/Lexers/ActiproSoftware.XAML.xml"/>
33 <language key="XML" definitionPath="~/Languages/Lexers/ActiproSoftware.XML.xml"/>
34 </languages>
35 <lineNumberMargin foreColor="Teal" paddingCharacter=" " visible="true"/>
36 <outlining enabled="true" imagesPath="~/Images/OutliningIndicators/"/>
37 <spacesInTabs count="4"/>
38 </codeHighlighter>
第四步:配置完成,然后直接在后台对代码进行高亮即可:
1 protected void Page_Load(object sender, EventArgs e)
2 {
3 string code = "代码";//待高亮的代码
4 string language = "语言";//支持c#,html,sql,css,php,msil,python,perl,javascript 等,具体见web.config 的languages配置
5 bool isShowLineNum = false;//是否显示行号
6 Response.Write("<pre>");
7 Response.Write(GeneralCodeHighlight(code, language, isShowLineNum));
8 Response.Write("</pre>");
9 Response.End();
10 }
11
12 public string GeneralCodeHighlight(string code, string languageKey, bool isShowLineNum)
13 {
14
15 SyntaxLanguage lang = null;
16 //尝试从缓存获取配置节
17 CodeHighlighterConfiguration config = HttpContext.Current.Cache["CodeHighlighterConfig"] as CodeHighlighterConfiguration;
18 if (config == null)
19 {
20 //缓存不存在,重新从 web.config 获取并保存缓存
21 config = (CodeHighlighterConfiguration)ConfigurationManager.GetSection("codeHighlighter");
22 HttpContext.Current.Cache.Insert("CodeHighlighterConfig", config);
23 }
24 //获取语言
25 foreach (string key in config.LanguageConfigs.Keys)
26 {
27 if (key.ToLower() == languageKey.ToLower())
28 {
29 lang = CodeHighlighter.GetLanguage(config, key);
30 break;
31 }
32 }
33 //不明语言,不理会返回
34 if (lang == null)
35 return code;
36 CodeHighlighterEngine engine = new CodeHighlighterEngine();
37 engine.OutliningEnabled = false;
38 engine.LineNumberMarginVisible = isShowLineNum;
39 return engine.GenerateHtmlInline(string.Empty, code, lang);
40 }