TSyntaxMemo file

A forum for the general posts relating to MacroQuest. *DEPRECATED: This forum is no longer in public use, but remains here for your reading pleasure. Enjoy

Moderator: MacroQuest Developers

echoism
a ghoul
a ghoul
Posts: 131
Joined: Tue Oct 19, 2004 9:59 am

TSyntaxMemo file

Post by echoism » Thu Apr 28, 2005 4:35 pm

I wrote this to use with Programmer's Notepad, although it will also work with homesite (if memory serves), and anything else that uses a TSyntaxMemoParser.

edited 20050429: Added states to improve comment identification at the beginning of a line. Also Isolated single-quote characters to keep them from messing up other highlighting.

Might have a few more bugs with strings, but I'm working on them.

Code: Select all

// Macroquest2 TSyntaxMemo
// -----------------------
// Author  : echoism
// Date    : 29 April 2005
// Language: TSyntaxMemo

#define    ss_DEFAULT           0          
#define    ss_LINESTART         1
#define    ss_PARSED            2

#define    mq_DIRECTIVE        10
#define    mq_IDENTIFIER       11
#define    mq_NUMBER           12
#define    mq_OPERATOR         13
#define    mq_DELIMIT          14
#define    mq_STRING           15
#define    mq_CHAR             16
#define    mq_WHITESPACE       17
#define    mq_NEWLINE          18

#define    mq_COMMENT          20
#define    mq_COMMENT_LINE     21
#define    mq_COMMENT_BLOCK    22

#define    mq_TLO              30
#define    mq_IMMEDIATE        31
#define    mq_REFERENCE        32
#define    mq_INDEPENDENT      33
#define    mq_MEMBER           34
#define    mq_PARAM            35

#define    mq_LABEL            40
#define    mq_COMMAND          41
#define    mq_KEYWORD          42

#define    _non_alpha_         '[^_A-Za-z0-9]'
#define    _all_chars_         '[\x00-\xFF]'
#define    _no_chars_          '[]'
#define    _dont_care_         _all_chars_
#define    _DEFAULT_BACKGROUND clWhite
#define    _DEFAULT_FOREGROUND clBlack

%%language
   Name                      = 'Macroquest2 Script'
   Case                      = __SENSITIVE
   Options                   = __DEFAULT_OPTIONS
   WordWrapColumn            = _EDGE
   Gutter                    = _DEFAULT_GUTTER
   StartState                = [ss_LINESTART]
   ExampleText               = '|** Comment **|\n\
                               \#include spell_routines.inc\n\
                               \/declare i int local 0\n\
                               \/echo ${i}\n'
                               
   EditableStyles ('Comment',    mq_COMMENT),
                  ('Directive',  mq_DIRECTIVE),
                  ('Command',    mq_COMMAND),
                  ('Keyword',    mq_KEYWORD),
                  ('Operator',   mq_OPERATOR),
                  ('Delimiter',  mq_DELIMIT),
                  ('Identifier', mq_IDENTIFIER),
                  ('Number',     mq_NUMBER),
                  ('String',     mq_STRING),
                  ('Label',      mq_LABEL),
                  ('Default',    ss_DEFAULT)

