//////////////////////////////////////////////////////////////////////////////
//
// ConTEXT highlighter for Hugo
//
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// language name

Language:               Hugo

Description:            ConTEXT highlighter for the Hugo IF language.


//////////////////////////////////////////////////////////////////////////////
// default file filter
// note: if more than one extension is associated, eg:
// C/C++ files (*.c,*.cpp,*.h,*.hpp)|*.c;*.cpp;*.h;*.hpp

Filter:                 Hugo files (*.hug,*.h,*.g)|*.hug;*.h;*.g


//////////////////////////////////////////////////////////////////////////////
// help file which will be invokend when F1 is pressed

HelpFile:


//////////////////////////////////////////////////////////////////////////////
// language case sensitivity
//                      0  - no
//                      1  - yes

CaseSensitive:          0


//////////////////////////////////////////////////////////////////////////////
// comment type: LineComment - comment to the end of line
// BlockCommentBeg - block comment begin, it could be
// multiline
// BlockCommentEnd - block comment end

LineComment:            !
BlockCommentBeg:        !\
BlockCommentEnd:        \!


//////////////////////////////////////////////////////////////////////////////
// identifier characters (vbScript characters must begin with alphabetic char)...
// note: characters shouldn't be delimited, except arrays
// array of chars could be defined as from_char..to_char

IdentifierBegChars:     A..Z a..z _ 0..9
IdentifierChars:        a..z A..Z _ 0..9

//////////////////////////////////////////////////////////////////////////////
// numeric constants begin characters (vbs: exc. &Hnnnn, inc. # for date consts)...
// note: characters shouldn't be delimited, except arrays
// array of chars could be defined as from_char..to_char
// number always starts with 0..9 except when NumConstBeg
// defines other

NumConstBegChars:       0..9 +-


//////////////////////////////////////////////////////////////////////////////
// numeric constants characters
// note: characters shouldn't be delimited, except arrays
// array of chars could be defined as from_char..to_char
// number always starts with 0..9 except when NumConstBeg
// defines other

NumConstChars:          0..9 +-


//////////////////////////////////////////////////////////////////////////////
// escape character

EscapeChar:             \


//////////////////////////////////////////////////////////////////////////////
// keyword table
// note: delimited with spaces, lines can be wrapped.
//   You may divide keywords into two (or more) groups,
//   which may then be highlighted differently...


KeyWords1:

// Global variables that look like constants (well, they're capitalized...)

                       MAX_MENUITEMS MAX_SCORE MAX_RANK SL_TEXTCOLOR SL_BGCOLOR STATUSTYPE TEXTCOLOR TIME_DAY TIME_HOURS
                       TIME_MINUTES TIME_MONTH TIME_SECONDS TIME_YEAR UNDO_OFF WAIT_TURN_COUNT INVENTORY_MASK

// Compilation constants

                       DEBUG DEBUG_SMALL PRECOMPILED_LIBRARY OLD_STYLE_PRONOUNS
                       // library functionality inclusion/exclusion
                       NO_AUX_MATH NO_FUSES NO_MENUS NO_OBJLIB NO_RECORDING NO_SCRIPTS NO_STRING_ARRAYS NO_UNDO NO_VERBS
                       NO_XVERBS USE_ATTACHABLES USE_CHECKHELD USE_PLURAL_OBJECTS USE_VEHICLES VERBSTUBS

