문제

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 Basic in Visual Studio

나는 이것을 에서 찾았습니다. 읽어보기 문서:

내 코드가 어떤 언어에 있는지 어떻게 지정합니까?

PrettyPrint ()가 추측하므로 언어를 지정할 필요가 없습니다.SO와 같은 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>

나는 아니라고 본다 랭-vb 또는 언어 기본 옵션.추가 기능으로 존재하는지 아는 사람이 있나요?


메모:이는 다음과 관련이 있습니다. VB.NET 코드 블록 스택 오버플로에 대한 제안.

도움이 되었습니까?

해결책

/편집하다:포스팅 전체를 다시 작성했습니다.

다음은 VB 강조 문제에 대한 매우 완전한 솔루션입니다.SO가 더 나은 것이 없다면, 제발 그걸 써.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는 2009 년 1 월 8 일 현재 VB 댓글을 지원합니다.

vb 구문 강조 표시가 올바르게 작동하려면 세 가지가 필요합니다. 라코 디스

및 코드 주변의 PRE 블록 예 : 라코 디스

Stackoverflow에는 lang-vb.js 포함 및 Markdown을 통해 어떤 언어를 지정할 수있는 기능이 없습니다. 즉, 여기서 작동하지 않는 class="prettyprint lang-vb"입니다.

문제에 대한 자세한 내용은 Prettify를 참조하세요.문제 로그

그동안 댓글 끝에 추가 댓글 문자를 추가하여 괜찮아 보이도록 할 수 있습니다.예 : 라코 디스

또한 일반적인 vb-fashion에서 내부 주석 문자를 이스케이프해야합니다. 라코 디스

Prettify는 여전히 주석이 아닌 문자열 리터럴로 취급하지만 적어도 괜찮아 보입니다.

내가 본 또 다른 방법은 다음과 같이 추가 유전자 태그 코드로 주석을 시작하는 것입니다. 라코 디스

그런 다음 주석처럼 처리되지만 C 스타일 주석 마커를 처리해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top