javascript – 来自Google的prettify.js是否有lang-vb或lang-basic选项?

前端之家收集整理的这篇文章主要介绍了javascript – 来自Google的prettify.js是否有lang-vb或lang-basic选项?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Visual Basic代码无法正确显示来自Google的 prettify.js.

堆栈溢出:

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

我在README文件中发现:

How do I specify which language my
code is in?

You don’t need to specify the language
since prettyprint() will guess. You
can specify a language by specifying
the language extension along with the
prettyprint class like so:

06001

我看不到lang-vb或lang-basic选项.有人知道是否作为加载项存在?

注意:这与VB.NET code blocks Stack Overflow的建议有关.

解决方法

/编辑:我改写了整篇文章.

以下是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;|([-+*/\\^$@!#%&<>()\[\]{}.,:=]+)/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","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

猜你在找的JavaScript相关文章