# 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 'katexml/xharbour.xml' file of the syntax highlight # engine of the kate text editor (http://kate.kde.org #kate xml version 1.04 #kate version 2.4 #kate author Giancarlo Niccolai (giancarlo@niccolai.ws) #generated: Wed Nov 1 21:17:54 2006, localtime package Syntax::Highlight::Engine::Kate::XHarbour; use vars qw($VERSION); $VERSION = '0.02'; 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({ 'Comment' => 'Comment', 'Function' => 'Function', 'Keyword' => 'Keyword', 'Normal Text' => 'Normal', 'Number' => 'DecVal', 'Operator' => 'BaseN', 'Preprocessor' => 'Others', 'String' => 'String', }); $self->listAdd('class_keywords', 'classdata', 'data', 'from', 'hidden', 'init', 'inline', 'method', ); $self->listAdd('context_beginners', 'BEGIN', 'FOR', 'FUNCTION', 'IF', 'METHOD', 'PROCEDURE', 'SWITCH', 'TRY', 'WHILE', ); $self->listAdd('context_terminators', 'END', 'ENDCASE', 'ENDDO', 'ENDIF', 'NEXT', ); $self->listAdd('functions', 'ABS', 'ALLTRIM', 'ASC', 'AT', 'CDOW', 'CHR', 'CMONTH', 'CTOD', 'CURDIR', 'CreateMutex', 'DATE', 'DAY', 'DAYS', 'DBAPPEND', 'DBCLEARFILTER', 'DBCLOSEALL', 'DBCLOSEAREA', 'DBCOMMIT', 'DBCOMMITALL', 'DBCREATE', 'DBDELETE', 'DBEVAL', 'DBF', 'DBFILTER', 'DBGOBOTTOM', 'DBGOTO', 'DBGOTOP', 'DBRECALL', 'DBRLOCK', 'DBRLOCKLIST', 'DBRUNLOCK', 'DBSEEK', 'DBSELECTAREA', 'DBSETDRIVER', 'DBSETFILTER', 'DBSKIP', 'DBSTRUCT', 'DBUNLOCK', 'DBUNLOCKALL', 'DBUSEAREA', 'DIRCHANGE', 'DIRREMOVE', 'DISKSPACE', 'DOW', 'DTOC', 'DTOS', 'DestroyMutex', 'EXP', 'FCLOSE', 'FCREATE', 'FERASE', 'FERROR', 'FOPEN', 'FREAD', 'FREADSTR', 'FSEEK', 'FWRITE', 'GETENV', 'HARDCR', 'HB_ANSITOOEM', 'HB_DISKSPACE', 'HB_FEOF', 'HB_ISBYREF', 'HB_LANGNAME', 'HB_LANGSELECT', 'HB_OEMTOANSI', 'HB_SETKEYSAVE', 'HB_SetKeyCheck', 'HB_SetKeyGet', 'HB_VALTOSTR', 'HB_pvalue', 'INDEXEXT', 'INDEXKEY', 'INDEXORD', 'INT', 'ISAFFIRM', 'ISALPHA', 'ISDIGIT', 'ISDISK', 'ISLOWER', 'ISNEGATIVE', 'ISUPPER', 'InetAccept', 'InetAddress', 'InetCleanup', 'InetClearTimeout', 'InetConnect', 'InetConnectIP', 'InetCreate', 'InetDGram', 'InetDGramRecv', 'InetDGramSend', 'InetDestroy', 'InetError', 'InetErrorDesc', 'InetGetHosts', 'InetGetTimeout', 'InetInit', 'InetPort', 'InetRecv', 'InetRecvAll', 'InetSend', 'InetSendAll', 'InetServer', 'InetSetTimeout', 'KillAllThreads', 'LEFT', 'LEN', 'LOG', 'LOWER', 'LTRIM', 'MAKEDIR', 'MAX', 'MEMOTRAN', 'MIN', 'MOD', 'MONTH', 'MutexLock', 'MutexUnlock', 'NATIONMSG', 'Notify', 'NotifyAll', 'ORDBAGEXT', 'ORDBAGNAME', 'ORDCONDSET', 'ORDCREATE', 'ORDDESTROY', 'ORDFOR', 'ORDKEY', 'ORDLISTADD', 'ORDLISTCLEAR', 'ORDLISTREBUILD', 'ORDNAME', 'ORDNUMBER', 'ORDSETFOCUS', 'PADC', 'PADL', 'PADR', 'PROCFILE', 'PROCLINE', 'PROCNAME', 'RAT', 'RDDLIST', 'RDDNAME', 'RDDSETDEFAULT', 'REPLICATE', 'RIGHT', 'ROUND', 'RTRIM', 'SET', 'SETKEY', 'SETMODE', 'SETTYPEAHEAD', 'SPACE', 'SQRT', 'STR', 'STRTRAN', 'STRZERO', 'SUBSTR', 'Subscribe', 'SubscribeNow', 'TAssociativeArray', 'TRANSFORM', 'TRIM', 'TYPE', 'ThreadJoin', 'ThreadKill', 'ThreadSleep', 'ThreadStart', 'ThreadStop', 'UPPER', 'VAL', 'VALTYPE', 'VERSION', 'WaitForThreads', 'YEAR', '__DBCONTINUE', '__DBZAP', '__FLEDIT', '__QUIT', '__RDDSETDEFAULT', '__SETCENTURY', '__SetFunction', '__WAIT', '__atprompt', '__dbCopyStruct', '__dbCopyXStruct', '__dbCreate', '__dbStructFilter', '__dbdelim', '__dbsdf', '__dir', '__input', '__menuto', '__nonoallert', '__run', '__typefile', '__xrestscreen', '__xsavescreen', 'aadd', 'achoice', 'aclone', 'adel', 'adir', 'aeval', 'afill', 'ains', 'alert', 'array', 'ascan', 'asize', 'asort', 'atail', 'bin21', 'bin2l', 'bin2u', 'bin2w', 'break', 'browse', 'col', 'dbSkipper', 'dbedit', 'descend', 'devoutpict', 'do', 'elaptime', 'empty', 'errornew', 'errorsys', 'eval', 'fieldblock', 'fieldwblock', 'file', 'frename', 'hb_chechsum', 'hb_class', 'hb_colorindex', 'hb_crypt', 'hb_decrypt', 'hb_exec', 'hb_execfromarray', 'hb_hextonum', 'hb_keyput', 'hb_numtohex', 'hb_osnewline', 'hb_random', 'hb_readini', 'hb_regex', 'hb_regexcomp', 'hb_regexmatch', 'hb_regexsplit', 'hb_writeini', 'i2bin', 'inkey', 'l2bin', 'lastkey', 'maxcol', 'maxrow', 'mcol', 'mrow', 'nextkey', 'os', 'outerr', 'outstd', 'pcount', 'readkey', 'readvar', 'row', 'seconds', 'secs', 'throw', 'time', 'tone', 'u2bin', 'valtoprg', 'w2bin', 'word', ); $self->listAdd('keywords', '?', 'alias', 'all', 'as', 'box', 'case', 'catch', 'class', 'clear', 'close', 'color', 'databases', 'date', 'do', 'each', 'else', 'elseif', 'exit', 'extern', 'external', 'field', 'get', 'global', 'has', 'in', 'index', 'like', 'local', 'loop', 'nil', 'off', 'on', 'otherwise', 'read', 'return', 'say', 'say', 'screen', 'select', 'self', 'set', 'static', 'super', 'switch', 'to', 'use', ); $self->listAdd('pragma', '#define', '#else', '#endif', '#if', '#ifdef', '#ifndef', '#include', ); $self->listAdd('set_commands', 'ALTERNATE', 'ALTFILE', 'AUTOPEN', 'AUTORDER', 'AUTOSHARE', 'BELL', 'CANCEL', 'COLOR', 'CONFIRM', 'CONSOLE', 'CURSOR', 'DATEFORMAT', 'DEBUG', 'DECIMALS', 'DEFAULT', 'DELETED', 'DELIMCHARS', 'DELIMITERS', 'DEVICE', 'DIRCASE', 'DIRSEPARATOR', 'EPOCH', 'ESCAPE', 'EVENTMASK', 'EXACT', 'EXCLUSIVE', 'EXIT', 'EXTRA', 'EXTRAFILE', 'FILECASE', 'FIXED', 'IDLEREPEAT', 'INSERT', 'INTENSITY', 'INVALID', 'LANGUAGE', 'MARGIN', 'MBLOCKSIZE', 'MCENTER', 'MESSAGE', 'MFILEEXT', 'OPTIMIZE', 'PATH', 'PRINTER', 'PRINTFILE', 'SCOREBOARD', 'SCROLLBREAK', 'SOFTSEEK', 'STRICTREAD', 'TRACE', 'TRACEFILE', 'TRACESTACK', 'TYPEAHEAD', 'UNIQUE', 'VIDEOMODE', 'WRAP', ); $self->contextdata({ 'ClassContext' => { callback => \&parseClassContext, attribute => 'Normal Text', }, 'TopLevel' => { callback => \&parseTopLevel, attribute => 'Normal Text', }, 'comment' => { callback => \&parsecomment, attribute => 'Comment', lineending => '#pop', }, 'logic' => { callback => \&parselogic, attribute => 'Operator', lineending => '#pop', }, 'ml_comment' => { callback => \&parseml_comment, attribute => 'Comment', }, 'string' => { callback => \&parsestring, attribute => 'String', lineending => '#pop', }, 'stringc' => { callback => \&parsestringc, attribute => 'String', lineending => '#pop', }, }); $self->deliminators('\\s||\\.|\\(|\\)|:|\\!|\\+|,|-|<|=|>|\\%|\\&|\\*|\\/|;|\\?|\\[|\\]|\\^|\\{|\\||\\}|\\~|\\\\'); $self->basecontext('TopLevel'); $self->keywordscase(1); $self->initialize; bless ($self, $class); return $self; } sub language { return 'xHarbour'; } sub parseClassContext { my ($self, $text) = @_; # type => Detect2Chars if ($self->testDetect2Chars($text, '/', '*', 0, 0, 0, undef, 0, 'ml_comment', 'Comment')) { return 1 } # type => DetectChar if ($self->testDetectChar($text, '*', 0, 0, 0, undef, 1, 'comment', 'Comment')) { return 1 } # type => Detect2Chars if ($self->testDetect2Chars($text, '/', '/', 0, 0, 0, undef, 0, 'comment', 'Comment')) { return 1 } # type => keyword if ($self->testKeyword($text, 'class_keywords', 0, 0, undef, 0, '#stay', 'Keyword')) { return 1 } # type => RegExpr if ($self->testRegExpr($text, 'END(CLASS)? *$', 1, 0, 0, undef, 1, '#pop', 'Keyword')) { return 1 } return 0; }; sub parseTopLevel { my ($self, $text) = @_; # type => Detect2Chars if ($self->testDetect2Chars($text, '/', '*', 0, 0, 0, undef, 0, 'ml_comment', 'Comment')) { return 1 } # type => DetectChar if ($self->testDetectChar($text, '*', 0, 0, 0, undef, 1, 'comment', 'Comment')) { return 1 } # type => Detect2Chars if ($self->testDetect2Chars($text, '/', '/', 0, 0, 0, undef, 0, 'comment', 'Comment')) { return 1 } # type => DetectChar if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, 'string', 'String')) { return 1 } # type => DetectChar if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, 'stringc', 'String')) { return 1 } # type => StringDetect if ($self->testStringDetect($text, '.and.', 1, 0, 0, undef, 0, '#stay', 'Operator')) { return 1 } # type => StringDetect if ($self->testStringDetect($text, '.or.', 1, 0, 0, undef, 0, '#stay', 'Operator')) { return 1 } # type => StringDetect if ($self->testStringDetect($text, '.not.', 1, 0, 0, undef, 0, '#stay', 'Operator')) { return 1 } # type => StringDetect if ($self->testStringDetect($text, '.f.', 1, 0, 0, undef, 0, '#stay', 'Operator')) { return 1 } # type => StringDetect if ($self->testStringDetect($text, '.t.', 1, 0, 0, undef, 0, '#stay', 'Operator')) { return 1 } # type => AnyChar if ($self->testAnyChar($text, ':=!', 0, 0, undef, 0, '#stay', 'Operator')) { return 1 } # type => DetectChar if ($self->testDetectChar($text, '@', 0, 0, 0, undef, 0, '#stay', 'Keyword')) { return 1 } # type => RegExpr if ($self->testRegExpr($text, 'CLASS[\\t ]+', 1, 0, 0, undef, 1, 'ClassContext', 'Keyword')) { return 1 } # type => RegExpr if ($self->testRegExpr($text, 'DO[\\t ]+CASE[\\t ]*$', 1, 0, 0, undef, 1, '#stay', 'Keyword')) { return 1 } # type => keyword if ($self->testKeyword($text, 'context_beginners', 0, 0, undef, 0, '#stay', 'Keyword')) { return 1 } # type => keyword if ($self->testKeyword($text, 'context_terminators', 0, 0, undef, 0, '#stay', 'Keyword')) { return 1 } # type => RegExpr if ($self->testRegExpr($text, 'return ?', 1, 0, 0, 0, 0, '#stay', 'Keyword')) { return 1 } # type => keyword if ($self->testKeyword($text, 'keywords', 0, 0, undef, 0, '#stay', 'Keyword')) { return 1 } # type => keyword if ($self->testKeyword($text, 'set_commands', 0, 0, undef, 0, '#stay', 'Keyword')) { return 1 } # type => keyword if ($self->testKeyword($text, 'functions', 0, 0, undef, 0, '#stay', 'Function')) { return 1 } # type => keyword if ($self->testKeyword($text, 'pragma', 0, 0, undef, 0, '#stay', 'Preprocessor')) { return 1 } # type => Detect2Chars if ($self->testDetect2Chars($text, '-', '>', 0, 0, 0, undef, 0, '#stay', 'Operator')) { return 1 } # type => RegExpr if ($self->testRegExpr($text, '\\d+', 0, 0, 0, undef, 0, '#stay', 'Number')) { return 1 } return 0; }; sub parsecomment { my ($self, $text) = @_; return 0; }; sub parselogic { my ($self, $text) = @_; # type => DetectChar if ($self->testDetectChar($text, '.', 0, 0, 0, undef, 0, '#pop', 'Operator')) { return 1 } return 0; }; sub parseml_comment { my ($self, $text) = @_; # type => Detect2Chars if ($self->testDetect2Chars($text, '*', '/', 0, 0, 0, undef, 0, '#pop', 'Comment')) { return 1 } return 0; }; sub parsestring { my ($self, $text) = @_; # type => DetectChar if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, '#pop', 'String')) { return 1 } return 0; }; sub parsestringc { my ($self, $text) = @_; # type => DetectChar if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, '#pop', 'String')) { return 1 } return 0; }; 1; __END__ =head1 NAME Syntax::Highlight::Engine::Kate::XHarbour - a Plugin for xHarbour syntax highlighting =head1 SYNOPSIS require Syntax::Highlight::Engine::Kate::XHarbour; my $sh = new Syntax::Highlight::Engine::Kate::XHarbour([ ]); =head1 DESCRIPTION Syntax::Highlight::Engine::Kate::XHarbour is a plugin module that provides syntax highlighting for xHarbour 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. =cut =head1 AUTHOR Hans Jeuken (haje toneel demon nl) =cut =head1 BUGS Unknown. If you find any, please contact the author =cut