Gibt es eine Lang-VB- oder Lang-Basic-Option für prettify.js von Google?
-
09-06-2019 - |
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...
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.
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?)|('.*$)|#.+?#|(&[HO])?\d+(\.\d*)?(e[+-]?\d+)?U?([SILDFR%@!#]|&)?|\.\d+[FR!#]?|\s+|\w+|&|<|>|([-+*/\\^$@!#%&<>()\[\]{}.,:=]+)/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("&") == 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 = &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