# -*- coding: iso-8859-1 -*-
"""
	MoinMoin - OpenRoad Source Parser

    @copyright: 2007 by Anke Heinrich <anke.heinrich@gmail.com>
    @license: GNU GPL, see COPYING for details.
"""

from MoinMoin.util.ParserBase import ParserBase

Dependencies = []

class Parser(ParserBase):

    parsername = 'ColorizedOpenRoad'
    extensions = ['.or']
    Dependencies = []

    def __init__(self, raw, request, **kw):
        ParserBase.__init__(self,raw,request,**kw)
        self._ignore_case = 1

    def setupRules(self):
        ParserBase.setupRules(self)
        
        self.addRulePair("Comment","/[*]","[*]/")
        self.addRule("Comment","//.*$")
        self.addRulePair("String",'\'','\'')
        self.addRule("ID","[a-zA-Z_][a-zA-Z0-9_]*![a-zA-Z_][a-zA-Z0-9_]*")
        self.addRule("ID","[a-zA-Z_][a-zA-Z0-9_]*")
        self.addRule("ID","CurFrame")
        self.addRule("ID","CurProcedure")
        self.addRule("ID","CurMethod")
        self.addRule("ID","CurObject")
        self.addRule("Number",r"[0-9](\.[0-9]+)?")
        self.addRule("Number",r"[xX]\'([0-9a-fA-F][0-9a-fA-F])+\'")
	self.addRule("SPChar",r"[*()+=\[\];,.<>/-]#\:")
        
        reserved_words = ['ABORT','ALL','ALTER','AND','ANY','AS','ASC','AT','AVG',
			  'BEGIN','BETWEEN','BY','BYREF','CALL','CALLFRAME',
			  'CALLPROC','CASE','CLEAR','CLOSE','COMMIT','CONNECT',
			  'CONTINUE','COPY','COUNT','CREATE','CURRENT','DBEVENT',
			  'DECLARE','DEFAULT','DELETE','DELETEROW','DESC','DIRECT',
			  'DISCONNECT','DISTINCT','DO','DROP','ELSE','ELSEIF','END',
			  'ENDCASE','ENDDECLARE','ENDFOR','ENDIF','ENDLOOP',
			  'ENDWHILE','ESCAPE','EXECUTE','EXISTS','EXIT','FETCH',
			  'FIELD','FOR','FROM','GOTOFRAME','GRANT','GROUP',
			  'HAVING','IF','IMMEDIATE','IN','INDEX','INITIALISE',
			  'INITIALIZE','INQUIRE_INGRES','INQUIRE_SQL','INSERT',
			  'INSERTROW','INSTALLATION','INTEGRITY','INTO','KEY',
			  'LIKE','LINK','MAX','MESSAGE','METHOD','MIN','MODE',
			  'MODIFY','NEXT','NOECHO','NOT','OF','ON','OPEN',
			  'OPENFRAME','OR','ORDER','PERMIT','PROCEDURE','PROMPT',
			  'QUALIFICATION','RAISE','REGISTER','RELOCATE','REMOVE',
			  'REPEAT','REPEATED','RESUME','RETURN','RETURNING',
			  'REVOKE','ROLE','ROLLBACK','RULE','SAVE','SAVEPOINT',
			  'SELECT','SET','SLEEP','SOME','SUM','SYSTEM','TABLE',
			  'THEN','TO','TRANSACTION','UNION','UNIQUE','UNTIL',
			  'UPDATE','VALUES','VIEW','WHERE','WHILE','WITH','WORK']

        self.addReserved(reserved_words)

	system_events =  ['CHILDCLICK','CHILDCLICKPOINT','CHILDCOLLAPSED',
			  'CHILDDETAILS','CHILDDOUBLECLICK','CHILDDRAGBOX',
			  'CHILDDRAGSEGMENT','CHILDENTRY','CHILDEXIT',
			  'CHILDEXPANDED','CHILDHEADERCLICK','CHILDMOVED',
			  'CHILDPROPERTIES','CHILDRESIZED','CHILDSCROLL',
			  'CHILDSELECT','CHILDSELECTIONCHANGED','CHILDSETVALUE',
			  'CHILDUNSELECT','CHILDVALIDATE','CLICK','CLICKPOINT',
			  'COLLAPSED','DBEVENT','DETAILS','DOUBLECLICK','DRAGBOX',
			  'DRAGSEGMENT','ENTRY','EXIT','EXPANDED','EXTCLASSEVENT',
			  'FRAMEACTIVATE','FRAMEDEACTIVATE','HEADERCLICK',
			  'INSERTROW','LABELCHANGED','MOVED','PAGEACTIVATED',
			  'PAGECHANGED','PAGEDEACTIVATED','PROPERTIES','RESIZED',
			  'SCROLL','SELECT','SELECTIONCHANGED','SETVALUE',
			  'TERMINATE','UNSELECT','USEREVENT','VALIDATE',
			  'WINDOWCLOSE','WINDOWICON','WINDOWMOVED','WINDOWRESIZED',
			  'WINDOWVISIBLE']

        self.addReserved(system_events)

	system_functions = ['IFNULL']

        self.addReserved(system_functions)

	types = 	 ['ARRAY','BYTE','CHAR','DATE','DECIMAL','FLOAT','FLOAT4',
			  'FLOAT8','INT1','INT2','INT4','INTEGER','INTEGER1',
			  'INTEGER2','INTEGER4','MONEY','OBJECT_KEY',
			  'SECURITY_LABEL','SMALLINT','TABLE_KEY','VARCHAR']

        self.addReserved(types)
       
        system_classes = ['ACTIVEFIELD','ANALOGFIELD','APPFLAG','APPSOURCE',
                          'ARRAYOBJECT','ATTRIBUTEOBJECT','BARFIELD',
                          'BITMAPOBJECT','BOXTRIM','BREAKSPEC','BUTTONFIELD',
                          'CELLATTRIBUTE','CHOICEBITMAP','CHOICEDETAIL',
                          'CHOICEFIELD','CHOICEITEM','CHOICELIST','CLASS',
                          'CLASSSOURCE','COLUMNCROSS','COLUMNFIELD',
                          'COMPOSITEFIELD','COMPSOURCE','CONTROLBUTTON',
                          'CROSSTABLE','CURSORBITMAP','CURSOROBJECT','DATASTREAM',
                          'DATEOBJECT','DBEVENTOBJECT','DBSESSIONOBJECT',
                          'DISPLAYFORM','DYNEXPR','ELLIPSESHAPE','ENTRYFIELD',
                          'ENUMFIELD','EVENT','EXTOBJECT',' EXTOBJFIELD',
                          'FIELDOBJECT','FLEXIBLEFORM','FLOATOBJECT','FORMFIELD',
                          'FRAMEEXEC','FRAMEFORM','FRAMESOURCE','FREETRIM',
                          'GHOSTEXEC','GHOSTSOURCE','IMAGEFIELD','IMAGETRIM',
                          'INTEGEROBJECT','LISTFIELD','LISTVIEWCOLATTR',
                          'LISTVIEWFIELD','LONGBYTEOBJECT','LONGVCHAROBJECT',
                          'MATRIXFIELD','MENUBAR','MENUBUTTON','MENUFIELD',
                          'MENUGROUP','MENUITEM','MENULIST','MENUSEPARATOR',
                          'MENUSTACK','MENUTOGGLE','METHODEXEC','METHODOBJECT',
                          'MONEYOBJECT','OBJECT','OPTIONFIELD','OPTIONMENU',
                          'PALETTEFIELD','POPUPBUTTON','PROC4GLSOURCE','PROCEXEC',
                          'PROCHANDLE','QUERYCOL','QUERYOBJECT',' QUERYPARM',
                          'QUERYTABLE','RADIOFIELD','RECTANGLESHAPE','ROWCROSS',
                          'SCALARFIELD','SCOPE','SCROLLBARFIELD','SEGMENTSHAPE',
                          'SESSIONOBJECT','SHAPEFIELD','SLIDERFIELD','SQLSELECT',
                          'STACKFIELD','STRINGOBJECT','SUBFORM','TABBAR',
                          'TABFIELD','TABFOLDER','TABLEFIELD','TABPAGE',
                          'TOGGLEFIELD','TREE','TREENODE','TREEVIEWFIELD',
                          'USERCLASSOBJECT','USEROBJECT','VIEWPORTFIELD']

        self.addReserved(system_classes)

        constant_words = ['TRUE','FALSE','NULL',
			  'BF_BMP','BF_GIF','BF_SUNRASTER','BF_TIFF',
			  'BF_WINDOWCURSOR','BF_WINDOWICON','BF_XBM',
			  'CC_BACKGROUND','CC_BLACK','CC_BLUE','CC_BROWN','CC_CYAN',
			  'CC_DEFAULT_1','CC_DEFAULT_10','CC_DEFAULT_11',
			  'CC_DEFAULT_12','CC_DEFAULT_13','CC_DEFAULT_14',
			  'CC_DEFAULT_15','CC_DEFAULT_16','CC_DEFAULT_17',
			  'CC_DEFAULT_18','CC_DEFAULT_19','CC_DEFAULT_2',
			  'CC_DEFAULT_20','CC_DEFAULT_21','CC_DEFAULT_22',
			  'CC_DEFAULT_23','CC_DEFAULT_24','CC_DEFAULT_25',
			  'CC_DEFAULT_26','CC_DEFAULT_27','CC_DEFAULT_28',
			  'CC_DEFAULT_29','CC_DEFAULT_3','CC_DEFAULT_30',
			  'CC_DEFAULT_4','CC_DEFAULT_5','CC_DEFAULT_6',
			  'CC_DEFAULT_7','CC_DEFAULT_8','CC_DEFAULT_9',
			  'CC_FOREGROUND','CC_GRAY','CC_GREEN','CC_LIGHT_BLUE',
			  'CC_LIGHT_BROWN','CC_LIGHT_CYAN','CC_LIGHT_GRAY',
			  'CC_LIGHT_GREEN','CC_LIGHT_ORANGE','CC_LIGHT_PINK',
			  'CC_LIGHT_PURPLE','CC_LIGHT_RED','CC_LIGHT_YELLOW',
			  'CC_MAGENTA','CC_ORANGE','CC_PALE_BLUE','CC_PALE_BROWN',
			  'CC_PALE_CYAN','CC_PALE_GRAY','CC_PALE_GREEN',
			  'CC_PALE_ORANGE','CC_PALE_PINK','CC_PALE_PURPLE',
			  'CC_PALE_RED','CC_PALE_YELLOW','CC_PINK CC_PURPLE',
			  'CC_RED','CC_SYS_ACTIVEBORDER','CC_SYS_ACTIVECAPTION',
			  'CC_SYS_APPWORKSPACE','CC_SYS_BACKGROUND',
			  'CC_SYS_BTNFACE','CC_SYS_BTNSHADOW','CC_SYS_BTNTEXT',
			  'CC_SYS_CAPTIONTEXT','CC_SYS_GRAYTEXT',
			  'CC_SYS_HIGHLIGHT','CC_SYS_HIGHLIGHTTEXT',
			  'CC_SYS_INACTIVEBORDER','CC_SYS_INACTIVECAPTION',
			  'CC_SYS_INACTIVECAPTIONTEXT','CC_SYS_MENU',
			  'CC_SYS_MENUTEXT','CC_SYS_SCROLLBAR','CC_SYS_SHADOW',
			  'CC_SYS_WINDOW','CC_SYS_WINDOWFRAME',
			  'CC_SYS_WINDOWTEXT','CC_WHITE','CC_YELLOW',
			  'CL_INVALIDVALUE','CP_BOTH','CP_COLUMNS','CP_NONE',
			  'CP_ROWS','CS_CLOSED','CS_CURRENT','CS_NOCURRENT',
			  'CS_NO_MORE_ROWS','CS_OPEN','CS_OPEN_CACHED','DC_BW',
			  'DC_COLOR','DP_AUTOSIZE_FIELD','DP_CLIP_IMAGE',
			  'DP_SCALE_IMAGE_H','DP_SCALE_IMAGE_HW',
			  'DP_SCALE_IMAGE_W','DS_CONNECTED','DS_DISABLED',
			  'DS_DISCONNECTED','DS_INGRES_DBMS','DS_NO_DBMS',
			  'DS_ORACLE_DBMS','DS_SQLSERVER_DBMS','DV_NULL',
			  'DV_STRING','DV_SYSTEM','EH_NEXT_HANDLER','EH_RESUME',
			  'EH_RETRY','EP_INTERACTIVE','EP_NONE','EP_OUTPUT',
			  'ER_FAIL','ER_NAMEEXISTS','ER_OK','ER_OUTOFRANGE',
			  'ER_ROWNOTFOUND','ER_USER1','ER_USER10','ER_USER2',
			  'ER_USER3','ER_USER4','ER_USER5','ER_USER6','ER_USER7',
			  'ER_USER8','ER_USER9','FA_BOTTOMCENTER',
			  'FA_BOTTOMLEFT','FA_BOTTOMRIGHT','FA_CENTER',
			  'FA_CENTERLEFT','FA_CENTERRIGHT','FA_DEFAULT','FA_NONE',
			  'FA_TOPCENTER','FA_TOPLEFT','FA_TOPRIGHT',
			  'FB_CHANGEABLE','FB_CLICKPOINT','FB_DIMMED','FB_DRAGBOX',
			  'FB_DRAGSEGMENT','FB_FLEXIBLE','FB_INVISIBLE',
			  'FB_LANDABLE','FB_MARKABLE','FB_RESIZEABLE',
			  'FB_VIEWABLE','FB_VISIBLE','FC_LOWER','FC_NONE','FC_UPPER',
			  'FM_QUERY','FM_READ','FM_UPDATE','FM_USER1','FM_USER2',
			  'FM_USER3','FO_DEFAULT','FO_HORIZONTAL','FO_VERTICAL',
			  'FP_BITMAP','FP_CLEAR','FP_CROSSHATCH','FP_DARKSHADE',
			  'FP_DEFAULT','FP_HORIZONTAL','FP_LIGHTSHADE','FP_SHADE',
			  'FP_SOLID','FP_VERTICAL','FT_NOTSETVALUE','FT_SETVALUE',
			  'FT_TABTO','FT_TAKEFOCUS','GF_BOTTOM','GF_DEFAULT',
			  'GF_LEFT','GF_RIGHT','GF_TOP','HC_DOUBLEQUOTE',
			  'HC_FORMFEED','HC_NEWLINE','HC_QUOTE','HC_SPACE','HC_TAB',
			  'HV_CONTENTS','HV_CONTEXT','HV_HELPONHELP','HV_KEY',
			  'HV_QUIT','LS_3D','LS_DASH','LS_DASHDOT','LS_DASHDOTDOT',
			  'LS_DEFAULT','LS_DOT','LS_SOLID','LW_DEFAULT',
			  'LW_EXTRATHIN','LW_MAXIMUM','LW_MIDDLE','LW_MINIMUM',
			  'LW_NOLINE','LW_THICK','LW_THIN','LW_VERYTHICK',
			  'LW_VERYTHIN','MB_DISABLED','MB_ENABLED','MB_INVISIBLE',
			  'MB_MOVEABLE','MT_ERROR','MT_INFO','MT_NONE','MT_WARNING',
			  'OP_APPEND','OP_NONE','OS3D','OS_DEFAULT','OS_SHADOW',
			  'OS_SOLID','PU_CANCEL','PU_OK','QS_ACTIVE','QS_INACTIVE',
			  'QS_SETCOL','QY_ARRAY','QY_CACHE','QY_CURSOR','QY_DIRECT',
			  'RC_CHILDSELECTED','RC_DOWN','RC_END','RC_FIELDFREED',
			  'RC_FIELDORPHANED','RC_GROUPSELECT','RC_HOME','RC_LEFT',
			  'RC_MODECHANGED','RC_MOUSECLICK','RC_MOUSEDRAG',
			  'RC_NEXT','RC_NOTAPPLICABLE','RC_PAGEDOWN','RC_PAGEUP',
			  'RC_PARENTSELECTED','RC_PREVIOUS','RC_PROGRAM',
			  'RC_RESUME','RC_RETURN','RC_RIGHT','RC_ROWDELETED',
			  'RC_ROWINSERTED','RC_ROWSALLDELETED','RC_SELECT',
			  'RC_TFSCROLL','RC_TOGGLESELECT','RC_UP','RS_CHANGED',
			  'RS_DELETED','RS_NEW','RS_UNCHANGED','RS_UNDEFINED',
			  'SK_CLOSE','SK_COPY','SK_CUT','SK_DELETE','SK_DETAILS',
			  'SK_DUPLICATE','SK_FIND','SK_GO','SK_HELP','SK_NEXT',
			  'SK_NONE','SK_PASTE','SK_PROPS','SK_QUIT','SK_REDO',
			  'SK_SAVE','SK_TFDELETEALLROWS','SK_TFDELETEROW',
			  'SK_TFFIND','SK_TFINSERTROW','SK_UNDO','SP_APPSTARTING',
			  'SP_ARROW','SP_CROSS','SP_IBEAM','SP_ICON','SP_NO',
			  'SP_SIZE','SP_SIZENESW','SP_SIZENS','SP_SIZENWSE',
			  'SP_SIZEWE','SP_UPARROW','SP_WAIT','SY_NT','SY_OS2',
			  'SY_UNIX','SY_VMS','SY_WIN95','TF_COURIER','TF_HELVETICA',
			  'TF_LUCIDA','TF_MENUDEFAULT','TF_NEWCENTURY','TF_SYSTEM',
			  'TF_TIMESROMAN','UE_DATAERROR','UE_EXITED',
			  'UE_NOTACTIVE','UE_PURGED','UE_RESUMED','UE_UNKNOWN',
			  'WI_MOTIF','WI_MSWIN32','WI_MSWINDOWS','WI_NONE WI_PM',
			  'WP_FLOATING','WP_INTERACTIVE','WP_PARENTCENTERED',
			  'WP_PARENTRELATIVE','WP_SCREENCENTERED',
			  'WP_SCREENRELATIVE','WV_ICON','WV_INVISIBLE',
			  'WV_UNREALIZED','WV_VISIBLE']
        
        self.addConstant(constant_words)
