plugins/geshi/geshi/abap.php
changeset 3 f3e2bbbd2155
parent 2 9e3258dfae15
--- a/plugins/geshi/geshi/abap.php	Fri May 29 19:30:59 2009 -0400
+++ b/plugins/geshi/geshi/abap.php	Fri May 29 19:40:15 2009 -0400
@@ -3,19 +3,67 @@
  * abap.php
  * --------
  * Author: Andres Picazo (andres@andrespicazo.com)
+ * Contributors:
+ *  - Sandra Rossi (sandra.rossi@gmail.com)
+ *  - Jacob Laursen (jlu@kmd.dk)
  * Copyright: (c) 2007 Andres Picazo
- * Release Version: 1.0.8.2
+ * Release Version: 1.0.8.4
  * Date Started: 2004/06/04
  *
  * ABAP language file for GeSHi.
  *
+ * Reference abap language documentation (abap 7.1) : http://help.sap.com/abapdocu/en/ABENABAP_INDEX.htm
+ *
+ * ABAP syntax is highly complex, several problems could not be addressed, see TODO below if you dare ;-)
+ * Be aware that in ABAP language, keywords may be composed of several tokens,
+ *    separated by one or more spaces or carriage returns
+ *    (for example CONCATENATE 'hello' 'world' INTO string SEPARATED  BY ' ')
+ *    it's why we must decode them with REGEXPS. As there are many keywords with several tokens,
+ *    I had to create a separate section in the code to simplify the reading.
+ * Be aware that some words may be highlighted several times like for "ref to data", which is first
+ *    highlighted for "ref to data", then secondly for "ref to". It is very important to
+ *    position "ref to" after "ref to data" otherwise "data" wouldn't be highlighted because
+ *    of the previous highlight.
+ * Control, declarative and other statements are assigned URLs to sap documentation website:
+ *    http://help.sap.com/abapdocu/en/ABAP<statement_name>.htm
+ *
  * CHANGES
  * -------
+ * 2009/02/25 (1.0.8.3)
+ *   -  Some more rework of the language file
+ * 2009/01/04 (1.0.8.2)
+ *   -  Major Release, more than 1000 statements and keywords added = whole abap 7.1 (Sandra Rossi)
  * 2007/06/27 (1.0.0)
  *   -  First Release
  *
  * TODO
  * ----
