# Vim Language file for GNU source-highlighter

vardef TODO = "TODO|FIXME|XXX"

# If a double-quote is first non-whitespace char on a line, treat as a
# comment.  This allows double-quotes to appear in the comment.
environment comment start '^[[:blank:]]*\"' begin
    todo = $TODO
end

# Keywords 'endif' and 'else' are special, a '"' after them is always
# a comment. This really shows how moronic it is to use '"' for comments.
state keyword start "endif|else" begin
    todo = $TODO
    comment = '\s*\".*'
end

# Need to match strings before comments so that we consume paired dbl-quotes.
# We only match the opening quote if it is followed by a closing quote but we
# don't include the matched text following the opening delimiter.
environment string delim '\"(?=.*\")' "\"" begin
    specialchar = '\\.'
end

# Match any trailing double-quotes.  This relies on us having consumed all
# matching double-quotes that form strings.  Don't consume text following the
# final double-quote so that we can format it.
environment comment start '\"(?=[^"]*$)' begin
    todo = $TODO
end

# Handle the 'augroup END' special case
(keyword,normal,specialchar) = `(augroup|aug)([[:blank:]]+)(END)`

(keyword,normal,preproc) = `(:?syntax)([[:blank:]]+)(on|off|enable)`
(keyword,normal,variable) = `(:?set)([[:blank:]]+)([[:alpha:]][^\s+=$]+)`

symbol = '(?<=\s)is|is#|is\?|isnot|isnot#|isnot\?'

predef_var = '[abglst]:\w+'
predef_var = 'v:\w+'

