彩票走势图

CodeHighlighter代码语法高亮实现方法

原创|其它|编辑:郝浩|2012-10-12 15:55:35.000|阅读 807 次

概述:代码语法高亮的现成类有很多,基本上都是只能高亮有限种代码语法,其中我知道之中最全的是 Actipro Software 的 CodeHighlighter,支持 BatchFile, C#, CSS, HTML, INIFile, Java, JScript, Perl, PHP, Python, SQL, VB.NET, VBScript, XML。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

代码语法高亮的现成类有很多,基本上都是只能高亮有限种代码语法,其中我知道之中最全的是 Actipro Software 的 CodeHighlighter,支持 BatchFile, C#, CSS, HTML, INIFile, Java, JScript, Perl, PHP, Python, SQL, VB.NET, VBScript, XML。高达12种,很遗憾的是不支持 C/C++,大概是 Actipro Software 认为可以用 C# 代替吧。

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);
    }

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:gsyst520的专栏-CSDN

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP