!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}((function(e){"use strict";e.defineMode("verilog",(function(t,n){var i=t.indentUnit,r=n.statementIndentUnit||i,a=n.dontAlignCalls,o=n.compilerDirectivesUseRegularIndentation,l=n.noIndentKeywords||[],s=n.multiLineStrings,c=n.hooks||{};function d(e){for(var t={},n=e.split(" "),i=0;i]/,v=/[\[\]{}()]/,g=/\d[0-9_]*/,h=/\d*\s*'s?d\s*\d[0-9_]*/i,y=/\d*\s*'s?b\s*[xz01][xz01_]*/i,k=/\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i,b=/\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i,w=/(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i,_=/^((`?\w+)|[)}\]])/,x=/[)}\]]/,I=new RegExp("^(`(?:ifdef|ifndef|elsif|else|endif|undef|undefineall|define|include|begin_keywords|celldefine|default|nettype|end_keywords|endcelldefine|line|nounconnected_drive|pragma|resetall|timescale|unconnected_drive))\\b"),z=/^(`(?:ifdef|ifndef|elsif|else))\b/,C=/^(`(?:elsif|else|endif))\b/,S=d("case checker class clocking config function generate interface module package primitive program property specify sequence table task"),j={};for(var E in S)j[E]="end"+E;for(var M in j.begin="end",j.casex="endcase",j.casez="endcase",j.do="while",j.fork="join;join_any;join_none",j.covergroup="endgroup",j.macro_begin="macro_end",l){E=l[M];j[E]&&(j[E]=void 0)}var $=d("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while extern typedef");function q(e,t){var n,i,r=e.peek();if(c[r]&&0!=(n=c[r](e,t)))return n;if(c.tokenBase&&0!=(n=c.tokenBase(e,t)))return n;if(/[,;:\.]/.test(r))return f=e.next(),null;if(v.test(r))return f=e.next(),"bracket";if("`"==r){if(e.next(),e.eatWhile(/[\w\$_]/)){var a=e.current();if(u=a,a.startsWith("`uvm_")&&a.endsWith("_begin")){var o=u.substr(0,u.length-5)+"end";j[a]=o,f="newblock"}else{e.eatSpace(),"("==e.peek()&&(f="newmacro");var l=e.current();e.backUp(l.length-a.length)}return"def"}return null}if("$"==r)return e.next(),e.eatWhile(/[\w\$_]/)?"meta":null;if("#"==r)return e.next(),e.eatWhile(/[\d_.]/),"def";if("@"==r)return e.next(),e.eatWhile(/[@]/),"def";if('"'==r)return e.next(),t.tokenize=(i=r,function(e,t){for(var n,r=!1,a=!1;null!=(n=e.next());){if(n==i&&!r){a=!0;break}r=!r&&"\\"==n}return(a||!r&&!s)&&(t.tokenize=q),"string"}),t.tokenize(e,t);if("/"==r){if(e.next(),e.eat("*"))return t.tokenize=A,A(e,t);if(e.eat("/"))return e.skipToEnd(),"comment";e.backUp(1)}if(e.match(w)||e.match(h)||e.match(y)||e.match(k)||e.match(b)||e.match(g)||e.match(w))return"number";if(e.eatWhile(p))return f=e.current(),"meta";if(e.eatWhile(/[\w\$_]/)){a=e.current();return m[a]?(j[a]&&(f="newblock","fork"===a&&(e.eatSpace(),";"==e.peek()&&(f="newstatement"),e.backUp(e.current().length-a.length))),$[a]&&(f="newstatement"),u=a,"keyword"):"variable"}return e.next(),null}function A(e,t){for(var n,i=!1;n=e.next();){if("/"==n&&i){t.tokenize=q;break}i="*"==n}return"comment"}function B(e,t,n,i,r,a){this.indented=e,this.column=t,this.type=n,this.scopekind=i,this.align=r,this.prev=a}function W(e,t,n,i){var r=new B(e.indented,t,n,i||"",null,e.context);return e.context=r}function U(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}function D(e,t){if(e==t)return!0;var n=t.split(";");for(var i in n)if(e==n[i])return!0;return!1}function L(e,t){return null!=e&&(e.scopekind===t||L(e.prev,t))}return{electricInput:function(){var e=[];for(var t in j)if(j[t]){var n=j[t].split(";");for(var i in n)e.push(n[i])}return new RegExp("[{}()\\[\\]]|("+e.join("|")+")$")}(),startState:function(e){var t={tokenize:null,context:new B((e||0)-i,0,"top","top",!1),indented:0,compilerDirectiveIndented:0,startOfLine:!0};return c.startState&&c.startState(t),t},token:function(e,t){var n,i=t.context;if((e.sol()&&(null==i.align&&(i.align=!1),t.indented=e.indentation(),t.startOfLine=!0),c.token)&&void 0!==(n=c.token(e,t)))return n;if(e.eatSpace())return null;if(f=null,u=null,"comment"==(n=(t.tokenize||q)(e,t))||"meta"==n||"variable"==n)return"="!==f&&"<="!==f||L(i,"assignment")||(W(t,e.column()+f.length,"assignment","assignment"),null==i.align&&(i.align=!0)),n;null==i.align&&(i.align=!0);var a="assignment"==i.type&&x.test(f)&&i.prev&&i.prev.type===f;if(f==i.type||a){if(a&&(i=U(t)),i=U(t),")"==f){if(i&&"macro"===i.type)for(i=U(t);i&&("statement"==i.type||"assignment"==i.type);)i=U(t)}else if("}"==f&&i&&"statement"===i.type)for(;i&&"statement"==i.type;)i=U(t)}else if((";"==f||","==f)&&("statement"==i.type||"assignment"==i.type)||i.type&&D(u,i.type))for(i=U(t);i&&("statement"==i.type||"assignment"==i.type);)i=U(t);else if("{"==f)W(t,e.column(),"}");else if("["==f)W(t,e.column(),"]");else if("("==f)W(t,e.column(),")");else if(i&&"endcase"==i.type&&":"==f)W(t,e.column(),"statement","case");else if("newstatement"==f)W(t,e.column(),"statement",u);else if("newblock"==f)if("function"!=u||!i||"statement"!=i.type&&"endgroup"!=i.type)if("task"==u&&i&&"statement"==i.type);else if("class"==u&&i&&"statement"==i.type);else{var o=j[u];W(t,e.column(),o,u)}else;else("newmacro"==f||u&&u.match(I))&&("newmacro"==f&&W(t,e.column(),"macro","macro"),u.match(C)&&(t.compilerDirectiveIndented-=r),u.match(z)&&(t.compilerDirectiveIndented+=r));return t.startOfLine=!1,n},indent:function(t,n){if(t.tokenize!=q&&null!=t.tokenize)return e.Pass;if(c.indent){var l=c.indent(t);if(l>=0)return l}var s=t.context,d=n&&n.charAt(0);"statement"==s.type&&"}"==d&&(s=s.prev);var f=!1,u=n.match(_);return u&&(f=D(u[0],s.type)),!o&&n.match(I)?n.match(C)?t.compilerDirectiveIndented-r:t.compilerDirectiveIndented:"statement"==s.type?s.indented+("{"==d?0:r):!x.test(s.type)&&"assignment"!=s.type||!s.align||a?")"!=s.type||f?s.indented+(f?0:i):s.indented+r:s.column+(f?0:1)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"indent"}})),e.defineMIME("text/x-verilog",{name:"verilog"}),e.defineMIME("text/x-systemverilog",{name:"verilog"});var t={"|":"link",">":"property",$:"variable",$$:"variable","?$":"qualifier","?*":"qualifier","-":"hr","/":"property","/-":"property","@":"variable-3","@-":"variable-3","@++":"variable-3","@+=":"variable-3","@+=-":"variable-3","@--":"variable-3","@-=":"variable-3","%+":"tag","%-":"tag","%":"tag",">>":"tag","<<":"tag","<>":"tag","#":"tag","^":"attribute","^^":"attribute","^!":"attribute","*":"variable-2","**":"variable-2","\\":"keyword",'"':"comment"},n={"/":"beh-hier",">":"beh-hier","-":"phys-hier","|":"pipe","?":"when","@":"stage","\\":"keyword"},i=/^([~!@#\$%\^&\*-\+=\?\/\\\|'"<>]+)([\d\w_]*)/,r=/^[! ] /,a=/^[! ] */,o=/^\/[\/\*]/;function l(e,t,n){var i=t/3;return"tlv-"+e.tlvIndentationStyle[i]+"-"+n}e.defineMIME("text/x-tlv",{name:"verilog",hooks:{electricInput:!1,token:function(e,s){var c=void 0;if(e.sol()&&!s.tlvInBlockComment){"\\"==e.peek()&&(c="def",e.skipToEnd(),e.string.match(/\\SV/)?s.tlvCodeActive=!1:e.string.match(/\\TLV/)&&(s.tlvCodeActive=!0)),s.tlvCodeActive&&0==e.pos&&0==s.indented&&(g=e.match(a,!1))&&(s.indented=g[0].length);var d=s.indented,f=d/3;if(f<=s.tlvIndentationStyle.length){var u=e.string.length==d,m=3*f;if(m0||(s.tlvIndentationStyle[f]=n[v],f++))}if(!u)for(;s.tlvIndentationStyle.length>f;)s.tlvIndentationStyle.pop()}s.tlvNextIndent=d}if(s.tlvCodeActive){var g,h=!1;if(void 0!==c)c+=" "+l(s,0,"scope-ident");else if(e.pos/30}(e)&&(c+=" "+l(s,e.pos,"before-scope-ident"));else if(s.tlvInBlockComment)e.match(/^.*?\*\//)?s.tlvInBlockComment=!1:e.skipToEnd(),c="comment";else if((g=e.match(o))&&!s.tlvInBlockComment)"//"==g[0]?e.skipToEnd():s.tlvInBlockComment=!0,c="comment";else if(g=e.match(i)){var y=g[1],k=g[2];t.hasOwnProperty(y)&&(k.length>0||e.eol())?(c=t[y],e.column()==s.indented&&(c+=" "+l(s,e.column(),"scope-ident"))):(e.backUp(e.current().length-1),c="tlv-default")}else e.match(/^\t+/)?c="tlv-tab":e.match(/^[\[\]{}\(\);\:]+/)?c="meta":(g=e.match(/^[mM]4([\+_])?[\w\d_]*/))?c="+"==g[1]?"tlv-m4-plus":"tlv-m4":e.match(/^ +/)?c=e.eol()?"error":"tlv-default":e.match(/^[\w\d_]+/)?c="number":(e.next(),c="tlv-default");h&&(c+=" tlv-statement")}else e.match(/^[mM]4([\w\d_]*)/)&&(c="tlv-m4");return c},indent:function(e){return 1==e.tlvCodeActive?e.tlvNextIndent:-1},startState:function(e){e.tlvIndentationStyle=[],e.tlvCodeActive=!0,e.tlvNextIndent=-1,e.tlvInBlockComment=!1}}})}));