// All other constants

                       // static limit settings
                       MAXATTRIBUTES MAXGLOBALS MAXLOCALS MAXALIASES MAXARRAYS MAXCONSTANTS MAXDICT MAXDICTEXTEND MAXEVENTS
                       MAXFLAGS MAXLABELS MAXOBJECTS MAXPROPERTIES MAXROUTINES MAX_PLURALS MAX_SCRIPTS MAX_SCRIPT_STEPS
                       MAX_WORDS
                       // rousource file constants
                       MUSIC_STOP SOUND_STOP STAT_UNAVAILABLE STAT_NOFILE STAT_NORESOURCE STAT_LOADERROR
                       // game setup and display constants
                       AFTER_PERIOD BGCOLOR DEFAULT_FONT FORMAT INDENT_SIZE DEF_FOREGROUND DEF_BACKGROUND DEF_SL_FOREGROUND
                       DEF_SL_BACKGROUND MATCH_FOREGROUND BLACK BLUE GREEN CYAN RED MAGENTA BROWN WHITE DARK_GRAY LIGHT_BLUE
                       LIGHT_GREEN LIGHT_CYAN LIGHT_RED LIGHT_MAGENTA YELLOW BRIGHT_WHITE LIST_F NORECURSE_F NOINDENT_F
                       DESCFORM_F GROUPPLURALS_F NOPARENTHESES_F BOLD_ON ITALIC_ON UNDERLINE_ON PROP_ON BOLD_OFF ITALIC_OFF
                       UNDERLINE_OFF PROP_OFF MENU_TEXTCOLOR MENU_BGCOLOR MENU_SELECTCOLOR MENU_SELECTBGCOLOR
                       // system constants and device interaction
                       DOWN_ARROW ENTER_KEY ESCAPE_KEY FILE_CHECK GAME_RESET INIT_RANDOM LEFT_ARROW MINIMAL_INTERFACE
                       MOUSE_CLICK NORMALIZE_RANDOM PAUSE_100TH_SECOND PAUSE_SECOND READ_KEY RIGHT_ARROW SYSTEM_TIME UP_ARROW
                       // miscellaneous
                       AND_WORD ARE_WORD BANNER BEST_PARSE_RANK CHECKHELD_LIMIT D_FINDOBJECT D_FUSES D_OBJNUM D_PARSE
                       D_PARSE_RANK D_SCRIPTS FINDOBJECT_KNOWN FINDOBJECT_NONLIVING FIRSTCAPITAL_F HERE_WORD HUGO_VERSION
                       INVENTORY_F IN_WORD ISORAREHERE_F ISORARE_F IS_WORD LAST_PARSER_STATUS LAST_SINGLE_OBJECT ON_WORD
                       PARSE_RANK_TESTS PARSER_ACTIVE PARSER_RESET PARSER_STATUS PERFORM_QUEUE PRONOUNS_SET STAT_NOERROR
                       TEMPLIST_F USECHARNAMES_F VERB_IS_XVERB _COMPILING_HUGOLIB _HUGOFIX_H _HUGOFIX_G _HUGOLIB_H _OBJLIB_H
                       _RESOURCE_H _SYSTEM_H _VERBLIB_G _VERBLIB_H _VERBSTUB_G _VERBSTUB_H _WINDOW_H


KeyWords2:

// Compilation controls
                       endif include ifclear ifset link set switches warning

// Keywords and commands

                       alias and anything array attribute break call capital case child children class cls color colour compound
                       constant else elseif enumerate event for global globals if in input is jump local locate move multi
                       multiheld multinotheld music nearby newline not
                                    // I'm going with "object" as a global, since the syntax highlighter can't interpret usage.
                       notheld number or parent parse pause picture playback print printchar prompt property quit random
                       readfile readval recordoff recordon removal remove repeat replace restart restore resource return routine
                       run runevents save scriptoff scripton select serial sibling sound start step string synonym system text
                       to undo undefined verb video while window writefile writeval xverb younger youngest


KeyWords3:

// Parser routines (verbs, commands, etc.)

                       // standard action verb routines
                       DoAsk DoAskQuestion DoAttachObject DoClose DoDetachObject DoDrink DoDrop DoEat DoEmpty DoEnter DoExit
                       DoGet DoGive DoGo DoHello DoHit DoInventory DoListen DoLock DoLook DoLookAround DoLookIn
                       DoLookThrough DoLookUnder DoMove DoMoveinVehicle DoOpen DoPutIn DoPutOnGround DoShow DoSit DoStand
                       DoSwitchOff DoSwitchOn DoTakeOff DoTalk DoTell DoUnlock DoVague DoWait DoWaitforChar DoWaitUntil DoWear
                       // non-action verb routines
                       DoBrief DoDisplay DoRecordOnOff DoRestart DoRestore DoSave DoScriptOnOff DoScore DoSuperbrief DoUndo
                       DoVerbose DoQuit
                       // verb stub routines
                       DoBurn DoClimb DoClimbOut DoCut DoDig DoFollow DoHelp DoHelpChar DoJump DoKiss DoNo DoPull
                       DoPush DoSearch DoSleep DoSmell DoSorry DoSwim DoThrowAt DoTie DoTieR DoTouch DoUntie DoUse DoWake
                       DoWakeCharacter DoWave DoWaveHands DoYell DoYes
                       // library parser routines
                       DoDropOrExit DoEmptyGround DoEmptyOrGet DoDrop_CheckHeld DoPutIn_CheckHeld DoPutonGround_CheckHeld
                       DoSwitchOnOff
                       // NPC action Routines
                       CharWait CharMove CharGet CharDrop

