# Copyright (c) 2005 - 2006 Hans Jeuken. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.

# This file was generated from the 'rsiidl.xml' file of the syntax highlight
# engine of the kate text editor (http://www.kate-editor.org

#kate xml version 1.04
#kate version 2.1
#kate author Markus Fraenz (fraenz@linmpi.mpg.de)
#generated: Sun Feb  3 22:02:06 2008, localtime

package Syntax::Highlight::Engine::Kate::RSI_IDL;

our $VERSION = '0.16';

use strict;
use warnings;
use base('Syntax::Highlight::Engine::Kate::Template');

sub new {
   my $proto = shift;
   my $class = ref($proto) || $proto;
   my $self = $class->SUPER::new(@_);
   $self->attributes({
      'Char' => 'Char',
      'Command' => 'BaseN',
      'Comment' => 'Comment',
      'Data Type' => 'DataType',
      'Decimal' => 'DecVal',
      'Float' => 'DecVal',
      'Hex' => 'DecVal',
      'IOCommand' => 'DataType',
      'Keyword' => 'Keyword',
      'Normal Text' => 'Normal',
      'Octal' => 'DecVal',
      'String' => 'String',
      'String Char' => 'Char',
      'bracketed' => 'Float',
   });
   $self->listAdd('commands',
      'ABS',
      'ACOS',
      'ADAPT_HIST_EQUAL',
      'ALOG',
      'ALOG10',
      'ARG_PRESENT',
      'ASIN',
      'ASSOC',
      'ATAN',
      'AXIS',
      'BESELI',
      'BESELJ',
      'BESELY',
      'BLAS_AXPY',
      'BREAKPOINT',
      'BROYDEN',
      'BYTEORDER',
      'CALL_EXTERNAL',
      'CALL_FUNCTION',
      'CALL_METHOD',
      'CALL_PROCEDURE',
      'CATCH',
      'CEIL',
      'CHECK_MATH',
      'CHOLDC',
      'CHOLSOL',
      'COLOR_CONVERT',
      'COLOR_QUAN',
      'COMPILE_OPT',
      'COMPUTE_MESH_NORMALS',
      'CONJ',
      'CONSTRAINED_MIN',
      'CONTOUR',
      'CONVERT_COORD',
      'CONVOL',
      'CORRELATE',
      'COS',
      'COSH',
      'CREATE_STRUCT',
      'CURSOR',
      'DEFINE_KEY',
      'DEFSYSV',
      'DELVAR',
      'DEVICE',
      'DFPMIN',
      'DIALOG_MESSAGE',
      'DIALOG_PICKFILE',
      'DIALOG_PRINTERSETUP',
      'DIALOG_PRINTJOB',
      'DILATE',
      'DLM_LOAD',
      'DRAW_ROI',
      'ELMHES',
      'EMPTY',
      'ENABLE_SYSRTN',
      'ERASE',
      'ERODE',
      'ERRORF',
      'EXECUTE',
      'EXIT',
      'EXP',
      'EXPAND_PATH',
      'EXPINT',
      'FINDFILE',
      'FINITE',
      'FLOOR',
      'FORMAT_AXIS_VALUES',
      'FORWARD_FUNCTION',
      'FSTAT',
      'FULSTR',
      'FZ_ROOTS',
      'GAUSSINT',
      'GETENV',
      'GET_KBRD',
      'GRID3',
      'GRID_TPS',
      'HEAP_GC',
      'HELP',
      'HISTOGRAM',
      'HQR',
      'IMAGE_STATISTICS',
      'IMAGINARY',
      'INTERPOLATE',
      'INVERT',
      'ISHFT',
      'ISOCONTOUR',
      'ISOSURFACE',
      'JOURNAL',
      'KEYWORD_SET',
      'LABEL_REGION',
      'LINBCG',
      'LINKIMAGE',
      'LMGR',
      'LNGAMMA',
      'LNP_TEST',
      'LOADCT',
      'LOCALE_GET',
      'LSODE',
      'LUDC',
      'LUMPROVE',
      'LUSOL',
      'MACHAR',
      'MAKE_ARRAY',
      'MAP_PROJ_INFO',
      'MAX',
      'MEDIAN',
      'MESH_CLIP',
      'MESH_DECIMATE',
      'MESH_ISSOLID',
      'MESH_MERGE',
      'MESH_NUMTRIANGLES',
      'MESH_SMOOTH',
      'MESH_SURFACEAREA',
      'MESH_VALIDATE',
      'MESH_VOLUME',
      'MESSAGE',
      'MIN',
      'NEWTON',
      'N_ELEMENTS',
      'N_PARAMS',
      'N_TAGS',
      'OBJ_CLASS',
      'OBJ_DESTROY',
      'OBJ_ISA',
      'OBJ_NEW',
      'OBJ_VALID',
      'ON_ERROR',
      'OPLOT',
      'PARTICLE_TRACE',
      'PLOT',
      'PLOTS',
      'POLYFILL',
      'POLYFILLV',
      'POLYSHADE',
      'POLY_2D',
      'POWELL',
      'PROFILER',
      'PTR_FREE',
      'PTR_NEW',
      'PTR_VALID',
      'QROMB',
      'QROMO',
      'QSIMP',
      'RANDOMN',
      'RANDOMU',
      'REBIN',
      'REFORM',
      'RETALL',
      'RETURN',
      'RIEMANN',
      'RK4',
      'ROBERTS',
      'ROTATE',
      'ROUND',
      'SETENV',
      'SET_PLOT',
      'SET_SHADING',
      'SHADE_SURF',
      'SHADE_VOLUME',
      'SHIFT',
      'SIN',
      'SINH',
      'SIZE',
      'SMOOTH',
      'SOBEL',
      'SORT',
      'SPL_INIT',
      'SPL_INTERP',
      'SPRSAB',
      'SPRSAX',
      'SPRSIN',
      'SQRT',
      'STOP',
      'STRCMP',
      'STRCOMPRESS',
      'STREGEX',
      'STRJOIN',
      'STRLEN',
      'STRLOWCASE',
      'STRMATCH',
      'STRMESSAGE',
      'STRMID',
      'STRPOS',
      'STRPUT',
      'STRTRIM',
      'STRUCT_ASSIGN',
      'STRUCT_HIDE',
      'STRUPCASE',
      'SURFACE',
      'SVDC',
      'SVSOL',
      'SYSTIME',
      'TAG_NAMES',
      'TAN',
      'TANH',
      'TEMPORARY',
      'TETRA_CLIP',
      'TETRA_SURFACE',
      'TETRA_VOLUME',
      'THIN',
      'THREED',
      'TOTAL',
      'TRANSPOSE',
      'TRIANGULATE',
      'TRIGRID',
      'TRIQL',
      'TRIRED',
      'TRISOL',
      'TV',
      'TVCRS',
      'TVLCT',
      'TVRD',
      'TVSCLU',
      'USERSYM',
      'VALUE_LOCATE',
      'VOIGT',
      'VOXEL_PROJ',
      'WAIT',
      'WATERSHED',
      'WDELETE',
      'WHERE',
      'WIDGET_BASE',
      'WIDGET_BUTTON',
      'WIDGET_CONTROL',
      'WIDGET_DRAW',
      'WIDGET_DROPLIST',
      'WIDGET_EVENT',
      'WIDGET_INFO',
      'WIDGET_LABEL',
      'WIDGET_LIST',
      'WIDGET_SLIDER',
      'WIDGET_TABLE',
      'WIDGET_TEXT',
      'WINDOW',
      'WSET',
      'WSHOW',
      'WTN',
      'XYOUTS',
   );
   $self->listAdd('io commands',
      'Close',
      'FLUSH',
      'Free_lun',
      'IOCTL',
      'Open',
      'Openr',
      'Openu',
      'Openw',
      'POINT_LUN',
      'RESTORE',
      'SAVE',
      'assoc',
      'catch',
      'cd',
      'eof',
      'get_lun',
      'print',
      'printf',
      'prints',
      'read',
      'readf',
      'reads',
      'spawn',
      'writu',
   );
   $self->listAdd('reserved words',
      'And',
      'Begin',
      'Case',
      'Common',
      'Do',
      'Else',
      'End',
      'Endcase',
      'Endelse',
      'Endfor',
      'Endif',
      'Endrep',
      'Endwhile',
      'Eq',
      'For',
      'Function',
      'Ge',
      'Goto',
      'Gt',
      'If',
      'Le',
      'Lt',
      'Mod',
      'Ne',
      'Not',
      'Of',
      'On_ioerror',
      'Or',
      'Pro',
      'Repeat',
      'Return',
      'Then',
      'Then',
      'Until',
      'While',
      'Xor',
   );
   $self->listAdd('system variables',
      'c',
      'd',
      'dir',
      'dlm_path',
      'dpi',
      'dtor',
      'edit_input',
      'err',
      'err_string',
      'error',
      'error_state',
      'except',
      'help_path',
      'journal',
      'map',
      'more',
      'mouse',
      'msg_prefix',
      'order',
      'p',
      'path',
      'pi',
      'prompt',
      'quiet',
      'radeg',
      'stime',
      'syserr_string',
      'syserror',
      'values',
      'version',
      'warn',
      'x',
      'y',
      'z',
   );
   $self->listAdd('types',
      'Bytarr',
      'Byte',
      'Bytscl',
      'Dblarr',
      'Dcindgen',
      'Dindgen',
      'Double',
      'Findgen',
      'Fix',
      'Float',
      'Fltarr',
      'Indgen',
      'Intarr',
      'Long',
      'Long64',
      'Objarr',
      'Ptrarr',
      'Replicate',
      'Strarr',
      'String',
      'bindgen',
      'cindgen',
      'complex',
      'complexarr',
      'dcomplex',
      'dcomplexarr',
      'l64indgen',
      'lindgen',
      'lon64arr',
      'lonarr',
      'sindgen',
      'uindgen',
      'uint',
      'uintarr',
      'ul64indgen',
      'ulindgen',
      'ulon64arr',
      'ulonarr',
      'ulong',
   );
   $self->contextdata({
      'Comment' => {
         callback => \&parseComment,
         attribute => 'Comment',
         lineending => '#pop',
      },
      'Normal' => {
         callback => \&parseNormal,
         attribute => 'Normal Text',
      },
      'systemvarcontext' => {
         callback => \&parsesystemvarcontext,
         attribute => 'Char',
         lineending => '#pop',
      },
   });
   $self->deliminators('\\s||\\.|\\(|\\)|:|\\!|\\+|,|-|<|=|>|\\%|\\&|\\*|\\/|;|\\?|\\[|\\]|\\^|\\{|\\||\\}|\\~|\\\\');
   $self->basecontext('Normal');
   $self->keywordscase(0);
   $self->initialize;
   bless ($self, $class);
   return $self;
}

