Question

Le code Visual Basic ne s'affiche pas correctement avec joli.js de Google.

sur Stack Overflow :

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

dans Visual Studio...

Visual Basic in Visual Studio

J'ai trouvé ça dans le LISEZMOI document:

Comment spécifier dans quelle langue mon code se trouve?

Vous n'avez pas besoin de spécifier la langue puisque Prettyprint () devinera.Vous pouvez spécifier une langue en spécifiant l'extension de la langue avec la classe PrettyPrint comme ainsi:

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

je vois non lang-vb ou langage de base option.Est-ce que quelqu'un sait s'il existe un complément ?


Note:Ceci est lié au Blocs de code VB.NET suggestion pour Stack Overflow.

Était-ce utile?

La solution

/MODIFIER:J'ai réécrit tout le message.

Vous trouverez ci-dessous une solution assez complète au problème de mise en évidence VB.Si SO n'a rien de mieux, s'il te plaît utilise le.La coloration syntaxique VB est absolument souhaitée.

J'ai également ajouté un exemple de code avec des littéraux de code complexes qui sont correctement mis en évidence.Cependant, je n'ai même pas essayé de bien comprendre XLinq.Cela pourrait quand même fonctionner.Le liste de mots-clés est extrait du MSDN.Les mots-clés contextuels ne sont pas inclus.Connaissiez-vous le GetXmlNamespace opérateur?

L'algorithme connaît les caractères de type littéral.Il devrait également être capable de gérer les caractères de type identifiant mais je ne les ai pas testés.Notez que le code fonctionne sur HTML.En conséquence, &, < et > doivent être lus comme des entités nommées (!), et non comme des caractères uniques.

Désolé pour la longue expression régulière.

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 pour tester :

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

Autres conseils

Prettify prend en charge les commentaires VB depuis le 8 janvier 2009.

Pour que la coloration syntaxique vb fonctionne correctement, vous avez besoin de trois choses :

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

et un bloc PRE autour de votre code par exemple :

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

Il manque à Stackoverflow l'inclusion lang-vb.js et la possibilité de spécifier quelle langue via Markdown, c'est-à-dire : class="prettyprint lang-vb" c'est pourquoi ça ne marche pas ici.

pour plus de détails sur le problème :voir le journal des problèmes de Prettify

En attendant, vous pouvez mettre un caractère de commentaire supplémentaire à la fin de vos commentaires pour que tout soit correct.Par exemple:

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

Vous devez également échapper aux caractères de commentaire internes de la manière normale :

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

Prettify le traite toujours comme une chaîne littérale plutôt que comme un commentaire, mais au moins cela semble correct.

Une autre méthode que j'ai vue consiste à commencer les commentaires par un extra '//, comme ça:

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

Ensuite, c'est traité comme un commentaire, mais vous devez gérer des marqueurs de commentaires de style C

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top