keyword = "DiffOrig",
  "Man",
  "N",
  "N|Ne|Nex|Next",
  "P",
  "P|Pr|Pri|Prin|Print",
  "Ren",
  "TOhtml",
  "XMLent",
  "XMLns",
  "a",
  "ab|abb|abbr|abbre|abbrev|abbrevi|abbrevia|abbreviat|abbreviate",
  "abc|abcl|abcle|abclea|abclear",
  "abo|abov|above|abovel|abovele|abovelef|aboveleft",
  "al|all",
  "ar|arg|args",
  "arga|argad|argadd",
  "argd|argde|argdel|argdele|argdelet|argdelete",
  "argdo",
  "arge|arged|argedi|argedit",
  "argg|arggl|argglo|argglob|arggloba|argglobal",
  "argl|arglo|argloc|argloca|arglocal",
  "argu|argum|argume|argumen|argument",
  "as|asc|asci|ascii",
  "au|aut|auto|autoc|autocm|autocmd",
  "b|bu|buf|buff|buffe|buffer",
  "bN|bNe|bNex|bNext",
  "ba|bal|ball",
  "bad|badd",
  "bar",
  "bd|bde|bdel|bdele|bdelet|bdelete",
  "bel|belo|below|belowr|belowri|belowrig|belowrigh|belowright",
  "bf|bfi|bfir|bfirs|bfirst",
  "bl|bla|blas|blast",
  "bm|bmo|bmod|bmodi|bmodif|bmodifi|bmodifie|bmodified",
  "bn|bne|bnex|bnext",
  "bn|bne|bnex|bnext",
  "bo|bot|botr|botri|botrig|botrigh|botright",
  "bp|bpr|bpre|bprev|bprevi|bprevio|bpreviou|bprevious",
  "br|bre|brew|brewi|brewin|brewind",
  "brea|break",
  "breaka|breakad|breakadd",
  "breakd|breakde|breakdel",
  "breakl|breakli|breaklis|breaklist",
  "bro|brow|brows|browse",
  "browseset",
  "bufdo",
  "buffers",
  "bun|bunl|bunlo|bunloa|bunload",
  "bw|bwi|bwip|bwipe|bwipeo|bwipeou|bwipeout",
  "c|ch|cha|chan|chang|change",
  "cN|cNe|cNex|cNext",
  "cNf|cNfi|cNfil|cNfile",
  "cabc|cabcl|cabcle|cabclea|cabclear",
  "cad|cadd|cadde|caddex|caddexp|caddexpr",
  "caddb|caddbu|caddbuf|caddbuff|caddbuffe|caddbuffer",
  "caddf|caddfi|caddfil|caddfile",
  "cal|call",
  "cat|catc|catch",
  "cb|cbu|cbuf|cbuff|cbuffe|cbuffer",
  "cc",
  "ccl|cclo|cclos|cclose",
  "cd",
  "ce|cen|cent|cente|center",
  "cex|cexp|cexpr",
  "cf|cfi|cfil|cfile",
  "cfir|cfirs|cfirst",
  "cg|cge|cget|cgetf|cgetfi|cgetfil|cgetfile",
  "cgetb|cgetbu|cgetbuf|cgetbuff|cgetbuffe|cgetbuffer",
  "cgete|cgetex|cgetexp|cgetexpr",
  "changes",
  "chd|chdi|chdir",
  "che|chec|check|checkp|checkpa|checkpat|checkpath",
  "checkt|checkti|checktim|checktime",
  "cl|cli|clis|clist",
  "cla|clas|clast",
  "clo|clos|close",
  "cmapc|cmapcl|cmapcle|cmapclea|cmapclear",
  "cmdname",
  "cn|cne|cnex|cnext",
  "cn|cne|cnex|cnext",
  "cnew|cnewe|cnewer",
  "cnf|cnfi|cnfil|cnfile",
  "cnf|cnfi|cnfil|cnfile",
  "co|cop|copy",
  "col|cold|colde|colder",
  "colo|color|colors|colorsc|colorsch|colorsche|colorschem|colorscheme",
  "com|comm|comma|comman|command",
  "comc|comcl|comcle|comclea|comclear",
  "comment",
  "comp|compi|compil|compile|compiler",
  "con|cont|conti|contin|continu|continue",
  "conf|confi|confir|confirm",
  "cope|copen",
  "count",
  "cp|cpr|cpre|cprev|cprevi|cprevio|cpreviou|cprevious",
  "cpf|cpfi|cpfil|cpfile",
  "cq|cqu|cqui|cquit",
  "cr|cre|crew|crewi|crewin|crewind",
  "cs|csc|csco|cscop|cscope",
  "cstag",
  "cuna|cunab|cunabb|cunabbr|cunabbre|cunabbrev",
  "cw|cwi|cwin|cwind|cwindo|cwindow",
  "d|de|del|dele|delet|delete",
  "debug",
  "debugg|debuggr|debuggre|debuggree|debuggreed|debuggreedy",
  "delc|delco|delcom|delcomm|delcomma|delcomman|delcommand",
  "delf|delfu|delfun|delfunc|delfunct|delfuncti|delfunctio|delfunction",
  "delm|delma|delmar|delmark|delmarks",
  "di|dis|disp|displ|displa|display",
  "diffg|diffge|diffget",
  "diffo|diffof|diffoff",
  "diffp|diffpa|diffpat|diffpatc|diffpatch",
  "diffpu|diffput",
  "diffs|diffsp|diffspl|diffspli|diffsplit",
  "difft|diffth|diffthi|diffthis",
  "diffu|diffup|diffupd|diffupda|diffupdat|diffupdate",
  "dig|digr|digra|digrap|digraph|digraphs",
  "dj|dju|djum|djump",
  "dl|dli|dlis|dlist",
  "do|doa|doau|doaut|doauto|doautoc|doautocm|doautocmd",
  "dr|dro|drop",
  "ds|dse|dsea|dsear|dsearc|dsearch",
  "dsp|dspl|dspli|dsplit",
  "e|ed|edi|edit",
  "ea|ear|earl|earli|earlie|earlier",
  "ec|ech|echo",
  "echoe|echoer|echoerr",
  "echoh|echohl",
  "echom|echoms|echomsg",
  "echon",
  "el|els|else",
  "elsei|elseif",
  "em|eme|emen|emenu",
  "en|end|endi|endif",
  "endf|endfu|endfun|endfunc|endfunct|endfuncti|endfunctio|endfunction",
  "endfo|endfor",
  "endt|endtr|endtry",
  "endw|endwh|endwhi|endwhil|endwhile",
  "ene|enew",
  "ex|exi|exit",
  "exu|exus|exusa|exusag|exusage",
  "f|fi|fil|file",
  "file|filen|filena|filenam|filename",
  "files",
  "filet|filety|filetyp|filetype",
  "fin|find",
  "fina|final|finall|finally",
  "fini|finis|finish",
  "fir|firs|first",
  "fix|fixd|fixde|fixdel",
  "fo|fol|fold",
  "foldc|foldcl|foldclo|foldclos|foldclose",
  "foldd|folddo|folddoo|folddoop|folddoope|folddoopen",
  "folddoc|folddocl|folddoclo|folddoclos|folddoclose|folddoclosed",
  "foldo|foldop|foldope|foldopen",
  "for",
  "fu|fun|func|funct|functi|functio|function",
  "g|gl|glo|glob|globa|global",
  "go|got|goto",
  "gr|gre|grep",
  "grepa|grepad|grepadd",
  "gui",
  "gvim",
  "h|he|hel|help",
  "ha|har|hard|hardc|hardco|hardcop|hardcopy",
  "helpf|helpfi|helpfin|helpfind",
  "helpg|helpgr|helpgre|helpgrep",
  "helpt|helpta|helptag|helptags",
  "hi|hid|hide",
  "his|hist|histo|histor|history",
  "i|in|ins|inse|inser|insert",
  "ia|iab|iabb|iabbr|iabbre|iabbrev",
  "iabc|iabcl|iabcle|iabclea|iabclear",
  "if",
  "ij|iju|ijum|ijump",
  "il|ili|ilis|ilist",
  "imapc|imapcl|imapcle|imapclea|imapclear",
  "intro",
  "is|ise|isea|isear|isearc|isearch",
  "isp|ispl|ispli|isplit",
  "iuna|iunab|iunabb|iunabbr|iunabbre|iunabbrev",
  "j|jo|joi|join",
  "ju|jum|jump|jumps",
  "k",
  "kee|keep|keepm|keepma|keepmar|keepmark|keepmarks",
  "keepa|keepal|keepalt",
  "keepj|keepju|keepjum|keepjump|keepjumps",
  "l|li|lis|list",
  "lN",
  "lN|lNe|lNex|lNext",
  "lNf",
  "lNf|lNfi|lNfil|lNfile",
  "la",
  "la|las|last",
  "lad|ladd|ladde|laddex|laddexp|laddexpr",
  "laddb|laddbu|laddbuf|laddbuff|laddbuffe|laddbuffer",
  "laddf|laddfi|laddfil|laddfile",
  "lan|lang|langu|langua|languag|language",
  "lat|late|later",
  "lb|lbu|lbuf|lbuff|lbuffe|lbuffer",
  "lc|lcd",
  "lch|lchd|lchdi|lchdir",
  "lcl|lclo|lclos|lclose",
  "lcs|lcsc|lcsco|lcscop|lcscope",
  "le|lef|left",
  "lefta|leftab|leftabo|leftabov|leftabove",
  "let",
  "lex|lexp|lexpr",
  "lf|lfi|lfil|lfile",
  "lfir|lfirs|lfirst",
  "lg|lge|lget|lgetf|lgetfi|lgetfil|lgetfile",
  "lgetb|lgetbu|lgetbuf|lgetbuff|lgetbuffe|lgetbuffer",
  "lgete|lgetex|lgetexp|lgetexpr",
  "lgr|lgre|lgrep",
  "lgrepa|lgrepad|lgrepadd",
  "lh|lhe|lhel|lhelp|lhelpg|lhelpgr|lhelpgre|lhelpgrep",
  "ll",
  "lla|llas|llast",
  "lli|llis|llist",
  "lmak|lmake",
  "lmapc|lmapcl|lmapcle|lmapclea|lmapclear",
  "lne|lnex|lnext",
  "lnew|lnewe|lnewer",
  "lnf|lnfi|lnfil|lnfile",
  "lo|loa|load|loadv|loadvi|loadvie|loadview",
  "loadk",
  "loadkeymap",
  "loc|lock|lockm|lockma|lockmar|lockmark|lockmarks",
  "locale",
  "lockv|lockva|lockvar",
  "lol|lold|lolde|lolder",
  "lop|lope|lopen",
  "lp|lpr|lpre|lprev|lprevi|lprevio|lpreviou|lprevious",
  "lpf|lpfi|lpfil|lpfile",
  "lr|lre|lrew|lrewi|lrewin|lrewind",
  "ls",
  "lt|lta|ltag",
  "lua",
  "luado",
  "luafile",
  "lv|lvi|lvim|lvimg|lvimgr|lvimgre|lvimgrep",
  "lvimgrepa|lvimgrepad|lvimgrepadd",
  "lw|lwi|lwin|lwind|lwindo|lwindow",
  "m|mo|mov|move",
  "ma",
  "ma|mar|mark",
  "mak|make",
  "marks",
  "mat|matc|match",
  "menut|menutr|menutra|menutran|menutrans|menutransl|menutransla|menutranslat|menutranslate",
  "mes|mess|messa|messag|message|messages",
  "mk|mke|mkex|mkexr|mkexrc",
  "mkdir",
  "mks|mkse|mkses|mksess|mksessi|mksessio|mksession",
  "mksp|mkspe|mkspel|mkspell",
  "mkv|mkvi|mkvim|mkvimr|mkvimrc",
  "mkvie|mkview",
  "mo|mov|move",
  "mod|mode",
  "mz|mzs|mzsc|mzsch|mzsche|mzschem|mzscheme",
  "mzf|mzfi|mzfil|mzfile",
  "n|ne|nex|next",
  "nb|nbk|nbke|nbkey",
  "nbc|nbcl|nbclo|nbclos|nbclose",
  "nbs|nbst|nbsta|nbstar|nbstart",
  "ne|nex|next",
  "new",
  "nkf",
  "nmapc|nmapcl|nmapcle|nmapclea|nmapclear",
  "noa|noau|noaut|noauto|noautoc|noautocm|noautocmd",
  "noh|nohl|nohls|nohlse|nohlsea|nohlsear|nohlsearc|nohlsearch",
  "nu|num|numb|numbe|number",
  "o|op|ope|open",
  "ol|old|oldf|oldfi|oldfil|oldfile|oldfiles",
  "omapc|omapcl|omapcle|omapclea|omapclear",
  "on|onl|only",
  "opt|opti|optio|option|options",
  "ownsyntax",
  "p|pr|pri|prin|print",
  "pc|pcl|pclo|pclos|pclose",
  "pe|per|perl",
  "ped|pedi|pedit",
  "perld|perldo",
  "po|pop",
  "popu",
  "popu|popup",
  "pp|ppo|ppop",
  "pre|pres|prese|preser|preserv|preserve",
  "prev|previ|previo|previou|previous",
  "pro|promptf|promptfi|promptfin|promptfind",
  "prof|profi|profil|profile",
  "profd|profde|profdel",
  "promptr|promptre|promptrep|promptrepl",
  "ps|pse|psea|psear|psearc|psearch",
  "ptN|ptNe|ptNex|ptNext",
  "pta|ptag",
  "ptf|ptfi|ptfir|ptfirs|ptfirst",
  "ptj|ptju|ptjum|ptjump",
  "ptl|ptla|ptlas|ptlast",
  "ptn|ptne|ptnex|ptnext",
  "ptp|ptpr|ptpre|ptprev|ptprevi|ptprevio|ptpreviou|ptprevious",
  "ptr|ptre|ptrew|ptrewi|ptrewin|ptrewind",
  "pts|ptse|ptsel|ptsele|ptselec|ptselect",
  "pu|put",
  "pw|pwd",
  "py|pyt|pyth|pytho|python",
  "py3",
  "py3f|py3fi|py3fil|py3file",
  "pyf|pyfi|pyfil|pyfile",
  "python3",
  "q|qu|qui|quit",
  "qa|qal|qall",
  "quita|quital|quitall",
  "quote",
  "r|re|rea|read",
  "rec|reco|recov|recove|recover",
  "red|redo",
  "redi|redir",
  "redr|redra|redraw",
  "redraws|redrawst|redrawsta|redrawstat|redrawstatu|redrawstatus",
  "reg|regi|regis|regist|registe|register|registers",
  "res|resi|resiz|resize",
  "ret|reta|retab",
  "retu|retur|return",
  "rew|rewi|rewin|rewind",
  "ri|rig|righ|right",
  "rightb|rightbe|rightbel|rightbelo|rightbelow",
  "ru|run|runt|runti|runtim|runtime",
  "rub|ruby",
  "rubyd|rubydo",
  "rubyf|rubyfi|rubyfil|rubyfile",
  "rundo",
  "rv|rvi|rvim|rvimi|rvimin|rviminf|rviminfo",
  "sN|sNe|sNex|sNext",
  "sa|sar|sarg|sargu|sargum|sargume|sargumen|sargument",
  "sal|sall",
  "san|sand|sandb|sandbo|sandbox",
  "sav|save|savea|saveas",
  "sb|sbu|sbuf|sbuff|sbuffe|sbuffer",
  "sbN|sbNe|sbNex|sbNext",
  "sba|sbal|sball",
  "sbf|sbfi|sbfir|sbfirs|sbfirst",
  "sbl|sbla|sblas|sblast",
  "sbm|sbmo|sbmod|sbmodi|sbmodif|sbmodifi|sbmodifie|sbmodified",
  "sbn|sbne|sbnex|sbnext",
  "sbp|sbpr|sbpre|sbprev|sbprevi|sbprevio|sbpreviou|sbprevious",
  "sbr|sbre|sbrew|sbrewi|sbrewin|sbrewind",
  "scrip|script|scriptn|scriptna|scriptnam|scriptname|scriptnames",
  "scripte|scripten|scriptenc|scriptenco|scriptencod|scriptencodi|scriptencodin|scriptencoding",
  "scs|scsc|scsco|scscop|scscope",
  "se|set",
  "setf|setfi|setfil|setfile|setfilet|setfilety|setfiletyp|setfiletype",
  "setg|setgl|setglo|setglob|setgloba|setglobal",
  "setl|setlo|setloc|setloca|setlocal",
  "sf|sfi|sfin|sfind",
  "sfir|sfirs|sfirst",
  "sh|she|shel|shell",
  "sig|sign",
  "sil|sile|silen|silent",
  "sim|sima|simal|simalt",
  "sl|sle|slee|sleep",
  "sla|slas|slast",
  "sm|sma|smag|smagi|smagic",
  "smap",
  "sme",
  "smenu",
  "sn|sne|snex|snext",
  "sni|snif|sniff",
  "sno|snom|snoma|snomag|snomagi|snomagic",
  "snoreme||snoremen|snoremenu",
  "so|sou|sour|sourc|source",
  "sor|sort",
  "sp|spl|spli|split",
  "spe|spel|spell|spellg|spellgo|spellgoo|spellgood",
  "spelld|spelldu|spelldum|spelldump",
  "spelli|spellin|spellinf|spellinfo",
  "spellr|spellre|spellrep|spellrepa|spellrepal|spellrepall",
  "spellu|spellun|spellund|spellundo",
  "spellw|spellwr|spellwro|spellwron|spellwrong",
  "spr|spre|sprev|sprevi|sprevio|spreviou|sprevious",
  "sre|srew|srewi|srewin|srewind",
  "st|sto|stop",
  "sta|stag",
  "star|start|starti|startin|startins|startinse|startinser|startinsert",
  "startg|startgr|startgre|startgrep|startgrepl|startgrepla|startgreplac|startgreplace",
  "startr|startre|startrep|startrepl|startrepla|startreplac|startreplace",
  "stj|stju|stjum|stjump",
  "stopi|stopin|stopins|stopinse|stopinser|stopinsert",
  "sts|stse|stsel|stsele|stselec|stselect",
  "sun|sunh|sunhi|sunhid|sunhide",
  "sunme|sunmen|sunmenu",
  "sus|susp|suspe|suspen|suspend",
  "sv|svi|svie|sview",
  "sw|swa|swap|swapn|swapna|swapnam|swapname",
  "sy|syn|synt|synta|syntax",
  "sync|syncb|syncbi|syncbin|syncbind",
  "t",
  "tN",
  "tN|tNe|tNex|tNext",
  "ta|tag",
  "tab",
  "tabN",
  "tabN|tabNe|tabNex|tabNext",
  "tabc|tabcl|tabclo|tabclos|tabclose",
  "tabd|tabdo",
  "tabe|tabed|tabedi|tabedit",
  "tabf|tabfi|tabfin|tabfind",
  "tabfir|tabfirs|tabfirst",
  "tabl|tabla|tablas|tablast",
  "tabm|tabmo|tabmov|tabmove",
  "tabn|tabne|tabnex|tabnext",
  "tabnew",
  "tabo|tabon|tabonl|tabonly",
  "tabp|tabpr|tabpre|tabprev|tabprevi|tabprevio|tabpreviou|tabprevious",
  "tabr|tabre|tabrew|tabrewi|tabrewin|tabrewind",
  "tabs",
  "tags",
  "tc|tcl",
  "tcld|tcldo",
  "tclf|tclfi|tclfil|tclfile",
  "te|tea|tear|tearo|tearof|tearoff",
  "tf|tfi|tfir|tfirs|tfirst",
  "th|thr|thro|throw",
  "tj|tju|tjum|tjump",
  "tl|tla|tlas|tlast",
  "tm|tme|tmen|tmenu",
  "tn|tne|tnex|tnext",
  "to|top|topl|tople|toplef|topleft",
  "tp|tpr|tpre|tprev|tprevi|tprevio|tpreviou|tprevious",
  "tr|tre|trew|trewi|trewin|trewind",
  "try",
  "ts|tse|tsel|tsele|tselec|tselect",
  "tu|tun|tunm|tunme|tunmen|tunmenu",
  "u|un|und|undo",
  "una|unab|unabb|unabbr|unabbre|unabbrev|unabbrevi|unabbrevia|unabbreviat|unabbreviate",
  "undoj|undojo|undojoi|undojoin",
  "undol|undoli|undolis|undolist",
  "unh|unhi|unhid|unhide",
  "unl|unle|unlet",
  "unlo|unloc|unlock|unlockv|unlockva|unlockvar",
  "uns|unsi|unsil|unsile|unsilen|unsilent",
  "up|upd|upda|updat|update",
  "v|vg|vgl|vglo|vglob|vgloba|vglobal",
  "ve|ver|vers|versi|versio|version",
  "verb|verbo|verbos|verbose",
  "vert|verti|vertic|vertica|vertical",
  "vi|vis|visu|visua|visual",
  "vie|view",
  "vim|vimg|vimgr|vimgre|vimgrep",
  "vimgrepa|vimgrepad|vimgrepadd",
  "viu|vius|viusa|viusag|viusage",
  "vmapc|vmapcl|vmapcle|vmapclea|vmapclear",
  "vne|vnew",
  "vs|vsp|vspl|vspli|vsplit",
  "w|wr|wri|writ|write",
  "wN|wNe|wNex|wNext",
  "wa|wal|wall",
  "wh|whi|whil|while",
  "win|wins|winsi|winsiz|winsize",
  "winc|wincm|wincmd",
  "windo",
  "winp|winpo|winpos",
  "wn|wne|wnex|wnext",
  "wp|wpr|wpre|wprev|wprevi|wprevio|wpreviou|wprevious",
  "wq",
  "wqa|wqal|wqall",
  "ws|wsv|wsve|wsver|wsverb",
  "wundo",
  "wv|wvi|wvim|wvimi|wvimin|wviminf|wviminfo",
  "x|xi|xit",
  "xa|xal|xall",
  "xmapc|xmapcl|xmapcle|xmapclea|xmapclear",
  "xme|xmen|xmenu",
  "xnoreme|xnoremen|xnoremenu",
  "xunme|xunmen|xunmenu",
  "xwininfo",
  "y|ya|yan|yank"

