home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 5 Edit
/
05-Edit.zip
/
con2v766.zip
/
colore01.zip
/
doc
/
hrcdoc.txt
next >
Wrap
Text File
|
2000-08-23
|
10KB
|
198 lines
Colorer library Hrc-scripts syntax description
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
So, hrc script. It was developed very long and stubborn with all
difficulties and disorders. And now this is an extended Html-like
script format, describing syntax rules of lexical highlighting one or
more file types, connecting them to the one, and managing their work.
All tag can be linear(if they doesn't contain closing tag) and
blocked (if there are opened and closed tags). Many tags needs a names
of structures. As a rule, such parameter called 'Name' and it must be
unique in its context. It means that, for example, could be defined
only one scheme with name 'myname', but there could also be defined
symbolic color name with name 'myname'.
0. File content.
(in plugin distributive - ColorSet.Hrc). It is closed into the main
block - <Colorer ver=3craze>. All other structures are contained
there. It has one parameter 'ver' - I hope understandable.
1. Linear tag <define name="name" value="number"> describes
symbolical alternatives for colors values. There could be as much
defines, as you want. In this tag you can use already defined
constants. Parameter 'name' defines unique (in this context)
symbolical name. Parameter 'value' defines color value of this 'Name'.
Each color consist of two parts - text color, and background. Text is
tow low bytes, and background - high. So, color #00040001 define blue
text on red background. there are two reserved values. 0xFFFF - this
is a default text color, and 0xFFFF0000 - defaul background color. So,
0xFFFFFFFF - default color. Of course, it is difficult to enter such
values. Because of it, you can use extended form: value="Blue/bkRed"
In this form word before slash - text color, and color after slash -
background color. so, slash makes the next operation:
(text&0xFFFF)+(back&0xFFFF0000)
also you can use next form: value="Blue+bkRed". here we have simple
(text)+(back).
2. Linear tag <include name="fname"> includes external file into
the current. Path must be set relatively of the directory with primary
file independently of directory of current file.
3. Blocked tag <scheme name="schname">.
Each such block - description of one unique coloring scheme.
Parameter Name - system scheme name.
In Scheme block selection types and their attributes are enumerated.
3.1. <RegExp Start="//" End="//" ColorX="" Prior="">
defines single-line selection,
3.2. <Block Start="//" End="//" Scheme="sname" ColorX="">
defines multi-line selection.
These 2 types of selection based on regular expressions
using. (See regexps RegExpsE.txt). Their parameters:
Start - start regexp combination.
End - end regexp, if needed (it may not used in RegExp).
Prior - equal Low or High. High is default.
This parameter manages tags priority. If Priority is
equal to Low, than parent scheme has higher priority.
Now it is ignored it Block tag.
Scheme - Only for Block tag. Connects Block with needed scheme.
ColorX - Text and Back Color. If BackColor is equal to
0 (fe #0C), it substitutes with BackCol(default CN2
Back Color). If you need Black BackGround, use BackCol
value. Last digit X sets colorize level.
3.3. <include scheme="sname">
includes all defines and regexps from scheme sname into current.
There are available up to 64 include levels.
3.4. <KeyWords MatchCase="bool" Color="">
Blocked tag. Includes keyword defines. Parameters:
MatchCase - Match symbol cases (true by default).
Color - Keywords color.
Inline KeyWords tags:
3.4.1. <Word Name="" Color="">
Defines word coloring.
Name - Word name - less than 64 chars.
Color - Its color. If absence - used from Keywords.
3.4.2. <Symb Name="" Color="">
As a Word, but it colorized in all positions
(Word selects only separate words). There are more,
than one KeyWords block Scheme can consist of.
Define order is unimportant.
4. Block <type >.
<type descr="descr" name="tname" exts="//">
defines one file type and connect it with scheme.
descr - description of this type.
name - system name. you must use it for <switch> tag
exts - Files extensions (regexp).
4.1. <load value="">
Load specified files with schemes when selecting this type.
4.2. <scheme value="sname">
Define target scheme to use with this file type.
4.3. <switch type="tname" match="//">
Used to switch into type 'tname' when matching first line with 'match'
Note, than tname - system type name, not the description.
4.4. All other parameters are optional and not supported by colorer
library instead (applications can use them).
5. All other Blocks,
parameters and Text are Ignored. You can use Html-style comments:
<!-- Extended information see
in RegExpsE.txt file -->
6. So, in more details.
In all files you can see, that it is better to use current format -
for big defines use local colors redefinitions. It is better to define
all colors only through the based defines - it will let user to quickly
change coloring schemes, and provide more compatibility and integrity
of the Hrc-file with all the base.
Now many files use macroses - this are often used small schemes
with needed defines. At all, it is more logical to divide all
highlighting in file to a small schemes(if possible). It slightly
increases the speed.
So, the examples.
6.1. <RegExp Start="/\b(0x|X[\da-fA-F]+)\B/" Color0="dNumbers">
This is a simple hex number with color dNumbers.
<RegExp Start="/(\/\/.*$)/" Color0="CComment">
And this is a C-style comment // ....
You can ask, why I need a brackets in regular expression? It is
very easy. Each pair of brackets sets one color. Because of it you
can create more than one color with one regexp! For example, regexp
<RegExp Start="/(1)(2)(3)(4)(5)/"
Color0="1" Color1="2" Color2="3" Color3="4" Color4="5">
will create five colors!
Also in RegExp tag you can put End expression. In this case Colorer
will highlight everything from the Start to the End with Color0, and
all the brackets will be used from Color1. Note it. Also you can
make BackTracing - it the End RegExp make the link to the Start
expression with parameter \yN.
6.2. Tag Block.
It also has End parameter. It uses the last to highlight text from
Start regexp till the End - but on multilines. Here you can also use
Backttracing. For example, with regexp
<Block Start="/\b(q(.))/" End="/(\y2)/"
Color0="PlString" Color1="Cyan" Color2="Cyan" Color3="Cyan">
You can select any strings with Perl rules:
q!....! q#.....# q@.......@
Color0 parameter defines all the block color, and other ColorX params
used for all pairs of brackets.
So, the Block tag has no differences of RegExp tag, except it can
work on multylines. At this moment colorer works rather fast, but you
must always control performance of you regexps.
6.3. One more rule.
Order of parsing. All the regexps are parsed it order they defined.
After them keywords are started. Because of it Colorer ignores defined
order of regexps and keywords. And from other side it is important
to define regexps in a correct order. It can be strange - but colorer
works better on files with many regexps - some Htmls, all the Hrcs and
other. The most slow work - if there are defined much regexps, but in
text there are little of matches. The slowest files are text and so
on...
6.4. And now about smart coloring.
Concept of scheme let you make any rational kind of highlighting. Base
for understanding is that schemes could be inserted in each other more
than two times, and than scheme could be inlined into itself
(recursion). Combination of this two things let you make any needed
highlighting. The dignities of this structure is that it is intuition
of scheme concept against different forms of content changes. And what
is more schemes concept without difficulties moves to real including
one scheme to another: in case of big scheme it will be inheritance,
and in case of a small scheme it will play role of macros. The best
example, showing all schemes interconnections is a ASP-language
highlighting. If you take to pieces all its content, you can
consider, that you know Hrc-architecture better than I am.
7. Full structure.
So, at the end take a view of all Hrc-structure format:
<colorer ver=3craze>
<define name="name" value="color">
<include name="fname">
<scheme name="sname" descr="">
<include Scheme="sname">
<regexp start="//" end="//" color0="" prior="">
<block start="//" end="//" scheme="" color0="">
<keywords matchcase="" color="">
<word name="" color="">
<symb name="" color="">
</keywords>
</scheme>
<type scheme="sname" name="" exts="//">
<load value="">
<scheme value="">
<switch type="tname" match="//">
</type>
</colorer>
It finally happened - happened
It finally happened - ooh oh
It finally happened - I'm slightly mad
Oh dear!