Есть ли опция lang-vb или lang-basic для prettify.js из Google?

StackOverflow https://stackoverflow.com/questions/31097

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

Visual Basic in 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?)|('.*$)|#.+?#|(&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>";
}

Код для тестирования:

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top