sub language {
   return 'RSI IDL';
}

sub parseComment {
   my ($self, $text) = @_;
   return 0;
};

sub parseNormal {
   my ($self, $text) = @_;
   # String => 'reserved words'
   # attribute => 'Keyword'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'reserved words', 0, undef, 0, '#stay', 'Keyword')) {
      return 1
   }
   # String => 'types'
   # attribute => 'Data Type'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'types', 0, undef, 0, '#stay', 'Data Type')) {
      return 1
   }
   # String => 'commands'
   # attribute => 'Command'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'commands', 0, undef, 0, '#stay', 'Command')) {
      return 1
   }
   # String => 'io commands'
   # attribute => 'IOCommand'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'io commands', 0, undef, 0, '#stay', 'IOCommand')) {
      return 1
   }
   # attribute => 'Octal'
   # context => '#stay'
   # type => 'Float'
   if ($self->testFloat($text, 0, undef, 0, '#stay', 'Octal')) {
      return 1
   }
   # attribute => 'Decimal'
   # context => '#stay'
   # type => 'Int'
   if ($self->testInt($text, 0, undef, 0, '#stay', 'Decimal')) {
      return 1
   }
   # attribute => 'String'
   # char => '''
   # char1 => '''
   # context => '#stay'
   # type => 'RangeDetect'
   if ($self->testRangeDetect($text, '\'', '\'', 0, 0, undef, 0, '#stay', 'String')) {
      return 1
   }
   # attribute => 'String'
   # char => '"'
   # char1 => '"'
   # context => '#stay'
   # type => 'RangeDetect'
   if ($self->testRangeDetect($text, '"', '"', 0, 0, undef, 0, '#stay', 'String')) {
      return 1
   }
   # attribute => 'Hex'
   # char => '('
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '(', 0, 0, 0, undef, 0, '#stay', 'Hex')) {
      return 1
   }
   # attribute => 'Hex'
   # char => ')'
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, '#stay', 'Hex')) {
      return 1
   }
   # attribute => 'Char'
   # char => '['
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '[', 0, 0, 0, undef, 0, '#stay', 'Char')) {
      return 1
   }
   # attribute => 'Char'
   # char => ']'
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ']', 0, 0, 0, undef, 0, '#stay', 'Char')) {
      return 1
   }
   # attribute => 'Float'
   # char => '{'
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, '#stay', 'Float')) {
      return 1
   }
   # attribute => 'Float'
   # char => '}'
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, '#stay', 'Float')) {
      return 1
   }
   # attribute => 'Char'
   # char => '$'
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '$', 0, 0, 0, undef, 0, '#stay', 'Char')) {
      return 1
   }
   # attribute => 'Char'
   # char => '@'
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '@', 0, 0, 0, undef, 0, '#stay', 'Char')) {
      return 1
   }
   # attribute => 'Char'
   # char => ':'
   # context => '#stay'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ':', 0, 0, 0, undef, 0, '#stay', 'Char')) {
      return 1
   }
   # attribute => 'Char'
   # char => ';'
   # context => 'Comment'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ';', 0, 0, 0, undef, 0, 'Comment', 'Char')) {
      return 1
   }
   # attribute => 'Char'
   # char => '!'
   # context => 'systemvarcontext'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '!', 0, 0, 0, undef, 0, 'systemvarcontext', 'Char')) {
      return 1
   }
   return 0;
};

