Pergunta

Código do Visual Basic não processar corretamente com prettify.js a partir do Google.

no Estouro de Pilha:

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

no Visual Studio...

Visual Basic in Visual Studio

Eu encontrei este no Leia-me documento:

Como faço para especificar o idioma que o meu código é?

Você não precisa especificar o idioma desde prettyprint() vai adivinhar.Você pode especificar um idioma especificando a linguagem de extensão, juntamente com o prettyprint classe assim:

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

Eu não vejo nenhuma lang-vb ou lang-básico opção.Alguém sabe se existe como um add-in?


Nota:Isto está relacionado com o VB.NET blocos de código sugestão para o Estouro de Pilha.

Foi útil?

Solução

/EDIÇÃO:Eu tenho reescrito todo o destacamento.

Abaixo está uma bela solução completa para a VB destacando problema.Se ASSIM não tem nada melhor, por favor usá-lo.VB destaque de sintaxe está definitivamente queria.

Também adicionei um exemplo de código com alguns complexo código de literais que fica realçada corretamente.No entanto, eu mesmo ainda não tentou obter XLinq direito.Podem continuar a funcionar, apesar de tudo.O lista de palavras-chave é tomada a partir do MSDN.Contextual de palavras-chave não estão incluídos.Você sabia que o GetXmlNamespace operador?

O algoritmo sabe literal do tipo de caracteres.Ele também deve ser capaz de lidar com identificador de tipo de caracteres, mas eu ainda não testou estes.Observe que o código funciona em HTML.Como consequência, &, < e > são necessários para ser lido, como o nome (!) entidades, e não de caracteres individuais.

Desculpem a longa regex.

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 o teste:

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

Outras dicas

De embelezar dá suporte a VB comentários de 8 de janeiro de 2009.

Para obter vb realce de sintaxe funcionando corretamente, você precisa de três coisas;

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

e um PRÉ bloco em torno de seu código, por exemplo:

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

Stackoverflow está faltando o lang-vb.js inclusão, e a capacidade para especificar o idioma que através do Markdown, ou seja: class="prettyprint lang-vb" é por isso que não funciona aqui.

para mais detalhes sobre o assunto:ver o Embelezar problemas de registo

Entretanto, você pode colocar um comentário extra personagem no final de seus comentários para obtê-lo para olhar bem.Por exemplo:

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

Você também precisa escapar interno caracteres de comentário no normal vb-moda:

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

Embelezar ainda trata como um literal de cadeia de caracteres ao invés de um comentário, mas pelo menos ele parece bem.

Outro método que eu já vi é começar comentários com um extra '//, como este:

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

Em seguida, é tratada como um comentário, mas você tem que lidar com o estilo de C marcadores de comentário

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top