263 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
<% USING: kernel io prettyprint vocabs sequences ;
 | 
						|
%>" Vim syntax file
 | 
						|
" Language:	factor
 | 
						|
" Maintainer:	Alex Chapman <chapman.alex@gmail.com>
 | 
						|
" Last Change:	2008 Apr 28
 | 
						|
 | 
						|
" 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\|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\|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 [ words [ "syn keyword factorKeyword " write [ pprint " " write ] each "\n" write ] when* ] each
 | 
						|
%>
 | 
						|
 | 
						|
" kernel vocab keywords
 | 
						|
<% { "kernel" "assocs" "combinators" "math" "sequences" "namespaces" "arrays" "io" "strings" "vectors" "continuations" } [
 | 
						|
       words "syn keyword factorKeyword " write [ pprint " " write ] each "\n" write
 | 
						|
   ] 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 factorCharErr /\<CHAR:\s\+\S\+/
 | 
						|
syn match factorChar /\<CHAR:\s\+\\\=\S\>/
 | 
						|
 | 
						|
syn match factorBackslash /\<\\\>\s\+\S\+\>/
 | 
						|
 | 
						|
syn region factorUsing start=/\<USING:\>/ end=/;/
 | 
						|
syn region factorRequires start=/\<REQUIRES:\>/ end=/;/
 | 
						|
 | 
						|
syn cluster factorWordOps contains=factorSymbol,factorPostpone,factorDefer,factorForget,factorMixin,factorInstance,factorHook,factorMain,factorConstructor
 | 
						|
syn match factorSymbol /\<SYMBOL:\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 region factorTuple start=/\<TUPLE:\>/ end=/\<;\>/
 | 
						|
 | 
						|
"TODO:
 | 
						|
"misc:
 | 
						|
" HELP:
 | 
						|
" ARTICLE:
 | 
						|
"literals:
 | 
						|
" PRIMITIVE:
 | 
						|
 | 
						|
"C interface:
 | 
						|
" FIELD:
 | 
						|
" BEGIN-STRUCT:
 | 
						|
" C-ENUM:
 | 
						|
" FUNCTION:
 | 
						|
" END-STRUCT
 | 
						|
" DLL"
 | 
						|
" TYPEDEF:
 | 
						|
" LIBRARY:
 | 
						|
" C-UNION:
 | 
						|
 | 
						|
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 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 factorRequires       Include
 | 
						|
    HiLink factorIn             Define
 | 
						|
    HiLink factorChar           Character
 | 
						|
    HiLink factorCharErr        Error
 | 
						|
    HiLink factorDelimiter      Delimiter
 | 
						|
    HiLink factorBackslash      Special
 | 
						|
    HiLink factorCompileDirective Typedef
 | 
						|
    HiLink factorSymbol         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
 |