sub parsesystemvarcontext {
   my ($self, $text) = @_;
   # attribute => 'Hex'
   # char => '('
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '(', 0, 0, 0, undef, 0, '#pop', 'Hex')) {
      return 1
   }
   # attribute => 'Char'
   # char => '.'
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '.', 0, 0, 0, undef, 0, '#pop', 'Char')) {
      return 1
   }
   # attribute => 'Hex'
   # char => ' '
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ' ', 0, 0, 0, undef, 0, '#pop', 'Hex')) {
      return 1
   }
   # String => 'system variables'
   # attribute => 'Float'
   # context => '#pop'
   # type => 'keyword'
   if ($self->testKeyword($text, 'system variables', 0, undef, 0, '#pop', 'Float')) {
      return 1
   }
   return 0;
};


1;

__END__

=head1 NAME

Syntax::Highlight::Engine::Kate::RSI_IDL - a Plugin for RSI IDL syntax highlighting

=head1 SYNOPSIS

 require Syntax::Highlight::Engine::Kate::RSI_IDL;
 my $sh = new Syntax::Highlight::Engine::Kate::RSI_IDL([
 ]);

=head1 DESCRIPTION

Syntax::Highlight::Engine::Kate::RSI_IDL is a  plugin module that provides syntax highlighting
for RSI IDL to the Syntax::Haghlight::Engine::Kate highlighting engine.

This code is generated from the syntax definition files used
by the Kate project.
It works quite fine, but can use refinement and optimization.

It inherits Syntax::Higlight::Engine::Kate::Template. See also there.

=head1 AUTHOR

Hans Jeuken (haje <at> toneel <dot> demon <dot> nl)

=head1 BUGS

Unknown. If you find any, please contact the author