// Other library routines

                       // text printing routines
                       Art The CArt CThe IsorAre MatchPlural MatchSubject
                       // string array routines
                       StringCompare StringCopy StringDictCompare StringEqual StringLength StringPrint
                       // fuse/daemon routines
                       Activate Deactivate
                       // character script routines
                       CancelScript FindScript LoopScript PauseScript ResumeScript SkipScript Script RunScripts
                       // debugging routines
                       CheckParserConflicts DoHugoFix DrawBranch HugoFixAudit ListParserConflicts OnorOff
                       PrintParserInfoForObject
                       // resource routines
                       LoadPicture PictureinText PlaySound PlayMusic
                       // higher math routines
                       abs higher lower mod pow
                       // fundamental game routines
                       main init
                       // miscellaneous
                       Acquire AddIdentical AddSpecialDesc AfterRoutines AnyVerb AssignPronoun Attachable_CheckAttachedTo
                       Attachable_CheckAttachments Attachable_CheckChildren Attachable_MoveAttached Attachable_MoveAttachedTo
                       Attachable_MoveChildren BeforeRoutines CalculateHolding CallVerbCheckHeld CenterTitle CheckReach Contains
                       CurrentCommandWords CustomError DarkWarning DeleteWord DescribePlace DigitWord EndGame ExcludeFromAll
                       FindLight FindObject Font GetInput GetSystemTimeValue HoursMinutes ImplicitTake ImplicitTakeForDrop
                       Indent InList InitPluralObjects InsertWord IsPossibleXobject KeepWaiting ListAttachments ListObjects Menu
                       Message MoveAllAttachables MovePlayer NewMessages NewOMessages NewParseError NewVMessages NumberWord
                       ObjectAttach ObjectDetach ObjectIs ObjectisAttached ObjectisKnown ObjectisLight ObjWord OMessage Parse
                       ParseCheckHeld ParseError ParseError_ObjectIsKnown ParsePluralObjects Perform PreParse PrintEndGame
                       PrintReplacedPronouns PrintScore PrintStatusLine PropertyList PutInScope RemoveCheckHeldObj
                       RemoveFromScope RemoveIdentical ResetCheckHeld ResetParse RunScripts SetObjWord SetupDirectionObjects
                       SetVerbHeldmode ShortDescribe SpeakTo SpecialDesc StringToNumber TestObjectIs TheorThat VerbWord
                       VerbHeldMode VMessage WhatsIn WordisNumber YesorNo


KeyWords4:


// Library objects

                         // compass direction objects
                         n_obj e_obj ne_obj ne_obj se_obj s_obj sw_obj w_obj nw_obj u_obj d_obj in_obj out_obj
                         // pronoun objects
                         it_obj her_obj him_obj them_obj
                         // other library objects
                         audio checkheld display her_object him_object it_object them_object last_library_object

// Library classes

                         // pronoun classes
                         himself herself itself themselves
                         // miscellaneous
                         attachable character component daemon direction door female_character fuse identical_class
                         player_character player_class plural_class room scenery self_class vehicle window_class


KeyWords5:

// Most global variables

                         actor counter customerror_flag debug_flags endflag event_flag general last_object last_resourcefile
                                       // ("last_resource_file" seems to be a misprint in the Hugo book for "last_resourcefile")
                         last_resource_file light_source list_count list_nest location need_newline nothing number_scripts
                         object objects obstacle old_location override_indent player player_person pluralobj_heldmode
                         plural_count score self speaking system_status verbosity verbroutine words xobject

