1" Vim syntax file
2" Language:     Inform
3" Maintainer:   Stephen Thomas (stephen@gowarthomas.com)
4" URL:		http://www.gowarthomas.com/informvim
5" Last Change:  2006 April 20
6
7" Quit when a syntax file was already loaded
8if version < 600
9  syntax clear
10elseif exists("b:current_syntax")
11  finish
12endif
13
14" A bunch of useful Inform keywords.  First, case insensitive stuff
15
16syn case ignore
17
18syn keyword informDefine Constant
19
20syn keyword informType Array Attribute Class Nearby
21syn keyword informType Object Property String Routine
22syn match   informType "\<Global\>"
23
24syn keyword informInclude Import Include Link Replace System_file
25
26syn keyword informPreCondit End Endif Ifdef Ifndef Iftrue Iffalse Ifv3 Ifv5
27syn keyword informPreCondit Ifnot
28
29syn keyword informPreProc Abbreviate Default Fake_action Lowstring
30syn keyword informPreProc Message Release Serial Statusline Stub Switches
31syn keyword informPreProc Trace Zcharacter
32
33syn region  informGlobalRegion matchgroup=informType start="\<Global\>" matchgroup=NONE skip=+!.*$\|".*"\|'.*'+ end=";" contains=ALLBUT,informGramPreProc,informPredicate,informGrammar,informAsm,informAsmObsolete
34
35syn keyword informGramPreProc contained Verb Extend
36
37if !exists("inform_highlight_simple")
38  syn keyword informLibAttrib absent animate clothing concealed container
39  syn keyword informLibAttrib door edible enterable female general light
40  syn keyword informLibAttrib lockable locked male moved neuter on open
41  syn keyword informLibAttrib openable pluralname proper scenery scored
42  syn keyword informLibAttrib static supporter switchable talkable
43  syn keyword informLibAttrib visited workflag worn
44  syn match informLibAttrib "\<transparent\>"
45
46  syn keyword informLibProp e_to se_to s_to sw_to w_to nw_to n_to ne_to
47  syn keyword informLibProp u_to d_to in_to out_to before after life
48  syn keyword informLibProp door_to with_key door_dir invent plural
49  syn keyword informLibProp add_to_scope list_together react_before
50  syn keyword informLibProp react_after grammar orders initial when_open
51  syn keyword informLibProp when_closed when_on when_off description
52  syn keyword informLibProp describe article cant_go found_in time_left
53  syn keyword informLibProp number time_out daemon each_turn capacity
54  syn keyword informLibProp name short_name short_name_indef parse_name
55  syn keyword informLibProp articles inside_description
56  if !exists("inform_highlight_old")
57    syn keyword informLibProp compass_look before_implicit
58    syn keyword informLibProp ext_initialise ext_messages
59  endif
60
61  syn keyword informLibObj e_obj se_obj s_obj sw_obj w_obj nw_obj n_obj
62  syn keyword informLibObj ne_obj u_obj d_obj in_obj out_obj compass
63  syn keyword informLibObj thedark selfobj player location second actor
64  syn keyword informLibObj noun
65  if !exists("inform_highlight_old")
66    syn keyword informLibObj LibraryExtensions
67  endif
68
69  syn keyword informLibRoutine Achieved AfterRoutines AddToScope
70  syn keyword informLibRoutine AllowPushDir Banner ChangeDefault
71  syn keyword informLibRoutine ChangePlayer CommonAncestor DictionaryLookup
72  syn keyword informLibRoutine DisplayStatus DoMenu DrawStatusLine
73  syn keyword informLibRoutine EnglishNumber HasLightSource GetGNAOfObject
74  syn keyword informLibRoutine IndirectlyContains IsSeeThrough Locale
75  syn keyword informLibRoutine LoopOverScope LTI_Insert MoveFloatingObjects
76  syn keyword informLibRoutine NextWord NextWordStopped NounDomain
77  syn keyword informLibRoutine ObjectIsUntouchable OffersLight ParseToken
78  syn keyword informLibRoutine PlaceInScope PlayerTo PrintShortName
79  syn keyword informLibRoutine PronounNotice ScopeWithin SetPronoun SetTime
80  syn keyword informLibRoutine StartDaemon StartTimer StopDaemon StopTimer
81  syn keyword informLibRoutine TestScope TryNumber UnsignedCompare
82  syn keyword informLibRoutine WordAddress WordInProperty WordLength
83  syn keyword informLibRoutine WriteListFrom YesOrNo ZRegion RunRoutines
84  syn keyword informLibRoutine AfterLife AfterPrompt Amusing BeforeParsing
85  syn keyword informLibRoutine ChooseObjects DarkToDark DeathMessage
86  syn keyword informLibRoutine GamePostRoutine GamePreRoutine Initialise
87  syn keyword informLibRoutine InScope LookRoutine NewRoom ParseNoun
88  syn keyword informLibRoutine ParseNumber ParserError PrintRank PrintVerb
89  syn keyword informLibRoutine PrintTaskName TimePasses UnknownVerb
90  if exists("inform_highlight_glulx")
91     syn keyword informLibRoutine  IdentifyGlkObject HandleGlkEvent
92     syn keyword informLibRoutine  InitGlkWindow
93  endif
94  if !exists("inform_highlight_old")
95     syn keyword informLibRoutine  KeyCharPrimitive KeyDelay ClearScreen
96     syn keyword informLibRoutine  MoveCursor MainWindow StatusLineHeight
97     syn keyword informLibRoutine  ScreenWidth ScreenHeight SetColour
98     syn keyword informLibRoutine  DecimalNumber PrintToBuffer Length
99     syn keyword informLibRoutine  UpperCase LowerCase PrintCapitalised
100     syn keyword informLibRoutine  Cap Centre
101     if exists("inform_highlight_glulx")
102	syn keyword informLibRoutine  PrintAnything PrintAnyToArray
103     endif
104  endif
105
106  syn keyword informLibAction  Quit Restart Restore Verify Save
107  syn keyword informLibAction  ScriptOn ScriptOff Pronouns Score
108  syn keyword informLibAction  Fullscore LMode1 LMode2 LMode3
109  syn keyword informLibAction  NotifyOn NotifyOff Version Places
110  syn keyword informLibAction  Objects TraceOn TraceOff TraceLevel
111  syn keyword informLibAction  ActionsOn ActionsOff RoutinesOn
112  syn keyword informLibAction  RoutinesOff TimersOn TimersOff
113  syn keyword informLibAction  CommandsOn CommandsOff CommandsRead
114  syn keyword informLibAction  Predictable XPurloin XAbstract XTree
115  syn keyword informLibAction  Scope Goto Gonear Inv InvTall InvWide
116  syn keyword informLibAction  Take Drop Remove PutOn Insert Transfer
117  syn keyword informLibAction  Empty Enter Exit GetOff Go Goin Look
118  syn keyword informLibAction  Examine Search Give Show Unlock Lock
119  syn keyword informLibAction  SwitchOn SwitchOff Open Close Disrobe
120  syn keyword informLibAction  Wear Eat Yes No Burn Pray Wake
121  syn keyword informLibAction  WakeOther Consult Kiss Think Smell
122  syn keyword informLibAction  Listen Taste Touch Dig Cut Jump
123  syn keyword informLibAction  JumpOver Tie Drink Fill Sorry Strong
124  syn keyword informLibAction  Mild Attack Swim Swing Blow Rub Set
125  syn keyword informLibAction  SetTo WaveHands Wave Pull Push PushDir
126  syn keyword informLibAction  Turn Squeeze LookUnder ThrowAt Tell
127  syn keyword informLibAction  Answer Buy Ask AskFor Sing Climb Wait
128  syn keyword informLibAction  Sleep LetGo Receive ThrownAt Order
129  syn keyword informLibAction  TheSame PluralFound Miscellany Prompt
130  syn keyword informLibAction  ChangesOn ChangesOff Showverb Showobj
131  syn keyword informLibAction  EmptyT VagueGo
132  if exists("inform_highlight_glulx")
133     syn keyword informLibAction  GlkList
134  endif
135
136  syn keyword informLibVariable keep_silent deadflag action special_number
137  syn keyword informLibVariable consult_from consult_words etype verb_num
138  syn keyword informLibVariable verb_word the_time real_location c_style
139  syn keyword informLibVariable parser_one parser_two listing_together wn
140  syn keyword informLibVariable parser_action scope_stage scope_reason
141  syn keyword informLibVariable action_to_be menu_item item_name item_width
142  syn keyword informLibVariable lm_o lm_n inventory_style task_scores
143  syn keyword informLibVariable inventory_stage
144
145  syn keyword informLibConst AMUSING_PROVIDED DEBUG Headline MAX_CARRIED
146  syn keyword informLibConst MAX_SCORE MAX_TIMERS NO_PLACES NUMBER_TASKS
147  syn keyword informLibConst OBJECT_SCORE ROOM_SCORE SACK_OBJECT Story
148  syn keyword informLibConst TASKS_PROVIDED WITHOUT_DIRECTIONS
149  syn keyword informLibConst NEWLINE_BIT INDENT_BIT FULLINV_BIT ENGLISH_BIT
150  syn keyword informLibConst RECURSE_BIT ALWAYS_BIT TERSE_BIT PARTINV_BIT
151  syn keyword informLibConst DEFART_BIT WORKFLAG_BIT ISARE_BIT CONCEAL_BIT
152  syn keyword informLibConst PARSING_REASON TALKING_REASON EACHTURN_REASON
153  syn keyword informLibConst REACT_BEFORE_REASON REACT_AFTER_REASON
154  syn keyword informLibConst TESTSCOPE_REASON LOOPOVERSCOPE_REASON
155  syn keyword informLibConst STUCK_PE UPTO_PE NUMBER_PE CANTSEE_PE TOOLIT_PE
156  syn keyword informLibConst NOTHELD_PE MULTI_PE MMULTI_PE VAGUE_PE EXCEPT_PE
157  syn keyword informLibConst ANIMA_PE VERB_PE SCENERY_PE ITGONE_PE
158  syn keyword informLibConst JUNKAFTER_PE TOOFEW_PE NOTHING_PE ASKSCOPE_PE
159  if !exists("inform_highlight_old")
160     syn keyword informLibConst WORDSIZE TARGET_ZCODE TARGET_GLULX
161     syn keyword informLibConst LIBRARY_PARSER LIBRARY_VERBLIB LIBRARY_GRAMMAR
162     syn keyword informLibConst LIBRARY_ENGLISH NO_SCORE START_MOVE
163     syn keyword informLibConst CLR_DEFAULT CLR_BLACK CLR_RED CLR_GREEN
164     syn keyword informLibConst CLR_YELLOW CLR_BLUE CLR_MAGENTA CLR_CYAN
165     syn keyword informLibConst CLR_WHITE CLR_PURPLE CLR_AZURE
166     syn keyword informLibConst WIN_ALL WIN_MAIN WIN_STATUS
167  endif
168endif
169
170" Now the case sensitive stuff.
171
172syntax case match
173
174syn keyword informSysFunc child children elder indirect parent random
175syn keyword informSysFunc sibling younger youngest metaclass
176if exists("inform_highlight_glulx")
177  syn keyword informSysFunc glk
178endif
179
180syn keyword informSysConst adjectives_table actions_table classes_table
181syn keyword informSysConst identifiers_table preactions_table version_number
182syn keyword informSysConst largest_object strings_offset code_offset
183syn keyword informSysConst dict_par1 dict_par2 dict_par3
184syn keyword informSysConst actual_largest_object static_memory_offset
185syn keyword informSysConst array_names_offset readable_memory_offset
186syn keyword informSysConst cpv__start cpv__end ipv__start ipv__end
187syn keyword informSysConst array__start array__end lowest_attribute_number
188syn keyword informSysConst highest_attribute_number attribute_names_array
189syn keyword informSysConst lowest_property_number highest_property_number
190syn keyword informSysConst property_names_array lowest_action_number
191syn keyword informSysConst highest_action_number action_names_array
192syn keyword informSysConst lowest_fake_action_number highest_fake_action_number
193syn keyword informSysConst fake_action_names_array lowest_routine_number
194syn keyword informSysConst highest_routine_number routines_array
195syn keyword informSysConst routine_names_array routine_flags_array
196syn keyword informSysConst lowest_global_number highest_global_number globals_array
197syn keyword informSysConst global_names_array global_flags_array
198syn keyword informSysConst lowest_array_number highest_array_number arrays_array
199syn keyword informSysConst array_names_array array_flags_array lowest_constant_number
200syn keyword informSysConst highest_constant_number constants_array constant_names_array
201syn keyword informSysConst lowest_class_number highest_class_number class_objects_array
202syn keyword informSysConst lowest_object_number highest_object_number
203if !exists("inform_highlight_old")
204  syn keyword informSysConst sys_statusline_flag
205endif
206
207syn keyword informConditional default else if switch
208
209syn keyword informRepeat break continue do for objectloop until while
210
211syn keyword informStatement box font give inversion jump move new_line
212syn keyword informStatement print print_ret quit read remove restore return
213syn keyword informStatement rfalse rtrue save spaces string style
214
215syn keyword informOperator roman reverse bold underline fixed on off to
216syn keyword informOperator near from
217
218syn keyword informKeyword dictionary symbols objects verbs assembly
219syn keyword informKeyword expressions lines tokens linker on off alias long
220syn keyword informKeyword additive score time string table
221syn keyword informKeyword with private has class error fatalerror
222syn keyword informKeyword warning self
223if !exists("inform_highlight_old")
224  syn keyword informKeyword buffer
225endif
226
227syn keyword informMetaAttrib remaining create destroy recreate copy call
228syn keyword informMetaAttrib print_to_array
229
230syn keyword informPredicate has hasnt in notin ofclass or
231syn keyword informPredicate provides
232
233syn keyword informGrammar contained noun held multi multiheld multiexcept
234syn keyword informGrammar contained multiinside creature special number
235syn keyword informGrammar contained scope topic reverse meta only replace
236syn keyword informGrammar contained first last
237
238syn keyword informKeywordObsolete contained initial data initstr
239
240syn keyword informTodo contained TODO
241
242" Assembly language mnemonics must be preceded by a '@'.
243
244syn match informAsmContainer "@\s*\k*" contains=informAsm,informAsmObsolete
245
246if exists("inform_highlight_glulx")
247  syn keyword informAsm contained nop add sub mul div mod neg bitand bitor
248  syn keyword informAsm contained bitxor bitnot shiftl sshiftr ushiftr jump jz
249  syn keyword informAsm contained jnz jeq jne jlt jge jgt jle jltu jgeu jgtu
250  syn keyword informAsm contained jleu call return catch throw tailcall copy
251  syn keyword informAsm contained copys copyb sexs sexb aload aloads aloadb
252  syn keyword informAsm contained aloadbit astore astores astoreb astorebit
253  syn keyword informAsm contained stkcount stkpeek stkswap stkroll stkcopy
254  syn keyword informAsm contained streamchar streamnum streamstr gestalt
255  syn keyword informAsm contained debugtrap getmemsize setmemsize jumpabs
256  syn keyword informAsm contained random setrandom quit verify restart save
257  syn keyword informAsm contained restore saveundo restoreundo protect glk
258  syn keyword informAsm contained getstringtbl setstringtbl getiosys setiosys
259  syn keyword informAsm contained linearsearch binarysearch linkedsearch
260  syn keyword informAsm contained callf callfi callfii callfiii
261else
262  syn keyword informAsm contained je jl jg dec_chk inc_chk jin test or and
263  syn keyword informAsm contained test_attr set_attr clear_attr store
264  syn keyword informAsm contained insert_obj loadw loadb get_prop
265  syn keyword informAsm contained get_prop_addr get_next_prop add sub mul div
266  syn keyword informAsm contained mod call storew storeb put_prop sread
267  syn keyword informAsm contained print_num random push pull
268  syn keyword informAsm contained split_window set_window output_stream
269  syn keyword informAsm contained input_stream sound_effect jz get_sibling
270  syn keyword informAsm contained get_child get_parent get_prop_len inc dec
271  syn keyword informAsm contained remove_obj print_obj ret jump
272  syn keyword informAsm contained load not rtrue rfalse print
273  syn keyword informAsm contained print_ret nop save restore restart
274  syn keyword informAsm contained ret_popped pop quit new_line show_status
275  syn keyword informAsm contained verify call_2s call_vs aread call_vs2
276  syn keyword informAsm contained erase_window erase_line set_cursor get_cursor
277  syn keyword informAsm contained set_text_style buffer_mode read_char
278  syn keyword informAsm contained scan_table call_1s call_2n set_colour throw
279  syn keyword informAsm contained call_vn call_vn2 tokenise encode_text
280  syn keyword informAsm contained copy_table print_table check_arg_count
281  syn keyword informAsm contained call_1n catch piracy log_shift art_shift
282  syn keyword informAsm contained set_font save_undo restore_undo draw_picture
283  syn keyword informAsm contained picture_data erase_picture set_margins
284  syn keyword informAsm contained move_window window_size window_style
285  syn keyword informAsm contained get_wind_prop scroll_window pop_stack
286  syn keyword informAsm contained read_mouse mouse_window push_stack
287  syn keyword informAsm contained put_wind_prop print_form make_menu
288  syn keyword informAsm contained picture_table
289  if !exists("inform_highlight_old")
290     syn keyword informAsm contained check_unicode print_unicode
291  endif
292  syn keyword informAsmObsolete contained print_paddr print_addr print_char
293endif
294
295" Handling for different versions of VIM.
296
297if version >= 600
298  setlocal iskeyword+=$
299  command -nargs=+ SynDisplay syntax <args> display
300else
301  set iskeyword+=$
302  command -nargs=+ SynDisplay syntax <args>
303endif
304
305" Grammar sections.
306
307syn region informGrammarSection matchgroup=informGramPreProc start="\<Verb\|Extend\>" skip=+".*"+ end=";"he=e-1 contains=ALLBUT,informAsm
308
309" Special character forms.
310
311SynDisplay match informBadAccent contained "@[^{[:digit:]]\D"
312SynDisplay match informBadAccent contained "@{[^}]*}"
313SynDisplay match informAccent contained "@:[aouAOUeiyEI]"
314SynDisplay match informAccent contained "@'[aeiouyAEIOUY]"
315SynDisplay match informAccent contained "@`[aeiouAEIOU]"
316SynDisplay match informAccent contained "@\^[aeiouAEIOU]"
317SynDisplay match informAccent contained "@\~[anoANO]"
318SynDisplay match informAccent contained "@/[oO]"
319SynDisplay match informAccent contained "@ss\|@<<\|@>>\|@oa\|@oA\|@ae\|@AE\|@cc\|@cC"
320SynDisplay match informAccent contained "@th\|@et\|@Th\|@Et\|@LL\|@oe\|@OE\|@!!\|@??"
321SynDisplay match informAccent contained "@{\x\{1,4}}"
322SynDisplay match informBadStrUnicode contained "@@\D"
323SynDisplay match informStringUnicode contained "@@\d\+"
324SynDisplay match informStringCode contained "@\d\d"
325
326" String and Character constants.  Ordering is important here.
327syn region informString start=+"+ skip=+\\\\+ end=+"+ contains=informAccent,informStringUnicode,informStringCode,informBadAccent,informBadStrUnicode
328syn region informDictString start="'" end="'" contains=informAccent,informBadAccent
329SynDisplay match informBadDictString "''"
330SynDisplay match informDictString "'''"
331
332" Integer numbers: decimal, hexadecimal and binary.
333SynDisplay match informNumber "\<\d\+\>"
334SynDisplay match informNumber "\<\$\x\+\>"
335SynDisplay match informNumber "\<\$\$[01]\+\>"
336
337" Comments
338syn match informComment "!.*" contains=informTodo
339
340" Syncronization
341syn sync match informSyncStringEnd grouphere NONE /"[;,]\s*$/
342syn sync match informSyncRoutineEnd grouphere NONE /][;,]\s*$/
343syn sync match informSyncCommentEnd grouphere NONE /^\s*!.*$/
344syn sync match informSyncRoutine groupthere informGrammarSection "\<Verb\|Extend\>"
345syn sync maxlines=500
346
347delcommand SynDisplay
348
349" The default highlighting.
350if version >= 508 || !exists("did_inform_syn_inits")
351  if version < 508
352    let did_inform_syn_inits = 1
353    command -nargs=+ HiLink hi link <args>
354  else
355    command -nargs=+ HiLink hi def link <args>
356  endif
357
358  HiLink informDefine		Define
359  HiLink informType		Type
360  HiLink informInclude		Include
361  HiLink informPreCondit	PreCondit
362  HiLink informPreProc		PreProc
363  HiLink informGramPreProc	PreProc
364  HiLink informAsm		Special
365  if !exists("inform_suppress_obsolete")
366    HiLink informAsmObsolete		informError
367    HiLink informKeywordObsolete	informError
368  else
369    HiLink informAsmObsolete		Special
370    HiLink informKeywordObsolete	Keyword
371  endif
372  HiLink informPredicate	Operator
373  HiLink informSysFunc		Identifier
374  HiLink informSysConst		Identifier
375  HiLink informConditional	Conditional
376  HiLink informRepeat		Repeat
377  HiLink informStatement	Statement
378  HiLink informOperator		Operator
379  HiLink informKeyword		Keyword
380  HiLink informGrammar		Keyword
381  HiLink informDictString	String
382  HiLink informNumber		Number
383  HiLink informError		Error
384  HiLink informString		String
385  HiLink informComment		Comment
386  HiLink informAccent		Special
387  HiLink informStringUnicode	Special
388  HiLink informStringCode	Special
389  HiLink informTodo		Todo
390  if !exists("inform_highlight_simple")
391    HiLink informLibAttrib	Identifier
392    HiLink informLibProp	Identifier
393    HiLink informLibObj		Identifier
394    HiLink informLibRoutine	Identifier
395    HiLink informLibVariable	Identifier
396    HiLink informLibConst	Identifier
397    HiLink informLibAction	Identifier
398  endif
399  HiLink informBadDictString	informError
400  HiLink informBadAccent	informError
401  HiLink informBadStrUnicode	informError
402
403  delcommand HiLink
404endif
405
406let b:current_syntax = "inform"
407
408" vim: ts=8
409