{"version":3,"sources":["../../node_modules/codemirror/mode/verilog/verilog.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","parserConfig","indentUnit","statementIndentUnit","dontAlignCalls","noIndentKeywords","multiLineStrings","hooks","words","str","obj","split","i","length","keywords","isOperatorChar","isBracketChar","unsignedNumber","decimalLiteral","binaryLiteral","octLiteral","hexLiteral","realLiteral","closingBracketOrWord","closingBracket","curPunc","curKeyword","blockKeywords","openClose","keyword","undefined","statementKeywords","tokenBase","stream","state","ch","peek","style","test","next","eatWhile","tokenize","tokenString","eat","tokenComment","skipToEnd","backUp","match","cur","current","quote","escaped","end","maybeEnd","Context","indented","column","type","align","prev","this","pushContext","col","indent","c","context","popContext","t","isClosing","text","contextClosing","closingKeywords","buildElectricInputRegEx","allClosings","closings","j","push","re","RegExp","join","electricInput","startState","basecolumn","startOfLine","token","ctx","sol","indentation","eatSpace","close","textAfter","Pass","fromHook","firstChar","charAt","closing","possibleClosing","blockCommentStart","blockCommentEnd","lineComment","fold","defineMIME","name","tlvIdentifierStyle","|",">","$","$$","?$","?*","-","/","/-","@","@-","@++","@+=","@+=-","@--","@-=","%+","%-","%",">>","<<","<>","#","^","^^","^!","*","**","\\","\"","tlvScopePrefixChars","?","tlvIndentUnit","tlvTrackStatements","tlvIdentMatch","tlvFirstLevelIndentMatch","tlvLineIndentationMatch","tlvCommentMatch","tlvScopeStyle","depth","tlvIndentationStyle","tlvIdentNext","tlvInBlockComment","string","tlvCodeActive","pos","blankline","chPos","bodyString","slice","statementComment","pop","tlvNextIndent","beginStatement","eol","prefix","mnemonic","hasOwnProperty"],"mappings":"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","file":"verilog.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"verilog\", function(config, parserConfig) {\n\n var indentUnit = config.indentUnit,\n statementIndentUnit = parserConfig.statementIndentUnit || indentUnit,\n dontAlignCalls = parserConfig.dontAlignCalls,\n noIndentKeywords = parserConfig.noIndentKeywords || [],\n multiLineStrings = parserConfig.multiLineStrings,\n hooks = parserConfig.hooks || {};\n\n function words(str) {\n var obj = {}, words = str.split(\" \");\n for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n return obj;\n }\n\n /**\n * Keywords from IEEE 1800-2012\n */\n var keywords = words(\n \"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind \" +\n \"bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config \" +\n \"const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable \" +\n \"dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup \" +\n \"endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask \" +\n \"enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin \" +\n \"function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import \" +\n \"incdir include initial inout input inside instance int integer interconnect interface intersect join join_any \" +\n \"join_none large let liblist library local localparam logic longint macromodule matches medium modport module \" +\n \"nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed \" +\n \"parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup \" +\n \"pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg \" +\n \"reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime \" +\n \"s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify \" +\n \"specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on \" +\n \"table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior \" +\n \"trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void \" +\n \"wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor\");\n\n /** Operators from IEEE 1800-2012\n unary_operator ::=\n + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~\n binary_operator ::=\n + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | **\n | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<<\n | -> | <->\n inc_or_dec_operator ::= ++ | --\n unary_module_path_operator ::=\n ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~\n binary_module_path_operator ::=\n == | != | && | || | & | | | ^ | ^~ | ~^\n */\n var isOperatorChar = /[\\+\\-\\*\\/!~&|^%=?:]/;\n var isBracketChar = /[\\[\\]{}()]/;\n\n var unsignedNumber = /\\d[0-9_]*/;\n var decimalLiteral = /\\d*\\s*'s?d\\s*\\d[0-9_]*/i;\n var binaryLiteral = /\\d*\\s*'s?b\\s*[xz01][xz01_]*/i;\n var octLiteral = /\\d*\\s*'s?o\\s*[xz0-7][xz0-7_]*/i;\n var hexLiteral = /\\d*\\s*'s?h\\s*[0-9a-fxz?][0-9a-fxz?_]*/i;\n var realLiteral = /(\\d[\\d_]*(\\.\\d[\\d_]*)?E-?[\\d_]+)|(\\d[\\d_]*\\.\\d[\\d_]*)/i;\n\n var closingBracketOrWord = /^((\\w+)|[)}\\]])/;\n var closingBracket = /[)}\\]]/;\n\n var curPunc;\n var curKeyword;\n\n // Block openings which are closed by a matching keyword in the form of (\"end\" + keyword)\n // E.g. \"task\" => \"endtask\"\n var blockKeywords = words(\n \"case checker class clocking config function generate interface module package \" +\n \"primitive program property specify sequence table task\"\n );\n\n // Opening/closing pairs\n var openClose = {};\n for (var keyword in blockKeywords) {\n openClose[keyword] = \"end\" + keyword;\n }\n openClose[\"begin\"] = \"end\";\n openClose[\"casex\"] = \"endcase\";\n openClose[\"casez\"] = \"endcase\";\n openClose[\"do\" ] = \"while\";\n openClose[\"fork\" ] = \"join;join_any;join_none\";\n openClose[\"covergroup\"] = \"endgroup\";\n\n for (var i in noIndentKeywords) {\n var keyword = noIndentKeywords[i];\n if (openClose[keyword]) {\n openClose[keyword] = undefined;\n }\n }\n\n // Keywords which open statements that are ended with a semi-colon\n var statementKeywords = words(\"always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while\");\n\n function tokenBase(stream, state) {\n var ch = stream.peek(), style;\n if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style;\n if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false)\n return style;\n\n if (/[,;:\\.]/.test(ch)) {\n curPunc = stream.next();\n return null;\n }\n if (isBracketChar.test(ch)) {\n curPunc = stream.next();\n return \"bracket\";\n }\n // Macros (tick-defines)\n if (ch == '`') {\n stream.next();\n if (stream.eatWhile(/[\\w\\$_]/)) {\n return \"def\";\n } else {\n return null;\n }\n }\n // System calls\n if (ch == '$') {\n stream.next();\n if (stream.eatWhile(/[\\w\\$_]/)) {\n return \"meta\";\n } else {\n return null;\n }\n }\n // Time literals\n if (ch == '#') {\n stream.next();\n stream.eatWhile(/[\\d_.]/);\n return \"def\";\n }\n // Strings\n if (ch == '\"') {\n stream.next();\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n }\n // Comments\n if (ch == \"/\") {\n stream.next();\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n }\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return \"comment\";\n }\n stream.backUp(1);\n }\n\n // Numeric literals\n if (stream.match(realLiteral) ||\n stream.match(decimalLiteral) ||\n stream.match(binaryLiteral) ||\n stream.match(octLiteral) ||\n stream.match(hexLiteral) ||\n stream.match(unsignedNumber) ||\n stream.match(realLiteral)) {\n return \"number\";\n }\n\n // Operators\n if (stream.eatWhile(isOperatorChar)) {\n return \"meta\";\n }\n\n // Keywords / plain variables\n if (stream.eatWhile(/[\\w\\$_]/)) {\n var cur = stream.current();\n if (keywords[cur]) {\n if (openClose[cur]) {\n curPunc = \"newblock\";\n }\n if (statementKeywords[cur]) {\n curPunc = \"newstatement\";\n }\n curKeyword = cur;\n return \"keyword\";\n }\n return \"variable\";\n }\n\n stream.next();\n return null;\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) {end = true; break;}\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !(escaped || multiLineStrings))\n state.tokenize = tokenBase;\n return \"string\";\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function Context(indented, column, type, align, prev) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.align = align;\n this.prev = prev;\n }\n function pushContext(state, col, type) {\n var indent = state.indented;\n var c = new Context(indent, col, type, null, state.context);\n return state.context = c;\n }\n function popContext(state) {\n var t = state.context.type;\n if (t == \")\" || t == \"]\" || t == \"}\") {\n state.indented = state.context.indented;\n }\n return state.context = state.context.prev;\n }\n\n function isClosing(text, contextClosing) {\n if (text == contextClosing) {\n return true;\n } else {\n // contextClosing may be multiple keywords separated by ;\n var closingKeywords = contextClosing.split(\";\");\n for (var i in closingKeywords) {\n if (text == closingKeywords[i]) {\n return true;\n }\n }\n return false;\n }\n }\n\n function buildElectricInputRegEx() {\n // Reindentation should occur on any bracket char: {}()[]\n // or on a match of any of the block closing keywords, at\n // the end of a line\n var allClosings = [];\n for (var i in openClose) {\n if (openClose[i]) {\n var closings = openClose[i].split(\";\");\n for (var j in closings) {\n allClosings.push(closings[j]);\n }\n }\n }\n var re = new RegExp(\"[{}()\\\\[\\\\]]|(\" + allClosings.join(\"|\") + \")$\");\n return re;\n }\n\n // Interface\n return {\n\n // Regex to force current line to reindent\n electricInput: buildElectricInputRegEx(),\n\n startState: function(basecolumn) {\n var state = {\n tokenize: null,\n context: new Context((basecolumn || 0) - indentUnit, 0, \"top\", false),\n indented: 0,\n startOfLine: true\n };\n if (hooks.startState) hooks.startState(state);\n return state;\n },\n\n token: function(stream, state) {\n var ctx = state.context;\n if (stream.sol()) {\n if (ctx.align == null) ctx.align = false;\n state.indented = stream.indentation();\n state.startOfLine = true;\n }\n if (hooks.token) {\n // Call hook, with an optional return value of a style to override verilog styling.\n var style = hooks.token(stream, state);\n if (style !== undefined) {\n return style;\n }\n }\n if (stream.eatSpace()) return null;\n curPunc = null;\n curKeyword = null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style == \"comment\" || style == \"meta\" || style == \"variable\") return style;\n if (ctx.align == null) ctx.align = true;\n\n if (curPunc == ctx.type) {\n popContext(state);\n } else if ((curPunc == \";\" && ctx.type == \"statement\") ||\n (ctx.type && isClosing(curKeyword, ctx.type))) {\n ctx = popContext(state);\n while (ctx && ctx.type == \"statement\") ctx = popContext(state);\n } else if (curPunc == \"{\") {\n pushContext(state, stream.column(), \"}\");\n } else if (curPunc == \"[\") {\n pushContext(state, stream.column(), \"]\");\n } else if (curPunc == \"(\") {\n pushContext(state, stream.column(), \")\");\n } else if (ctx && ctx.type == \"endcase\" && curPunc == \":\") {\n pushContext(state, stream.column(), \"statement\");\n } else if (curPunc == \"newstatement\") {\n pushContext(state, stream.column(), \"statement\");\n } else if (curPunc == \"newblock\") {\n if (curKeyword == \"function\" && ctx && (ctx.type == \"statement\" || ctx.type == \"endgroup\")) {\n // The 'function' keyword can appear in some other contexts where it actually does not\n // indicate a function (import/export DPI and covergroup definitions).\n // Do nothing in this case\n } else if (curKeyword == \"task\" && ctx && ctx.type == \"statement\") {\n // Same thing for task\n } else {\n var close = openClose[curKeyword];\n pushContext(state, stream.column(), close);\n }\n }\n\n state.startOfLine = false;\n return style;\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass;\n if (hooks.indent) {\n var fromHook = hooks.indent(state);\n if (fromHook >= 0) return fromHook;\n }\n var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n var closing = false;\n var possibleClosing = textAfter.match(closingBracketOrWord);\n if (possibleClosing)\n closing = isClosing(possibleClosing[0], ctx.type);\n if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit);\n else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1);\n else if (ctx.type == \")\" && !closing) return ctx.indented + statementIndentUnit;\n else return ctx.indented + (closing ? 0 : indentUnit);\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"//\",\n fold: \"indent\"\n };\n});\n\n CodeMirror.defineMIME(\"text/x-verilog\", {\n name: \"verilog\"\n });\n\n CodeMirror.defineMIME(\"text/x-systemverilog\", {\n name: \"verilog\"\n });\n\n\n\n // TL-Verilog mode.\n // See tl-x.org for language spec.\n // See the mode in action at makerchip.com.\n // Contact: steve.hoover@redwoodeda.com\n\n // TLV Identifier prefixes.\n // Note that sign is not treated separately, so \"+/-\" versions of numeric identifiers\n // are included.\n var tlvIdentifierStyle = {\n \"|\": \"link\",\n \">\": \"property\", // Should condition this off for > TLV 1c.\n \"$\": \"variable\",\n \"$$\": \"variable\",\n \"?$\": \"qualifier\",\n \"?*\": \"qualifier\",\n \"-\": \"hr\",\n \"/\": \"property\",\n \"/-\": \"property\",\n \"@\": \"variable-3\",\n \"@-\": \"variable-3\",\n \"@++\": \"variable-3\",\n \"@+=\": \"variable-3\",\n \"@+=-\": \"variable-3\",\n \"@--\": \"variable-3\",\n \"@-=\": \"variable-3\",\n \"%+\": \"tag\",\n \"%-\": \"tag\",\n \"%\": \"tag\",\n \">>\": \"tag\",\n \"<<\": \"tag\",\n \"<>\": \"tag\",\n \"#\": \"tag\", // Need to choose a style for this.\n \"^\": \"attribute\",\n \"^^\": \"attribute\",\n \"^!\": \"attribute\",\n \"*\": \"variable-2\",\n \"**\": \"variable-2\",\n \"\\\\\": \"keyword\",\n \"\\\"\": \"comment\"\n };\n\n // Lines starting with these characters define scope (result in indentation).\n var tlvScopePrefixChars = {\n \"/\": \"beh-hier\",\n \">\": \"beh-hier\",\n \"-\": \"phys-hier\",\n \"|\": \"pipe\",\n \"?\": \"when\",\n \"@\": \"stage\",\n \"\\\\\": \"keyword\"\n };\n var tlvIndentUnit = 3;\n var tlvTrackStatements = false;\n var tlvIdentMatch = /^([~!@#\\$%\\^&\\*-\\+=\\?\\/\\\\\\|'\"<>]+)([\\d\\w_]*)/; // Matches an identifiere.\n // Note that ':' is excluded, because of it's use in [:].\n var tlvFirstLevelIndentMatch = /^[! ] /;\n var tlvLineIndentationMatch = /^[! ] */;\n var tlvCommentMatch = /^\\/[\\/\\*]/;\n\n\n // Returns a style specific to the scope at the given indentation column.\n // Type is one of: \"indent\", \"scope-ident\", \"before-scope-ident\".\n function tlvScopeStyle(state, indentation, type) {\n // Begin scope.\n var depth = indentation / tlvIndentUnit; // TODO: Pass this in instead.\n return \"tlv-\" + state.tlvIndentationStyle[depth] + \"-\" + type;\n }\n\n // Return true if the next thing in the stream is an identifier with a mnemonic.\n function tlvIdentNext(stream) {\n var match;\n return (match = stream.match(tlvIdentMatch, false)) && match[2].length > 0;\n }\n\n CodeMirror.defineMIME(\"text/x-tlv\", {\n name: \"verilog\",\n\n hooks: {\n\n electricInput: false,\n\n\n // Return undefined for verilog tokenizing, or style for TLV token (null not used).\n // Standard CM styles are used for most formatting, but some TL-Verilog-specific highlighting\n // can be enabled with the definition of cm-tlv-* styles, including highlighting for:\n // - M4 tokens\n // - TLV scope indentation\n // - Statement delimitation (enabled by tlvTrackStatements)\n token: function(stream, state) {\n var style = undefined;\n var match; // Return value of pattern matches.\n\n // Set highlighting mode based on code region (TLV or SV).\n if (stream.sol() && ! state.tlvInBlockComment) {\n // Process region.\n if (stream.peek() == '\\\\') {\n style = \"def\";\n stream.skipToEnd();\n if (stream.string.match(/\\\\SV/)) {\n state.tlvCodeActive = false;\n } else if (stream.string.match(/\\\\TLV/)){\n state.tlvCodeActive = true;\n }\n }\n // Correct indentation in the face of a line prefix char.\n if (state.tlvCodeActive && stream.pos == 0 &&\n (state.indented == 0) && (match = stream.match(tlvLineIndentationMatch, false))) {\n state.indented = match[0].length;\n }\n\n // Compute indentation state:\n // o Auto indentation on next line\n // o Indentation scope styles\n var indented = state.indented;\n var depth = indented / tlvIndentUnit;\n if (depth <= state.tlvIndentationStyle.length) {\n // not deeper than current scope\n\n var blankline = stream.string.length == indented;\n var chPos = depth * tlvIndentUnit;\n if (chPos < stream.string.length) {\n var bodyString = stream.string.slice(chPos);\n var ch = bodyString[0];\n if (tlvScopePrefixChars[ch] && ((match = bodyString.match(tlvIdentMatch)) &&\n tlvIdentifierStyle[match[1]])) {\n // This line begins scope.\n // Next line gets indented one level.\n indented += tlvIndentUnit;\n // Style the next level of indentation (except non-region keyword identifiers,\n // which are statements themselves)\n if (!(ch == \"\\\\\" && chPos > 0)) {\n state.tlvIndentationStyle[depth] = tlvScopePrefixChars[ch];\n if (tlvTrackStatements) {state.statementComment = false;}\n depth++;\n }\n }\n }\n // Clear out deeper indentation levels unless line is blank.\n if (!blankline) {\n while (state.tlvIndentationStyle.length > depth) {\n state.tlvIndentationStyle.pop();\n }\n }\n }\n // Set next level of indentation.\n state.tlvNextIndent = indented;\n }\n\n if (state.tlvCodeActive) {\n // Highlight as TLV.\n\n var beginStatement = false;\n if (tlvTrackStatements) {\n // This starts a statement if the position is at the scope level\n // and we're not within a statement leading comment.\n beginStatement =\n (stream.peek() != \" \") && // not a space\n (style === undefined) && // not a region identifier\n !state.tlvInBlockComment && // not in block comment\n //!stream.match(tlvCommentMatch, false) && // not comment start\n (stream.column() == state.tlvIndentationStyle.length * tlvIndentUnit); // at scope level\n if (beginStatement) {\n if (state.statementComment) {\n // statement already started by comment\n beginStatement = false;\n }\n state.statementComment =\n stream.match(tlvCommentMatch, false); // comment start\n }\n }\n\n var match;\n if (style !== undefined) {\n // Region line.\n style += \" \" + tlvScopeStyle(state, 0, \"scope-ident\")\n } else if (((stream.pos / tlvIndentUnit) < state.tlvIndentationStyle.length) &&\n (match = stream.match(stream.sol() ? tlvFirstLevelIndentMatch : /^ /))) {\n // Indentation\n style = // make this style distinct from the previous one to prevent\n // codemirror from combining spans\n \"tlv-indent-\" + (((stream.pos % 2) == 0) ? \"even\" : \"odd\") +\n // and style it\n \" \" + tlvScopeStyle(state, stream.pos - tlvIndentUnit, \"indent\");\n // Style the line prefix character.\n if (match[0].charAt(0) == \"!\") {\n style += \" tlv-alert-line-prefix\";\n }\n // Place a class before a scope identifier.\n if (tlvIdentNext(stream)) {\n style += \" \" + tlvScopeStyle(state, stream.pos, \"before-scope-ident\");\n }\n } else if (state.tlvInBlockComment) {\n // In a block comment.\n if (stream.match(/^.*?\\*\\//)) {\n // Exit block comment.\n state.tlvInBlockComment = false;\n if (tlvTrackStatements && !stream.eol()) {\n // Anything after comment is assumed to be real statement content.\n state.statementComment = false;\n }\n } else {\n stream.skipToEnd();\n }\n style = \"comment\";\n } else if ((match = stream.match(tlvCommentMatch)) && !state.tlvInBlockComment) {\n // Start comment.\n if (match[0] == \"//\") {\n // Line comment.\n stream.skipToEnd();\n } else {\n // Block comment.\n state.tlvInBlockComment = true;\n }\n style = \"comment\";\n } else if (match = stream.match(tlvIdentMatch)) {\n // looks like an identifier (or identifier prefix)\n var prefix = match[1];\n var mnemonic = match[2];\n if (// is identifier prefix\n tlvIdentifierStyle.hasOwnProperty(prefix) &&\n // has mnemonic or we're at the end of the line (maybe it hasn't been typed yet)\n (mnemonic.length > 0 || stream.eol())) {\n style = tlvIdentifierStyle[prefix];\n if (stream.column() == state.indented) {\n // Begin scope.\n style += \" \" + tlvScopeStyle(state, stream.column(), \"scope-ident\")\n }\n } else {\n // Just swallow one character and try again.\n // This enables subsequent identifier match with preceding symbol character, which\n // is legal within a statement. (Eg, !$reset). It also enables detection of\n // comment start with preceding symbols.\n stream.backUp(stream.current().length - 1);\n style = \"tlv-default\";\n }\n } else if (stream.match(/^\\t+/)) {\n // Highlight tabs, which are illegal.\n style = \"tlv-tab\";\n } else if (stream.match(/^[\\[\\]{}\\(\\);\\:]+/)) {\n // [:], (), {}, ;.\n style = \"meta\";\n } else if (match = stream.match(/^[mM]4([\\+_])?[\\w\\d_]*/)) {\n // m4 pre proc\n style = (match[1] == \"+\") ? \"tlv-m4-plus\" : \"tlv-m4\";\n } else if (stream.match(/^ +/)){\n // Skip over spaces.\n if (stream.eol()) {\n // Trailing spaces.\n style = \"error\";\n } else {\n // Non-trailing spaces.\n style = \"tlv-default\";\n }\n } else if (stream.match(/^[\\w\\d_]+/)) {\n // alpha-numeric token.\n style = \"number\";\n } else {\n // Eat the next char w/ no formatting.\n stream.next();\n style = \"tlv-default\";\n }\n if (beginStatement) {\n style += \" tlv-statement\";\n }\n } else {\n if (stream.match(/^[mM]4([\\w\\d_]*)/)) {\n // m4 pre proc\n style = \"tlv-m4\";\n }\n }\n return style;\n },\n\n indent: function(state) {\n return (state.tlvCodeActive == true) ? state.tlvNextIndent : -1;\n },\n\n startState: function(state) {\n state.tlvIndentationStyle = []; // Styles to use for each level of indentation.\n state.tlvCodeActive = true; // True when we're in a TLV region (and at beginning of file).\n state.tlvNextIndent = -1; // The number of spaces to autoindent the next line if tlvCodeActive.\n state.tlvInBlockComment = false; // True inside /**/ comment.\n if (tlvTrackStatements) {\n state.statementComment = false; // True inside a statement's header comment.\n }\n }\n\n }\n });\n});\n"]}