%%words
'+'                 _dont_care_        mq_OPERATOR
'-'                 _dont_care_        mq_OPERATOR
'*'                 _dont_care_        mq_OPERATOR
'&'                 _dont_care_        mq_OPERATOR
'!'                 _dont_care_        mq_OPERATOR
'~'                 _dont_care_        mq_OPERATOR
'%'                 _dont_care_        mq_OPERATOR
'>'                 _dont_care_        mq_OPERATOR
'<'                 _dont_care_        mq_OPERATOR
'>>'                _dont_care_        mq_OPERATOR
'<<'                _dont_care_        mq_OPERATOR
'>='                _dont_care_        mq_OPERATOR
'<='                _dont_care_        mq_OPERATOR
'=='                _dont_care_        mq_OPERATOR
'='                 _dont_care_        mq_OPERATOR
'!='                _dont_care_        mq_OPERATOR
'^^'                _dont_care_        mq_OPERATOR
'^'                 _dont_care_        mq_OPERATOR
'&&'                _dont_care_        mq_OPERATOR
'||'                _dont_care_        mq_OPERATOR
';'                 _dont_care_        mq_DELIMIT       [ss_LINESTART ss_DEFAULT]
'('                 _dont_care_        mq_DELIMIT       [ss_LINESTART ss_DEFAULT]
')'                 _dont_care_        mq_DELIMIT       [ss_LINESTART ss_DEFAULT]
'['                 _dont_care_        mq_DELIMIT       [ss_LINESTART ss_DEFAULT]
']'                 _dont_care_        mq_DELIMIT       [ss_LINESTART ss_DEFAULT]
'{'                 _dont_care_        mq_DELIMIT       [ss_LINESTART ss_DEFAULT]
'}'                 _dont_care_        mq_DELIMIT       [ss_LINESTART ss_DEFAULT]
'$'                 '{'                mq_DELIMIT       [ss_DEFAULT]
'|**'               _dont_care_        mq_COMMENT_BLOCK [ss_LINESTART]
'#turbo'            _dont_care_        mq_DIRECTIVE     [ss_LINESTART]
'#define'           _dont_care_        mq_DIRECTIVE     [ss_LINESTART]
'#include'          _dont_care_        mq_DIRECTIVE     [ss_LINESTART]
'#event'            _dont_care_        mq_DIRECTIVE     [ss_LINESTART]
'#chat'             _dont_care_        mq_DIRECTIVE     [ss_LINESTART]
'debug'             _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'else'              _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'local'             _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'outer'             _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'global'            _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'[mM][aA][iI][nN]'  _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'off'               _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'on'                _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'to'                _non_alpha_        mq_KEYWORD       [ss_DEFAULT]
'Param'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
'pc'                _non_alpha_        mq_PARAM         [ss_DEFAULT]
'npc'               _non_alpha_        mq_PARAM         [ss_DEFAULT]
'pet'               _non_alpha_        mq_PARAM         [ss_DEFAULT]
'nopet'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
//'corpse'            _non_alpha_        mq_PARAM
'trigger'           _non_alpha_        mq_PARAM         [ss_DEFAULT]
'untargetable'      _non_alpha_        mq_PARAM         [ss_DEFAULT]
'trap'              _non_alpha_        mq_PARAM         [ss_DEFAULT]
'check'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
//'timer'             _non_alpha_        mq_PARAM
'any'               _non_alpha_        mq_PARAM         [ss_DEFAULT]
'next'              _non_alpha_        mq_PARAM         [ss_DEFAULT]
'prev'              _non_alpha_        mq_PARAM         [ss_DEFAULT]
'lfg'               _non_alpha_        mq_PARAM         [ss_DEFAULT]
'gm'                _non_alpha_        mq_PARAM         [ss_DEFAULT]
//'group'             _non_alpha_        mq_PARAM
'trader'            _non_alpha_        mq_PARAM         [ss_DEFAULT]
'range'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
'loc'               _non_alpha_        mq_PARAM         [ss_DEFAULT]
'id'                _non_alpha_        mq_PARAM         [ss_DEFAULT]
'radius'            _non_alpha_        mq_PARAM         [ss_DEFAULT]
//'body'              _non_alpha_        mq_PARAM
//'class'             _non_alpha_        mq_PARAM
//'race'              _non_alpha_        mq_PARAM
'light'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
'GUILD'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
'guild'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
'noguild'           _non_alpha_        mq_PARAM         [ss_DEFAULT]
'alert'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
'noalert'           _non_alpha_        mq_PARAM         [ss_DEFAULT]
'notnearalert'      _non_alpha_        mq_PARAM         [ss_DEFAULT]
'nearalert'         _non_alpha_        mq_PARAM         [ss_DEFAULT]
'zradius'           _non_alpha_        mq_PARAM         [ss_DEFAULT]
'notid'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
'nopcnear'          _non_alpha_        mq_PARAM         [ss_DEFAULT]
'named'             _non_alpha_        mq_PARAM         [ss_DEFAULT]
'AltAbility'        _non_alpha_        mq_TLO           [ss_DEFAULT]
'Bool'              _non_alpha_        mq_TLO           [ss_DEFAULT]
'Me'                _non_alpha_        mq_TLO           [ss_DEFAULT]
'Corpse'            _non_alpha_        mq_TLO           [ss_DEFAULT]
'Cursor'            _non_alpha_        mq_TLO           [ss_DEFAULT]
'Defined'           _non_alpha_        mq_TLO           [ss_DEFAULT]
'Ground'            _non_alpha_        mq_TLO           [ss_DEFAULT]
'FindItem'          _non_alpha_        mq_TLO           [ss_DEFAULT]
'FindItemBank'      _non_alpha_        mq_TLO           [ss_DEFAULT]
'FineItemBankCount' _non_alpha_        mq_TLO           [ss_DEFAULT]
'FindItemCount'     _non_alpha_        mq_TLO           [ss_DEFAULT]
'Float'             _non_alpha_        mq_TLO           [ss_DEFAULT]
'GameTime'          _non_alpha_        mq_TLO           [ss_DEFAULT]
'Group'             _non_alpha_        mq_TLO           [ss_DEFAULT]
'Heading'           _non_alpha_        mq_TLO           [ss_DEFAULT]
'If'                _non_alpha_        mq_TLO           [ss_DEFAULT]
'Ini'               _non_alpha_        mq_TLO           [ss_DEFAULT]
'Int'               _non_alpha_        mq_TLO           [ss_DEFAULT]
'InvSlot'           _non_alpha_        mq_TLO           [ss_DEFAULT]
'LastSpawn'         _non_alpha_        mq_TLO           [ss_DEFAULT]
'LineOfSight'       _non_alpha_        mq_TLO           [ss_DEFAULT]
'Macro'             _non_alpha_        mq_TLO           [ss_DEFAULT]
'MacroQuest'        _non_alpha_        mq_TLO           [ss_DEFAULT]
'Math'              _non_alpha_        mq_TLO           [ss_DEFAULT]
'Merchant'          _non_alpha_        mq_TLO           [ss_DEFAULT]
'NamingSpawn'       _non_alpha_        mq_TLO           [ss_DEFAULT]
'NearestSpawn'      _non_alpha_        mq_TLO           [ss_DEFAULT]
'Plugin'            _non_alpha_        mq_TLO           [ss_DEFAULT]
'Raid'              _non_alpha_        mq_TLO           [ss_DEFAULT]
'SelecteItem'       _non_alpha_        mq_TLO           [ss_DEFAULT]
'Skill'             _non_alpha_        mq_TLO           [ss_DEFAULT]
'Spawn'             _non_alpha_        mq_TLO           [ss_DEFAULT]
'SpawnCount'        _non_alpha_        mq_TLO           [ss_DEFAULT]
'Spell'             _non_alpha_        mq_TLO           [ss_DEFAULT]
'String'            _non_alpha_        mq_TLO           [ss_DEFAULT]
'Switch'            _non_alpha_        mq_TLO           [ss_DEFAULT]
'Target'            _non_alpha_        mq_TLO           [ss_DEFAULT]
'Time'              _non_alpha_        mq_TLO           [ss_DEFAULT]
'Type'              _non_alpha_        mq_TLO           [ss_DEFAULT]
'Window'            _non_alpha_        mq_TLO           [ss_DEFAULT]
'Zone'              _non_alpha_        mq_TLO           [ss_DEFAULT]
'argb'              _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'bool'              _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'body'              _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'byte'              _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'class'             _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'corpse'            _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'deity'             _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'float'             _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'heading'           _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'int'               _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'invslot'           _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'ticks'             _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'race'              _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'raidmember'        _non_alpha_        mq_IMMEDIATE     [ss_DEFAULT]
'altability'        _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'array'             _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'buff'              _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'character'         _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'ground'            _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'item'              _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'plugin'            _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'skill'             _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'spawn'             _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'spell'             _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'string'            _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'switch'            _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'time'              _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'timer'             _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'type'              _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'window'            _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'zone'              _non_alpha_        mq_REFERENCE     [ss_DEFAULT]
'currentzone'       _non_alpha_        mq_INDEPENDENT   [ss_DEFAULT]
'macro'             _non_alpha_        mq_INDEPENDENT   [ss_DEFAULT]
'macroquest'        _non_alpha_        mq_INDEPENDENT   [ss_DEFAULT]
'math'              _non_alpha_        mq_INDEPENDENT   [ss_DEFAULT]
'merchant'          _non_alpha_        mq_INDEPENDENT   [ss_DEFAULT]
'raid'              _non_alpha_        mq_INDEPENDENT   [ss_DEFAULT]
'group'             _non_alpha_        mq_INDEPENDENT   [ss_DEFAULT]
'|'                 _dont_care_        mq_COMMENT_LINE  [ss_LINESTART]
'Sub'               _non_alpha_        mq_COMMAND       [ss_LINESTART]
'sub'               _non_alpha_        mq_COMMAND       [ss_LINESTART]
'\''                _dont_care_        mq_IDENTIFIER    [ss_DEFAULT ss_LINESTART]