// Library properties

                         // room direction properties
                         n_to ne_to e_to s_to se_to w_to sw_to nw_to u_to d_to in_to out_to cant_go
                         // fuse and daemon properties
                         activate_event deactivate_event tick timer
                         // display object properties
                         cursor_column cursor_row hasgraphics hasvideo linelenght needs_repaint pointer_x pointer_y screenheight
                         screenwidth statusline_height title_caption windowlines
                         // audio object properties
                         current_music current_music_looping current_music_resfile current_music_volume current_sound
                         current_sound_looping current_sound_resfile current_sound_volume
                         // window class properties
                         win_active win_backcolor win_bottom win_clear win_end win_init win_left win_textcolor win_title
                         win_titleback win_titlecolor win_top win_right
                         // miscellaneous properties
                         adjective adjectives after article attachable_to attached_desc attached_to attach_drop attach_immobile
                         attach_longdesc attach_prep attach_shortdesc attach_take attach_verb attach_verbs before between
                         capacity contains_desc desc_detail detach_prep detach_verb detach_verbs dir_to dir_from door_to
                         each_turn exclude_from_all extra_scenery found_in holding identical_to ignore_response initial_desc
                         inv_desc in_scope key_object linelength list_contents long_desc misc name noun nouns nounspreposition
                         order_response parse_rank part_of pluralobj_number plural_is plural_of plural_parse_rank plural_verbs
                         prep preposition pronoun pronouns reach react_before react_after short_desc single_noun size type
                         vehicle_move vehicle_path vehicle_verb vehicle_verbs when_closed when_open self_object self_resolve

// Library arrays

                         // Character script arrays
                         scriptdata setscript
                         // other library arrays
                         menuitem oldword parser_data plurals ranking replace_pronoun word _time_string _temp_string
                         _win_title_string

// Library attributes

                         active already_listed checkheld_flag clothing container enterable female hidden known light living lockable
                         locked mobile moved open openable platform plural quiet readable special static switchable switchedon
                         transparent unfriendly visited worn workflag



//////////////////////////////////////////////////////////////////////////////
// string delimiter: StringBegChar - string begin char
// StringEndChar - string end char
// MultilineStrings - enables multiline strings, (as in perl)

StringBegChar:          "
StringEndChar:          "
MultilineStrings:       1


//////////////////////////////////////////////////////////////////////////////
// use preprocessor: 0 - no; 1 - yes
// note: if yes, '#' and statements after it will be
// highlighted with Preprocessor defined colors

UsePreprocessor:        0


//////////////////////////////////////////////////////////////////////////////
// highlight line: 0 - no; 1 - yes
// note: if yes, current line will be highlighted

CurrLineHighlighted:    1


//////////////////////////////////////////////////////////////////////////////
// colors
// note:                first value is foreground, second is background color
//                        and third (optional) represents font attribute:
//                        B - bold
//                        I - italic
//                        U - underline
//                        S - strike out
//                        attributes can be combined: eg. B or BI
//                      may be specified as text (any standard windows color):
//                        clBlack, clMaroon, clGreen, clOlive, clNavy,
//                        clPurple, clTeal, clGray, clSilver, clRed, clLime,
//                        clYellow, clBlue, clFuchsia, clAqua, clLtGray,
//                        clDkGray, clWhite, clScrollBar, clBackground,
//                        clActiveCaption, clInactiveCaption, clMenu, clWindow,
//                        clWindowFrame, clMenuText, clWindowText, clCaptionText,
//                        clActiveBorder, clInactiveBorder, clAppWorkSpace,
//                        clHighlight, clHighlightText, clBtnFace, clBtnShadow,
//                        clGrayText, clBtnText, clInactiveCaptionText,
//                        clBtnHighlight, cl3DDkShadow, cl3DLight, clInfoText,
//                        clInfoBk
//                      may also be specified as a hex (color) constant:
//                        $BBGGRR - BB: blue, GG: green, RR: red, eg: $FF6A00
//
// reminder:            crForeground (sp) crBackground (sp) optional font attribute(s)...

SpaceCol:               clWindowText clWindow
Keyword1Col:            clBlue clWindow
Keyword2Col:            clRed clWindow
Keyword3Col:            clMaroon clWindow
Keyword4Col:            clFuchsia clWindow
Keyword5Col:            clTeal clWindow
IdentifierCol:          clBlack clWindow
CommentCol:             clGreen clWindow
NumberCol:              clMaroon clWindow
StringCol:              clNavy clWindow
SymbolCol:              clWindowText clWindow
PreprocessorCol:        clBlue clWindow
SelectionCol:           clWhite clNavy
CurrentLineCol:         clBlack $00C0FFFF
OverrideTxtFgColor:     0
BlockAutoindent:        0
BlockBegStr:
BlockEndStr:
MatchedBracesCol:       clRed clWindow