highlighter code javascript vb.net prettify

javascript - code - ¿Existe una opción lang-vb o lang-basic para prettify.js de Google?



syntax highlighter js (3)

El código de Visual Basic no se procesa 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 ...

Encontré esto en el documento README :

¿Cómo especifico en qué idioma está mi código?

No necesita especificar el idioma ya que prettyprint () lo adivinará. Puede especificar un idioma especificando la extensión del idioma junto con la clase de impresión bonita, de esta manera:

<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 ninguna opción lang-vb o lang-basic . ¿Alguien sabe si existe uno como un complemento?

Nota: Esto está relacionado con la sugerencia de bloques de código de VB.NET para desbordamiento de pila.


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

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

También necesita escapar caracteres de comentario interno en la vb-fashion normal:

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

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

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

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

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


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

Para que el resaltado de sintaxis 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 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 lo que no funciona aquí.

para obtener detalles sobre el problema: consulte el registro de problemas de Prettify


/ EDITAR: He reescrito toda la publicación.

A continuación se muestra una solución bastante completa para el problema de resaltado de VB. Si SO no tiene nada mejor, utilícelo. El resaltado de sintaxis VB es definitivamente deseado.

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 obtener XLinq correctamente. Sin embargo, aún podría funcionar. La lista de palabras clave se toma de MSDN. Las palabras clave contextuales no están incluidas. ¿ GetXmlNamespace operador GetXmlNamespace ?

El algoritmo conoce caracteres de tipo literal. También debería ser capaz de manejar caracteres de tipo identificador pero no los he probado. Tenga en cuenta que el código funciona en HTML . Como consecuencia, se requiere que &, <y> se lean como entidades con nombre (!), No 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 la prueba:

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