%%handlers
mq_COMMENT_LINE     '[^\n]'?                      '\n'              _discard_
mq_COMMENT_BLOCK    _all_chars_?                  '**|'             _use_
mq_DIRECTIVE        '[^\n]'?                      '\n'              _discard_

%%tokens
mq_STRING           __STD_C_STRING     
mq_CHAR             __STD_C_CHAR
mq_IDENTIFIER       __STD_IDENTIFIER                                          [ss_LINESTART ss_DEFAULT]         
mq_NUMBER           '[0-9]'      '[0-9.]'?        '[^0-9.]'         _discard_
mq_LABEL            '[:]'        '[a-zA-Z0-9_\.]' '[^a-zA-Z0-9_\.]' _discard_ [ss_LINESTART ss_DEFAULT]
mq_COMMAND          '[/]'        '[_a-zA-Z0-9]'   _non_alpha_       _discard_ [ss_LINESTART ss_DEFAULT] 
mq_MEMBER           '[.]'        '[_a-zA-Z0-9]'   _non_alpha_       _discard_ [ss_LINESTART ss_DEFAULT]
mq_NEWLINE          '[\n]'       '[\s\t\n]'?      '[^\s\t\n]'       _discard_ [ss_LINESTART ss_DEFAULT]
mq_WHITESPACE       '[\s\t]'     '[\s\t]'?        '[^\s\t]'         _discard_        