# Vim options
type = "t_#2|t_#4|t_%1|t_%i|t_&8",
  "t_*7|t_@7|t_k;|acd|ai",
  "akm|al|aleph|allowrevins|altkeymap",
  "ambiwidth|ambw|anti|antialias|ar",
  "arab|arabic|arabicshape|ari|arshape",
  "autochdir|autoindent|autoread|autowrite|autowriteall",
  "aw|awa|background|backspace|backup",
  "backupcopy|backupdir|backupext|backupskip|balloondelay",
  "ballooneval|balloonexpr|bdir|bdlay|beval",
  "bex|bexpr|bg|bh|bin",
  "binary|biosk|bioskey|bk|bkc",
  "bl|bomb|breakat|brk|browsedir",
  "bs|bsdir|bsk|bt|bufhidden",
  "buflisted|buftype|casemap|cb|cc",
  "ccv|cd|cdpath|cedit|cf",
  "cfu|ch|charconvert|ci|cin",
  "cindent|cink|cinkeys|cino|cinoptions",
  "cinw|cinwords|clipboard|cmdheight|cmdwinheight",
  "cmp|cms|co|cocu|cole",
  "colorcolumn|columns|com|comments|commentstring",
  "compatible|complete|completefunc|completeopt|concealcursor",
  "conceallevel|confirm|consk|conskey|copyindent",
  "cot|cp|cpo|cpoptions|cpt",
  "crb|cryptmethod|cscopepathcomp|cscopeprg|cscopequickfix",
  "cscoperelative|cscopetag|cscopetagorder|cscopeverbose|cspc",
  "csprg|csqf|csre|cst|csto",
  "csverb|cuc|cul|cursorbind|cursorcolumn",
  "cursorline|cwh|debug|deco|def",
  "define|delcombine|dex|dg|dict",
  "dictionary|diff|diffexpr|diffopt|digraph",
  "dip|dir|directory|display|dy",
  "ea|ead|eadirection|eb|ed",
  "edcompatible|ef|efm|ei|ek",
  "enc|encoding|endofline|eol|ep",
  "equalalways|equalprg|errorbells|errorfile|errorformat",
  "esckeys|et|eventignore|ex|expandtab",
  "exrc|fcl|fcs|fdc|fde",
  "fdi|fdl|fdls|fdm|fdn",
  "fdo|fdt|fen|fenc|fencs",
  "fex|ff|ffs|fileencoding|fileencodings",
  "fileformat|fileformats|filetype|fillchars|fk",
  "fkmap|flp|fml|fmr|fo",
  "foldclose|foldcolumn|foldenable|foldexpr|foldignore",
  "foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines",
  "foldnestmax|foldopen|foldtext|formatexpr|formatlistpat",
  "formatoptions|formatprg|fp|fs|fsync",
  "ft|gcr|gd|gdefault|gfm",
  "gfn|gfs|gfw|ghr|go",
  "gp|grepformat|grepprg|gtl|gtt",
  "guicursor|guifont|guifontset|guifontwide|guiheadroom",
  "guioptions|guipty|guitablabel|guitabtooltip|helpfile",
  "helpheight|helplang|hf|hh|hi",
  "hid|hidden|highlight|history|hk",
  "hkmap|hkmapp|hkp|hl|hlg",
  "hls|hlsearch|ic|icon|iconstring",
  "ignorecase|im|imactivatekey|imak|imc",
  "imcmdline|imd|imdisable|imi|iminsert",
  "ims|imsearch|inc|include|includeexpr",
  "incsearch|inde|indentexpr|indentkeys|indk",
  "inex|inf|infercase|insertmode|invacd",
  "invai|invakm|invallowrevins|invaltkeymap|invanti",
  "invantialias|invar|invarab|invarabic|invarabicshape",
  "invari|invarshape|invautochdir|invautoindent|invautoread",
  "invautowrite|invautowriteall|invaw|invawa|invbackup",
  "invballooneval|invbeval|invbin|invbinary|invbiosk",
  "invbioskey|invbk|invbl|invbomb|invbuflisted",
  "invcf|invci|invcin|invcindent|invcompatible",
  "invconfirm|invconsk|invconskey|invcopyindent|invcp",
  "invcrb|invcscopetag|invcscopeverbose|invcst|invcsverb",
  "invcuc|invcul|invcursorbind|invcursorcolumn|invcursorline",
  "invdeco|invdelcombine|invdg|invdiff|invdigraph",
  "invea|inveb|inved|invedcompatible|invek",
  "invendofline|inveol|invequalalways|inverrorbells|invesckeys",
  "invet|invex|invexpandtab|invexrc|invfen",
  "invfk|invfkmap|invfoldenable|invgd|invgdefault",
  "invguipty|invhid|invhidden|invhk|invhkmap",
  "invhkmapp|invhkp|invhls|invhlsearch|invic",
  "invicon|invignorecase|invim|invimc|invimcmdline",
  "invimd|invimdisable|invincsearch|invinf|invinfercase",
  "invinsertmode|invis|invjoinspaces|invjs|invlazyredraw",
  "invlbr|invlinebreak|invlisp|invlist|invloadplugins",
  "invlpl|invlz|invma|invmacatsui|invmagic",
  "invmh|invml|invmod|invmodeline|invmodifiable",
  "invmodified|invmore|invmousef|invmousefocus|invmousehide",
  "invnu|invnumber|invodev|invopendevice|invpaste",
  "invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw",
  "invreadonly|invrelativenumber|invremap|invrestorescreen|invrevins",
  "invri|invrightleft|invrl|invrnu|invro",
  "invrs|invru|invruler|invsb|invsc",
  "invscb|invscrollbind|invscs|invsecure|invsft",
  "invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd",
  "invshowfulltag|invshowmatch|invshowmode|invsi|invsm",
  "invsmartcase|invsmartindent|invsmarttab|invsmd|invsn",
  "invsol|invspell|invsplitbelow|invsplitright|invspr",
  "invsr|invssl|invsta|invstartofline|invstmp",
  "invswapfile|invswf|invta|invtagbsearch|invtagrelative",
  "invtagstack|invtbi|invtbidi|invtbs|invtermbidi",
  "invterse|invtextauto|invtextmode|invtf|invtgst",
  "invtildeop|invtimeout|invtitle|invto|invtop",
  "invtr|invttimeout|invttybuiltin|invttyfast|invtx",
  "invvb|invvisualbell|invwa|invwarn|invwb",
  "invweirdinvert|invwfh|invwfw|invwildignorecase*|invwildmenu",
  "invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap",
  "invwrapscan|invwrite|invwriteany|invwritebackup|invws",
  "is|isf|isfname|isi|isident",
  "isk|iskeyword|isp|isprint|joinspaces",
  "js|key|keymap|keymodel|keywordprg",
  "km|kmp|kp|langmap|langmenu",
  "laststatus|lazyredraw|lbr|lcs|linebreak",
  "lines|linespace|lisp|lispwords|list",
  "listchars|lm|lmap|loadplugins|lpl",
  "ls|lsp|lw|lz|ma",
  "macatsui|magic|makeef|makeprg|mat",
  "matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth",
  "maxmem|maxmempattern|maxmemtot|mco|mef",
  "menuitems|mfd|mh|mis|mkspellmem",
  "ml|mls|mm|mmd|mmp",
  "mmt|mod|modeline|modelines|modifiable",
  "modified|more|mouse|mousef|mousefocus",
  "mousehide|mousem|mousemodel|mouses|mouseshape",
  "mouset|mousetime|mp|mps|msm",
  "mzq|mzquantum|nf|noacd|noai",
  "noakm|noallowrevins|noaltkeymap|noanti|noantialias",
  "noar|noarab|noarabic|noarabicshape|noari",
  "noarshape|noautochdir|noautoindent|noautoread|noautowrite",
  "noautowriteall|noaw|noawa|nobackup|noballooneval",
  "nobeval|nobin|nobinary|nobiosk|nobioskey",
  "nobk|nobl|nobomb|nobuflisted|nocf",
  "noci|nocin|nocindent|nocompatible|noconfirm",
  "noconsk|noconskey|nocopyindent|nocp|nocrb",
  "nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc",
  "nocul|nocursorbind|nocursorcolumn|nocursorline|nodeco",
  "nodelcombine|nodg|nodiff|nodigraph|noea",
  "noeb|noed|noedcompatible|noek|noendofline",
  "noeol|noequalalways|noerrorbells|noesckeys|noet",
  "noex|noexpandtab|noexrc|nofen|nofk",
  "nofkmap|nofoldenable|nogd|nogdefault|noguipty",
  "nohid|nohidden|nohk|nohkmap|nohkmapp",
  "nohkp|nohls|nohlsearch|noic|noicon",
  "noignorecase|noim|noimc|noimcmdline|noimd",
  "noimdisable|noincsearch|noinf|noinfercase|noinsertmode",
  "nois|nojoinspaces|nojs|nolazyredraw|nolbr",
  "nolinebreak|nolisp|nolist|noloadplugins|nolpl",
  "nolz|noma|nomacatsui|nomagic|nomh",
  "noml|nomod|nomodeline|nomodifiable|nomodified",
  "nomore|nomousef|nomousefocus|nomousehide|nonu",
  "nonumber|noodev|noopendevice|nopaste|nopi",
  "nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly",
  "norelativenumber|noremap|norestorescreen|norevins|nori",
  "norightleft|norl|nornu|noro|nors",
  "noru|noruler|nosb|nosc|noscb",
  "noscrollbind|noscs|nosecure|nosft|noshellslash",
  "noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag",
  "noshowmatch|noshowmode|nosi|nosm|nosmartcase",
  "nosmartindent|nosmarttab|nosmd|nosn|nosol",
  "nospell|nosplitbelow|nosplitright|nospr|nosr",
  "nossl|nosta|nostartofline|nostmp|noswapfile",
  "noswf|nota|notagbsearch|notagrelative|notagstack",
  "notbi|notbidi|notbs|notermbidi|noterse",
  "notextauto|notextmode|notf|notgst|notildeop",
  "notimeout|notitle|noto|notop|notr",
  "nottimeout|nottybuiltin|nottyfast|notx|novb",
  "novisualbell|nowa|nowarn|nowb|noweirdinvert",
  "nowfh|nowfw|nowildignorecase*|nowildmenu|nowinfixheight",
  "nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan",
  "nowrite|nowriteany|nowritebackup|nows|nrformats",
  "nu|number|numberwidth|nuw|odev",
  "oft|ofu|omnifunc|opendevice|operatorfunc",
  "opfunc|osfiletype|pa|para|paragraphs",
  "paste|pastetoggle|patchexpr|patchmode|path",
  "pdev|penc|pex|pexpr|pfn",
  "ph|pheader|pi|pm|pmbcs",
  "pmbfn|popt|preserveindent|previewheight|previewwindow",
  "printdevice|printencoding|printexpr|printfont|printheader",
  "printmbcharset|printmbfont|printoptions|prompt|pt",
  "pumheight|pvh|pvw|qe|quoteescape",
  "rdt|readonly|redrawtime|relativenumber|remap",
  "report|restorescreen|revins|ri|rightleft",
  "rightleftcmd|rl|rlc|rnu|ro",
  "rs|rtp|ru|ruf|ruler",
  "rulerformat|runtimepath|sb|sbo|sbr",
  "sc|scb|scr|scroll|scrollbind",
  "scrolljump|scrolloff|scrollopt|scs|sect",
  "sections|secure|sel|selection|selectmode",
  "sessionoptions|sft|sh|shcf|shell",
  "shellcmdflag|shellpipe|shellquote|shellredir|shellslash",
  "shelltemp|shelltype|shellxescape|shellxquote|shiftround",
  "shiftwidth|shm|shortmess|shortname|showbreak",
  "showcmd|showfulltag|showmatch|showmode|showtabline",
  "shq|si|sidescroll|sidescrolloff|siso",
  "sj|slm|sm|smartcase|smartindent",
  "smarttab|smc|smd|sn|so",
  "softtabstop|sol|sp|spc|spell",
  "spellcapcheck|spellfile|spelllang|spellsuggest|spf",
  "spl|splitbelow|splitright|spr|sps",
  "sr|srr|ss|ssl|ssop",
  "st|sta|stal|startofline|statusline",
  "stl|stmp|sts|su|sua",
  "suffixes|suffixesadd|sw|swapfile|swapsync",
  "swb|swf|switchbuf|sws|sxe",
  "sxq|syn|synmaxcol|syntax|t_AB",
  "t_AF|t_AL|t_CS|t_CV|t_Ce",
  "t_Co|t_Cs|t_DL|t_EI|t_F1",
  "t_F2|t_F3|t_F4|t_F5|t_F6",
  "t_F7|t_F8|t_F9|t_IE|t_IS",
  "t_K1|t_K3|t_K4|t_K5|t_K6",
  "t_K7|t_K8|t_K9|t_KA|t_KB",
  "t_KC|t_KD|t_KE|t_KF|t_KG",
  "t_KH|t_KI|t_KJ|t_KK|t_KL",
  "t_RI|t_RV|t_SI|t_Sb|t_Sf",
  "t_WP|t_WS|t_ZH|t_ZR|t_al",
  "t_bc|t_cd|t_ce|t_cl|t_cm",
  "t_cs|t_da|t_db|t_dl|t_fs",
  "t_k1|t_k2|t_k3|t_k4|t_k5",
  "t_k6|t_k7|t_k8|t_k9|t_kB",
  "t_kD|t_kI|t_kN|t_kP|t_kb",
  "t_kd|t_ke|t_kh|t_kl|t_kr",
  "t_ks|t_ku|t_le|t_mb|t_md",
  "t_me|t_mr|t_ms|t_nd|t_op",
  "t_se|t_so|t_sr|t_te|t_ti",
  "t_ts|t_ue|t_us|t_ut|t_vb",
  "t_ve|t_vi|t_vs|t_xs|ta",
  "tabline|tabpagemax|tabstop|tag|tagbsearch",
  "taglength|tagrelative|tags|tagstack|tal",
  "tb|tbi|tbidi|tbis|tbs",
  "tenc|term|termbidi|termencoding|terse",
  "textauto|textmode|textwidth|tf|tgst",
  "thesaurus|tildeop|timeout|timeoutlen|title",
  "titlelen|titleold|titlestring|tl|tm",
  "to|toolbar|toolbariconsize|top|tpm",
  "tr|ts|tsl|tsr|ttimeout",
  "ttimeoutlen|ttm|tty|ttybuiltin|ttyfast",
  "ttym|ttymouse|ttyscroll|ttytype|tw",
  "tx|uc|udf|udir|ul",
  "undodir|undofile|undolevels|undoreload|updatecount",
  "updatetime|ur|ut|vb|vbs",
  "vdir|ve|verbose|verbosefile|vfile",
  "vi|viewdir|viewoptions|viminfo|virtualedit",
  "visualbell|vop|wa|wak|warn",
  "wb|wc|wcm|wd|weirdinvert",
  "wfh|wfw|wh|whichwrap|wi",
  "wic|wig|wildchar|wildcharm|wildignore",
  "wildignorecase|wildmenu|wildmode|wildoptions|wim",
  "winaltkeys|window|winfixheight|winfixwidth|winheight",
  "winminheight|winminwidth|winwidth|wiv|wiw",
  "wm|wmh|wmnu|wmw|wop",
  "wrap|wrapmargin|wrapscan|write|writeany",
  "writebackup|writedelay|ws|ww"

