2008-08-27 5 views
10

Visual Basicコードは、Googleのprettify.jsで正しく表示されません。Googleからprettify.jsのlang-vbまたはlang-basicオプションはありますか?

スタックオーバーフロー上の

:Visual Studioで

Partial Public Class WebForm1 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     'set page title 
     Page.Title = "Something" 
    End Sub 

End Class 

...

Visual Basic in Visual Studio

私はREADME文書でこれを見つけた:私はどの言語を指定するにはどうすればよい

私の コードは入っていますか?

prettyprint()が推測するので、言語 を指定する必要はありません。あなたは そうのような prettyprintクラスと一緒に 言語拡張を指定することで、言語を指定することができます。

<pre class="prettyprint lang-html"> 
    The lang-* class specifies the language file extensions. 
    Supported file extensions include 
    "c", "cc", "cpp", "cs", "cyc", "java", "bsh", "csh", "sh", 
    "cv", "py", "perl", "pl", "pm", "rb", "js", 
    "html", "html", "xhtml", "xml", "xsl". 
</pre> 

は、私は のlang-VBまたは のlang-基本オプションを参照してくださいません。誰かがアドインとして存在するかどうか知っていますか?


注:これは、スタックオーバーフローに関する提案です。VB.NET code blocks

+0

を参照してください。注:あなたは '使用、SOのシンタックスハイライトを持っている必要がある場合は、< - 言語:!LANG-VB - >' – Laurel

答えて

8

/EDIT:投稿全体を書き換えました。

以下は、VBの強調表示の問題を完全に解決したものです。 SOに何も得られないなら、にしてください。 VBの構文の強調表示は間違いなく必要です。

複雑なコードリテラルが正しく強調表示されたコード例も追加しました。しかし、私はXLinqを正解しようとしたことさえありません。しかし、まだ動作する可能性があります。 keywords listはMSDNから取得したものです。文脈上のキーワードは含まれていません。 GetXmlNamespace演算子を知っていますか?

このアルゴリズムは、リテラルタイプの文字を認識します。また、識別子タイプの文字を扱うことができるはずですが、これらをテストしていません。コードはのHTMLで動作することに注意してください。結果として、&,<および>は、単一の文字ではなく、名前付き(!)エンティティとして読み取られる必要があります。

長い正規表現は申し訳ありません。

var highlightVB = function(code) { 
    var regex = /("(?:""|[^"])+"c?)|('.*$)|#.+?#|(&amp;[HO])?\d+(\.\d*)?(e[+-]?\d+)?U?([SILDFR%@!#]|&amp;)?|\.\d+[FR!#]?|\s+|\w+|&amp;|&lt;|&gt;|([-+*/\\^[email protected]!#%&<>()\[\]{}.,:=]+)/gi; 

    var lines = code.split("\n"); 
    for (var i = 0; i < lines.length; i++) { 
     var line = lines[i]; 

     var tokens; 
     var result = ""; 

     while (tokens = regex.exec(line)) { 
      var tok = getToken(tokens); 
      switch (tok.charAt(0)) { 
       case '"': 
        if (tok.charAt(tok.length - 1) == "c") 
         result += span("char", tok); 
        else 
         result += span("string", tok); 
        break; 
       case "'": 
        result += span("comment", tok); 
        break; 
       case '#': 
        result += span("date", tok); 
        break; 
       default: 
        var c1 = tok.charAt(0); 

        if (isDigit(c1) || 
         tok.length > 1 && c1 == '.' && isDigit(tok.charAt(1)) || 
         tok.length > 5 && (tok.indexOf("&amp;") == 0 && 
         tok.charAt(5) == 'H' || tok.charAt(5) == 'O') 
        ) 
         result += span("number", tok); 
        else if (isKeyword(tok)) 
         result += span("keyword", tok); 
        else 
         result += tok; 
        break; 
      } 
     } 

     lines[i] = result; 
    } 

    return lines.join("\n"); 
} 

