diff --git a/.config/nvim/fnl/init.fnl b/.config/nvim/fnl/init.fnl index d1a3f77..954cf28 100644 --- a/.config/nvim/fnl/init.fnl +++ b/.config/nvim/fnl/init.fnl @@ -91,6 +91,7 @@ ;;; filetype (set vim.g.do_filetype_lua true) +(vim.filetype.add {:extension {:ua :uiua}}) ;;; ftplugins in fennel diff --git a/.config/nvim/syntax/uiua.vim b/.config/nvim/syntax/uiua.vim new file mode 100644 index 0000000..234a21c --- /dev/null +++ b/.config/nvim/syntax/uiua.vim @@ -0,0 +1,117 @@ +" https://github.com/Apeiros-46B/nvim/blob/main/after/syntax/uiua.vim + +" uiua 0.8.0 + +if exists("b:current_syntax") + finish +endif + +let b:current_syntax = "uiua" +syn iskeyword a-z + +syn keyword uiuaIdentifier e os Family Arch ExeExt DllExt Sep NumProcs MaxInt +syn match uiuaIdentifier '\a\+!*' + +" {{{ functions and modifiers +" constants and recur +syn keyword uiuaNoadic eta pi tau inf[inity] rand[om] recu[r] tag now +syn match uiuaNoadic '[ηπ∞τ⚂↫]' + +" monadic and dyadic pervasive functions +syn keyword uiuaPervasive not sig[n] abs[olute] sqr[t] sin[e] flo[or] cei[ling] rou[nd] add subtract multiply divide mod[ulus] pow[er] log[arithm] min[imum] max[imum] ata[ngent] com[plex] +syn match uiuaPervasive '[¬±`¯⌵√○⌊⌈⁅]\|!=\|<=\|>=\|[=≠<≤>≥+\-×*÷%◿ⁿₙ↧↥∠ℂ]' + +" monadic non-pervasive functions +syn keyword uiuaMonadic len[gth] sha[pe] rang[e] fir[st] rev[erse] des[hape] fix bit[s] tran[spose] ris[e] fal[e] whe[re] cla[ssify] ded[uplicate] box par[se] wait recv tryrecv gen utf type memo comptime +syn match uiuaMonadic '[⧻△⇡⊢⇌♭¤⋯⍉⍏⍖⊚⊛⊝□⋕↬]' + +" dyadic non-pervasive functions +syn keyword uiuaDyadic joi[n] cou[ple] mat[ch] pic[k] sel[ect] res[hape] rer[ank] tak[e] dro[p] rot[ate] win[dows] kee[p] fin[d] mem[ber] ind[exof] ass[ert] send deal regex map has get insert remove +syn match uiuaDyadic '[⊂⊟≍⊡⊏↯☇↙↘↻◫▽⌕∊⊗⍤]' + +" monadic modifiers +" gap, dip, and identity single-letter spellings aren't accounted for +" 1. it's not very useful since adjacent ones won't be highlighted +" 2. it'll get formatted anyways +syn keyword uiuaMonadicMod gap dip eac[h] row[s] tab[le] cro[ss] rep[eat] fol[d] reduce scan gro[up] par[tition] un bot[h] unp[ack] rect[ify] thi[s] spawn +syn match uiuaMonadicMod '[⋅⊙∵≡⊞⊠⍥∧/\\⊕⊜°∩⊐⌅↬]' + +" non-monadic modifiers +syn keyword uiuaOtherMod do und[er] fil[l] bra[cket] for[k] cas[cade] all try setinv setund +syn match uiuaOtherMod /[⍢⍜⬚⊓⊃⪾⋔⍣]/ +" }}} + +" {{{ system functions +" defined in inverse order so precedence for e.g. +" &i and &ime, &s and &sc, etc. is correct + +" modules +syn match uiuaModuleSF '&i' + +syn match uiuaDyadicSF '\v\&(rs|rb|ru|w|fwa|ime|ae|tcpsrt|tcpswt|httpsw)' +syn match uiuaMonadicSF '\v\&(sl|s|pf|p|raw|var|runi|runc|cd|cl|fo|fc|fde|ftr|fe|fld|fif|fras|frab|fwa|imd|ims|gifd|gife|ad|ap|tcpl|tcpa|tcpc|tcpsnb|tcpaddr|invk)' +syn match uiuaNoadicSF '\v\&(sc|ts|args|asr)' +syn match uiuaModifierSF '&ast' +" }}} + +" {{{ literals +" numeric literal +syn match uiuaNum 'NaN\|[¯`]\?\d\+\(\.\d\+\)\?\(e[¯`]\?\d\+\)\?' + +" escape sequence and format placeholder +syn match uiuaEsc contained /\\[\\'"_0nrt]/ +syn match uiuaFmt contained '_' + +" character literal +syn match uiuaChar '@.' contains=uiuaEsc + +" string literal (plain, format, and multiline) +syn region uiuaStr start='"' end='"' skip='\\"' contains=uiuaEsc +syn region uiuaStr start='\$"' end='"' skip='\\"' contains=uiuaEsc,uiuaFmt +syn region uiuaStr start='\$ ' end='$' contains=uiuaEsc,uiuaFmt +" }}} + +" {{{ misc +" function signatures +syn match uiuaSignature '|\d\+\(\.\d\+\)\?' + +" function placeholders in custom modifiers +syn match uiuaFunctionPlaceholder '\^\d\+\(\.\d\+\)\?' + +" test scopes, <- assignments, stranded arrays, and ' or '' line joining +syn match uiuaFaded '^---$\|[←_']' + +" debug functions +syn keyword uiuaDebug dump stack trac[e] +syn match uiuaDebug '[⸮?]' + +" comments +syn match uiuaComment '#.*$' +" }}} + +" {{{ highlight groups +hi def link uiuaNoadic Keyword +hi def link uiuaNoadicSF Keyword +hi def link uiuaPervasive Operator +hi def link uiuaMonadic Function +hi def link uiuaMonadicSF Function +hi def link uiuaDyadic Identifier +hi def link uiuaDyadicSF Identifier +hi def link uiuaMonadicMod Type +hi def link uiuaOtherMod Number +hi def link uiuaModifierSF Type +hi def link uiuaOcean String +hi def link uiuaModuleSF Keyword + +hi def link uiuaNum Number +hi def link uiuaEsc SpecialChar +hi def link uiuaChar String +hi def link uiuaFmt Operator +hi def link uiuaStr String + +hi def link uiuaSignature Type +hi def link uiuaFunctionPlaceholder Keyword +hi def link uiuaDebug Operator +hi def link uiuaFaded Comment +hi def link uiuaComment Comment +" }}}