# Vim Events
classname = "BufAdd|BufCreate|BufDelete|BufEnter|BufFilePost",
  "BufFilePre|BufHidden|BufLeave|BufNew|BufNewFile",
  "BufRead|BufReadCmd|BufReadPost|BufReadPre|BufUnload",
  "BufWinEnter|BufWinLeave|BufWipeout|BufWrite|BufWriteCmd",
  "BufWritePost|BufWritePre|Cmd-event|CmdwinEnter|CmdwinLeave",
  "ColorScheme|CursorHold|CursorHoldI|CursorMoved|CursorMovedI",
  "EncodingChanged|FileAppendCmd|FileAppendPost|FileAppendPre|FileChangedRO",
  "FileChangedShell|FileChangedShellPost|FileEncoding|FileReadCmd|FileReadPost",
  "FileReadPre|FileType|FileWriteCmd|FileWritePost|FileWritePre",
  "FilterReadPost|FilterReadPre|FilterWritePost|FilterWritePre|FocusGained",
  "FocusLost|FuncUndefined|GUIEnter|GUIFailed|InsertChange",
  "InsertCharPre|InsertEnter|InsertLeave|MenuPopup|QuickFixCmdPost",
  "QuickFixCmdPre|RemoteReply|SessionLoadPost|ShellCmdPost|ShellFilterPost",
  "SourceCmd|SourcePre|SpellFileMissing|StdinReadPost|StdinReadPre",
  "SwapExists|Syntax|TabEnter|TabLeave|TermChanged",
  "TermResponse|User|UserGettingBored|VimEnter|VimLeave",
  "VimLeavePre|VimResized|WinEnter"

