Frage

Visual Basic-Code wird mit nicht korrekt gerendert prettify.js von Google.

zum Stapelüberlauf:

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

in Visual Studio...

Visual Basic in Visual Studio

Das habe ich im gefunden Liesmich dokumentieren:

Wie lege ich an, in welcher Sprache mein Code ist?

Sie müssen die Sprache nicht angeben, da PrettyPrint () erraten wird.Sie können eine Sprache angeben, indem Sie die Spracherweiterung zusammen mit der PrintPrint -Klasse wie SO angeben:

<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>

ich sehe kein lang-vb oder Lang-Grundkenntnisse Möglichkeit.Weiß jemand, ob es eines als Add-In gibt?


Notiz:Dies hängt mit dem zusammen VB.NET-Codeblöcke Vorschlag für Stack Overflow.

War es hilfreich?

Lösung

/BEARBEITEN:Ich habe den gesamten Beitrag umgeschrieben.

Nachfolgend finden Sie eine ziemlich vollständige Lösung für das VB-Hervorhebungsproblem.Wenn SO nichts Besseres hat, Bitte benutze es.Eine Hervorhebung der VB-Syntax ist auf jeden Fall erwünscht.

Ich habe auch ein Codebeispiel mit einigen komplexen Codeliteralen hinzugefügt, das richtig hervorgehoben wird.Allerdings habe ich noch nicht einmal versucht, XLinq richtig hinzubekommen.Könnte aber trotzdem funktionieren.Der Stichwortliste wird aus der MSDN übernommen.Kontextbezogene Schlüsselwörter sind nicht enthalten.Wussten Sie, dass GetXmlNamespace Operator?

Der Algorithmus kennt Zeichen vom Typ Literal.Es sollte auch in der Lage sein, Bezeichnertypzeichen zu verarbeiten, aber ich habe diese nicht getestet.Beachten Sie, dass der Code funktioniert HTML.Daher müssen &, < und > als benannte (!) Entitäten und nicht als einzelne Zeichen gelesen werden.

Entschuldigung für den langen regulären Ausdruck.

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

Code zum Testen:

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

Andere Tipps

Prettify unterstützt seit dem 8. Januar 2009 VB-Kommentare.

Damit die VB-Syntaxhervorhebung ordnungsgemäß funktioniert, benötigen Sie drei Dinge:

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

und einen PRE-Block um Ihren Code, z. B.:

<PRE class="prettyprint lang-vb">
 Function SomeVB() as string
   ' do stuff
   i = i + 1
 End Function
</PRE>

Stackoverflow fehlt die Einbeziehung von lang-vb.js und die Möglichkeit, über Markdown anzugeben, welche Sprache verwendet wird, d. h.: class="prettyprint lang-vb" weshalb es hier nicht funktioniert.

Einzelheiten zum Thema:sehen das Prettify-Problemprotokoll

In der Zwischenzeit können Sie am Ende Ihrer Kommentare ein zusätzliches Kommentarzeichen einfügen, damit alles in Ordnung aussieht.Zum Beispiel:

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

Sie müssen auch interne Kommentarzeichen auf die normale VB-Art maskieren:

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

Prettify behandelt es immer noch als String-Literal und nicht als Kommentar, aber zumindest sieht es in Ordnung aus.

Eine andere Methode, die ich gesehen habe, besteht darin, Kommentare mit einem Extra zu beginnen '//, so was:

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

Dann wird es wie ein Kommentar behandelt, aber Sie müssen sich mit Kommentarmarkierungen im C-Stil befassen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top