![]() |
Colorer for Parser scripts
Oleg Volchkov [October 06, 2003]
This class is designed for coloring Parser scripts.
It can be useful for those who make sites and forums dedicated to Parser.How to use:
$pColor[^ipColorer::load[test.p]] <pre> ^pColor.getString[] </pre>Class itself:
######################################################## ## ## ipColorer ## version 1.0 ## ## Copyright (c) 2003 by Oleg Volchkov ## e-mail: sumo@proc.ru ## ######################################################## @CLASS ipColorer @create[aStr] ## Class's constructor ## aStr String with Parser code. $_str[^aStr.normalize[]] ^_makeLocal[] ^_tokenize[] @load[aFileName] ## Class's constructor. ## loads file and processes received string. ## aFileName name of file containing code in Parser. $_file[^file::load[text;$aFileName]] $_str[^taint[html][$_file.text]] ^_makeLocal[] ^_tokenize[] @getString[] ## returns modified string. $result[$_str] @getTable[] ## Returns modified as table (split into lines). ## It is useful if you want to provide line numbers. $result[^_str.split[^#0A][v]] @_tokenize[][lNum;lComB;lComL] ## The method to color the code. ## Calls local methods for different types. $lUID[^math:uid64[]] # Mark and "cut out" comments replacing them with unique identifier. $lComB[^_str.match[(\^^rem{ .*? })][gx]] ^if($lComB){ $_str[^_str.match[\^^rem{ .*? }][gx]{/%b$lUID%/}] } $lComL[^_str.match[^^(\# .* )^$][gmx]] ^if($lComL){ $_str[^_str.match[^^\# .* ^$][gmx]{/%l$lUID%/}] } # HTML-tags $_str[^_str.match[(</? \w+\s? .*? /? >)][gx]{^_makeHTML[$match.1]}] # Service constructions $_str[^_str.match[^^(@ (?:BASE|USE|CLASS) )^$][gmx]{^_makeService[$match.1]}] # Methods definitions $_str[^_str.match[^^(@ [\w\-]+ \[ [\w^;\-]* \] (?:\[ [\w^;\-]* \])? ) (.*)^$][gmx]{^_makeMethodDefine[$match.1;$match.2]}] # Method calls $_str[^_str.match[(\^^ [\w\-\.\:]+)][gx]{^_makeMethodCall[$match.1]}] # Variables $_str[^_str.match[(\^$ \{? [\w\-\.\:]+ \}?)][gx]{^_makeVar[$match.1]}] # Brackets $_str[^_str.match[([\[\]\{\}\(\)]+)][g]{^_makeBrackets[$match.1]}] # Completing comments ^if($lComB){ $_str[^_str.match[/%b$lUID%/][g]{^_makeComment[$lComB.1]^lComB.offset(1)}] } ^if($lComL){ $_str[^_str.match[/%l$lUID%/][g]{^_makeComment[$lComL.1]^lComL.offset(1)}] } ############################################################## # Processing language syntax... @_makeComment[aStr] ^if(^aStr.left(2) eq "##"){ $result[<font color="$_colors.inParser"><i>$aStr</i></font>] }{ $result[<font color="$_colors.comment"><i>$aStr</i></font>] } @_makeHTML[aStr] $result[<font color="$_colors.html">$aStr</font>] @_makeService[aStr] $result[<font color="$_colors.service">$aStr</font>] @_makeBrackets[aStr] $result[<font color="$_colors.brackets">$aStr</font>] @_makeVar[aStr] ^if($aStr eq "^$result"){ $result[<font color="$_colors.result">$aStr</font>] }{ $result[<font color="$_colors.var">$aStr</font>] } @_makeMethodDefine[aStr;aAdd] $result[<font color="$_colors.methodDefine"><b>$aStr</b></font>^_makeComment[$aAdd]] @_makeMethodCall[aStr] ## Separating built-in methods calls from user methods calls ^if($_reservedWords.[^aStr.mid(1)] || ^aStr.left(6) eq "^^MAIN:" || ^aStr.left(6) eq "^^BASE:"){ $result[<font color="$_colors.reservedWord">$aStr</font>] }{ $result[<font color="$_colors.methodCall">$aStr</font>] } @_makeLocal[] ## Defining service variables # Colors $_colors[ $.brackets[#0000AA] $.reservedWord[#0000AA] $.methodDefine[#990000] $.methodCall[#AA0000] $.html[#0077DD] $.service[#990000] $.var[#CC0000] $.result[#D27C00] $.comment[#888888] $.inParser[#555555] ] # Reserved words $_reservedWords[ $.if(1) $.switch(1) $.case(1) $.for(1) $.while(1) $.taint(1) $.untaint(1) $.try(1) $.throw(1) $.eval(1) $.process(1) $.cache(1) $.use(1) $.connect(1) ]Download:
colorer.zip (07.10.2003 1.7 KB)
Colorer for Parser scripts.
| E-mail: mailbox@parser.ru | Copyright © 1997–2010 | Art Lebedev Studio |