سؤال

لا يتم عرض التعليمات البرمجية لـ Visual Basic بشكل صحيح مع pretify.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 Basic in Visual Studio

لقد وجدت هذا في التمهيدي وثيقة:

كيف يمكنني تحديد لغة الكود الخاص بي؟

لا تحتاج إلى تحديد اللغة لأن PrettyPrint () سوف تخمن.يمكنك تحديد لغة من خلال تحديد امتداد اللغة إلى جانب فئة PrettyPrint مثل SO:

<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 أو lang-basic خيار.هل يعرف أحد ما إذا كان موجودًا كوظيفة إضافية؟


ملحوظة:ويرتبط هذا إلى كتل التعليمات البرمجية لـ VB.NET اقتراح لتجاوز سعة المكدس.

هل كانت مفيدة؟

المحلول

/يحرر:لقد قمت بإعادة كتابة المشاركة بأكملها.

يوجد أدناه حل كامل جدًا لمشكلة تمييز VB.إذا لم يحصل SO على شيء أفضل، لو سمحت استخدامه.من المؤكد أن تسليط الضوء على بناء جملة VB مطلوب.

لقد قمت أيضًا بإضافة مثال للتعليمات البرمجية مع بعض القيم الحرفية المعقدة للتعليمات البرمجية والتي يتم تمييزها بشكل صحيح.ومع ذلك، لم أحاول حتى الحصول على XLinq بشكل صحيح.ربما لا يزال يعمل، رغم ذلك.ال قائمة الكلمات الرئيسية مأخوذ من MSDN.لا يتم تضمين الكلمات الرئيسية السياقية.هل تعلم GetXmlNamespace المشغل أو العامل؟

تعرف الخوارزمية أحرف النوع الحرفي.يجب أن يكون أيضًا قادرًا على التعامل مع أحرف نوع المعرف ولكني لم أختبرها.لاحظ أن الكود يعمل على لغة البرمجة.ونتيجة لذلك، يلزم قراءة & و< و> على أنها كيانات مسماة (!)، وليس على أنها أحرف مفردة.

آسف على التعبير العادي الطويل.

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 حول الكود الخاص بك على سبيل المثال:

<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" ولهذا السبب لا يعمل هنا.

للحصول على تفاصيل حول هذه القضية:يرى سجل مشاكل Pretify

في هذه الأثناء، يمكنك وضع حرف تعليق إضافي في نهاية تعليقاتك حتى تبدو جيدة.على سبيل المثال:

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