Pregunta

El código de Visual Basic no se representa correctamente con prettify.js de Google.

en desbordamiento de pila:

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

en Visual Studio...

Visual Basic in Visual Studio

Encontré esto en el LÉAME documento:

¿Cómo especifico en qué idioma se encuentra mi código?

No necesita especificar el idioma ya que PrettyPrint () adivinará.Puede especificar un idioma especificando la extensión del idioma junto con la clase Prettyprint como así:

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

No veo idioma-vb o lenguaje básico opción.¿Alguien sabe si existe uno como complemento?


Nota:Esto está relacionado con el Bloques de código VB.NET sugerencia para Stack Overflow.

¿Fue útil?

Solución

/EDITAR:He reescrito toda la publicación.

A continuación se muestra una solución bastante completa al problema de resaltado de VB.Si SO no tiene nada mejor, por favor úsalo.Definitivamente se desea resaltar la sintaxis de VB.

También agregué un ejemplo de código con algunos literales de código complejos que se resaltan correctamente.Sin embargo, ni siquiera he intentado hacer bien XLinq.Aunque todavía podría funcionar.El lista de palabras clave se toma del MSDN.Las palabras clave contextuales no están incluidas.¿Sabías que GetXmlNamespace ¿operador?

El algoritmo conoce caracteres de tipo literal.También debería poder manejar caracteres de tipo identificador, pero no los he probado.Tenga en cuenta que el código funciona en HTML.Como consecuencia, &, < y > deben leerse como entidades con nombre (!), no como caracteres individuales.

Perdón por la expresión regular larga.

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

Código para probar:

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

Otros consejos

Prettify admite comentarios de VB a partir del 8 de enero de 2009.

Para que el resaltado de sintaxis de vb funcione correctamente, necesita tres cosas;

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

y un bloque PRE alrededor de su código, por ejemplo:

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

A Stackoverflow le falta la inclusión de lang-vb.js y la capacidad de especificar qué idioma a través de Markdown, es decir: class="prettyprint lang-vb" Por eso no funciona aquí.

para obtener detalles sobre el tema:ver el registro de problemas de Prettify

Mientras tanto, puedes poner un carácter de comentario adicional al final de tus comentarios para que se vean bien.Por ejemplo:

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

También necesitas escapar de los caracteres de comentarios internos en la forma vb normal:

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

Prettify todavía lo trata como una cadena literal en lugar de un comentario, pero al menos se ve bien.

Otro método que he visto es comenzar los comentarios con un extra '//, como esto:

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

Luego se maneja como un comentario, pero hay que lidiar con marcadores de comentarios estilo C.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top