neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

j.vim (9441B)


      1 " Vim syntax file
      2 " Language:	J
      3 " Maintainer:	David Bürgin <dbuergin@gluet.ch>
      4 " URL:		https://gitlab.com/glts/vim-j
      5 " Last Change:	2019-11-12
      6 
      7 if exists('b:current_syntax')
      8  finish
      9 endif
     10 
     11 let s:save_cpo = &cpo
     12 set cpo&vim
     13 
     14 syntax case match
     15 syntax sync minlines=100
     16 
     17 syntax cluster jStdlibItems contains=jStdlibNoun,jStdlibAdverb,jStdlibConjunction,jStdlibVerb
     18 syntax cluster jPrimitiveItems contains=jNoun,jAdverb,jConjunction,jVerb,jCopula
     19 
     20 syntax match jControl /\<\%(assert\|break\|case\|catch[dt]\=\|continue\|do\|else\%(if\)\=\|end\|fcase\|for\|if\|return\|select\|throw\|try\|whil\%(e\|st\)\)\./
     21 syntax match jControl /\<\%(for\|goto\|label\)_\a\k*\./
     22 
     23 " Standard library names. A few names need to be defined with ":syntax match"
     24 " because they would otherwise take precedence over the corresponding jControl
     25 " and jDefineExpression items.
     26 syntax keyword jStdlibNoun ARGV BINPATH CR CRLF DEL Debug EAV EMPTY FF FHS IF64 IFBE IFIOS IFJA IFJHS IFJNET IFQT IFRASPI IFUNIX IFWIN IFWINCE IFWINE IFWOW64 JB01 JBOXED JCHAR JCHAR2 JCHAR4 JCMPX JFL JINT JLIB JPTR JSB JSIZES JSTR JSTR2 JSTR4 JTYPES JVERSION LF LF2 LIBFILE TAB UNAME UNXLIB dbhelp libjqt
     27 syntax keyword jStdlibAdverb define each every fapplylines inv inverse items leaf rows rxapply rxmerge table
     28 syntax keyword jStdlibConjunction bind cuts def on
     29 syntax keyword jStdlibVerb AND Endian IFDEF OR XOR abspath anddf android_exec_am android_exec_host android_getdisplaymetrics andunzip apply boxopen boxxopen bx calendar cd cdcb cder cderx cdf charsub chopstring clear coclass cocreate cocurrent codestroy coerase cofind cofindv cofullname coinfo coinsert compare coname conames conew conl conouns conounsx copath copathnl copathnlx coreset costate cut cutLF cutopen cutpara datatype dbctx dbcut dberm dberr dbg dbinto dbjmp dblocals dblxq dblxs dbnxt dbout dbover dbq dbr dbret dbrr dbrrx dbrun dbs dbsig dbsq dbss dbst dbstack dbstk dbstop dbstopme dbstopnext dbstops dbtrace dbview deb debc delstring detab dfh dir dircompare dircompares dirfind dirpath dirss dirssrplc dirtree dirused dlb dltb dltbs dquote drop dropafter dropto dtb dtbs echo empty endian erase evtloop exit expand f2utf8 fappend fappends fboxname fc fcompare fcompares fcopynew fdir ferase fetch fexist fexists fgets file2url fixdotdot fliprgb fmakex foldpara foldtext fpathcreate fpathname fputs fread freadblock freadr freads frename freplace fsize fss fssrplc fstamp fstringreplace ftype fview fwrite fwritenew fwrites getalpha getargs getdate getenv getqtbin hfd hostpathsep ic install iospath isatty isotimestamp isutf16 isutf8 jcwdpath joinstring jpath jpathsep jsystemdefs launch list ljust load loadd mema memf memr memu memw nameclass namelist names nc nl pick quote require rjust rplc rxE rxall rxcomp rxcut rxeq rxerror rxfirst rxfree rxfrom rxhandles rxin rxindex rxinfo rxmatch rxmatches rxrplc rxutf8 script scriptd scripts setalpha setbreak shell show sign sminfo smoutput sort split splitnostring splitstring ss startupandroid stderr stdin stdout stringreplace symdat symget symset take takeafter taketo timespacex timestamp timex tmoutput toCRLF toHOST toJ todate todayno tolist tolower topara toupper tsdiff tsrep tstamp type ucp ucpcount undquote unxlib usleep utf8 uucp valdate wcsize weekday weeknumber weeksinyear winpathsep xedit
     30 syntax match jStdlibNoun /\<\%(adverb\|conjunction\|dyad\|monad\|noun\|verb\)\>/
     31 syntax match jStdlibVerb /\<\%(Note\|\%(assert\|break\|do\)\.\@!\)\>/
     32 
     33 " Numbers. Matching J numbers is difficult. In fact, the job cannot be done
     34 " with regular expressions alone. Below is a sketch of the pattern used. It
     35 " accepts most well-formed numbers and rejects most of the ill-formed ones.
     36 " See http://www.jsoftware.com/help/dictionary/dcons.htm for reference.
     37 "
     38 " "double1" and "double2" patterns:
     39 "     (_?\d+(\.\d*)?|_\.\d+)([eE]_?\d+)?
     40 "     (_?\d+(\.\d*)?|_\.\d+|\.\d+)([eE]_?\d+)?
     41 "
     42 " "rational1" and "rational2" patterns:
     43 "     \k<double1>(r\k<double2>)?|__?
     44 "     \k<double2>(r\k<double2>)?|__?
     45 "
     46 " "complex1" and "complex2" patterns:
     47 "     \k<rational1>((j|a[dr])\k<rational2>)?
     48 "     \k<rational2>((j|a[dr])\k<rational2>)?
     49 "
     50 " "basevalue" pattern:
     51 "     _?[0-9a-z]+(\.[0-9a-z]*)?|_?\.[0-9a-z]+
     52 "
     53 " all numbers:
     54 "     \b\k<complex1>([px]\k<complex2>)?(b\k<basevalue>)?(?![0-9A-Za-z_.])
     55 syntax match jNumber /\<_\.[0-9A-Za-z_.]\@!/
     56 syntax match jNumber /\<_\=\d\+x[0-9A-Za-z_.]\@!/
     57 syntax match jNumber /\<\%(__\=r_\=\d\+\|_\=\d\+r__\=\)[0-9A-Za-z_.]\@!/
     58 syntax match jNumber /\<\%(\%(_\=\d\+\%(\.\d*\)\=\|_\.\d\+\)\%([eE]_\=\d\+\)\=\%(r\%(_\=\d\+\%(\.\d*\)\=\|_\.\d\+\|\.\d\+\)\%([eE]_\=\d\+\)\=\)\=\|__\=\)\%(\%(j\|a[dr]\)\%(\%(_\=\d\+\%(\.\d*\)\=\|_\.\d\+\|\.\d\+\)\%([eE]_\=\d\+\)\=\%(r\%(_\=\d\+\%(\.\d*\)\=\|_\.\d\+\|\.\d\+\)\%([eE]_\=\d\+\)\=\)\=\|__\=\)\)\=\%([px]\%(\%(_\=\d\+\%(\.\d*\)\=\|_\.\d\+\|\.\d\+\)\%([eE]_\=\d\+\)\=\%(r\%(_\=\d\+\%(\.\d*\)\=\|_\.\d\+\|\.\d\+\)\%([eE]_\=\d\+\)\=\)\=\|__\=\)\%(\%(j\|a[dr]\)\%(\%(_\=\d\+\%(\.\d*\)\=\|_\.\d\+\|\.\d\+\)\%([eE]_\=\d\+\)\=\%(r\%(_\=\d\+\%(\.\d*\)\=\|_\.\d\+\|\.\d\+\)\%([eE]_\=\d\+\)\=\)\=\|__\=\)\)\=\)\=\%(b\%(_\=[0-9a-z]\+\%(\.[0-9a-z]*\)\=\|_\=\.[0-9a-z]\+\)\)\=[0-9A-Za-z_.]\@!/
     59 
     60 syntax region jString oneline start=/'/ skip=/''/ end=/'/
     61 
     62 syntax keyword jArgument contained x y u v m n
     63 
     64 " Primitives. Order is significant both within the patterns and among
     65 " ":syntax match" statements. Refer to "Parts of speech" in the J dictionary.
     66 syntax match jNoun /\<a[.:]/
     67 syntax match jAdverb /[}~]\|[/\\]\.\=\|\<\%([Mbft]\.\|t:\)/
     68 syntax match jConjunction /"\|`:\=\|[.:@&][.:]\=\|&\.:\|\<\%([dDHT]\.\|[DLS]:\)/
     69 syntax match jVerb /[=!\]]\|[\^?]\.\=\|[;[]:\=\|{\.\|[_/\\]:\|[<>+*\-%$|,#][.:]\=\|[~}"][.:]\|{\%[::]\|\<\%([ACeEiIjLor]\.\|p\.\.\=\|[ipqsux]:\|0:\|_\=[1-9]:\)/
     70 syntax match jCopula /=[.:]/
     71 syntax match jConjunction /;\.\|\^:\|![.:]/
     72 
     73 " Explicit noun definition. The difficulty is that the define expression can
     74 " occur in the middle of a line but the jNounDefine region must only start on
     75 " the next line. The trick is to split the problem into two regions and link
     76 " them with "nextgroup=". The fold wrapper provides syntax folding.
     77 syntax region jNounDefineFold
     78    \ matchgroup=NONE start=/\%(\%(\%(^\s*Note\)\|\<\%(0\|noun\)\s\+\%(\:\s*0\|def\s\+0\|define\)\)\>\)\@=/
     79    \ keepend matchgroup=NONE end=/^\s*)\s*$/
     80    \ contains=jNounDefineStart
     81    \ fold
     82 syntax region jNounDefineStart
     83    \ matchgroup=jDefineExpression start=/\%(\%(^\s*Note\)\|\<\%(0\|noun\)\s\+\%(\:\s*0\|def\s\+0\|define\)\)\>/
     84    \ keepend matchgroup=NONE end=/$/
     85    \ contains=@jStdlibItems,@jPrimitiveItems,jNumber,jString,jParenGroup,jParen,jComment
     86    \ contained oneline skipempty nextgroup=jDefineEnd,jNounDefine
     87 " These two items must have "contained", which allows them to match only after
     88 " jNounDefineStart thanks to the "nextgroup=" above.
     89 syntax region jNounDefine
     90    \ matchgroup=NONE start=/^/
     91    \ matchgroup=jDefineEnd end=/^\s*)\s*$/
     92    \ contained
     93 " This match is necessary in case of an empty noun definition
     94 syntax match jDefineEnd contained /^\s*)\s*$/
     95 
     96 " Explicit verb, adverb, and conjunction definition
     97 syntax region jDefine
     98    \ matchgroup=jDefineExpression start=/\<\%([1-4]\|13\|adverb\|conjunction\|verb\|monad\|dyad\)\s\+\%(:\s*0\|def\s\+0\|define\)\>/
     99    \ matchgroup=jDefineEnd end=/^\s*)\s*$/
    100    \ contains=jControl,@jStdlibItems,@jPrimitiveItems,jNumber,jString,jArgument,jParenGroup,jParen,jComment,jDefineMonadDyad
    101    \ fold
    102 syntax match jDefineMonadDyad contained /^\s*:\s*$/
    103 
    104 " Paired parentheses. When a jDefineExpression such as "3 : 0" is
    105 " parenthesised it will erroneously extend jParenGroup to span over the whole
    106 " definition body. This situation receives a special treatment here.
    107 syntax match jParen /(\%(\s*\%([0-4]\|13\|noun\|adverb\|conjunction\|verb\|monad\|dyad\)\s\+\%(:\s*0\|def\s\+0\|define\)\s*)\)\@=/
    108 syntax match jParen contained /\%((\s*\%([0-4]\|13\|noun\|adverb\|conjunction\|verb\|monad\|dyad\)\s\+\%(:\s*0\|def\s\+0\|define\)\s*\)\@<=)/
    109 syntax region jParenGroup
    110    \ matchgroup=jParen start=/(\%(\s*\%([0-4]\|13\|noun\|adverb\|conjunction\|verb\|monad\|dyad\)\s\+\%(:\s*0\|def\s\+0\|define\)\>\)\@!/
    111    \ matchgroup=jParen end=/)/
    112    \ oneline transparent
    113 
    114 syntax keyword jTodo contained TODO FIXME XXX
    115 syntax match jComment /\<NB\..*$/ contains=jTodo,@Spell
    116 
    117 syntax match jSharpBang /\%^#!.*$/
    118 
    119 highlight default link jControl           Statement
    120 highlight default link jStdlibNoun        Identifier
    121 highlight default link jStdlibAdverb      Function
    122 highlight default link jStdlibConjunction Function
    123 highlight default link jStdlibVerb        Function
    124 highlight default link jString            String
    125 highlight default link jNumber            Number
    126 highlight default link jNoun              Constant
    127 highlight default link jAdverb            Normal
    128 highlight default link jConjunction       Normal
    129 highlight default link jVerb              Normal
    130 highlight default link jCopula            Normal
    131 highlight default link jArgument          Identifier
    132 highlight default link jParen             Delimiter
    133 
    134 highlight default link jDefineExpression  Define
    135 highlight default link jDefineMonadDyad   Delimiter
    136 highlight default link jDefineEnd         Delimiter
    137 highlight default link jNounDefine        Normal
    138 
    139 highlight default link jTodo              Todo
    140 highlight default link jComment           Comment
    141 highlight default link jSharpBang         PreProc
    142 
    143 let b:current_syntax = 'j'
    144 
    145 let &cpo = s:save_cpo
    146 unlet s:save_cpo