%%states
ss_DEFAULT          (-[ss_LINESTART] +[ss_DEFAULT])
mq_DIRECTIVE        (-[ss_LINESTART] +[ss_DEFAULT])
mq_IDENTIFIER       (-[ss_LINESTART] +[ss_DEFAULT])
mq_LABEL            (-[ss_LINESTART] +[ss_DEFAULT])
mq_DELIMIT          (-[ss_LINESTART] +[ss_DEFAULT])
mq_KEYWORD          (-[ss_LINESTART] +[ss_DEFAULT])
mq_COMMAND          (-[ss_LINESTART] +[ss_DEFAULT])
mq_NEWLINE          (+[ss_LINESTART] -[ss_DEFAULT])

%%effects
ss_DEFAULT          []            _DEFAULT_FOREGROUND  _DEFAULT_BACKGROUND
mq_IDENTIFIER       []            clOlive              _DEFAULT_BACKGROUND
mq_STRING           [fsItalic]    clTeal               _DEFAULT_BACKGROUND
mq_COMMENT          []            clGreen              _DEFAULT_BACKGROUND
mq_KEYWORD          []            clPurple             _DEFAULT_BACKGROUND
mq_COMMAND          [fsBold]      clPurple             _DEFAULT_BACKGROUND
mq_NUMBER           []            clRed                _DEFAULT_BACKGROUND
mq_DIRECTIVE        []            clBlue               _DEFAULT_BACKGROUND
mq_OPERATOR         []            _DEFAULT_FOREGROUND  _DEFAULT_BACKGROUND
mq_DELIMIT          []            _DEFAULT_FOREGROUND  _DEFAULT_BACKGROUND
mq_LABEL            [fsUnderline] clMaroon             _DEFAULT_BACKGROUND
 
%%map
ss_DEFAULT          ss_DEFAULT
mq_DIRECTIVE        mq_DIRECTIVE
mq_IDENTIFIER       mq_IDENTIFIER
mq_NUMBER           mq_NUMBER
mq_LABEL            mq_LABEL
mq_OPERATOR         mq_OPERATOR
mq_DELIMIT          mq_DELIMIT
mq_COMMENT          mq_COMMENT
mq_COMMENT_LINE     mq_COMMENT
mq_COMMENT_BLOCK    mq_COMMENT
mq_KEYWORD          mq_KEYWORD
mq_PARAM            mq_KEYWORD
mq_TLO              mq_KEYWORD
mq_IMMEDIATE        mq_KEYWORD
mq_REFERENCE        mq_KEYWORD
mq_INDEPENDENT      mq_KEYWORD
mq_MEMBER           mq_KEYWORD
mq_COMMAND          mq_COMMAND
mq_STRING           mq_STRING
mq_CHAR             mq_STRING
mq_WHITESPACE       ss_DEFAULT
mq_NEWLINE          ss_DEFAULT

echoism
a ghoul
a ghoul
Posts: 131
Joined: Tue Oct 19, 2004 9:59 am

Post by echoism » Fri Apr 29, 2005 3:15 pm

reserved for future use

echoism
a ghoul
a ghoul
Posts: 131
Joined: Tue Oct 19, 2004 9:59 am

Post by echoism » Fri Apr 29, 2005 3:16 pm

reserved for future use.

|| Napolion ||
a ghoul
a ghoul
Posts: 96
Joined: Sat Dec 28, 2002 7:45 am

Post by || Napolion || » Tue May 03, 2005 8:24 am

Have done a littel testing together with echoism and this also works with Homesite 5.5.

Great work... Thanks
|| Napolion ||