Colorer for Parser scripts
[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.
|