predef_func = "abs|acos|add|and|append",
  "argc|argidx|argv|asin|atan",
  "atan2|browse|browsedir|bufexists|buflisted",
  "bufloaded|bufname|bufnr|bufwinnr|byte2line",
  "byteidx|call|ceil|changenr|char2nr",
  "cindent|clearmatches|col|complete|complete_add",
  "complete_check|confirm|copy|cos|cosh",
  "count|cscope_connection|cursor|deepcopy|delete",
  "did_filetype|diff_filler|diff_hlID|empty|escape",
  "eval|eventhandler|executable|exists|exp",
  "expand|extend|feedkeys|filereadable|filewritable",
  "filter|finddir|findfile|float2nr|floor",
  "fmod|fnameescape|fnamemodify|foldclosed|foldclosedend",
  "foldlevel|foldtext|foldtextresult|foreground|function",
  "garbagecollect|get|getbufline|getbufvar|getchar",
  "getcharmod|getcmdline|getcmdpos|getcmdtype|getcwd",
  "getfontname|getfperm|getfsize|getftime|getftype",
  "getline|getloclist|getmatches|getpid|getpos",
  "getqflist|getreg|getregtype|gettabvar|gettabwinvar",
  "getwinposx|getwinposy|getwinvar|glob|globpath",
  "has|has_key|haslocaldir|hasmapto|histadd",
  "histdel|histget|histnr|hlID|hlexists",
  "hostname|iconv|indent|index|input",
  "inputdialog|inputlist|inputrestore|inputsave|inputsecret",
  "insert|invert|isdirectory|islocked|items",
  "join|keys|len|libcall|libcallnr",
  "line|line2byte|lispindent|localtime|log",
  "log10|luaeval|map|maparg|mapcheck",
  "match|matchadd|matcharg|matchdelete|matchend",
  "matchlist|matchstr|max|min|mkdir",
  "mode|mzeval|nextnonblank|nr2char|or",
  "pathshorten|pow|prevnonblank|printf|pumvisible",
  "py3eval|pyeval|range|readfile|reltime",
  "reltimestr|remote_expr|remote_foreground|remote_peek|remote_read",
  "remote_send|remove|rename|repeat|resolve",
  "reverse|round|search|searchdecl|searchpair",
  "searchpairpos|searchpos|server2client|serverlist|setbufvar",
  "setcmdpos|setline|setloclist|setmatches|setpos",
  "setqflist|setreg|settabvar|settabwinvar|setwinvar",
  "shellescape|shiftwidth|simplify|sin|sinh",
  "sort|soundfold|spellbadword|spellsuggest|split",
  "sqrt|str2float|str2nr|strchars|strdisplaywidth",
  "strftime|stridx|string|strlen|strpart",
  "strridx|strtrans|strwidth|submatch|substitute",
  "synID|synIDattr|synIDtrans|synconcealed|synstack",
  "system|tabpagebuflist|tabpagenr|tabpagewinnr|tagfiles",
  "taglist|tan|tanh|tempname|tolower",
  "toupper|tr|trunc|type|undofile",
  "undotree|values|virtcol|visualmode|winbufnr",
  "wincol|winheight|winline|winnr|winrestcmd",
  "winrestview|winsaveview|winwidth|writefile"

# For things like <leader>, <c-r> and <cr>
atom = '<[[:word:]]+>'

regexp = `([^[:alpha:]])[[:word:]]*\1[[:word:]]*\1`

symbol = "==|==#|==?|!=|!=#|!=?",
  ">=|>=#|>=?|<=|<=#|<=?",
  "=~|=~#|=~?|!~|!~#|!~?",
  ">|>#|>?|<|<#|<?",
  "=|\|\||&&|+|-|.",
  "(|)|[|]|{|}"

function = '(?=function!?[[:blank:]]*)[[:word:]]*'

include "number.lang"
include "c_string.lang"
