repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
neovim/after/syntax/vfp.lua
Raw-- File: ~/.config/nvim/after/syntax/vfp.lua
-- Syntax highlighting for Visual FoxPro 9.0
-- Bail if syntax is already set
if vim.b.current_syntax then return end
local api = vim.api
local fn = vim.fn
-- Case-insensitive matching
vim.opt.ignorecase = true
-- Define VFP9 Commands (unchanged from earlier)
local commands = {
'accept', 'activate', 'add', 'additive', 'after', 'again', 'aindent', 'alias', 'all', 'alt', 'alter', 'alternate',
'ansi', 'any', 'aplabout', 'app', 'append', 'array', 'as', 'asc', 'ascending', 'ascii', 'assert', 'asserts',
'assist', 'attributes', 'aused', 'automatic', 'autosave', 'average', 'avg', 'before', 'begin', 'bell', 'bitmap',
'blank', 'blink', 'blocksize', 'border', 'bottom', 'box', 'browse', 'brstatus', 'bucket', 'buffers', 'build', 'by',
'calculate', 'calcvalue', 'call', 'cancel', 'carry', 'cascade', 'catalog', 'cd', 'center', 'century', 'cga',
'change', 'character', 'chdir', 'check', 'classlib', 'clear', 'click', 'clock', 'close', 'cnt', 'codepage',
'collate', 'color', 'column', 'com1', 'com2', 'command', 'compact', 'compatible', 'compile', 'compress',
'confirm', 'connection', 'connections', 'connstring', 'console', 'container', 'continue', 'control', 'copies',
'copy', 'count', 'cpcompile', 'cpdialog', 'create', 'currency', 'cursor', 'cursorgetprop', 'cursorsetprop',
'cycle', 'database', 'databases', 'datasession', 'datasource', 'db4', 'dblclick', 'dbmemo3', 'dbtrap', 'dde',
'deactivate', 'debug', 'decimals', 'declare', 'default', 'defaultsource', 'define', 'delete', 'deletetables',
'delimited', 'delimiters', 'desc', 'design', 'development', 'device', 'dif', 'dimension', 'dir', 'directory',
'disabled', 'display', 'distinct', 'dll', 'dlls', 'do', 'dohistory', 'dos', 'dosmem', 'double', 'down', 'drag',
'draw', 'driver', 'duplex', 'echo', 'edit', 'editwork', 'ega25', 'ega43', 'eject', 'ems64', 'ems', 'enabled',
'encrypt', 'encryption', 'end', 'environment', 'erase', 'escape', 'events', 'exact', 'except', 'exclusive', 'exe',
'exists', 'exit', 'export', 'expression', 'extended', 'external', 'f11f12', 'fdow', 'fetch', 'fields', 'file',
'filer', 'fill', 'find', 'fixed', 'float', 'flush', 'foldconst', 'font', 'footer', 'for', 'force', 'foreign',
'form', 'format', 'formset', 'found', 'fox2x', 'foxplus', 'free', 'freeze', 'from', 'full', 'function', 'fw2',
'fweek', 'gather', 'general', 'get', 'getexpr', 'getnextmodified', 'getobject', 'gets', 'global', 'go', 'goto',
'group', 'grow', 'halfheight', 'having', 'heading', 'headings', 'height', 'help', 'helpfilter', 'hidden', 'hide',
'highlight', 'history', 'hmemory', 'hours', 'iblock', 'icon', 'id', 'import', 'in', 'index', 'indexes',
'information', 'inner', 'input', 'insert', 'instruct', 'integer', 'intensity', 'intersect', 'into', 'is',
'isometric', 'join', 'keyboard', 'keycolumns', 'keycomp', 'keyset', 'label', 'last', 'ldcheck', 'ledit', 'left',
'level', 'library', 'line', 'linked', 'list', 'load', 'local', 'locate', 'logerrors', 'long', 'loop',
'lparameters', 'lpartition', 'mac', 'macdesktop', 'machelp', 'mackey', 'macro', 'macros', 'margin', 'mark',
'master', 'maxmem', 'mblock', 'md', 'mdi', 'memlimit', 'memo', 'memos', 'memowidth', 'memvar', 'menu', 'menus',
'message', 'messages', 'middle', 'minimize', 'minus', 'mkdir', 'modal', 'modify', 'module', 'mono43', 'mono',
'mouse', 'move', 'movers', 'multilocks', 'multiselect', 'mvarsiz', 'mvcount', 'name', 'near', 'negotiate',
'next', 'noalias', 'noappend', 'noclear', 'noclose', 'noconsole', 'nocptrans', 'nodata', 'nodebug', 'nodelete',
'nodefault', 'nodup', 'noedit', 'noeject', 'noenvironment', 'nofloat', 'nofollow', 'nogrow', 'noinit', 'nolgrid',
'nolink', 'nolock', 'nolog', 'nomargin', 'nomdi', 'nomenu', 'nominimize', 'nomodify', 'nomouse', 'none',
'nooptimize', 'noorganize', 'nooverwrite', 'noprompt', 'noprojecthook', 'noread', 'norefresh', 'norequery',
'norgrid', 'normal', 'nosave', 'noshadow', 'noshow', 'nospace', 'notify', 'noupdate', 'novalidate', 'noverify',
'nowait', 'nowindow', 'nowrap', 'nozoom', 'npv', 'null', 'number', 'nvl', 'object', 'objects', 'odometer', 'of',
'off', 'ole', 'oleobject', 'oleobjects', 'olepublic', 'on', 'only', 'open', 'optimize', 'order', 'orientation',
'outer', 'output', 'outshow', 'overlay', 'overwrite', 'pack', 'page', 'palette', 'panel', 'paperlength',
'papersize', 'paperwidth', 'parameters', 'partition', 'password', 'path', 'pattern', 'pause', 'pdox', 'pdsetup',
'pen', 'percent', 'pfs', 'picture', 'pixels', 'plain', 'play', 'point', 'pop', 'popup', 'popups', 'precision',
'preference', 'preview', 'primary', 'printer', 'printquality', 'private', 'procedure', 'procedures', 'production',
'progwork', 'project', 'protected', 'public', 'push', 'query', 'quit', 'random', 'range', 'rd', 'read',
'readborder', 'readerror', 'recall', 'record', 'recover', 'recsize', 'redit', 'reference', 'references',
'refresh', 'regional', 'reindex', 'relation', 'relative', 'release', 'remote', 'remove', 'rename', 'replace',
'report', 'reprocess', 'required', 'resource', 'rest', 'restore', 'restrict', 'resume', 'retry', 'return',
'right', 'rmdir', 'rollback', 'rowset', 'rpd', 'run', 'runscript', 'runtime', 'safety', 'same', 'sample', 'save',
'say', 'scale', 'scatter', 'scheme', 'screen', 'screens', 'scroll', 'sdf', 'seek', 'select', 'selection',
'separator', 'set', 'setfldstate', 'shadows', 'shared', 'sheet', 'shell', 'shift', 'show', 'shutdown', 'single',
'size', 'skip', 'some', 'sort', 'sortwork', 'spinner', 'sql', 'standalone', 'status', 'std', 'step', 'sticky',
'store', 'stretch', 'string', 'structure', 'style', 'subclass', 'sum', 'summary', 'suspend', 'sylk', 'sysformats',
'sysmenu', 'sysmenus', 'system', 'tab', 'tag', 'table', 'tables', 'tabs', 'talk', 'tedit', 'textmerge', 'this',
'this_access', 'thisform', 'thisformset', 'timeout', 'titles', 'tmpfiles', 'to', 'top', 'topic', 'total',
'transaction', 'trap', 'trbetween', 'trigger', 'ttoption', 'type', 'typeahead', 'udfparms', 'union', 'unlock',
'up', 'update', 'use', 'userid', 'users', 'validate', 'values', 'var', 'verb', 'vga25', 'vga50', 'view', 'views',
'volume', 'wait', 'when', 'where', 'width', 'window', 'windows', 'with', 'wk1', 'wk3', 'wks', 'workarea', 'wp',
'wr1', 'wrap', 'wrk', 'xcmdfile', 'xl5', 'xls', 'zap',
}
-- Define VFP9 Functions (unchanged)
local functions = {
'abs', 'aclass', 'acopy', 'acos', 'adatabases', 'adbobjects', 'addbs', 'adel', 'adir', 'aelement', 'aerror',
'afields', 'afont', 'agetclass', 'agetfileversion', 'ains', 'ainstance', 'alen', 'alias', 'alines', 'alltrim',
'amembers', 'amouseobj', 'anetresources', 'ansitooem', 'aprinters', 'asc', 'ascan', 'aselobj', 'asin', 'asort',
'asubscript', 'at', 'at_c', 'atan', 'atc', 'atcc', 'atcline', 'atline', 'atn2', 'aused', 'avcxclasses', 'avg',
'bar', 'barcount', 'barprompt', 'between', 'bintoc', 'bitand', 'bitclear', 'bitlshift', 'bitnot', 'bitor',
'bitrshift', 'bitset', 'bittest', 'bitxor', 'bof', 'candidate', 'capslock', 'cdow', 'cdx', 'ceiling', 'chr',
'chrsaw', 'chrtran', 'chrtranc', 'cmonth', 'cntbar', 'cntpad', 'col', 'comarray', 'comclassinfo', 'compobj',
'comreturnerror', 'count', 'cos', 'cpconvert', 'cpcurrent', 'cpdbf', 'createbinary', 'createobject',
'createobjectex', 'createoffline', 'ctobin', 'ctod', 'ctot', 'curdir', 'cursorgetprop', 'cursorsetprop',
'curval', 'date', 'datetime', 'day', 'dbc', 'dbf', 'dbgetprop', 'dbsetprop', 'dbused', 'ddeaborttrans',
'ddeadvise', 'ddeenabled', 'ddeexecute', 'ddeinitiate', 'ddelasterror', 'ddepoke', 'dderequest', 'ddesetoption',
'ddesetservice', 'ddesettopic', 'ddeterminate', 'defaulttext', 'deleted', 'descending', 'difference', 'directory',
'diskspace', 'dmy', 'dodefault', 'dow', 'drivetype', 'dropoffline', 'dtoc', 'dtor', 'dtos', 'dtot', 'empty',
'eof', 'error', 'evaluate', 'exp', 'fchsize', 'fclose', 'fcount', 'fcreate', 'fdate', 'feof', 'ferror', 'fflush',
'fgets', 'field', 'file', 'filetostr', 'filter', 'fklabel', 'fkmax', 'fldlist', 'flock', 'floor', 'fontmetric',
'fopen', 'for', 'forceext', 'forcepath', 'found', 'fputs', 'fread', 'fseek', 'fsize', 'ftime', 'fullpath', 'fv',
'fwrite', 'getbar', 'getcolor', 'getcp', 'getdir', 'getenv', 'getfile', 'getfldstate', 'getfont', 'gethost',
'getnextmodified', 'getobject', 'getpad', 'getpem', 'getpict', 'getprinter', 'gomonth', 'header', 'home', 'hour',
'idxcollate', 'iif', 'imestatus', 'indbc', 'indexseek', 'inkey', 'inlist', 'insmode', 'int', 'isalpha', 'isblank',
'iscolor', 'isdigit', 'isexclusive', 'isflocked', 'ishosted', 'isleadbyte', 'islower', 'ismouse', 'isnull',
'isreadonly', 'isrlocked', 'isupper', 'justdrive', 'justext', 'justfname', 'justpath', 'juststem', 'key',
'keymatch', 'lastkey', 'left', 'leftc', 'len', 'lenc', 'like', 'likec', 'lineno', 'loadpicture', 'locfile',
'lock', 'log', 'log10', 'lookup', 'lower', 'ltrim', 'lupdate', 'max', 'mcol', 'mdown', 'mdx', 'mdy', 'memlines',
'memory', 'menu', 'message', 'messagebox', 'min', 'minute', 'mline', 'mod', 'month', 'mrkbar', 'mrkpad', 'mrow',
'mton', 'mwindow', 'ndx', 'newobject', 'normalize', 'ntom', 'numlock', 'nvl', 'objnum', 'objtoclient', 'objvar',
'occurs', 'oemtoansi', 'oldval', 'on', 'order', 'os', 'pad', 'padc', 'padl', 'padr', 'parameters', 'payment',
'pcol', 'pcount', 'pemstatus', 'pi', 'popup', 'primary', 'printstatus', 'prmbar', 'prmpad', 'program', 'prompt',
'proper', 'prow', 'prtinfo', 'putfile', 'pv', 'rand', 'rat', 'ratc', 'ratline', 'rdlevel', 'readkey', 'reccount',
'recno', 'recsize', 'refresh', 'relation', 'replicate', 'requery', 'rgb', 'rgbscheme', 'right', 'rightc',
'rlock', 'round', 'row', 'rtod', 'rtrim', 'savepicture', 'scheme', 'scols', 'sec', 'seconds', 'seek', 'select',
'set', 'setfldstate', 'sign', 'sin', 'skpbar', 'skppad', 'soundex', 'space', 'sqlcancel', 'sqlcolumns',
'sqlcommit', 'sqlconnect', 'sqldisconnect', 'sqlexec', 'sqlgetprop', 'sqlmoreresults', 'sqlrollback',
'sqlsetprop', 'sqlstringconnect', 'sqltables', 'sqrt', 'srows', 'str', 'strconv', 'strtofile', 'strtran',
'stuff', 'stuffc', 'substr', 'substrc', 'sum', 'sys', 'sysmetric', 'tablerevert', 'tableupdate', 'tag',
'tagcount', 'tagno', 'tan', 'target', 'time', 'transform', 'trim', 'ttoc', 'ttod', 'txnlevel', 'txtwidth',
'type', 'unique', 'updated', 'upper', 'used', 'val', 'varread', 'vartype', 'version', 'wborder', 'wchild',
'wcols', 'week', 'wexist', 'wfont', 'wlast', 'wlcol', 'wlrow', 'wmaximum', 'wminimum', 'wontop', 'woutput',
'wparent', 'wread', 'wrows', 'wtitle', 'wvisible', 'year',
}
-- Define VFP9 System Variables (unchanged)
local sysvars = {
'_alignment', '_asciicols', '_asciirows', '_assist', '_beautify', '_box', '_browser', '_builder', '_calcmem',
'_calcvalue', '_cliptext', '_converter', '_coverage', '_curobj', '_datetimeformat', '_dblclick', '_diarydate',
'_dos', '_fontclass', '_foxbaseclass', '_foxdoc', '_foxdragdrop', '_foxdroptarget', '_foxgraph', '_gallery',
'_gengraph', '_genhtml', '_genmenu', '_genpd', '_genscrn', '_genxtab', '_getexpr', '_helpwebdevonly',
'_helpwebdirectory', '_helpwebfiller1', '_helpwebfiller2', '_helpwebmsdnonline', '_helpwebmsfthomepage',
'_helpwebsearch', '_helpwebtutorial', '_helpwebvfpfaq', '_helpwebvfpfreestuff', '_helpwebvfphomepage',
'_helpwebvfponlinesupport', '_helpwebvfpsendfeedback', '_helpwebvsprodnews', '_include', '_indent', '_lmargin',
'_mac', '_mbr_appnd', '_mbr_cpart', '_mbr_delet', '_mbr_font', '_mbr_goto', '_mbr_grid', '_mbr_link', '_mbr_mode',
'_mbr_mvfld', '_mbr_mvprt', '_mbr_seek', '_mbr_sp100', '_mbr_sp200', '_mbr_szfld', '_mbrowse', '_mda_appnd',
'_mda_avg', '_mda_brow', '_mda_calc', '_mda_copy', '_mda_count', '_mda_label', '_mda_pack', '_mda_reprt',
'_mda_rindx', '_mda_setup', '_mda_sort', '_mda_sp100', '_mda_sp200', '_mda_sp300', '_mda_sum', '_mda_total',
'_mdata', '_mdiary', '_med_beaut', '_med_bldex', '_med_clear', '_med_copy', '_med_cut', '_med_cvtst',
'_med_exblk', '_med_find', '_med_finda', '_med_goto', '_med_insob', '_med_link', '_med_obj', '_med_paste',
'_med_pref', '_med_pstlk', '_med_redo', '_med_repl', '_med_repla', '_med_slcta', '_med_sp100', '_med_sp200',
'_med_sp300', '_med_sp400', '_med_sp500', '_med_sp600', '_med_undo', '_medit', '_mfi_clall', '_mfi_close',
'_mfi_export', '_mfi_import', '_mfi_new', '_mfi_open', '_mfi_pgset', '_mfi_prevu', '_mfi_print',
'_mfi_printonecopy', '_mfi_quit', '_mfi_revrt', '_mfi_savas', '_mfi_save', '_mfi_saveashtml', '_mfi_send',
'_mfi_setup', '_mfi_sp100', '_mfi_sp200', '_mfi_sp300', '_mfi_sp400', '_mfi_sysprint', '_mfile', '_mfiler',
'_mfirst', '_mlabel', '_mlast', '_mline', '_mmacro', '_mmb_delet', '_mmb_gener', '_mmb_gopts', '_mmb_insbr',
'_mmb_insrt', '_mmb_mopts', '_mmb_prevu', '_mmb_quick', '_mmb_sp100', '_mmb_sp200', '_mmb_sp300', '_mmbldr',
'_mouseevents', '_mouseeventsnodbl', '_mpr_beaut', '_mpr_cancl', '_mpr_compl', '_mpr_do', '_mpr_docum',
'_mpr_formwz', '_mpr_gener', '_mpr_graph', '_mpr_resum', '_mpr_sp100', '_mpr_sp200', '_mpr_sp300', '_mpr_suspend',
'_mprog', '_mproj', '_mrc_appnd', '_mrc_chnge', '_mrc_cont', '_mrc_delet', '_mrc_goto', '_mrc_locat',
'_mrc_recal', '_mrc_repl', '_mrc_seek', '_mrc_sp100', '_mrc_sp200', '_mrecord', '_mreport', '_mrqbe', '_mscreen',
'_msm_data', '_msm_edit', '_msm_file', '_msm_format', '_msm_prog', '_msm_recrd', '_msm_systm', '_msm_text',
'_msm_tools', '_msm_view', '_msm_windo', '_mst_about', '_mst_ascii', '_mst_calcu', '_mst_captr', '_mst_dbase',
'_mst_diary', '_mst_docum', '_mst_filer', '_mst_help', '_mst_hphow', '_mst_hpsch', '_mst_macro', '_mst_msdnc',
'_mst_msdni', '_mst_msdns', '_mst_office', '_mst_puzzl', '_mst_samp', '_mst_sp100', '_mst_sp200', '_mst_sp300',
'_mst_specl', '_mst_techs', '_msysmenu', '_msystem', '_mtable', '_mtb_appnd', '_mtb_cpart', '_mtb_delet',
'_mtb_delrc', '_mtb_goto', '_mtb_link', '_mtb_mvfld', '_mtb_mvprt', '_mtb_props', '_mtb_recal', '_mtb_sp100',
'_mtb_sp200', '_mtb_sp300', '_mtb_sp400', '_mtb_szfld', '_mti_callstack', '_mti_dbgout', '_mti_locals',
'_mti_runactivedoc', '_mti_trace', '_mti_watch', '_mtl_browser', '_mtl_coverage', '_mtl_debugger', '_mtl_gallery',
'_mtl_macro', '_mtl_optns', '_mtl_sp100', '_mtl_sp200', '_mtl_sp300', '_mtl_sp400', '_mtl_spell', '_mtl_wzrds',
'_mtools', '_mvi_toolb', '_mview', '_mwi_arran', '_mwi_clear', '_mwi_cmd', '_mwi_color', '_mwi_debug',
'_mwi_hide', '_mwi_hidea', '_mwi_min', '_mwi_move', '_mwi_rotat', '_mwi_showa', '_mwi_size', '_mwi_sp100',
'_mwi_sp200', '_mwi_toolb', '_mwi_trace', '_mwi_view', '_mwi_zoom', '_mwindow', '_mwizards', '_mwz_all',
'_mwz_applic', '_mwz_application', '_mwz_database', '_mwz_form', '_mwz_foxdoc', '_mwz_import', '_mwz_label',
'_mwz_mail', '_mwz_pivot', '_mwz_query', '_mwz_reprt', '_mwz_setup', '_mwz_table', '_mwz_upsizing',
'_mwz_webpublishing', '_netware', '_olebasecontrol', '_oledragdrop', '_oracle', '_padvance', '_pageno',
'_pbpage', '_pcolno', '_pcopies', '_pdparms', '_pdriver', '_pdsetup', '_pecode', '_peject', '_pepage', '_pform',
'_plength', '_plineno', '_ploffset', '_ppitch', '_pquality', '_pretext', '_pscode', '_pspacing', '_pwait',
'_rectclass', '_rmargin', '_runactivedoc', '_samples', '_scctext', '_screen', '_shell', '_spellchk', '_sqlserver',
'_startup', '_tabs', '_tally', '_text', '_throttle', '_transport', '_triggerlevel', '_unix', '_vfp', '_viewport',
'_webdevonly', '_webmenu', '_webmsfthomepage', '_webvfphomepage', '_webvfponlinesupport', '_windows', '_wizard',
'_wrap',
}
-- Define Highlight Groups
local function set_highlights()
api.nvim_set_hl( 0, 'vfpSpecial', { link = 'Special' } )
api.nvim_set_hl( 0, 'vfpPreProc', { link = 'PreProc' } )
api.nvim_set_hl( 0, 'vfpCmd', { link = 'Statement' } )
api.nvim_set_hl( 0, 'vfpFunc', { link = 'Identifier' } )
api.nvim_set_hl( 0, 'vfpSysVar', { link = 'String' } )
api.nvim_set_hl( 0, 'vfpString', { link = 'String' } )
api.nvim_set_hl( 0, 'vfpConst', { link = 'Constant' } )
api.nvim_set_hl( 0, 'vfpNumber', { link = 'Number' } )
api.nvim_set_hl( 0, 'vfpFloat', { link = 'Float' } )
api.nvim_set_hl( 0, 'vfpOperator', { link = 'Operator' } )
api.nvim_set_hl( 0, 'vfpComment', { link = 'Comment' } )
api.nvim_set_hl( 0, 'vfpError', { link = 'Error' } )
api.nvim_set_hl( 0, 'vfpXmlFunc', { link = 'Function' } )
api.nvim_set_hl( 0, 'vfpOop', { link = 'Type' } )
end
set_highlights()
-- Define Syntax Patterns with proper matchadd
local function define_syntax()
local buf = api.nvim_get_current_buf()
local priority = 10 -- Standard priority for syntax matches
local id_base = 1000 -- Unique ID base to avoid collisions
-- Helper to apply matchadd with consistent args
local function add_match( group, pattern, pri, id )
fn.matchadd( group, pattern )
end
-- Special Characters
local specials = {
[[^\s*!]], '&', [[;\s*$]], [[^\s*=]], [[^\s*\\]], [[^\s*\\\\]],
[[^\s*?]], [[^\s*??]], [[^\s*???]], [[\<m\>\.]], [[\<this\>\.]],
[[\<thisform\>\.]], [[\<thisformset\>\.]],
}
for i, pat in ipairs( specials ) do
add_match( 'vfpSpecial', pat, priority, id_base + i )
end
-- Preprocessor Directives
local preprocs = {
[[^\s*#\s*\(if\|elif\|else\|endif\)]],
[[^\s*#\s*\(ifdef\|ifndef\|endif\)]],
[[^\s*#\s*\(define\|undef\)]],
[[^\s*#\s*\<region\>]], [[^\s*#\s*\<include\>]],
[[^\s*#\s*\<itsexpression\>]], [[^\s*#\s*\<readclauses\>]],
[[^\s*#\s*\<section\>]], [[^\s*#\s*\<wname\>]],
}
for i, pat in ipairs( preprocs ) do
add_match( 'vfpPreProc', pat, priority, id_base + 100 + i )
end
-- Commands
local cmd_pattern = [[\<]] .. table.concat( commands, [[\>\|\<]] ) .. [[\>]]
add_match( 'vfpCmd', cmd_pattern, priority, id_base + 200 )
-- Functions (with paren)
local func_pattern = [[\<]] .. table.concat( functions, [[\>\|\<]] ) .. [[\>\s*(]]
add_match( 'vfpFunc', func_pattern, priority, id_base + 300 )
-- System Variables
local sysvar_pattern = [[\<]] .. table.concat( sysvars, [[\>\|\<]] ) .. [[\>]]
add_match( 'vfpSysVar', sysvar_pattern, priority, id_base + 400 )
-- Strings
-- Strings section from define_syntax()
add_match( 'vfpString', [["[^"]*"]], priority, id_base + 500 ) -- Double-quoted
add_match( 'vfpString', [['[^']*']], priority, id_base + 501 ) -- Single-quoted
add_match( 'vfpString', '\\[[^\\]]*\\]', priority, id_base + 502 ) -- Bracketed
-- Constants
add_match( 'vfpConst', [[\.\(t\|f\|y\|n\|null\)\.]], priority, id_base + 600 )
add_match( 'vfpConst', [[\<null\>]], priority, id_base + 601 )
-- Numbers and Floats
add_match( 'vfpNumber', [[\<[0-9]\+\>]], priority, id_base + 700 )
add_match( 'vfpFloat', [[\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\>]], priority, id_base + 701 )
add_match( 'vfpFloat', [[\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\>]], priority, id_base + 702 )
add_match( 'vfpFloat', [[\<[0-9]\+e[-+]\=[0-9]\+\>]], priority, id_base + 703 )
-- Operators
local operators = {
[[\$]], [[%]], [[&]], [[+]], [[-]], [[->]], [[!]],
[[\.\(and\|not\|or\)\.]], [[\<and\>]], [[\<or\>]], [[\<not\>]],
[[<]], [[<=]], [[<>]], [[!=]], [[#]], [[=]], [[==]], [[>]], [[>=]], [[@]], [[\*]],
[[\<like\>]],
}
for i, op in ipairs( operators ) do
add_match( 'vfpOperator', op, priority, id_base + 800 + i )
end
-- Comments
add_match( 'vfpComment', [[^\s*\*.*]], priority, id_base + 900 )
add_match( 'vfpComment', [[&&.*]], priority, id_base + 901 )
add_match( 'vfpComment', [[\<note\>.*]], priority, id_base + 902 )
-- VFP9-Specific: XML Functions
local xml_functions = { 'xmltocursor', 'cursortoxml', 'xmlupdategram' }
local xml_pattern = [[\<]] .. table.concat( xml_functions, [[\>\|\<]] ) .. [[\>\s*(]]
add_match( 'vfpXmlFunc', xml_pattern, priority, id_base + 1000 )
-- VFP9-Specific: OOP Properties
add_match( 'vfpOop', [[\<thisform\>\.]], priority, id_base + 1100 )
-- Syntax Syncing
vim.cmd 'syntax sync minlines=1 maxlines=3'
end
-- Apply it
define_syntax()
-- Mark as loaded
vim.b.current_syntax = 'vfp'