291 lines
14 KiB
Plaintext
291 lines
14 KiB
Plaintext
<%
|
|
USING: kernel io prettyprint vocabs sequences multiline ;
|
|
IN: factor.vim.fgen
|
|
|
|
: print-keywords ( vocab -- )
|
|
words [
|
|
"syn keyword factorKeyword " write
|
|
[ bl ] [ pprint ] interleave nl
|
|
] when* ;
|
|
|
|
%>
|
|
" Vim syntax file
|
|
" Language: factor
|
|
" Maintainer: Alex Chapman <chapman.alex@gmail.com>
|
|
" Last Change: 2009 May 19
|
|
" To run: USE: html.templates.fhtml "resource:misc/factor.vim.fgen" <fhtml> call-template
|
|
|
|
" For version 5.x: Clear all syntax items
|
|
" For version 6.x: Quit when a syntax file was already loaded
|
|
if version < 600
|
|
syntax clear
|
|
elseif exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
" factor is case sensitive.
|
|
syn case match
|
|
|
|
" make all of these characters part of a word (useful for skipping over words with w, e, and b)
|
|
if version >= 600
|
|
setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
|
|
else
|
|
set iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
|
|
endif
|
|
|
|
syn cluster factorCluster contains=factorComment,factorKeyword,factorRepeat,factorConditional,factorBoolean,factorCompileDirective,factorString,factorSbuf,@factorNumber,@factorNumErr,factorDelimiter,factorChar,factorCharErr,factorBackslash,@factorWordOps,factorAlien,factorTuple
|
|
|
|
syn match factorTodo /\(TODO\|FIXME\|XXX\):\=/ contained
|
|
syn match factorComment /\<#! .*/ contains=factorTodo
|
|
syn match factorComment /\<! .*/ contains=factorTodo
|
|
|
|
syn cluster factorDefnContents contains=@factorCluster,factorStackEffect,factorArray0,factorQuotation0
|
|
|
|
syn region factorDefn matchgroup=factorDefnDelims start=/\<\(MACRO\|MACRO::\|MEMO:\|MEMO::\|:\|::\)\?:\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
|
|
syn region factorMethod matchgroup=factorMethodDelims start=/\<M:\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
|
|
syn region factorGeneric matchgroup=factorGenericDelims start=/\<GENERIC:\s\+\S\+\>/ end=/$/ contains=factorStackEffect
|
|
syn region factorGenericN matchgroup=factorGenericNDelims start=/\<GENERIC#\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect
|
|
|
|
syn region factorPrivateDefn matchgroup=factorPrivateDefnDelims start=/\<\(MACRO\|MACRO::\|MEMO:\|MEMO::\|:\|::\)\?:\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
|
|
syn region factorPrivateMethod matchgroup=factorPrivateMethodDelims start=/\<M:\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
|
|
syn region factorPGeneric matchgroup=factorPGenericDelims start=/\<GENERIC:\s\+\S\+\>/ end=/$/ contains=factorStackEffect contained
|
|
syn region factorPGenericN matchgroup=factorPGenericNDelims start=/\<GENERIC#\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect
|
|
|
|
syn region None matchgroup=factorPrivate start=/\<<PRIVATE\>/ end=/\<PRIVATE>\>/ contains=@factorDefnContents,factorPrivateDefn,factorPrivateMethod,factorPGeneric,factorPGenericN
|
|
|
|
|
|
syn keyword factorBoolean boolean f general-t t
|
|
syn keyword factorCompileDirective inline foldable parsing
|
|
|
|
<%
|
|
|
|
! uncomment this if you want all words from all vocabularies highlighted. Note
|
|
! that this changes factor.vim from around 8k to around 100k (and is a bit
|
|
! broken)
|
|
|
|
! vocabs [ print-keywords ] each
|
|
|
|
{
|
|
"kernel" "assocs" "combinators" "math" "sequences"
|
|
"namespaces" "arrays" "io" "strings" "vectors"
|
|
"continuations"
|
|
} [ print-keywords ] each
|
|
%>
|
|
|
|
syn cluster factorReal contains=factorInt,factorFloat,factorRatio,factorBinary,factorHex,factorOctal
|
|
syn cluster factorNumber contains=@factorReal,factorComplex
|
|
syn cluster factorNumErr contains=factorBinErr,factorHexErr,factorOctErr
|
|
syn match factorInt /\<-\=\d\+\>/
|
|
syn match factorFloat /\<-\=\d*\.\d\+\>/
|
|
syn match factorRatio /\<-\=\d*\.*\d\+\/-\=\d*\.*\d\+\>/
|
|
syn region factorComplex start=/\<C{\>/ end=/\<}\>/ contains=@factorReal
|
|
syn match factorBinErr /\<BIN:\s\+[01]*[^\s01]\S*\>/
|
|
syn match factorBinary /\<BIN:\s\+[01]\+\>/
|
|
syn match factorHexErr /\<HEX:\s\+\x*[^\x\s]\S*\>/
|
|
syn match factorHex /\<HEX:\s\+\x\+\>/
|
|
syn match factorOctErr /\<OCT:\s\+\o*[^\o\s]\S*\>/
|
|
syn match factorOctal /\<OCT:\s\+\o\+\>/
|
|
|
|
syn match factorIn /\<IN:\s\+\S\+\>/
|
|
syn match factorUse /\<USE:\s\+\S\+\>/
|
|
syn match factorUnuse /\<UNUSE:\s\+\S\+\>/
|
|
|
|
syn match factorCharErr /\<CHAR:\s\+\S\+/
|
|
syn match factorChar /\<CHAR:\s\+\\\=\S\>/
|
|
|
|
syn match factorBackslash /\<\\\>\s\+\S\+\>/
|
|
|
|
syn region factorUsing start=/\<USING:\>/ end=/;/
|
|
syn region factorSingletons start=/\<SINGLETONS:\>/ end=/;/
|
|
syn match factorSymbol /\<SYMBOL:\s\+\S\+\>/
|
|
syn region factorSymbols start=/\<SYMBOLS:\>/ end=/;/
|
|
syn region factorConstructor2 start=/\<CONSTRUCTOR:\?/ end=/;/
|
|
syn region factorTuple start=/\<TUPLE:\>/ end=/\<;\>/
|
|
|
|
syn match factorConstant /\<CONSTANT:\s\+\S\+\>/
|
|
syn match factorSingleton /\<SINGLETON:\s\+\S\+\>/
|
|
syn match factorPostpone /\<POSTPONE:\s\+\S\+\>/
|
|
syn match factorDefer /\<DEFER:\s\+\S\+\>/
|
|
syn match factorForget /\<FORGET:\s\+\S\+\>/
|
|
syn match factorMixin /\<MIXIN:\s\+\S\+\>/
|
|
syn match factorInstance /\<INSTANCE:\s\+\S\+\s\+\S\+\>/
|
|
syn match factorHook /\<HOOK:\s\+\S\+\s\+\S\+\>/
|
|
syn match factorMain /\<MAIN:\s\+\S\+\>/
|
|
syn match factorConstructor /\<C:\s\+\S\+\s\+\S\+\>/
|
|
syn match factorAlien /\<ALIEN:\s\+\d\+\>/
|
|
|
|
syn cluster factorWordOps contains=factorSymbol,factorPostpone,factorDefer,factorForget,factorMixin,factorInstance,factorHook,factorMain,factorConstructor
|
|
|
|
|
|
"TODO:
|
|
"misc:
|
|
" HELP:
|
|
" ARTICLE:
|
|
"literals:
|
|
" PRIMITIVE:
|
|
|
|
"C interface:
|
|
" FIELD:
|
|
" BEGIN-STRUCT:
|
|
" C-ENUM:
|
|
" FUNCTION:
|
|
" END-STRUCT
|
|
" DLL"
|
|
" TYPEDEF:
|
|
" LIBRARY:
|
|
" C-UNION:
|
|
"QUALIFIED:
|
|
"QUALIFIED-WITH:
|
|
"FROM:
|
|
"ALIAS:
|
|
"! POSTPONE: "
|
|
"#\ "
|
|
|
|
syn region factorString start=/"/ skip=/\\"/ end=/"/ oneline
|
|
syn region factorSbuf start=/SBUF" / skip=/\\"/ end=/"/ oneline
|
|
|
|
syn region factorMultiString matchgroup=factorMultiStringDelims start=/\<STRING:\s\+\S\+\>/ end=/^;$/ contains=factorMultiStringContents
|
|
syn match factorMultiStringContents /.*/ contained
|
|
|
|
"syn match factorStackEffectErr /\<)\>/
|
|
"syn region factorStackEffectErr start=/\<(\>/ end=/\<)\>/
|
|
syn region factorStackEffect start=/\<(\>/ end=/\<)\>/ contained
|
|
|
|
"adapted from lisp.vim
|
|
if exists("g:factor_norainbow")
|
|
syn region factorQuotation matchgroup=factorDelimiter start=/\<\[\>/ matchgroup=factorDelimiter end=/\<\]\>/ contains=ALL
|
|
else
|
|
syn region factorQuotation0 matchgroup=hlLevel0 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation1,factorArray1
|
|
syn region factorQuotation1 contained matchgroup=hlLevel1 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation2,factorArray2
|
|
syn region factorQuotation2 contained matchgroup=hlLevel2 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation3,factorArray3
|
|
syn region factorQuotation3 contained matchgroup=hlLevel3 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation4,factorArray4
|
|
syn region factorQuotation4 contained matchgroup=hlLevel4 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation5,factorArray5
|
|
syn region factorQuotation5 contained matchgroup=hlLevel5 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation6,factorArray6
|
|
syn region factorQuotation6 contained matchgroup=hlLevel6 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation7,factorArray7
|
|
syn region factorQuotation7 contained matchgroup=hlLevel7 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation8,factorArray8
|
|
syn region factorQuotation8 contained matchgroup=hlLevel8 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation9,factorArray9
|
|
syn region factorQuotation9 contained matchgroup=hlLevel9 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation0,factorArray0
|
|
endif
|
|
|
|
if exists("g:factor_norainbow")
|
|
syn region factorArray matchgroup=factorDelimiter start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ matchgroup=factorDelimiter end=/\<}\>/ contains=ALL
|
|
else
|
|
syn region factorArray0 matchgroup=hlLevel0 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray1,factorQuotation1
|
|
syn region factorArray1 contained matchgroup=hlLevel1 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray2,factorQuotation2
|
|
syn region factorArray2 contained matchgroup=hlLevel2 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray3,factorQuotation3
|
|
syn region factorArray3 contained matchgroup=hlLevel3 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray4,factorQuotation4
|
|
syn region factorArray4 contained matchgroup=hlLevel4 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray5,factorQuotation5
|
|
syn region factorArray5 contained matchgroup=hlLevel5 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray6,factorQuotation6
|
|
syn region factorArray6 contained matchgroup=hlLevel6 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray7,factorQuotation7
|
|
syn region factorArray7 contained matchgroup=hlLevel7 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray8,factorQuotation8
|
|
syn region factorArray8 contained matchgroup=hlLevel8 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray9,factorQuotation9
|
|
syn region factorArray9 contained matchgroup=hlLevel9 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray0,factorQuotation0
|
|
endif
|
|
|
|
syn match factorBracketErr /\<\]\>/
|
|
syn match factorBracketErr /\<}\>/
|
|
|
|
syn sync lines=100
|
|
|
|
if version >= 508 || !exists("did_factor_syn_inits")
|
|
if version <= 508
|
|
let did_factor_syn_inits = 1
|
|
command -nargs=+ HiLink hi link <args>
|
|
else
|
|
command -nargs=+ HiLink hi def link <args>
|
|
endif
|
|
|
|
HiLink factorComment Comment
|
|
HiLink factorStackEffect Typedef
|
|
HiLink factorTodo Todo
|
|
HiLink factorInclude Include
|
|
HiLink factorRepeat Repeat
|
|
HiLink factorConditional Conditional
|
|
HiLink factorKeyword Keyword
|
|
HiLink factorOperator Operator
|
|
HiLink factorBoolean Boolean
|
|
HiLink factorDefnDelims Typedef
|
|
HiLink factorMethodDelims Typedef
|
|
HiLink factorGenericDelims Typedef
|
|
HiLink factorGenericNDelims Typedef
|
|
HiLink factorConstructor Typedef
|
|
HiLink factorConstructor2 Typedef
|
|
HiLink factorPrivate Special
|
|
HiLink factorPrivateDefnDelims Special
|
|
HiLink factorPrivateMethodDelims Special
|
|
HiLink factorPGenericDelims Special
|
|
HiLink factorPGenericNDelims Special
|
|
HiLink factorString String
|
|
HiLink factorSbuf String
|
|
HiLink factorMultiStringContents String
|
|
HiLink factorMultiStringDelims Typedef
|
|
HiLink factorBracketErr Error
|
|
HiLink factorComplex Number
|
|
HiLink factorRatio Number
|
|
HiLink factorBinary Number
|
|
HiLink factorBinErr Error
|
|
HiLink factorHex Number
|
|
HiLink factorHexErr Error
|
|
HiLink factorOctal Number
|
|
HiLink factorOctErr Error
|
|
HiLink factorFloat Float
|
|
HiLink factorInt Number
|
|
HiLink factorUsing Include
|
|
HiLink factorUse Include
|
|
HiLink factorUnuse Include
|
|
HiLink factorIn Define
|
|
HiLink factorChar Character
|
|
HiLink factorCharErr Error
|
|
HiLink factorDelimiter Delimiter
|
|
HiLink factorBackslash Special
|
|
HiLink factorCompileDirective Typedef
|
|
HiLink factorSymbol Define
|
|
HiLink factorConstant Define
|
|
HiLink factorSingleton Define
|
|
HiLink factorSingletons Define
|
|
HiLink factorMixin Typedef
|
|
HiLink factorInstance Typedef
|
|
HiLink factorHook Typedef
|
|
HiLink factorMain Define
|
|
HiLink factorPostpone Define
|
|
HiLink factorDefer Define
|
|
HiLink factorForget Define
|
|
HiLink factorAlien Define
|
|
HiLink factorTuple Typedef
|
|
|
|
if &bg == "dark"
|
|
hi hlLevel0 ctermfg=red guifg=red1
|
|
hi hlLevel1 ctermfg=yellow guifg=orange1
|
|
hi hlLevel2 ctermfg=green guifg=yellow1
|
|
hi hlLevel3 ctermfg=cyan guifg=greenyellow
|
|
hi hlLevel4 ctermfg=magenta guifg=green1
|
|
hi hlLevel5 ctermfg=red guifg=springgreen1
|
|
hi hlLevel6 ctermfg=yellow guifg=cyan1
|
|
hi hlLevel7 ctermfg=green guifg=slateblue1
|
|
hi hlLevel8 ctermfg=cyan guifg=magenta1
|
|
hi hlLevel9 ctermfg=magenta guifg=purple1
|
|
else
|
|
hi hlLevel0 ctermfg=red guifg=red3
|
|
hi hlLevel1 ctermfg=darkyellow guifg=orangered3
|
|
hi hlLevel2 ctermfg=darkgreen guifg=orange2
|
|
hi hlLevel3 ctermfg=blue guifg=yellow3
|
|
hi hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
|
|
hi hlLevel5 ctermfg=red guifg=green4
|
|
hi hlLevel6 ctermfg=darkyellow guifg=paleturquoise3
|
|
hi hlLevel7 ctermfg=darkgreen guifg=deepskyblue4
|
|
hi hlLevel8 ctermfg=blue guifg=darkslateblue
|
|
hi hlLevel9 ctermfg=darkmagenta guifg=darkviolet
|
|
endif
|
|
|
|
delcommand HiLink
|
|
endif
|
|
|
|
let b:current_syntax = "factor"
|
|
|
|
set sw=4
|
|
set ts=4
|
|
set expandtab
|
|
set autoindent " annoying?
|
|
|
|
" vim: syntax=vim
|