Initial commit of newLISP.
[newlisp.git] / util / newlisp.vim
blob3cbd073e15b51fd61d74e09e1e029863ec4385ee
1 " Vim syntax file
2 " Language:     newLISP
3 " Maintainer:   Cyril Slobin <slobin@ice.ru>
4 " URL:          http://www.vim.org/scripts/script.php?script_id=2067
5 " Another URL:  http://wagner.pp.ru/~slobin/vim/syntax/newlisp.vim
6 " Started at:   2007 Nov 07 (The Great Revolution 90th Anniversary)
7 " Last change:  2008 Feb 28
8 " newLISP site: http://www.newlisp.org/
10 " $Id: newlisp.vim,v 1.19 2008-02-28 21:10:00+03 slobin Exp $
12 " This was the alternative Vim syntax file for the newLISP language.
13 " Now it is the official Vim syntax file! I am a celebrity! Wow!
15 " *** Some syntax quirks of newLISP and how this file treats them: ***
16 "  
17 " * In the following text, the word "character" refers to the ASCII
18 "   characters, and the word "symbol" to the lisp symbols (= atoms).
19
20 " * All built-in symbols are in the same class (Statement); functions,
21 "   definitions, macros and control structures aren't distinguished.
22
23 " * Special syntax for : character (colon) is underway, meantime it is
24 "   just highlighted and not checked otherwise.
26 " * Quoting character ' (apostrophe) is allowed anywhere, even before
27 "   closing parenthesis. Interpreter uses it this way, this file just
28 "   does the same.
30 " * newLISP interpreter doesn't insist that numbers must be separated
31 "   from the following numbers or symbols. E.g. the sequence 1.2.3e4e5
32 "   is valid and equal to three tokens 1.2 .3e4 e5. Such a monster is
33 "   rather a typo than someones intent, so it is marked as an error.
34
35 " * If a backlash character \ in a quoted string is not followed by
36 "   a valid escape sequence, the interpreter doesn't alarm you, it
37 "   just silently removes this character from the string. E.g. the
38 "   string "a\b" is equal to the string "ab". Again, this is rather
39 "   a typo than someones intent, so it is marked as an error.
41 " * Brackets [ ] and braces { } are used by newLISP as the alternate
42 "   string delimiters. Although, when they doesn't fit into delimiter
43 "   syntax, they treated by interpreter as the ordinary characters.
44 "   E.g. {string} is a string while string} is symbol, or [text] is
45 "   a string delimiter while text] is a symbol. Such a symbols are
46 "   rather typos than someones intent, so they are marked as errors.
47
48 " * Starting from version 1.13 of this file, the feature of selective
49 "   errors disabling was itself disabled. If you want NOT to highlight
50 "   nested left parenthesis in the first column, just put the line:
52 "     hi link newlispLeftParenError newlispParenthesis
54 "   in your .vimrc file, similarly for all other errors.
56 " * This syntax file is not compatible with Vim version 5.x and elder.
57 "   Where have you dug them out? In fact I haven't tested it even with
58 "   version 6.x - I all do my development with 7.1.175.
60 if exists("b:current_syntax")
61   finish
62 endif
64 syntax case match
66 setlocal iskeyword=33,36-38,42,43,45-47,48-57,60-64,@,92,94,_,124,126
68 syn region newlispComment oneline start="[;#]" end="$" contains=newlispTodo,@Spell
69 syn keyword newlispTodo FIXME TODO XXX contained
71 syn region newlispDocComment start="^;;\(\s\|$\)" end="^\(;;\(\s\|$\)\)\@!" contains=newlispTodo,newlispDocExample,newlispDocKeyword,newlispDocItalic,newlispDocMonospace,newlispDocHTMLTag,newlispDocHTMLEntity,@Spell
72 syn region newlispDocExample matchgroup=newlispDocKeyword start="^;;\s@example$"ms=s+3 matchgroup=NONE end="^\(;;\(\s\|$\)\)\@!" contained
73 syn match newlispDocKeyword "^;;\s@\(module\|index\|description\|location\|version\|author\|syntax\|param\|return\)\s"ms=s+3,me=e-1 contained
74 syn match newlispDocKeyword "@link\s"me=e-1 contained
75 syn match newlispDocItalic "<[^<>]\+>"hs=s+1,he=e-1 contained
76 syn match newlispDocMonospace "'[^']\+'"hs=s+1,he=e-1 contained
77 syn match newlispDocHTMLTag "<\/\=\(h1\|h2\|h3\|h4\|i\|em\|b\|tt\|p\|pre\|center\|li\|ul\|blockquote\)>" contained
78 syn match newlispDocHTMLTag "<\(br\|hr\)\/\=>" contained
79 syn match newlispDocHTMLEntity "&\w\+;" contained
81 syn cluster newlispListContent contains=TOP,newlispRightParenError
82 syn region newlispList matchgroup=newlispParenthesis start="(" end=")" contains=@newlispListContent,newlispListError
83 syn region newlispListError matchgroup=newlispLeftParenError start="^(" matchgroup=newlispParenthesis end=")" contains=@newlispListContent,newlispListError contained
84 syn match newlispRightParenError ")"
86 syn match newlispSymbol "\<\([+-]\=\d\)\@!\k\+\>"
87 syn match newlispSymbolSpecial "\<\([+-]\=\d\)\@!\k*\W\>"
88 syn match newlispSymbolSpecial "\<[A-Z_][0-9A-Z_]*\>"
90 syn match newlispQuote "'" nextgroup=newlispQuote,newlispQuotedSymbol skipwhite
91 syn match newlispQuotedSymbol "\<\([+-]\=\d\)\@!\k\+\>" contained
93 syn match newlispNumberError "\<[+-]\=\d\k\+\>"
94 syn match newlispNumberDec "\<[+-]\=[1-9]\d*\>"
95 syn match newlispNumberOct "\<[+-]\=0\o*\>"
96 syn match newlispNumberHex "\<[+-]\=0[Xx]\x\+\>"
98 syn match newlispFloat "\<[+-]\=\d\+[Ee][+-]\=\d\+\>"
99 syn match newlispFloat "\<[+-]\=\.\d\+\([Ee][+-]\=\d\+\)\=\>"
100 syn match newlispFloat "\<[+-]\=\d\+\.\d*\([Ee][+-]\=\d\+\)\=\>"
102 syn region newlispStringQuoted start=+"+ skip=+\\"+ end=+"+ contains=newlispEscapeError,newlispEscape
103 syn match newlispEscapeError +\\+ contained
104 syn match newlispEscape +\\["\\nrt]+ contained
105 syn match newlispEscape +\\\d\d\d+ contained
106 syn match newlispEscape +\\x\x\x+ contained
108 syn match newlispBracketError "[][}{]"
110 syn region newlispStringBraced start="{" end="}" contains=newlispStringBraced
111 syn region newlispStringTexted start="\[text\]" end="\[\/text\]"
113 " This keywords list is based on newLISP v.9.3 release primes.h file 
115 syn keyword newlispFunction ! != $ % & * + - / : < << <= = > >= >> NaN? ^ abs acos acosh add address
116 syn keyword newlispFunction amb and append append-file apply args array array-list array? asin asinh
117 syn keyword newlispFunction assoc assoc-set atan atan2 atanh atom? base64-dec base64-enc bayes-query
118 syn keyword newlispFunction bayes-train begin beta betai bind binomial callback case catch ceil
119 syn keyword newlispFunction change-dir char chop clean close command-line cond cons constant context
120 syn keyword newlispFunction context? copy-file cos cosh count cpymem crc32 crit-chi2 crit-z
121 syn keyword newlispFunction current-line curry date date-value debug dec def-new default define
122 syn keyword newlispFunction define-macro delete delete-file delete-url destroy det device difference
123 syn keyword newlispFunction directory directory? div do-until do-while doargs dolist dostring
124 syn keyword newlispFunction dotimes dotree dump dump-symbol dup empty? encrypt ends-with env erf
125 syn keyword newlispFunction error-event error-number error-text eval eval-string exec exists exit
126 syn keyword newlispFunction exp expand explode factor fft file-info file? filter find find-all first
127 syn keyword newlispFunction flat float float? floor flt for for-all fork format fv gammai gammaln
128 syn keyword newlispFunction gcd get-char get-float get-int get-long get-string get-url global
129 syn keyword newlispFunction global? if ifft import inc index int integer integer? intersect invert
130 syn keyword newlispFunction irr join lambda? last legal? length let letex letn list list? load local
131 syn keyword newlispFunction log lookup lower-case macro? main-args make-dir map mat match max member
132 syn keyword newlispFunction min mod mul multiply name net-accept net-close net-connect net-error
133 syn keyword newlispFunction net-eval net-listen net-local net-lookup net-peek net-peer net-ping
134 syn keyword newlispFunction net-receive net-receive-from net-receive-udp net-select net-send
135 syn keyword newlispFunction net-send-to net-send-udp net-service net-sessions new nil? normal not
136 syn keyword newlispFunction now nper npv nth nth-set null? number? open or pack parse parse-date
137 syn keyword newlispFunction peek pipe pmt pop pop-assoc post-url pow pretty-print primitive? print
138 syn keyword newlispFunction println prob-chi2 prob-z process protected? push put-url pv quote quote?
139 syn keyword newlispFunction rand random randomize read-buffer read-char read-file read-key read-line
140 syn keyword newlispFunction real-path ref ref-all ref-set regex remove-dir rename-file replace
141 syn keyword newlispFunction replace-assoc reset rest reverse rotate round save search seed seek
142 syn keyword newlispFunction select semaphore sequence series set set-assoc set-locale set-nth
143 syn keyword newlispFunction set-ref set-ref-all setq sgn share signal silent sin sinh sleep slice
144 syn keyword newlispFunction sort source sqrt starts-with string string? sub swap sym symbol? symbols
145 syn keyword newlispFunction sys-error sys-info tan tanh throw throw-error time time-of-day timer
146 syn keyword newlispFunction title-case trace trace-highlight transpose trim true? unicode unify
147 syn keyword newlispFunction unique unless unpack until upper-case utf8 utf8len uuid wait-pid when
148 syn keyword newlispFunction while write-buffer write-char write-file write-line xml-error xml-parse
149 syn keyword newlispFunction xml-type-tags zero? \| ~
151 syn keyword newlispFunction read " introduced in newLISP 9.3.1
153 syn keyword newlispKeyword fn lambda
154 syn keyword newlispVariable ostype $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $args $idx $main-args 
156 syn match newlispColon ":"
157 syn match newlispComma ","
159 syn keyword newlispBoolean nil true
161 hi def link newlispNumberDec newlispNumber
162 hi def link newlispNumberOct newlispNumber
163 hi def link newlispNumberHex newlispNumber
165 hi def link newlispStringQuoted newlispString
166 hi def link newlispStringBraced newlispString
167 hi def link newlispStringTexted newlispString
169 hi def link newlispLeftParenError newlispError
170 hi def link newlispRightParenError newlispError
171 hi def link newlispNumberError newlispError
172 hi def link newlispEscapeError newlispError
173 hi def link newlispBracketError newlispError
175 hi def link newlispComment Comment
176 hi def link newlispTodo Todo
177 hi def link newlispDocComment Comment
178 hi def link newlispDocExample Comment
179 hi def link newlispDocKeyword Type
180 hi def link newlispDocItalic CommentItalic
181 hi def link newlispDocMonospace CommentUnderlined
182 hi def link newlispDocHTMLTag Statement
183 hi def link newlispDocHTMLEntity Special
184 hi def link newlispList Normal
185 hi def link newlispParenthesis Delimiter
186 hi def link newlispSymbol Identifier
187 hi def link newlispSymbolSpecial Type
188 hi def link newlispQuote Type
189 hi def link newlispQuotedSymbol Type
190 hi def link newlispNumber Number
191 hi def link newlispFloat Float
192 hi def link newlispString String
193 hi def link newlispEscape Special
194 hi def link newlispFunction Statement
195 hi def link newlispKeyword Statement
196 hi def link newlispVariable Statement
197 hi def link newlispColon Type
198 hi def link newlispComma Type
199 hi def link newlispBoolean Boolean
200 hi def link newlispError Error
202 " CommentItalic and CommentUnderlined groups have the same colors as
203 " plain Comment, but italic and underlined respectively. Therefore we
204 " need to recalculate those attributes on each colorscheme change.
206 function! s:color_of(where, what)
207   let val = synIDattr(hlID("Comment"), a:what, a:where)
208   return val == "" || val == -1 ? "" : printf(" %s%s=%s", a:where, a:what, val)
209 endfunction
211 function! s:set_colors()
212   let colors =  s:color_of("cterm", "fg") . s:color_of("cterm", "bg") . s:color_of("gui", "fg") . s:color_of("gui", "bg")
213   exec "hi CommentItalic term=italic cterm=italic gui=italic" . colors
214   exec "hi CommentUnderlined term=underline cterm=underline gui=underline" . colors
215 endfunction
217 au ColorScheme <buffer> call s:set_colors()
218 call s:set_colors()
220 let b:current_syntax = "newlisp"
222 " vim: textwidth=70