Существует ли lang-vb или основная Ленгом опция для prettify.js от Google?

У Города Героев действительно есть механик, называемый «полосатой», который решает именно эту проблему. Способ, которым он работает, состоит в том, что после последовательности промахов длины, связанной с наименьшей вероятностью попадания в строку, следующая атака гарантированно станет хитом. Например, если вы пропустите атаку с более чем 90%, чтобы нанести удар, тогда ваша следующая атака будет автоматически ударяться, но если ваш шанс попадания будет ниже, чем 60%, тогда вам нужно будет иметь несколько последовательных промахов, чтобы вызвать «полосатор» (I не знаю точных чисел)

10
задан Nathan Tuggy 25 August 2015 в 19:56
поделиться

3 ответа

/ РЕДАКТИРОВАНИЕ: я переписал целую регистрацию.

Ниже довольно полное решение VB выделяющаяся проблема. РАЗ ТАК ничего не имеет лучше, используйте его. Подсветка синтаксиса VB определенно требуется.

Я также добавил пример кода с некоторыми литералами сложного кода, который выделяется правильно. Однако я даже не попытался разобраться в XLinq. Мог бы все еще работать, все же. Список ключевых слов взят из MSDN. Контекстные ключевые слова не включены. Вы знали GetXmlNamespace оператор?

Алгоритм знает литеральные символы текста. Это должно также смочь обработать символы текста идентификатора, но я не протестировал их. Обратите внимание, что код работает над HTML. Как следствие, и, <и> требуются, чтобы быть считанным как названный объектами, не отдельными символами.

Извините за длинный regex.

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
8
ответ дан 4 December 2019 в 01:32
поделиться

Тем временем можно поместить дополнительный символ комментария в конце комментариев, чтобы заставить это смотреть хорошо. Например:

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

Также необходимо выйти из внутренних символов комментария нормальным vb-способом:

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

Украсьте все еще рассматривает его как строковый литерал, а не комментарий, но по крайней мере это смотрит хорошо.

Другой метод, который я видел, должен запустить комментарии с дополнительного '//, как это:

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

Затем это обрабатывается как комментарий, но необходимо иметь дело с маркерами комментария C-стиля

0
ответ дан 4 December 2019 в 01:32
поделиться

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 вокруг вашего кода, например:

<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

2
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: