2008-08-27 2 views
10

Visual Basic 코드가 Google의 prettify.js으로 올바르게 렌더링되지 않습니다.Google의 prettify.js에 lang-vb 또는 lang-basic 옵션이 있습니까?

스택 오버플로

: Visual Studio에서

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

나는 README 문서에서 이걸 발견 : 나는 어떤 언어를 지정하려면 어떻게

내 코드는 무엇입니까?

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 code blocks 제안 관련이있다.

+0

참고를 참조하십시오 당신이 구문은 SO에 대한 강조가 필요하면,'사용 <- 언어 :!이 랭 - 비주얼 베이직 ->이 문제가 이제 해결' – Laurel

답변

8

/편집 : 전체 게시 내용을 다시 작성했습니다.

다음은 VB 강조 표시 문제에 대한 완벽한 솔루션입니다. SO가 더 좋은 것이 없다면 으로 사용하십시오. VB 구문 강조가 확실히 필요합니다.

필자는 올바르게 강조 표시된 복잡한 코드 리터럴과 함께 코드 예제를 추가했습니다. 그러나, 나는 XLinq를 제대로 얻으려고도하지 못했습니다. 그래도 여전히 작동 할 수 있습니다. keywords list은 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;|([-+*/\\^[email protected]!#%&<>()\[\]{}.,:=]+)/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 
+0

콘라드입니다 SO에서 구현되지는 않았지만 자신을 Prettify합니다. –

+0

@Mark : 예, 이것에 대해 알고 있습니다 ... Uservoice 토론을 참조하십시오. 하지만 당신이 말했듯이, 불행히도 여전히 그것을 구현하지는 못하고 Uservoice 보고서는 거부되었습니다. –

0

, 당신은 괜찮보고 얻기 위해 귀하의 의견의 끝에 추가 주석 문자를 넣을 수 있습니다.예를 들어 :

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

네, 그렇다면 단순히 "//"를 사용할 수 있습니다. 사람들이 " ''// '을 사용하는 이유는 주석처럼 보이고 VB에서 주석으로 컴파일된다는 것입니다. – EndangeredMassa

+0

우리는 VB 스 니펫에 대해 이야기하고 있으므로 IDE에 복사/붙여 넣기 할 때 적어도 컴파일 할 수 있는지 확인하는 것이 좋습니다. –

2

Prettify는 2009 년 1 월 8 일부터 VB 주석을 지원합니다.

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> 

유래는 랭 vb.js 포함하고, 마크 다운을 통해 어떤 언어를 지정하는 기능, 즉 누락되었습니다 class="prettyprint lang-vb" 이유 여기서는 작동하지 않습니다.

문제에 대한 자세한 내용은

: the Prettify issues log