Есть ли опция lang-vb или lang-basic для prettify.js из Google?
-
09-06-2019 - |
Вопрос
Код Visual Basic не отображается корректно с помощью prettify.js из Google.
о Переполнении стека:
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
в Visual Studio...
Я нашел это в ПРОЧИТАЙ МЕНЯ документ:
Как мне указать, на каком языке написан мой код?
Вам не нужно указывать язык поскольку prettyprint() сама догадается.Вы можете указать язык, указав расширение языка вместе с классом prettyprint следующим образом:
<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>
Я не вижу никаких lang-vb или язык -базовый вариант.Кто-нибудь знает, существует ли такая надстройка?
Примечание:Это связано с VB.NET блоки кода предложение по переполнению стека.
Решение
/РЕДАКТИРОВАТЬ:Я переписал всю публикацию.
Ниже приведено довольно полное решение проблемы выделения VB.Если ДА, то у него нет ничего лучше, пожалуйста используй это.Подсветка синтаксиса VB определенно необходима.
Я также добавил пример кода с некоторыми сложными литералами кода, которые выделяются правильно.Однако я даже не пытался правильно настроить XLinq.Хотя, возможно, это все еще сработает.Тот Самый список ключевых слов взято из MSDN.Контекстные ключевые слова не включаются.Знали ли вы, что GetXmlNamespace
оператор?
Алгоритм знает символы литерального типа.Он также должен уметь обрабатывать символы типа идентификатора, но я их не тестировал.Обратите внимание, что код работает на HTML.Как следствие, &, < и > должны читаться как именованные (!) объекты, а не как отдельные символы.
Извините за длинное регулярное выражение.
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>";
}
Код для тестирования:
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
Другие советы
Prettify поддерживает комментарии VB по состоянию на 8 января 2009 года.
Чтобы корректно заставить подсветку синтаксиса vb работать, вам нужны три вещи;
<script type="text/javascript" src="/External/css/prettify/prettify.js"></script>
<script type="text/javascript" src="/External/css/prettify/lang-vb.js"></script>
и ПРЕДВАРИТЕЛЬНЫЙ блок вокруг вашего кода, например:
<PRE class="prettyprint lang-vb">
Function SomeVB() as string
' do stuff
i = i + 1
End Function
</PRE>
В Stackoverflow отсутствует включение lang-vb.js и возможность указать, какой язык использовать через Markdown, т.е.: class="prettyprint lang-vb"
вот почему здесь это не работает.
для получения подробной информации по этому вопросу:видишь журнал проблем с Prettify
Тем временем вы можете добавить дополнительный символ комментария в конце своих комментариев, чтобы все выглядело нормально.Например:
Sub TestMethod()
'Method body goes here'
End Sub
Вам также нужно экранировать символы внутренних комментариев обычным vb-способом:
Sub TestMethod2()
'Here''s another comment'
End Sub
Prettify по-прежнему рассматривает его как строковый литерал, а не как комментарий, но, по крайней мере, выглядит нормально.
Другой метод, который я видел, - это начинать комментарии с дополнительного '//
, вот так:
Sub TestMethod3()
''// one final comment
End Sub
Затем это обрабатывается как комментарий, но вам приходится иметь дело с маркерами комментариев в стиле C