var keywords = [ 
    "addhandler", "addressof", "alias", "and", "andalso", "as", "boolean", "byref", 
    "byte", "byval", "call", "case", "catch", "cbool", "cbyte", "cchar", "cdate", 
    "cdec", "cdbl", "char", "cint", "class", "clng", "cobj", "const", "continue", 
    "csbyte", "cshort", "csng", "cstr", "ctype", "cuint", "culng", "cushort", "date", 
    "decimal", "declare", "default", "delegate", "dim", "directcast", "do", "double", 
    "each", "else", "elseif", "end", "endif", "enum", "erase", "error", "event", 
    "exit", "false", "finally", "for", "friend", "function", "get", "gettype", 
    "getxmlnamespace", "global", "gosub", "goto", "handles", "if", "if", 
    "implements", "imports", "in", "inherits", "integer", "interface", "is", "isnot", 
    "let", "lib", "like", "long", "loop", "me", "mod", "module", "mustinherit", 
    "mustoverride", "mybase", "myclass", "namespace", "narrowing", "new", "next", 
    "not", "nothing", "notinheritable", "notoverridable", "object", "of", "on", 
    "operator", "option", "optional", "or", "orelse", "overloads", "overridable", 
    "overrides", "paramarray", "partial", "private", "property", "protected", 
    "public", "raiseevent", "readonly", "redim", "rem", "removehandler", "resume", 
    "return", "sbyte", "select", "set", "shadows", "shared", "short", "single", 
    "static", "step", "stop", "string", "structure", "sub", "synclock", "then", 
    "throw", "to", "true", "try", "trycast", "typeof", "variant", "wend", "uinteger", 
    "ulong", "ushort", "using", "when", "while", "widening", "with", "withevents", 
    "writeonly", "xor", "#const", "#else", "#elseif", "#end", "#if" 
] 

var isKeyword = function(token) { 
    return keywords.indexOf(token.toLowerCase()) != -1; 
} 

var isDigit = function(c) { 
    return c >= '0' && c <= '9'; 
} 

var getToken = function(tokens) { 
    for (var i = 0; i < tokens.length; i++) 
     if (tokens[i] != undefined) 
      return tokens[i]; 
    return null; 
} 

var span = function(class, text) { 
    return "<span class=\"" + class + "\">" + text + "</span>"; 
} 

テストのためのコード:ところで

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
    'set page title 
    Page.Title = "Something" 
    Dim r As String = "Say ""Hello""" 
    Dim i As Integer = 1234 
    Dim d As Double = 1.23 
    Dim s As Single = .123F 
    Dim l As Long = 123L 
    Dim ul As ULong = 123UL 
    Dim c As Char = "x"c 
    Dim h As Integer = &amp;H0 
    Dim t As Date = #5/31/1993 1:15:30 PM# 
    Dim f As Single = 1.32e-5F 
End Sub 
+0

コンラートを、この問題は修正されましたSOには実装されていませんが、Prettify自体で。 –

+0

@マーク:はい、私はこれを知っています...ユーザーボイスの議論を参照してください。しかし、あなたが言ったように、残念ながらそれはまだ実装されておらず、Uservoiceレポートは拒否されています。 –

0

、あなたはそれは大丈夫見て得るためにあなたのコメントの末尾に余分なコメント文字を入れることができます。たとえば:

Sub TestMethod() 
    'Method body goes here' 
End Sub 

また、通常のVB-の方法で内部コメント文字をエスケープする必要があります。

Sub TestMethod2() 
    'Here''s another comment' 
End Sub 

飾り立てるはまだ文字列リテラルではなく、コメントとして扱われますが、少なくともそれが見えますはい。

Sub TestMethod3() 
    ''// one final comment 
End Sub 

はその後、それがコメントのように扱われますが、あなたがCスタイルのコメントマーカー

+0

はい、その場合は単に "//"を使用できます。 人々が "" '// "を使う理由は、コメントのように見え、VBでコメントとしてコンパイルされるためです。 – EndangeredMassa

+0

私たちはVBスニペットについて話しているので、少なくともIDEにコピー/ペーストしたときに少なくともコンパイルされることを確認することをお勧めします。 –

2
に対処する必要があります。

私が見たもう一つの方法は、このように、余分な'//でコメントを開始することです

Prettifyは2009年1月8日現在のVBコメントをサポートしています。

vb構文の強調表示を正しく動作させるには、3つのことが必要です。

<script type="text/javascript" src="/External/css/prettify/prettify.js"></script> 
<script type="text/javascript" src="/External/css/prettify/lang-vb.js"></script> 

し、コードの例の周りにPREブロック:

​​

StackOverflowのは、LANG-vb.js含めると、Markdownを介して、どの言語を指定する機能、すなわち欠落しています。class="prettyprint lang-vb"理由ですここでは機能しません。問題の詳細については、

the Prettify issues log

関連する問題