<!doctype html>
<title>CodeMirror: VB.NET mode</title>
<meta charset="utf-8" />
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<link href="http://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet" type="text/css">
<script src="../../lib/codemirror.js"></script>
<script src="vb.js"></script>
<script type="text/javascript" src="../../addon/runmode/runmode.js"></script>
<style>
    .CodeMirror {
        border: 1px solid #aaa;
        height: 210px;
        height: auto;
    }
    
    .CodeMirror-scroll {
        overflow-x: auto;
        overflow-y: hidden;
    }
    
    .CodeMirror pre {
        font-family: Inconsolata;
        font-size: 14px
    }
</style>
<div id=nav>
    <a href="http://codemirror.net">
        <h1>CodeMirror</h1>
        <img id=logo src="../../doc/logo.png">
    </a>
    <ul>
        <li>
            <a href="../../index.html">Home</a>
            <li>
                <a href="../../doc/manual.html">Manual</a>
                <li>
                    <a href="https://github.com/codemirror/codemirror">Code</a>
    </ul>
    <ul>
        <li>
            <a href="../index.html">Language modes</a>
            <li>
                <a class=active href="#">VB.NET</a>
    </ul>
</div>
<article>
    <h2>VB.NET mode</h2>
    <script type="text/javascript">
        function test(golden, text)
        {
            var ok = true;
            var i = 0;

            function callback(token, style, lineNo, pos)
            {
                //console.log(String(token) + " " + String(style) + " " + String(lineNo) + " " + String(pos));
                var result = [String(token), String(style)];
                if (golden[i][0] != result[0] || golden[i][1] != result[1])
                {
                    return "Error, expected: " + String(golden[i]) + ", got: " + String(result);
                    ok = false;
                }
                i++;
            }
            CodeMirror.runMode(text, "text/x-vb", callback);
            if (ok) return "Tests OK";
        }

        function testTypes()
        {
            var golden = [
                ['Integer', 'keyword'],
                [' ', 'null'],
                ['Float', 'keyword']
            ]
            var text = "Integer Float";
            return test(golden, text);
        }

        function testIf()
        {
            var golden = [
                ['If', 'keyword'],
                [' ', 'null'],
                ['True', 'keyword'],
                [' ', 'null'],
                ['End', 'keyword'],
                [' ', 'null'],
                ['If', 'keyword']
            ];
            var text = 'If True End If';
            return test(golden, text);
        }

        function testDecl()
        {
            var golden = [
                ['Dim', 'keyword'],
                [' ', 'null'],
                ['x', 'variable'],
                [' ', 'null'],
                ['as', 'keyword'],
                [' ', 'null'],
                ['Integer', 'keyword']
            ];
            var text = 'Dim x as Integer';
            return test(golden, text);
        }

        function testAll()
        {
            var result = "";
            result += testTypes() + "\n";
            result += testIf() + "\n";
            result += testDecl() + "\n";
            return result;
        }

        function initText(editor)
        {
            var content = 'Class rocket\nPrivate quality as Double\nPublic Sub launch() as String\nif quality > 0.8\nlaunch = "Successful"\nElse\nlaunch = "Failed"\nEnd If\nEnd sub\nEnd class\n';
            editor.setValue(content);
            for (var i = 0; i < editor.lineCount(); i++) editor.indentLine(i);
        }

        function init()
        {
            editor = CodeMirror.fromTextArea(document.getElementById("solution"),
            {
                lineNumbers: true,
                mode: "text/x-vb",
                readOnly: false
            });
            runTest();
        }

        function runTest()
        {
            document.getElementById('testresult').innerHTML = testAll();
            initText(editor);
        }
        document.body.onload = init;
    </script>
    <div id="edit">
        <textarea style="width:95%;height:200px;padding:5px;" name="solution" id="solution"></textarea>
    </div> <pre id="testresult"></pre>
    <p>MIME type defined: <code>text/x-vb</code>.</p>
</article>