修复 Google Code Prettify 在 C# 中的问题

16

Prettify在分词C#时会给类型和方法相同的类赋予相同的颜色。这是因为,在C#中方法是帕斯卡命名法,而不是像Java一样采用骆驼命名法。这影响了我的博客和所有的 StackOverflow C# 代码,因为它们也使用了 Prettify。

有人有解决方法吗?

如果没有,您至少可以点赞/投票官方报告的错误,该错误于2009年3月报告,以便作者再次查看。


11
哇,谁是“tawani”在这个问题上确实知道如何巧言令色。 - Jeff Yates
4个回答

8

相同的语法可能具有不同的含义。没有足够的信息来正确地突出显示所有内容。

看看这个例子:

static class Program
{
    class Foo { public class Bar { public static void Func() { } } }
    class Foo2 { public static Baz Bar2 { get; set; } }
    class Baz { public void Func2() { } }

    static void Main()
    {
        Foo.Bar.Func();
        Foo2.Bar2.Func2();
    }
}

在第一行中,Bar是一个内部类,应该被突出显示为绿色。在第二行中,Bar2是类型为Foo2的属性,应该被突出显示为黑色。Func和Func2都是函数,应该被突出显示为黑色。

以下是Visual Studio如何突出显示该代码。

alt text


7

我实际上编写了自己的语法高亮库来解决这类问题。它与prettify非常相似,但你必须明确指定语言。


你的库中 C# 语法高亮度越好,将得到 +1(Sunlight v1.17.437 与 Syntax Highlighter v3.0.83 相比)。 - 2Toad

3
问题在于没有上下文,无法确定它是一个方法还是一个类型。
以以下示例为例:
var value = new Test();

Test();

这个例子实例化了一个新的Test,然后调用了Test方法。只有拥有整个代码库和编译器才能确定哪个是类,哪个是类型。

而且我还没有触及到无效代码。

话虽如此,我认为当前由SO使用的美化程序在没有任何上下文的情况下对代码示例进行了出色的突出显示。


那么,有“new”关键字来识别这种情况,对吧? - Guillaume86
是的,没错,但您仍然存在问题。如果有人选择非Pascal大小写,您该怎么办? - Pieter van Ginkel

2

TextMate(适用于Mac OS X)或E-TextEditor(适用于Windows)

TextMate/E-TextEditor可以为许多语言的语法高亮生成HTML和CSS。

以下是操作步骤:

  1. 在TextMate/E-TextEditor中打开文件
  2. 如果不自动选择语言,请从屏幕底部的菜单中选择语言
  3. 进入Bundles->TextMate->Create HTML From Document
    • 这将在新文档中创建所有的HTMl/CSS。
    • 注意:Windows用户也需要选择“TextMate”捆绑包(而不是“E-TextEditor”)
  4. 获利!

注意:您需要安装C#捆绑包以进行C#语法突出显示(已经包括了其他常见语言)。要完成此操作,请安装“Get Bundles”捆绑包,并使用该捆绑包安装C#捆绑包。

编辑:根据评论,我意识到TextMate只适用于Mac用户。有时我会忘记Windows。

您还可以使用Windows下的E-TextEditor。步骤相同。


最近我一直在使用Visual Studio的CopySourceAsHtml插件http://copysourceashtml.codeplex.com/。 - Mike Valenty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接