+ *   - in DATA data TYPE type, 2nd "data" and 2nd "type" are highlighted with data
+ *     style, but should be ignored. Same problem for all words!!! This is quite impossible to
+ *     solve it as we should define syntaxes of all statements (huge effort!) and use a lex
+ *     or something like that instead of regexp I guess.
+ *   - Some words are considered as being statement names (report, tables, etc.) though they
+ *     are used as keyword in some statements. For example: FORM xxxx TABLES itab. It was
+ *     arbitrary decided to define them as statement instead of keyword, because it may be
+ *     useful to have the URL to SAP help for some of them.
+ *   - if a comment is between 2 words of a keyword (for example SEPARATED "comment \n BY),
+ *     it is not considered as a keyword, but it should!
+ *   - for statements like "READ DATASET", GeSHi does not allow to set URLs because these
+ *     statements are determined by REGEXPS. For "READ DATASET", the URL should be
+ *     ABAPREAD_DATASET.htm. If a technical solution is found, be careful : URLs
+ *     are sometimes not valid because the URL does not exist. For example, for "AT NEW"
+ *     statement, the URL should be ABAPAT_ITAB.htm (not ABAPAT_NEW.htm).
+ *     There are many other exceptions.
+ *     Note: for adding this functionality within your php program, you can execute this code:
+ *       function add_urls_to_multi_tokens( $matches ) {
+ *           $url = preg_replace( "/[ \n]+/" , "_" , $matches[3] );
+ *           if( $url == $matches[3] ) return $matches[0] ;
+ *           else return $matches[1]."<a href=\"http://help.sap.com/abapdocu/en/ABAP".strtoupper($url).".htm\">".$matches[3]."</a>".$matches[4];
+ *           }
+ *       $html = $geshi->parse_code();
+ *       $html = preg_replace_callback( "£(zzz:(control|statement|data);\">)(.+?)(</span>)£s", "add_urls_to_multi_tokens", $html );
+ *       echo $html;
+ *   - Numbers followed by a dot terminating the statement are not properly recognized
  *
  *************************************************************************************
  *
@@ -37,39 +85,1232 @@
  *
  ************************************************************************************/
 
-$language_data = array (
+$language_data = array(
     'LANG_NAME' => 'ABAP',
-    'COMMENT_SINGLE' => array(1 => '"', 2 => '*'),
+    'COMMENT_SINGLE' => array(
+        1 => '"'
+        ),
     'COMMENT_MULTI' => array(),
+    'COMMENT_REGEXP' => array(
+        // lines beginning with star at 1st position are comments
+        // (star anywhere else is not a comment, especially be careful with
+        // "assign dref->* to <fs>" statement)
+        2 => '/^\*.*?$/m'
+        ),
     'CASE_KEYWORDS' => 0,
-    'QUOTEMARKS' => array("'"),
+    'QUOTEMARKS' => array(
+        1 => "'",
+        2 => "`"
+        ),
     'ESCAPE_CHAR' => '',
+
     'KEYWORDS' => array(
+        //***********************************************
+        // Section 2 : process sequences of several tokens
+        //***********************************************
+
+        7 => array(
+            'at new',
+            'at end of',
+            'at first',
+            'at last',
+            'loop at',
+            'loop at screen',
+            ),
+
+        8 => array(
+            'private section',
+            'protected section',
+            'public section',
+            'at line-selection',
+            'at selection-screen',
+            'at user-command',
+            'assign component',
+            'assign table field',
+            'call badi',
+            'call customer-function',
+            'call customer subscreen',
+            'call dialog',
+            'call function',
+            'call method',
+            'call screen',
+            'call selection-screen',
+            'call transaction',
+            'call transformation',
+            'close cursor',
+            'close dataset',
+            'commit work',
+            'convert date',
+            'convert text',
+            'convert time stamp',
+            'create data',
+            'create object',
+            'delete dataset',
+            'delete from',
+            'describe distance',
+            'describe field',
+            'describe list',
+            'describe table',
+            'exec sql',
+            'exit from sql',
+            'exit from step-loop',
+            'export dynpro',
+            'export nametab',
+            'free memory',
+            'generate subroutine-pool',
+            'get badi',
+            'get bit',
+            'get cursor',
+            'get dataset',
+            'get locale',
+            'get parameter',
+            'get pf-status',
+            'get property',
+            'get reference',
+            'get run time',
+            'get time',
+            'get time stamp',
+            'import directory',
+            'insert report',
+            'insert text-pool',
+            'leave list-processing',
+            'leave program',
+            'leave screen',
+            'leave to list-processing',
+            'leave to transaction',
+            'modify line',
+            'modify screen',
+            'move percentage',
+            'open cursor',
+            'open dataset',
+            'raise event',
+            'raise exception',
+            'read dataset',
+            'read line',
+            'read report',
+            'read table',
+            'read textpool',
+            'receive results from function',
+            'refresh control',
+            'rollback work',
+            'set bit',
+            'set blank lines',
+            'set country',
+            'set cursor',
+            'set dataset',
+            'set extended check',
+            'set handler',
+            'set hold data',
+            'set language',
+            'set left scroll-boundary',
+            'set locale',
+            'set margin',
+            'set parameter',
+            'set pf-status',
+            'set property',
+            'set run time analyzer',
+            'set run time clock',
+            'set screen',
+            'set titlebar',
+            'set update task',
+            'set user-command',
+            'suppress dialog',
+            'truncate dataset',
+            'wait until',
+            'wait up to',
+            ),
+
+        9 => array(
+            'accepting duplicate keys',
+            'accepting padding',
+            'accepting truncation',
+            'according to',
+            'actual length',
+            'adjacent duplicates',
+            'after input',
+            'all blob columns',
+            'all clob columns',
+            'all fields',
+            'all methods',
+            'all other columns',
+            'and mark',
+            'and return to screen',
+            'and return',
+            'and skip first screen',
+            'and wait',
+            'any table',
+            'appendage type',
+            'archive mode',
+            'archiving parameters',
+            'area handle',
+            'as checkbox',
+            'as icon',
+            'as line',
+            'as listbox',
+            'as person table',
+            'as search patterns',
+            'as separate unit',
+            'as subscreen',
+            'as symbol',
+            'as text',
+            'as window',
+            'at cursor-selection',
+            'at exit-command',
+            'at next application statement',
+            'at position',
+
+            'backup into',
+            'before output',
+            'before unwind',
+            'begin of block',
+            'begin of common part',
+            'begin of line',
+            'begin of screen',
+            'begin of tabbed block',
+            'begin of version',
+            'begin of',
+            'big endian',
+            'binary mode',
+            'binary search',
+            'by kernel module',
+            'bypassing buffer',
+
+            'client specified',
+            'code page',
+            'code page hint',
+            'code page into',
+            'color black',
+            'color blue',
+            'color green',
+            'color pink',
+            'color red',
+            'color yellow',
+            'compression off',
+            'compression on',
+            'connect to',
+            'corresponding fields of table',
+            'corresponding fields of',
+            'cover page',
+            'cover text',
+            'create package',
+            'create private',
+            'create protected',
+            'create public',
+            'current position',
+
+            'data buffer',
+            'data values',
+            'dataset expiration',
+            'daylight saving time',
+            'default key',
+            'default program',
+            'default screen',
+            'defining database',
+            'deleting leading',
+            'deleting trailing',
+            'directory entry',
+            'display like',
+            'display offset',
+            'during line-selection',
+            'dynamic selections',
+
+            'edit mask',
+            'end of block',
+            'end of common part',
+            'end of file',
+            'end of line',
+            'end of screen',
+            'end of tabbed block',
+            'end of version',
+            'end of',
+            'endian into',
+            'ending at',
+            'enhancement options into',
+            'enhancement into',
+            'environment time format',
+            'execute procedure',
+            'exporting list to memory',
+            'extension type',
+
+            'field format',
+            'field selection',
+            'field value into',
+            'final methods',
+            'first occurrence of',
+            'fixed-point arithmetic',
+            'for all entries',
+            'for all instances',
+            'for appending',
+            'for columns',
+            'for event of',
+            'for field',
+            'for high',
+            'for input',
+            'for lines',
+            'for low',
+            'for node',
+            'for output',
+            'for select',
+            'for table',
+            'for testing',
+            'for update',
+            'for user',
+            'frame entry',
+            'frame program from',
+            'from code page',
+            'from context',
+            'from database',
+            'from logfile id',
+            'from number format',
+            'from screen',
+            'from table',
+            'function key',
+
+            'get connection',
+            'global friends',
+            'group by',
+
+            'hashed table of',
+            'hashed table',
+
+            'if found',
+            'ignoring case',
+            'ignoring conversion errors',
+            'ignoring structure boundaries',
+            'implementations from',
+            'in background',
+            'in background task',
+            'in background unit',
+            'in binary mode',
+            'in byte mode',
+            'in char-to-hex mode',
+            'in character mode',
+            'in group',
+            'in legacy binary mode',
+            'in legacy text mode',
+            'in program',
+            'in remote task',
+            'in text mode',
+            'in table',
+            'in update task',
+            'include bound',
+            'include into',
+            'include program from',
+            'include structure',
+            'include type',
+            'including gaps',
+            'index table',
+            'inheriting from',
+            'init destination',
+            'initial line of',
+            'initial line',
+            'initial size',
+            'internal table',
+            'into sortable code',
+
+            'keep in spool',
+            'keeping directory entry',
+            'keeping logical unit of work',
+            'keeping task',
+            'keywords from',
+
+            'left margin',
+            'left outer',
+            'levels into',
+            'line format',
+            'line into',
+            'line of',
+            'line page',
+            'line value from',
+            'line value into',
+            'lines of',
+            'list authority',
+            'list dataset',
+            'list name',
+            'little endian',
+            'lob handle for',
+            'local friends',
+            'locator for',
+            'lower case',
+
+            'main table field',
+            'match count',
+            'match length',
+            'match line',
+            'match offset',
+            'matchcode object',
+            'maximum length',
+            'maximum width into',
+            'memory id',
+            'message into',
+            'messages into',
+            'modif id',
+
+            'nesting level',
+            'new list identification',
+            'next cursor',
+            'no database selection',
+            'no dialog',
+            'no end of line',
+            'no fields',
+            'no flush',
+            'no intervals',
+            'no intervals off',
+            'no standard page heading',
+            'no-extension off',
+            'non-unique key',
+            'non-unique sorted key',
+            'not at end of mode',
+            'number of lines',
+            'number of pages',
+
+            'object key',
+            'obligatory off',
+            'of current page',
+            'of page',
+            'of program',
+            'offset into',
+            'on block',
+            'on commit',
+            'on end of task',
+            'on end of',
+            'on exit-command',
+            'on help-request for',
+            'on radiobutton group',
+            'on rollback',
+            'on value-request for',
+            'open for package',
+            'option class-coding',
+            'option class',
+            'option coding',
+            'option expand',
+            'option syncpoints',
+            'options from',
+            'order by',
+            'overflow into',
+
+            'package section',
+            'package size',
+            'preferred parameter',
+            'preserving identifier escaping',
+            'primary key',
+            'print off',
+            'print on',
+            'program from',
+            'program type',
+
+            'radiobutton groups',
+            'radiobutton group',
+            'range of',
+            'reader for',
+            'receive buffer',
+            'reduced functionality',
+            'ref to data',
+            'ref to object',
+            'ref to',
+
+            'reference into',
+            'renaming with suffix',
+            'replacement character',
+            'replacement count',
+            'replacement length',
+            'replacement line',
+            'replacement offset',
+            'respecting blanks',
+            'respecting case',
+            'result into',
+            'risk level',
+
+            'sap cover page',
+            'search fkeq',
+            'search fkge',
+            'search gkeq',
+            'search gkge',
+            'section of',
+            'send buffer',
+            'separated by',
+            'shared buffer',
+            'shared memory',
+            'shared memory enabled',
+            'skipping byte-order mark',
+            'sorted by',
+            'sorted table of',
+            'sorted table',
+            'spool parameters',
+            'standard table of',
+            'standard table',
+            'starting at',
+            'starting new task',
+            'statements into',
+            'structure default',
+            'structures into',
+
+            'table field',
+            'table of',
+            'text mode',
+            'time stamp',
+            'time zone',
+            'to code page',
+            'to column',
+            'to context',
+            'to first page',
+            'to last page',
+            'to last line',
+            'to line',
+            'to lower case',
+            'to number format',
+            'to page',
+            'to sap spool',
+            'to upper case',
+            'tokens into',
+            'transporting no fields',
+            'type tableview',
+            'type tabstrip',
+
+            'unicode enabling',
+            'up to',
+            'upper case',
+            'using edit mask',
+            'using key',
+            'using no edit mask',
+            'using screen',
+            'using selection-screen',
+            'using selection-set',
+            'using selection-sets of program',
+
+            'valid between',
+            'valid from',
+            'value check',
+            'via job',
+            'via selection-screen',
+            'visible length',
+
+            'whenever found',
+            'with analysis',
+            'with byte-order mark',
+            'with comments',
+            'with current switchstates',
+            'with explicit enhancements',
+            'with frame',
+            'with free selections',
+            'with further secondary keys',
+            'with header line',
+            'with hold',
+            'with implicit enhancements',
+            'with inactive enhancements',
+            'with includes',
+            'with key',
+            'with linefeed',
+            'with list tokenization',
+            'with native linefeed',
+            'with non-unique key',
+            'with null',
+            'with pragmas',
+            'with precompiled headers',
+            'with selection-table',
+            'with smart linefeed',
+            'with table key',
+            'with test code',
+            'with type-pools',
+            'with unique key',
+            'with unix linefeed',
+            'with windows linefeed',
+            'without further secondary keys',
+            'without selection-screen',
+            'without spool dynpro',
+            'without trmac',
+            'word into',
+            'writer for'
+            ),
+
+        //**********************************************************
+        // Other abap statements
+        //**********************************************************
+        3 => array(
+            'add',
+            'add-corresponding',
+            'aliases',
+            'append',
+            'assign',
+            'at',
+            'authority-check',
+
+            'break-point',
+
+            'clear',
+            'collect',
+            'compute',
+            'concatenate',
+            'condense',
+            'class',
+            'class-events',
+            'class-methods',
+            'class-pool',
+
+            'define',
+            'delete',
+            'demand',
+            'detail',
+            'divide',
+            'divide-corresponding',
+
+            'editor-call',
+            'end-of-file',
+            'end-enhancement-section',
+            'end-of-definition',
+            'end-of-page',
+            'end-of-selection',
+            'endclass',
+            'endenhancement',
+            'endexec',
+            'endform',
+            'endfunction',
+            'endinterface',
+            'endmethod',
+            'endmodule',
+            'endon',
+            'endprovide',
+            'endselect',
+            'enhancement',
+            'enhancement-point',
+            'enhancement-section',
+            'export',
+            'extract',
+            'events',
+
+            'fetch',
+            'field-groups',
+            'find',
+            'format',
+            'form',
+            'free',
+            'function-pool',
+            'function',
+
+            'get',
+
+            'hide',
+
+            'import',
+            'infotypes',
+            'input',
+            'insert',
+            'include',
+            'initialization',
+            'interface',
+            'interface-pool',
+            'interfaces',
+
+            'leave',
+            'load-of-program',
+            'log-point',
+
+            'maximum',
+            'message',
+            'methods',
+            'method',
+            'minimum',
+            'modify',
+            'move',
+            'move-corresponding',
+            'multiply',
+            'multiply-corresponding',
+
+            'new-line',
+            'new-page',
+            'new-section',
+
+            'overlay',
+
+            'pack',
+            'perform',
+            'position',
+            'print-control',
+            'program',
+            'provide',
+            'put',
+
+            'raise',
+            'refresh',
+            'reject',
+            'replace',
+            'report',
+            'reserve',
+
+            'scroll',
+            'search',
+            'select',
+            'selection-screen',
+            'shift',
+            'skip',
+            'sort',
+            'split',
+            'start-of-selection',
+            'submit',
+            'subtract',
+            'subtract-corresponding',
+            'sum',
+            'summary',
+            'summing',
+            'supply',
+            'syntax-check',
+
+            'top-of-page',
+            'transfer',
+            'translate',
+            'type-pool',
+
+            'uline',
+            'unpack',
+            'update',
+
+            'window',
+            'write'
+
+            ),
+
+        //**********************************************************
+        // keywords
+        //**********************************************************
+
+        4 => array(
+            'abbreviated',
+            'abstract',
+            'accept',
+            'acos',
+            'activation',
+            'alias',
+            'align',
+            'all',
+            'allocate',
+            'and',
+            'assigned',
+            'any',
+            'appending',
+            'area',
+            'as',
+            'ascending',
+            'asin',
+            'assigning',
+            'atan',
+            'attributes',
+            'avg',
+
+            'backward',
+            'between',
+            'bit-and',
+            'bit-not',
+            'bit-or',
+            'bit-set',
+            'bit-xor',
+            'boolc',
+            'boolx',
+            'bound',
+            'bt',
+            'blocks',
+            'bounds',
+            'boxed',
+            'by',
+            'byte-ca',
+            'byte-cn',
+            'byte-co',
+            'byte-cs',
+            'byte-na',
+            'byte-ns',
+
+            'ca',
+            'calling',
+            'casting',
+            'ceil',
+            'center',
+            'centered',
+            'changing',
+            'char_off',
+            'charlen',
+            'circular',
+            'class_constructor',
+            'client',
+            'clike',
+            'close',
+            'cmax',
+            'cmin',
+            'cn',
+            'cnt',
+            'co',
+            'col_background',
+            'col_group',
+            'col_heading',
+            'col_key',
+            'col_negative',
+            'col_normal',
+            'col_positive',
+            'col_total',
+            'color',
+            'column',
+            'comment',
+            'comparing',
+            'components',
+            'condition',
+            'context',
+            'copies',
+            'count',
+            'country',
+            'cpi',
+            'creating',
+            'critical',
+            'concat_lines_of',
+            'cos',
+            'cosh',
+            'count_any_not_of',
+            'count_any_of',
+            'cp',
+            'cs',
+            'csequence',
+            'currency',
+            'current',
+            'cx_static_check',
+            'cx_root',
+            'cx_dynamic_check',
+
+            'dangerous',
+            'database',
+            'datainfo',
+            'date',
+            'dbmaxlen',
+            'dd/mm/yy',
+            'dd/mm/yyyy',
+            'ddmmyy',
+            'deallocate',
+            'decfloat',
+            'decfloat16',
+            'decfloat34',
+            'decimals',
+            'default',
+            'deferred',
+            'definition',
+            'department',
+            'descending',
+            'destination',
+            'disconnect',
+            'display-mode',
+            'distance',
+            'distinct',
+            'div',
+            'dummy',
+
+            'encoding',
+            'end-lines',
+            'engineering',
+            'environment',
+            'eq',
+            'equiv',
+            'error_message',
+            'errormessage',
+            'escape',
+            'exact',
+            'exception-table',
+            'exceptions',
+            'exclude',
+            'excluding',
+            'exists',
+            'exp',
+            'exponent',
+            'exporting',
+            'extended_monetary',
+
+            'field',
+            'filter-table',
+            'filters',
+            'filter',
+            'final',
+            'find_any_not_of',
+            'find_any_of',
+            'find_end',
+            'floor',
+            'first-line',
+            'font',
+            'forward',
+            'for',
+            'frac',
+            'from_mixed',
+            'friends',
+            'from',
+
+            'giving',
+            'ge',
+            'gt',
+
+            'handle',
+            'harmless',
+            'having',
+            'head-lines',
+            'help-id',
+            'help-request',
+            'high',
+            'hold',
+            'hotspot',
+
+            'id',
+            'ids',
+            'immediately',
+            'implementation',
+            'importing',
+            'in',
+            'initial',
+            'incl',
+            'including',
+            'increment',
+            'index',
+            'index-line',
+            'inner',
+            'inout',
+            'intensified',
+            'into',
+            'inverse',
+            'is',
+            'iso',
+
+            'join',
+
+            'key',
+            'kind',
+
+            'log10',
+            'language',
+            'late',
+            'layout',
+            'le',
+            'lt',
+            'left-justified',
+            'leftplus',
+            'leftspace',
+            'left',
+            'length',
+            'level',
+            'like',
+            'line-count',
+            'line-size',
+            'lines',
+            'line',
+            'load',
+            'long',
+            'lower',
+            'low',
+            'lpi',
+
+            'matches',
+            'match',
+            'mail',
+            'major-id',
+            'max',
+            'medium',
+            'memory',
+            'message-id',
+            'module',
+            'minor-id',
+            'min',
+            'mm/dd/yyyy',
+            'mm/dd/yy',
+            'mmddyy',
+            'mode',
+            'modifier',
+            'mod',
+            'monetary',
+
+            'name',
+            'nb',
+            'ne',
+            'next',
+            'no-display',
+            'no-extension',
+            'no-gap',
+            'no-gaps',
+            'no-grouping',
+            'no-heading',
+            'no-scrolling',
+            'no-sign',
+            'no-title',
+            'no-topofpage',
+            'no-zero',
+            'nodes',
+            'non-unicode',
+            'no',
+            'number',
+            'nmax',
+            'nmin',
+            'not',
+            'null',
+            'numeric',
+            'numofchar',
+
+            'o',
+            'objects',
+            'obligatory',
+            'occurs',
+            'offset',
+            'off',
+            'of',
+            'only',
+            'open',
+            'option',
+            'optional',
+            'options',
+            'output-length',
+            'output',
+            'out',
+            'on change of',
+            'or',
+            'others',
+
+            'pad',
+            'page',
+            'pages',
+            'parameter-table',
+            'part',
+            'performing',
+            'pos_high',
+            'pos_low',
+            'priority',
+            'public',
+            'pushbutton',
+
+            'queue-only',
+            'quickinfo',
+
+            'raising',
+            'range',
+            'read-only',
+            'received',
+            'receiver',
+            'receiving',
+            'redefinition',
+            'reference',
+            'regex',
+            'replacing',
+            'reset',
+            'responsible',
+            'result',
+            'results',
+            'resumable',
+            'returncode',
+            'returning',
+            'right',
+            'right-specified',
+            'rightplus',
+            'rightspace',
+            'round',
+            'rows',
+            'repeat',
+            'requested',
+            'rescale',
+            'reverse',
+
+            'scale_preserving',
+            'scale_preserving_scientific',
+            'scientific',
+            'scientific_with_leading_zero',
+            'screen',
+            'scrolling',
+            'seconds',
+            'segment',
+            'shift_left',
+            'shift_right',
+            'sign',
+            'simple',
+            'sin',
+            'sinh',
+            'short',
+            'shortdump-id',
+            'sign_as_postfix',
+            'single',
+            'size',
+            'some',
+            'source',
+            'space',
+            'spots',
+            'stable',
+            'state',
+            'static',
+            'statusinfo',
+            'sqrt',
+            'string',
+            'strlen',
+            'structure',
+            'style',
+            'subkey',
+            'submatches',
+            'substring',
+            'substring_after',
+            'substring_before',
+            'substring_from',
+            'substring_to',
+            'super',
+            'supplied',
+            'switch',
+
+            'tan',
+            'tanh',
+            'table_line',
+            'table',
+            'tab',
+            'then',
+            'timestamp',
+            'times',
+            'time',
+            'timezone',
+            'title-lines',
+            'title',
+            'top-lines',
+            'to',
+            'to_lower',
+            'to_mixed',
+            'to_upper',
+            'trace-file',
+            'trace-table',
+            'transporting',
+            'trunc',
+            'type',
+
+            'under',
+            'unique',
+            'unit',
+            'user-command',
+            'using',
+            'utf-8',
+
+            'valid',
+            'value',
+            'value-request',
+            'values',
+            'vary',
+            'varying',
+            'version',
+
+            'warning',
+            'where',
+            'width',
+            'with',
+            'word',
+            'with-heading',
+            'with-title',
+
+            'xsequence',
+            'xstring',
+            'xstrlen',
+
+            'yes',
+            'yymmdd',
+
+            'z',
+            'zero'
+
+            ),
+
+        //**********************************************************
+        // screen statements
+        //**********************************************************
+
+        5 => array(
+            'call subscreen',
+            'chain',
+            'endchain',
+            'on chain-input',
+            'on chain-request',
+            'on help-request',
+            'on input',
+            'on request',
+            'on value-request',
+            'process'
+            ),
+
+        //**********************************************************
+        // internal statements
+        //**********************************************************
+
+        6 => array(
+            'generate dynpro',
+            'generate report',
+            'import dynpro',
+            'import nametab',
+            'include methods',
+            'load report',
+            'scan abap-source',
+            'scan and check abap-source',
+            'syntax-check for dynpro',
+            'syntax-check for program',
+            'syntax-trace',
+            'system-call',
+            'system-exit',
+            'verification-message'
+            ),
+
+        //**********************************************************
+        // Control statements
+        //**********************************************************
+
         1 => array(
-            'if', 'return', 'while', 'case', 'default',
-            'do', 'else', 'for', 'endif', 'elseif', 'eq',
-            'not', 'and'
+            'assert',
+            'case',
+            'catch',
+            'check',
+            'cleanup',
+            'continue',
+            'do',
+            'else',
+            'elseif',
+            'endat',
+            'endcase',
+            'endcatch',
+            'endif',
+            'enddo',
+            'endloop',
+            'endtry',
+            'endwhile',
+            'exit',
+            'if',
+            'loop',
+            'resume',
+            'retry',
+            'return',
+            'stop',
+            'try',
+            'when',
+            'while'
+
+            ),
+
+        //**********************************************************
+        // variable declaration statements
+        //**********************************************************
+
+        2 => array(
+            'class-data',
+            'controls',
+            'constants',
+            'data',
+            'field-symbols',
+            'fields',
+            'local',
+            'parameters',
+            'ranges',
+            'select-options',
+            'statics',
+            'tables',
+            'type-pools',
+            'types'
+            )
+        ),
+    'SYMBOLS' => array(
+        0 => array(
+            '->*', '->', '=>',
+            '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '!', '%', '^', '&', ':', ',', '.'
+            ),
+        1 => array(
+            '>=', '<=', '<', '>', '='
             ),
         2 => array(
-            'data', 'types', 'seletion-screen', 'parameters', 'field-symbols', 'extern', 'inline'
-            ),
-        3 => array(
-            'report', 'write', 'append', 'select', 'endselect', 'call method', 'call function',
-            'loop', 'endloop', 'raise', 'read table', 'concatenate', 'split', 'shift',
-            'condense', 'describe', 'clear', 'endfunction', 'assign', 'create data', 'translate',
-            'continue', 'start-of-selection', 'at selection-screen', 'modify', 'call screen',
-            'create object', 'perform', 'form', 'endform',
-            'reuse_alv_block_list_init', 'zbcialv', 'include'
-            ),
-        4 => array(
-            'type ref to', 'type', 'begin of',  'end of', 'like', 'into',
-            'from', 'where', 'order by', 'with key', 'string', 'separated by',
-            'exporting', 'importing', 'to upper case', 'to', 'exceptions', 'tables',
-            'using', 'changing'
-            ),
-        ),
-    'SYMBOLS' => array(
-        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+            '?='
+            )
         ),
     'CASE_SENSITIVE' => array(
         GESHI_COMMENTS => false,
@@ -77,13 +1318,23 @@
         2 => false,
         3 => false,
         4 => false,
+        5 => false,
+        6 => false,
+        7 => false,
+        8 => false,
+        9 => false,
         ),
     'STYLES' => array(
         'KEYWORDS' => array(
-            1 => 'color: #b1b100;',
-            2 => 'color: #000000; font-weight: bold;',
-            3 => 'color: #000066;',
-            4 => 'color: #993333;'
+            1 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;', //control statements
+            2 => 'color: #cc4050; text-transform: uppercase; font-weight: bold; zzz:data;', //data statements
+            3 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;', //first token of other statements
+            4 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;', // next tokens of other statements ("keywords")
+            5 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;',
+            6 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;',
+            7 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;',
+            8 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;',
+            9 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;'
             ),
         'COMMENTS' => array(
             1 => 'color: #808080; font-style: italic;',
@@ -94,20 +1345,22 @@
             0 => 'color: #000099; font-weight: bold;'
             ),
         'BRACKETS' => array(
-            0 => 'color: #66cc66;'
+            0 => 'color: #808080;'
             ),
         'STRINGS' => array(
-            0 => 'color: #ff0000;'
+            0 => 'color: #4da619;'
             ),
         'NUMBERS' => array(
-            0 => 'color: #cc66cc;'
+            0 => 'color: #3399ff;'
             ),
         'METHODS' => array(
             1 => 'color: #202020;',
             2 => 'color: #202020;'
             ),
         'SYMBOLS' => array(
-            0 => 'color: #66cc66;'
+            0 => 'color: #808080;',
+            1 => 'color: #800080;',
+            2 => 'color: #0000ff;'
             ),
         'REGEXPS' => array(
             ),
@@ -115,15 +1368,20 @@
             )
         ),
     'URLS' => array(
-        1 => '',
-        2 => '',
-        3 => 'http://sap4.com/wiki/index.php?title={FNAMEL}',
-        4 => ''
+        1 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+        2 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+        3 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+        4 => '',
+        5 => '',
+        6 => '',
+        7 => '',
+        8 => '',
+        9 => ''
         ),
     'OOLANG' => true,
     'OBJECT_SPLITTERS' => array(
-        1 => '.',
-        2 => '::'
+        1 => '-&gt;',
+        2 => '=&gt;'
         ),
     'REGEXPS' => array(
         ),
@@ -131,7 +1389,21 @@
     'SCRIPT_DELIMITERS' => array(
         ),
     'HIGHLIGHT_STRICT_BLOCK' => array(
-        )
+        ),
+    'PARSER_CONTROL' => array(
+        'KEYWORDS' => array(
+            7 => array(
+                'SPACE_AS_WHITESPACE' => true
+                ),
+            8 => array(
+                'SPACE_AS_WHITESPACE' => true
+                ),
+            9 => array(
+                'SPACE_AS_WHITESPACE' => true
+                )
+            )
+        ),
+    'TAB_WIDTH' => 4
 );
 
-?>
+?>
\ No newline at end of file