February 13, 2004
> I dont have anything against highlighting. I use it myself, If you want to
 > see how, then have a look at the attached zipped html.

there are colours.. don't see much more, but thats enough to believe you:D

> However I do not type and watch as you do. And you have not proven, that everybody except me follows your style of typing.

you're actually the first i hear that doesn't look at what he types.. except newbies that have to look onto the keyboard. more in the next parts.

> I gave the example of a data typist, who transforms data written on paper directly into code. He does not visually control what he types, thereby reaching for example a speed of 400 chars per minute. You have not argumented against that.

i had to type from something else directly myself, too. and i was still able to reach high speed and check what i type at least once per line, or so. possibly, thats just me. a quick glance over, and yes, colours and the look as a whole looks correct, so lets go on.

> I gave the example of randomly generated code, changed by one char at a critical place, which again is randomly choosen, and the unability of highlighting to visualize this change without having the original. You argumented, that you do not touch code, whos purpose is not known to you.
I
> now hold against your argument, that for every maintenance programmer or successor in the job the already generated code is in the beginning
nothing
> more than a bunch of random data, despite of the fact, that the purpose of the code has been made known to him.

uhm.. okay.

> I extend my examples to the well known assignment statement in an
if-clause
> `if(a=b)'. Hard to find it, once it is there, somebody said in another thread. dmd generates an error for it: `does not give a boolean'. Why this error message? According to your wording such an error message is
needless,
> because highlighting assures that the code is as intended. So why an error message instead of an implicit cast to boolean?

because its one of the most well known typos existing. your one isn't. and syntax highlighting normally doesn't highlight different operators in different colours. there would not be enough easy to distinguish colours. but yes, it's sorta "premature optimisation" walter did there.

i do agree that there should be no implicit float to int cast for opIndex, possibly. this would be yet another such premature optimisation. but if there is an opIndex(real) and an opSclice(int,int), both statements, . and .. are legal. and it should not result in an error then.

but i guess walters reasoning is, if we dissallow it there, technically we forbit ANY implicit casts to functions. operators and functions happen to be in two different places. operators simply get replaced by function calls. and functioncalls allow implicit float - int conversions.

a way to do this, would be, to actually provide an implicit opIndex(real) wich throws. and only if you overwrite it, it would work. then again, it should "compile time throw" :D

the if(a=b) is much more simple to detect, and much more often to happen, than the . .. issue. i guess thats why walter doesn't care about this one. not entierly fair, but understandable.

> I drove this example together with your opinion of the power of
higlighting
> to the limits: cancel all error messages in the compiler, that can be avoided by the suggested power of highlighting. You did not argument against this, but turned personal.

my argument against this is just one:
syntax highlighting only highlights correct code properly. incorrect code
gets quickly visible. but more quickly, correctly compilable code gets
visibly wrong. that means, typing errors that are no code errors.
and those will always exist.

i can't agrument against it, it is a balance act only.

> Several times in my job I had debates with colleagues that did not lead to a final result. However, because of working for a common goal, i.e. being somewhere in the same hierarchy, we always were able to make up a document stating the different positions, agree about a regulation of the conflict, usually maintaining the status quo, agree about a time span for which this regulation should hold and assign the person/role responsible for the resumption of the whole matter.

uh? :) you talk about an agree-on-disagreement thingy?

> In the economics it is well known, why companies usual have hierarchical skeletons: partnerships are inefficient when trying to maximize the quotient of input, usual earned money, versus output, usually the work done.

uhm i don't get that one.

> Do try to not fall into this hole.

wich one?

> So long.

how long?
|-----------------------------------------THAT
LONG-------------------------------------------|

:D


February 13, 2004
"Manfred Nowak" <svv1999@hotmail.com> wrote in message news:c0hk0m$9af$1@digitaldaemon.com...
> The problem is, that the so called syntax highlighters, as far as i have seen them, are only regular expression highlighters. So they can make standout `0..1' to something like `0##1', because the lack of a space to the left or right of `..'. But there is no regular expression to decide whether for example `[ 0.1 ]' is legal. So: if one makes it always standing out like `[ 0#1 ]' one will get false alarms and this will leed to ignoring them

A ".." is eminently recognizable, it will not be confused with a floating point embedded "." to a decent regular expression.


February 13, 2004
"Serge K" <skarebo@programmer.net> wrote in message news:c0hmev$dob$1@digitaldaemon.com...
> In many fonts the glyphs for capital "O" and zero "0" looks exactly the
same.
> The glyphs for capital "I", small "l" and number "1" quite often looks
just too damn similar.
> And the worst part - if those questionable characters are in the
identifier's name,
> even syntax highlighting is powerless to warn you about imminent disaster. One possible solution is to disallow capital "O", "I" and small "l" in the
source code.
> (zero ("0") and one ("1") cannot be removed easily since they are
necessary for numeric literals)

Reminds me of somebody's Obfuscated C Code entry <g>.


February 14, 2004
Richard Krehbiel wrote:

> So is describing a language that is resistant to obfuscation, you use *regular* *expressions*?  I think your evidence supports my thesis.  :-)

%-6

What thesis? You like RE's? Then fetch this at a glance:

^i?1?[il0]?i+l?i.O*1*(i+[l1].?111[^il0]+O+|111*0[iO1]|i+l.+OO[il01]*1i?[ i01][Oi0]*0+i?|ll?01?.+[^i1]?[i01]*i?1|O?1?0+1?[^iOl]*i1?0?.?i?.|[Ol0]l1 [^Oi]*)*[Ol0]?l+i1?[Ol]+0[il]i?|[Ol0]?O[^i1](i*O1[^il01]O[iOl]*l+[Ol01]? 0?l+[^Ol1].?|lll+.O?iii*1+[^Oi1]?0?|0?[Oi01]?[il0]*|[Ol][i1]?l*.0+[^Oi0] *[i0]?[O01]*[il]([^Oi0]i[Ol01]1ll1l(O[^l01]*.?([^Oi0]+.[i01]?[Ol0]*l+O?[ Oil1]*l*O+i*OO?|.?i?[i1][^Oil]+O+i?0?.[Ol01].+[l01]?[^i0]|O*01?llli+0?.? 1?l+)?[01]?[O01]+[Ol0]*|[O01]*i*[l1]+|.*Ol?iii1*[il0]*0?|.+[^i01][Oi0]+[ Oi1].[^iOl]|[Ol0]+.l*10?([^il0]+0+[iO1]|OOO?l+[iOl][il][il1][il1]*.+|lO. ?[i1]?0?l*.[^l1][Oil]|[O0]*.+[^Oi01]*[iO1]0+[^Oi1]O.i?1O(i?l*0+|.?l.*.?1 *|0.[Oil]+[^iO]?O*00*l[01]+O?|.+[^il0]1?.?[Ol1]*i*|[^iOl]+iO..[Ol0]0O|0+ [^Ol1]O?i*)i*ll?[l01]?)[Ol].?[Oil0].i?l[^Ol01]?.1|0+.?[^il1][Oi0][Oil].O OO+1|1*O?.|111l[i1][l01]?O[Ol]|[O01]+.1.[l01]*.*[iO1][Ol0]?|iO*0?)*[^il0 ]+1[O01]?[^l01]?[iO0]*i*[i01]?[^Ol0]?[^l1]l*.?[^iOl1]+|l.*O0[il1]?.+|[iO l0]l[il]i*|1[iOl]O[^i0][il1]*ii*[l01]O?.[^iO01]i*|[^l01]1+.|O+.[Oi01]1+[ O1][Oil]?i*1*Oi?)+[il0]?O+[^Oi0]?ii*.|.[^i01]*[^i1]?O0+l?|O?[Oi0]+[Ol]+[ Oi1]0?)*[l1]+..+i+O[^Oi0]|i+.*[01]+[iO0](.+l+0(1+O[i1]1[O1][^Ol1]iO+.*.? |0i+[^i01]li*[^iOl1]+[Oi0][i0]+..|[il0][Ol1]?O?[l01][^01]*i*.OO[^il]*|[^ il1]+1+[iOl]il?0[iO1]+1O?0+|[O0][^Oil1]+l+(i[O01]+0?[O01][^O01]l.+1+.|O. ?l?[Ol1][il][iOl]+[^Oi]*1000+1?([^Ol]+l+.?[^l0][^Ol0]+il*0[^il0]+O*|1?[^ Ol]+llO1?|[iOl]1*0.*i[^iO0]*[i0]?[l01]*.[^i0]*1i+|l*[iOl]?.?[^iO]+0[Ol0] .*1+|.i?.*1+|i?0*.?.i|..*0*[^i1]i[Oi1][Oi1]+1?.+l+|O?[iOl1][^il01]+[iO0] ?l*.1*.?l[^O01]+|i*[i01][iO01]O+[01]+[Ol1]?11[iOl]+[O01]+0OO|[Oi01]*[^il 0]?[il1])?l?O0*[^l0]O+0O?1*l+111+00*l|.?1i*0?[Oi0]*O?[Ol1]+.*[Oi]0*[Ol0] +|0O1[iO1]l?[Oi1][Oi1]+|O.+.*10?.[^Ol1]?.[^l0]+(0*O+l?1+00+[^Ol0]*i|i[O1 ]*1*[Oil1]+O*.?ii*[O0]*|.lll.?11+O?.i*1+[iO01]?|.[Ol0]*[il1]+.?1l?[Ol1]1 +.+0+OOO|.Oi1[^l01]+i[il1]*[O01]?1i*(0[Oil0][01]*.?1[O0].*[^Ol1]+[O01][l 1]|[il0]+[l1]?[iO1]?|li+[iO]?|[l0]*.[il1]?l*|[il1]1[i01]*[O01]*.*[Oil]+l O+|l?O0+|[il]+[^iOl0]+l*[^i0]?1*[^Oi]*O[^iO01]?0[^Ol][^O01]*[^iOl]|01?l* [^O01]+0O+l+i*[^i0]*[i1]*1*O+(l[O01]*O?i0+|.+i+[^Oil1]+.|O+[l01]1i?1*.i? [O0]+0+[O01]+O+(O*l*[^Oil0]+1*.?[i01]i?0O|iO?.?iOlll?i?|[i01]+i[Oil]?0l1 |[Oi0]+[O1]O?ill?1+0*i*|i[iO]+1*[Ol01][^l1]+i+[Oi0].?0i*|l1?[Oi1]?.+[O1] [^i01]O?[i01]*l[il0]+)+1?[l0]*[O1]*[iO1]?[Ol1][Ol]?[Oi0]O?|[Oi1]?[^iO0][ iO1][Ol]+1[O01]?0?1?0O*iii|.[iOl]O?1O+[il01]1+i?l|0l?[O0]+|[il0][^Oil]+0 00?|1+.O?.*.*l+0*(.*[Oi1]?[iO0]?[i1]000?.?[Ol0]+|.?0[O01]lO?1*0lO+l+i?[^ iOl]|[iO0]*01?l+O[^O0]?l[^Oi1]?.*O[^Ol0]|i?[il0][iO](l+[^i01].*.?O?[Oi1] *|i+[il01]+[il1]+O?i.|O+l?0?[Oil]|[il]l.?O[Ol0]?|[^il]?[l0][^il01]l*[Oil 1]*i|[O0]+i+1*l+1+0*)*lll1?[^il0][Ol1][il0]?.?l*|l.[^Oi01][iOl1].[Ol0]*O ?[^il]?i1*O*|[il][^il1]+O|0*1+[^il0][^Oi]*|[^01]l?10|l?[iOl0]*[Oil]?111* O[Oi])?iiiO1*|10+i*)O+[O01].+i.+1)[i1]i*0?l0i.+[O01][il0].1*l?|.*l?0*1[0 1]*.?Ol*[i01][O01]|..+[^il1][Ol1]?[^l0]+(.+1?..[Oi01]+[Ol1]*000l*..+O+[^ Ol0]|0?l*0[^Ol0]+[il].*l?O?|[Ol]ii+[i1][iOl][Oi0]*.[i0]+[Oil1][^il0]+11? .|.*[^Oil]+l|O*i*l|[il]+.[01][iOl1]([l1]l?.?O*|[l0]?[O01]*[i01][il1]?|[^ Oil]*[Oil]+.*iiiO?.+.*0?[01]*[iOl1]*i[^Oi1]*(i+O*ll[i1]+O*i(.?[l1]*1?O+[ iOl]+.+[il1]?0?|[O1][i01]+11+0iO[Oil0]i1lll*|.*.+l[i0]?O+[^il0]l[iO1]?i* .+[l01]?|[O01]*li.?[i01].1?[Oil]+.)1[il]*[Oi01]?[Ol0]?l[Oi]?.*|[^l01]*.l +0+[Ol0]i?O[iO]*.*l+.|[^l01]*.+[Ol]*l+.O?0+[iOl1]O[^Oi1][O01]+[il0]|l[^O i0]?[^il01]+1+O*i*[iOl1]+.*|.[Oi1]*[i01]*i*1?[^l01]?OOO+i(O[^l0]*l+ii*[^ Ol0]*10O*[il0]*0*|l*OO+[O01]i(1*[^il1][^Oi]?[^l01]*|i+[Ol1]?[i01]+|[iO0] ?[Oil1].+[iOl0]+.1*[iO0]|0+ll1.*)?.*.[il0][Oi]*l.*1+[l01]*O1.+|[Ol0]+.*. ?[i01]*([il1]?.*O.?|000.[^Oi1]O.*[i0]+[Ol0]?0O[l1]?|0*..?l+[l1]+..?[Ol0] +[O01]?)?[^Ol0]?[Oi0].?|l+O?[^iOl][^l01]1+[O1]+[l0]+OO[Oi1].?|O*1+0+|[Oi 1]?ii?[Ol1]+[^Ol0]*[O01]?l+1+[Ol1]*.+|...?O*0l111*l?[^O01].[^l1]+(i*l.?[ ^iO0][l0]?[^iO0]+|.1+0O+1O*l[O01]|[Oil]?..+O(1+[O01]*l+.?[^Ol01]O.0O*l*1 *0+([iO0][iO0]?O*1?i?l*.?O[01][iO1][i01]|i[^i01]*[iOl0].?[il01]+[l1]1+.? i|[^il01]?[iO1]0[^i01][^Oi01]i+[^Ol1]|i.1?l*O*.*1*i111?|.l+[^i01]*.+O*[0 1]+0+[^Oi1].|.[^Oi0]l*[il01]+.[^Oil]i?[^Ol1]?OOO.|[il1][l01][l01]?[O01]? [^il1]+[il01]0[Ol0]+[^il1]+[^Oi0]i*|ll+O*[^l01]?.?|[^Ol01]+.+[^l0])lll?i [^iOl]+[i01]+0+|O*[iOl]ll*O+1?l[^l01]|i*.?O?i0?.|.*il*..+O+.[i0]?i..|[O0 1]*O[Oi0]+[Oi1]?1?ll[^iOl1]OOO[l01]+1+i(.[Oi01]?iii+[^01]+1*[i01]*i[Ol01 ]*[O0]l?[l0]*|1O?l*OO*l0*[^iO]..?.*i*|O0[^Ol1].+[l01][l01]?[l01]+[il]?[O l0]+lli?|[l1]*i[^Ol1]*1|[^Ol0]?l+Oi.*l[^i01]+.OOl+i?O+|[Oi]iii?[^iO0]OOO 0?[Oi1]1+i+|[iO01][i1][^i01]1i+[Ol1]?0*|.i?[l1]*0?O?.?1+.*l1?|[^O01]?[iO 1]?.?0|[iOl0][Oil]i1..+)*.111?i?l*Oiii*111)*[iOl]O0[i01]+O.0[Oil1]|i?.+. ?OO1?i+[^Oil][il1]?|ll?[^il1]*[^Oil1]?0+[^il0].?[O0].)[^Ol]l*[l01][^il0] +.*0+O)?[iO1]?[^il0]?1+.?.?O*[il1]*l*1+0+l|[^O1]+1l+[^Ol0].[^Ol]+.*O+[iO ]*|0+ii?.*O?[^Oil0]*1[iO0]?.+|.*111[Oi1]i*)*.?1+[iO1]O.*00lll+)+l*[O01]. *|[Ol]O1?illl1|lll?1+[Oil0]?.?[Ol1]*i+0[Oi1]+1*[i1]+l?.)?i+[^l01]+[01]+| [i01]?1?[il1]?l*OO)+.11+0+i1+[l1]i*|0O.|[^Ol01]?i+l?[Oil0]|.+[Ol1]+1*il+ i+..+1+0*[Ol1]1+)1*[l1]?0+[^il01]+[il1]*.[Ol1]?i?)*[i01]*[O01][^Oi]+l?|[ ^iOl1]OOO+[^il0]+1O*[01][Oi0]?i+|0l0[O1]+1+il*[^iO1]0[il0]+|O0?i*011[l1] [l01]?[^iO1]?[Oi01]*O+l|[i01]?O+1*[^il]*|i?.?[^il]+[^l1]+|[O01]+[O01]*OO O[^i0]+.+i+l?0*[01][^01]O[i01]?|[^il0][^i0]11[^il0][iO1]*[^iO1]+[l01].*[ iOl][iO1]0*[^il0]?)+l+[l01]0|[Ol1]+000+i11?iO?.?[il0][i0]+[i01].*(0*[il1 ]?O[Oil]?[iO0]*.?.+[il]?i+O|[i01]0+.l*111?[^i1]+[Oil1]+i*[Oil1]*l[^Ol01] [il1]|1[i0]?l[Oi0]iii+O1?|.?[iOl]i*.?[Oi1]?[^iO1]+|[O1]+[l0][Ol1]O+i[Oi1 ]?0*O+|0l?1+[^Ol0][O01]+[Oi0]+lO*i*lll*)[O0]1il*|[i01]iii*lll*i+.*([iOl1 ]1.i?l?[l0]*i*l.+|[i01]O?[il0]+0?[^i0]|l*1*[Oi0]?0i*.?0+[^i1]+|i1*[^O0]? l?|l+[^il1]?O?[Oil]?0ii?[iO0]?O?([^iOl0]1?[^Ol0]?OOO[Ol01][l01][iO1]?i*l ?[^l01]?|O[iO]*[Ol1]?0([iOl0]i1+|ll[O0]?1?l?OOO+0[^O0]?.+l|O*[^O1]+[iO01 ]*[il1]+[01]0?|l.+O?.+l*i0+[i01].?[iOl0].1|[^il0]?1?[^Ol01].+(0O[Ol0].0? |l0[Oi0].+O*|0+[^i01]?[^il01]?[Oil]+.?l?[O0]1l+[il0]|[^Oil1]?l[iOl0]?|1O [^O0]111[Ol0]*[Ol1]+000|[01][O01][^il01]+[O01]0+[^iOl]*O*[il]+.?0O.|O?[^ l01]+.?[il01].+1+0*|[^i0][O01]?i..O0+[^il1][^l1]l[il0]+|[^il0]*[i01][i01 ]*l0+i111?.+(l*.1O+01O*[Oi0]i?1+|l+0*i.+[^iOl0]0?i*.|[^O01].+[iO1]+i?0*[ ^Ol0]1[il01]i1(.+[i01]11l|[^Ol0]?[O01]?[^Oil]l?.*O+[^Oi]l|1?0*l*[iOl]*[i 1]?[Ol0]?|0i*O+.l+[i0]?[iO01]*1?[^l01]O1?|i+1l+.|O+iO+[l01]i+1[iO]?O[Ol0 ])[l01]+0+.*i*OO*l0*|i[^Oil0]*[i01]?l0?i0*O?|[i01].1?l+[Ol1]+|.[^Ol1]*[O 1]*[^il1]i*[O0]l|[^Ol1]?0[i01]*[^il0]+O?[Ol1][^iO1]?|[i01]i*0?[Oi]+[l0]? 1?[i01]+[^iO]?[^Ol0]+|0.1*.*.*lll*|0l*000?[^O0])?O0?[il0]*11[Ol]+.?[iOl1 ][il0]+[l1]i*)*[Oil1]+[^Ol0]?i[^Oil]+[Ol1].l?OO0?[il]?|[i01]i*l[^Ol1]*|0 0l[^O01].[^il]*[il0]*1*|1*[^O1][Ol]?0?[Ol]*i[il01]+[^i01]O01*|l?[Ol1]*i1 O+1?.|l?.?.?[^i01]+)000+1[^iOl1]?ll*1?[iO1][Ol0].+l[i01]+.*|10O?.+)i?.?[ i01]?O+i?OO?0|.+0?.?li+[^iOl][^O01]*0+.O?0*|[Oi1]?O?1?i*.+.[^01].+[Ol0]* (0?[^Oi0]+l+1|.+i?[il01]O[iO1].+[^iO0][iOl1]?iii*l+i.*|l?i?0?.*.|[^Ol1]0 .[Ol1]*[O01]*O0[il0][iO1]?|i[^O01]?l?1+[iO1]?)?Ol[i01]i[^Ol][Ol1]|[i01]O +li0.)*0O?[O1][^Oi0]+[^il][i0]0?i?.+.+.O|1?l[^O01]i+[01]*[Oi1]+1[il0]?[^ iO]l*(l*i+.[l01]0*[01]?l?|[^l01]+[O0]O*1?i+[^iO0][O01].*[^Ol0]1+lll*([il 0]+.[il1][l01][O1][i01](0+1+..*|..+10?.[01]li?[^i0]*|i+OO+[^il]?([^Ol][^ iO1]*O*0.l?.?[O0]+.|[Ol1]1OOO+1?0*|OO*1*O*[il0][l1]*[^Ol1][^il0]1[01]?|[ il1]?l+.?.[Ol0]0*.|0+i.[^Ol1]?|l*0*.1*0?.[il]?[^l01]+OOO.*[Ol]+|1[Oil]+. *[Oi1][l01]*[il0]?.+.[il01].0*[iO0]*)[^l1][iO0]*i+0OOO[^01]*11|l[iO0][^O l0]?.+[01]?1[l1]*0?11*|1[i01]*[^iOl]?O?.?.l)l1+[^Ol1].*[i01]*l[O0]|.[^i0 ]*.1|1O*i+O?[il0][Ol]+|O1*0+O?1+0+.|[^l01]1*l+[^iO0]i*.1(.+1[Oi0][Ol1][i 01]+[O01]i|.+1*.?|[il1]?.*111O|i*[iO0][O01]*1?l?[^Ol0][^Ol1]*[O1]+1l*i*| [^Oi01]?..[il0]?[il][^iO0]+l?0|.+[O01]+[Oi1][O01]*l?.[Ol0]1*[l0][Oi1]?l? |[^Ol1]?ii?1*|10+[iO1]*l+0.?(l*O[^Ol0]?[^iO0]i+ll[iO1]+O?1[O1]*[iOl0]|[i 01]+[^Oi1]1*0+[O0]?.+l+[iO1]+[Oi0]ii*[^Ol0]?|0*.+.*O1?[^Ol1]?l+O.?..|[i1 ][^l01]*1[i01]?0l*[l01]0l[Ol0]?O[l0]*|1+[iOl][^Ol1]?[01]+0+O+1O?[l01]?l? [^il][Oil]*|.+[Ol1]Ol*O0*[il1]*[Oi1]?[Ol0]*|[il1]O+[il1].?1?O?l+0[O01]+( i*1?[il0]|[il0][i01]+[il]i?.*[Ol1]*0?..*[il1]*|i[i0]?.[l01]0*[Ol0][iO0]( 0l*[^i01]*[iOl]+1i|.*[^Oi1]?1?|i1?[Oi0]l)+.*[i01][iO1]?1?|[^O01]+i+O+[Ol 1][^il1]?l[il][^Ol01]|0?i+0*1*.+|i*l[Ol0][Oil]|[^il01]O*.*[^iO1]+.+i+|0+ O+[^l01]*i.+01[Ol0]?0i?)[^Ol]*.l[iO01]*)i[O01][iOl0]*|.+O?1+[^O0]?[O1][l 01]?.?[Oil]*[iO0]*[l01][^iOl])?[i01]*0i[^l0]0|[^iO]?i+.?[i01]?1?|[01]*0? i[iO0]*[^l0][O1]*.l1*|1+O[il1]*[^O01]+0i+([il01][^il1]?[iO]?O+[^l01]*[O0 ]+1+.il?.|Oiiil[^O0]i+10.?[iO]+l*[O01]+|l*[iO01]O?111+.|[il]il?[^iOl0]+) ?1+[^l01][^Oi0]|i*OO[^Oil]*1+l+00?[^iO1][^01]*([i01]?Oi+[^Oi0]?1|l*O+..? i0+l?|i?[^Ol1]?ll+O?10*[Ol0]?1+[Oi][Oi1]+lOOO|l+0.O|[O1]+li.?0.l?|.[Ol0] +[l1]?110iii+[i01]?[^Oil]O?0O+|O?1l*1|0*i*1[^il1]+|O.?.*ii?O?[^O01]*[Ol1 ]+l?O1|[Ol0]*1+[^il]+.*([^il0][iO01]+0+.iii+0|.*.1*[Oil]0?i*[^i0]*1(O+00 .|[il0]O+[l01]+|0+[Oi0]+.[iO])0?111?[i01]|.*[^i01][^l1]1*[il1]+[^l01]+([ i01]+[^il1]+0?|1*[il1][il0]?[^Ol1].[i01]?i?OO[O01]+|Ol?0|i*0?.[Ol1]+i+1+ .+(.+0.*[l01]?1*O+[il1]*[01]|ll+[Oi01][O01]O*|lll?.*i*lO|.?[^Oi0]+1?[l01 ]+[O1][Oi1][i01][Oil1]?0*|[Ol1]*i*[01]+..+1[iO0]*[^il1].[01][^i01]*[l01] ?(i.+[Ol0][^l1]*|l+0.[Ol0]*O+li01+|lO+[Ol01]?ii[Ol]?[Ol0]+O?[^l0]*.*0?i* |0?iii?[l1]*1[il01]O*(l+[O0]+i?|1lll[iO0]*[^il]?O?l*O?.*l*0|l+OOO?i?[^O0 1][i0]|i[^il1]?l+[i01]?.1i[Oi]*1*[l1]+|[il1]l?1.[Oi1]+[Oil][^il1]+.?|[01 ]1*[iO0]+)..l1110+1*|O[Oi]11?iOOO.*i+1il+|0O.1*[il01]+|[iOl]?[^Ol1]i*[Ol ]*[^Ol01]*.0*.+l[^iOl]*[O0]|1l+i+[i0])O*[01]1|l*.+i+.+[^i01]O?l+i*[il1]l 0|1?i+[iOl]?[Oil]+[il]*|111*O+0*O1+(iO[l0][Ol1]*[iO].?[^O01]00+[l1]*iO[i l]*|[iO1]l*[^il0]?[il]*|l[il0]?[Ol0]?[i01]?.1*[il]|[l1]?O*l*.*[^O0]+i*|O [^il01]*[il0]*i?.[^i01]?[l01]0?l|O[il1]0?[iO1][Ol0]lll0*[^Ol1]lll*|O?i*O *0[Ol0]l*1[Oil]+i?O*|.+l?i+([O01]+[Oi]?.?[il0]+[l1]*|[^O1]+[Oil1]l.+[^il 1]?i*[Ol1]?O*|[^O01]i*[^i01]+[O0]O+[^il0]*.+1?0i?1+|i+ll[^i1]O?[il0]1[^i l0]+[^Ol1]+i+OOO?|1+[il0]?[Ol01]+[Ol0]+[il1]0|00.*1+0)l+[^i1]*[O01]*[Oil ]?[Ol]+[Oil][i01][l01][Oi0]*.*Oi?|[il0]+.?0l?i[il0]+0?[01]*[i0]*.?[Ol1]l *|O?0O*[O0]?[^Oi0]*[l01]+[Oi]l*)?[iO1]+.*[Oil0]?i?OOi.?)1[l0]+[^iO0]i.?[ i0]+O?|[^i01]+01+00?.|[^i01]?O[O1]+0|l+[^i1]*[Oi01])[^il0]+l+[^Ol01]1+|1 0+l.+1+OO[l0][Oil]?[l01]?[^il01]?|O?.[iO1]0+ii?[O01]*[Ol1]1l+.i*)*iO+[i0 ]1[^i0]*l)[l1]?l1?)[Oil0]?i?1?.*[i1]?[Oi0]*|O?0?[il0]+1O+[^i0]+1+i[iOl1] *0+|1?[^il01]?0+1[Oi0]*.+O[Oi1]?|[i1]+l*.[i01]*[l01]0+[il01]+l?.[i1]+|1* [iO1]*i?1*0..[^iOl]*[^iO0]*|[Oi1]i?l*.[l01]+[il0]+0111[il0]?[^i01][l01][ i1]([^Ol1]*[^Oil1]+.?.?[O01]i*l*0.1*0+|ii.*O1*[O0]i[Ol0]+[Ol1]+|[^Ol1]?[ il0]+.?[Oi01]0+|[Ol0]?.[iO1]?1+[O01]|..*O0+[Oi01]+l*[O0]i[^O1]|.?OOO?[Ol 0]+[iO01]+[i01]?1?[^Oi01].*i*1*l?.).*.?[^i1]|[^il1]?.+i?[l0]|..*[i01]?.? .[il0]*O)*[i01]+0+[^il0]?[il01]*|[Oi1]*.?i+.[Oil0]+1+[il0]*.(i+0[^i1]?10 ?O[il0]?l[^i01]+[l01]?|.?[^iO0]+..+OO01*|[Ol]i?lO+.*|l?0+.111O+[^Ol01]+[ Oi01]?|i*[l0]*l+.11+[Ol0][^Oi1]?|l?0+l.?1*00+)+[O01]+O*0+l[l01]i*|li+0+l *.O?.?.0+(i0?[Oi0]*1?[Oil0]+.?.+O?[il0].+1.+|[il1]+.?.?[Ol0]*i?[Ol0]1*|1 ?l.O?[i0]*|l+[Ol0].)?[i01]O11*0*O?0*[Ol1]+O[^O01]?|[Ol0]*i.[^O01]*1*l?[^ il01]+[il1]1O?.+[^il01]*([Ol0]l*O.[01]?l|.Oli[Oi1][il1]1?|i*.[Ol1]?|[i0] 1*i*0.+lO*0+OO*[i01]+|[l01]*.?1O?|[O01]*.+[i0]+O..0|O[l0]*[il1]?..1[^Ol1 ]?[Ol01]l1?|.[^l0]?0l+O*)+[il1]+[l01]?i1*0*l.O[i1]10?.?|[^O0]*i?[^i01]O0 [iOl](.l[O01]?[Oi1]?.Ol+.+01+l([il1]?..+l[O0]1l?.+.i?|i*[i01]+l[^O1]O*[i Ol1]*(l?[l1][il01]*Oi+|[^iOl]+[^Ol0]*O*1?[Ol0]O+[Oil]?[O01]?1i?|i+.+[Ol] [^O01]?[^l01]+0.lll1?[l0]*OOO?1+)+[01].+[Ol1][iOl]?[^iOl]|i[Ol]*.[i0]0+[ i1]+O?.*0*[^iO0]+i*0|[Ol1]+lli?[Oil]O[Ol01]*|0*11i.[iOl]?[iO1]*OOO*.*0[i l0]*O+|1O+i[^O1])*1O+1.*iii.?1|.1?[^il1]?|iii?..?|[O01]?1?[^il0]*[i0]?l? |0*.*l*i?|0+i.[O0]?[i1]+111ll.?|[^iO01]*O*1?0[Ol0]*l?O?[^O1]0.|[iO1]*i?1 O?[O1]?[i01]i?.*lO[i1]+|[^iOl0]+1*iii.?.?l?[O0]+[Ol]*([iO0]*.+[Ol1]?O[Ol 0][Oil][^il1]1?i[^iO01]1?[O0]*([il0]i?O0.|010O0+l|.+[i0]01[^iO][^iO0]*[^ l01][^Oi1]O*[Ol01]|.+O1l[^i01]*.*[iO01]?|[il0]l*[iO1]1?[Ol1][^iOl]+|[iO0 ][^iOl]?i0*[Ol0]*[O1]|.+i*[^i01]*1+0+[Ol1]..l+O+|[il01]+.*[Oi0][^iO0]i|i O[i1]+.*[^Oi0].?[O01]i[i1]|00l1+l?1*i*OO+i*[^Ol1]*[Oi0]*)*[i1]?il[^O01]? 1+.[^Oil1]+[il1]|[O01]?.0*|l+[i01]+i*l?[^il0][l01]+0?O[^iOl1]*|.*1[Oi0]0 ?|[^l01]?O+[^il1][i01]+0+[i01]i0*i[Oil1][Ol0][iO0]+|[^Ol]+i?.+|.0+..*.[O 01][^i01]ll+11[^Ol01]*[Oil0]?|l*[^il0]?.*|l*iO?l+i*[l0][Ol0]+O([Oi01]+.+ [il1]+[^O01]*(1[i01][iO]+O+i*l+|111?i*1+i?[O0]O|.O+i[^Ol01]|[^O0]ii?0[Oi l1]|OO[i0]?l+Ol+[Ol01]+[Oi0][il1]+0?.[l01][^il]+|i+[l0]+0+iO.?|1?[i01].* l[01]?[i0]?1*[O1]+0+li+)+[^i0]?[iO01]+O+l|[^il0]+.[Ol0]+|00+.1*O*.+i1?[O i01]*O0|1*.*[il1][l1]+.*O?|l*[i01]0?[i01]*|O?[iO01]?[i01].*[il1]?[Oil0][ iO01][il1][^O0]i*.+)?[^iO0]?[O0]?[Oi0]llli[^O0]+[^il1]1?[il1]*)?.+[iO0]O +l?)*1[Ol]+O+[Oil]+l+i+l?[iO1]i+[l01]*|[Oi0]iOOOl00l0*[iO1][i1]?O*i.?(O* [il0].*1.+iilO?lll.?[^l1]*1?(.1*[iO01]l.1+l?|[l01]+0[il1]?[^Ol0]?ii0[^il 0]1[^O0][l1][iOl]+|.*O+[Oi]?.[Oi0]?[Ol0]+.l?.?|[l1]?1O+l?1+|[^il1]i*1?0* [^Ol]?)+0O1*.01?|l+0.1[iO0]?0+|l?.?i+[i1]0+[^il]?[O01]?O+[i0][Oi01]*[^iO 1]?1*|[^i01]+[l01]+.O.?0|[O01]*[il1]l?.*.?|.l+[il0]*[il]+i+|0+[01]+[l1]l [Ol0]*O?[il01]*1*|11+..*.i+[Oi]*OO+.+[^Oi0]?)?[iO0].*0?|.[^01]0+[i01]?([ ^Ol1][^il01]1i?O*[O1]+1+|.0lll?.+O*1*|111[^Oil1][iO]l1?ll+[l0]?|[Ol1]?i+ [i01]?[il1]l[^iOl][i0]+1+(i+0?i?0.1[Ol1]?[^iO0]|[Ol1]?l[i01]*O*1[^Oil][i 1]i*11*|[i01]?.?[l01]+[l1]*i+|[^O01]*[il1]*[^O0]?i*[Oil]0l*Ol?1+|[O01][i l01]O[iOl]?i1[Ol1]*|l*iOO1l+1?|[Ol0]*[iOl]?.1+.+[^O01]l+1*Oiii?[Ol1]+|[l 0]*OO*[^O1]*l*O?i+[^i1]?|..?0?[il0]?.+)*[^il0]*[^il1]+1?.li1)1l?O*[il01] *[O01]+|[il01]*0?l?[il1][iO1]i?0.lO1*(O.*00[l1]+lO+l*[il0]+.+|i+[Oi]*[Oi l]+O[^O01]*|iiO+[Ol1]?i*.+.O*i*1?i*|i?0+O+[Oil0]*1+01*O1.+.|[^l01]?.*i+. *.[il1]l+[iO1]*.?[^l01]*i*l?|i[O0]0+[^Ol0]*[O1]*O[^iO1]+.[Oi][^Oil]+0?)[ iOl0]*[i1].*[Ol0]?[^l0]?.?11[il0]+O[Oil][Oil0]|i?1*[l0](00*l+i*[Ol0]O[Ol ].?111[^iO01]|.0+.?[^O01]?[^il0]*l?O?[Ol1]0?|.0.?11*[iOl]O?|[il0]l+[il0] *[Oi01][l01]Ol[iOl0][Ol0]+0[Oi0]?|[l01]+OOO+1+[Ol01]?[iO1][iO0]*[^l01]+O *.+.+i|iii*OO?.[i0].[^iOl]|[Ol01]?0?lil?1?0*.[^O0]*)*O[^l1]+[il0]0?[O0]+ .+1i[Oi1]1[^O0]+[^Oi1]*|iiOOO+.?(lil+|[iOl]?OO+0?l0*O?i[^Oil0]*[^l0][Oil 0]|[^iO0][il1][^O1]+[Oil]*|1+[Oil]*[i01]?O1.l?[il0]1|[Ol]1i[Oil]+|[iO]+. +[il0]?.?i.?0.*.*.?O+)[l01][il1]+[^Ol01]*.*l+[i0].|O+[^iO1][iO0](l*[^iO] *[iOl1]?[O01]*Oi*..*.?l|[^O01]..+[^Ol0]i?l+[01]*i+0*l?|[O01]+0*1l0*O+|[O l1]l[^il0][Ol]+0*[^Oil1]+[^Ol1]+iii1*00+[l01][Ol]?|1.?01O*.?1*.i*l?.+|0? .?[^Oi][Ol1]+Oi[^i0]|[^Ol0][^i01]+[i01][^O0]O*l*.?.[il1]?[^O0].*)*[Oil]+ 0001?i*0+|1+[i01][^iO0]iO*0+O*(i.*O|[^Oi]?l?[O01]?1*ll?.1?[il0].+.?|il+[ i1]i.+00+[^O01]?l*0+1?O([Oil]..?[Ol01].i+[O0]10O+[Oil][Oi1]?|.?1+O*.i[iO 01]l[il0][^Oi0]*[i01]*i0([^O1]+l+..+0*.l+|[iO]?.1O[il0]?l[i0]?i[Ol1]?l+| i+O1*|[Ol0]*00*O?i0?O|.*i1[iO01][^O0]?i[l01]?.+|[Ol01]+[Ol1]+1?O*1*[Oil1 ].[^O01]O|[^Oil0].i+[iOl]O.+.?i*00[^il]+[il0]+l|[i0]0i*.*010+1[Oi]+[l1][ l1][il0]*|.+1O[il01]?|0+.*[^Ol1]?1?.?[l0]+O+)?1?O[^i01]+0[il]?i*|0[O0]+i +|.*[Oil0]*1+[iOl1]l?.*[il0]*0+.?O*.+[^Oil]*|[i01]?[Ol0]*O*[iO]+[Oil1]?. *l[il1]+|[^il1].O+1+[^Ol0]l.[^l01]O[^Oi1]l*0?|...0[iO1]+i*)?[i01]?[il]+l +.+1[iOl].[il]+0?.[^Oi1]*l*|0Olll*|[i1]*1OO*[^Ol0]*[^O0](.*[l01]?1[il1]* .[i01]+i|[O0]+[^i01]+[O0]*[l1][^i1]|[^il1]1.*i1l|[l1][^Oil0]+.+[^Ol01]*0 1i+O|.[Ol1]?.*[Oi1][l1]+.*O[Oi0]?l|OOO?[l01]*[^iOl].+|l?.?[^iO]*[il0]0*i iOl+)?i?0i0?)O.i*[O0].?1+i.*l1?0*O?|l[O0]?[Ol1]+O(1+l.+iii+1ii*1+iO*0+i| .?[i01]+l1li+[il1]l*|O0+iO?.*l000[^Oi1]+1[^i01]?0[^Ol01]([^Ol0]?1+[^Ol0] *.*0i*[il1]|[Oil]*0i[l01]+[Oi1]?[^iO1][il01]*[Ol0]([O01]*0+[iO1]+l+O*[l0 1]?.[^il01]?[l1]+1.+.|[l1]i*[O0]O?0..[^il1][Ol0]*[il0]?1l?|O[Ol1]*000[Ol 1]+[l1]?i[O01]+l[^il1]|O+lO[i0]1*[iO1]?.O+1[Ol1]*|O+[O01]l*.[Oil1]1*[Oi0 ]i*.|[Ol1]?1?.?.i+.+l[O01]+i?|[il0]?[iOl][Ol][i01]?[O0]?[Oi1]*.+O[^il1]+ 1*)*l?.[^il1].?|i?[i01]?O[l01]*0*|[Oil0]10?[Oi][^l0]11*OO[l01]*[il1]*)?[ Ol1]0?O[^O01]*|[^O01]?[Ol1][^il1]O|.[^l01]?[^l01]+[Oi01]?[i0][l0]?[Ol0]* 0?l+([Oi0]*.+[l1]+[^l1]+0[^O0]+[i01]+[iOl]?[il1]*l+i(1?[O01]?[Ol1]?[O01] *[O0]0?[Oi1]([iO01]*[il1][^l01]O1*[l1]l[01]+|..?[Ol01][Ol01]+.i?1*.|[l01 ]*il*i*.O*|iO*0*.?|l+.?.1+[^il0][i1][l0][Oil]+O1*0*)+.i*1+[il01]*[^i1]?i +|[^l1][l01]+[O1]+|O+1[Ol1]?[Oil][i01][^iOl]?.?O|[il1]*[^Ol0]+1?l[il1]?[ O01]0[l01][O0]O|Oi+[Oi1]?1[O01]*[il1]+0?|llOO?[Ol]*lll+).[Oil1]0.l1+0?|l *10?.*1+.[^O0]+0+1[Oil]?i?1*|i[^Ol0]*[^Ol0][^O01]*0?[^i0]1|[Oil0]?1?O[l1 ]?|[O01]?.[Ol0]+.?[^O1][iO1]?)l?i+O|0[^Oil0]+1?i*[O01]+0[^iO01][i01]i?|. [Oi1]*l[iO]|.i+[^Oi1][iOl]1|[01]*.+[^il1][i1]+10i?O+)1[iO0]*[Ol01]i+l[i0 1]i?1*0|O?.lll*.0*[Oi]?l0*[Ol0]*O?[Oi01]([il1]i+.?.*1.*[iOl1]+[iO1]*[l1] .?0*[^Ol0]+(Ol?0*1*[^i0]*.0O[i0][^il1]|[l0]+1O[Oi0]*[^Ol1]?l0O+.?i?|.[il ]?0i?1[il]*[il1]l+0*.*|1*[^il]?.[Ol1]+O?|[^i1]*[il1]1|l.*[Ol0]0*)*[l01]? [O01]+.|[i01]i+.[Oi0]?.*.?O0?[il1]*[^O01]|l+O*.i*[O0]?[il0][Oil0]lll?[^i 0][Ol]?(.l01+l?|0.[iO][O01]|[^Ol1]*[Ol1][Ol1][il0]+[O01]iil?.[^iO1]i+.?0 ?|O+0?[il1].?[^01]*i*1*[^Ol1].+)?[^l1][il1]?l+[Oil1]*1O+[^iO]?[i01]*[l0] 0O*)+.i+0?.*i+OOO+[^i01]1i?[Ol1][^l01]+|lll?O*l1(1?O?i|lO?[il0][Ol0]+[Oi 0][^O0]?.+[l01]*lll?|1+iii*1.?0[O1]*|O+l+[^il1]*0|[^iO]lO?[Oil0]*.?l+.*[ il0]i.?[il1]?[i01]?|.*[^Ol1]+[iOl]?[^il01]?|l+i+0[^i01]+l?O.+l|1[^l0][^i l01]+.|i?[i01]?000+).?1?O?.+l+i?l+[Oil1]*0+i+1?|[^iO01]?[^il0]+0i*01*.O. 1([^Oi0]OOO[O01][^O0][iOl1]+[O0]+[^Ol1]?|l[iOl]?[01]+1.*[^Ol1]+[^Oi0]+[^ iO1]*([iOl].[l1][Ol1]|Oi*l[O1]*.*1O.?[iO0]+[iO0]?|O?i+0l?O*i+[^il1]+|.Ol 1|[^il]...[l1]?[^Ol1]..?OO.*i*|l?i+1*O*i+[^O0]*O0?.*|[Ol0]?O*[Ol1]l[^Ol1 ]+[^iO0]?.+i1(0[Ol1]+.[l01]i+[^l01]*.*1?i*|OO0*.[l0]*[Ol]*[l01]*O1?i[l01 ][O01]|i*[il0]?1.+0?.|.1?.O+i?[Ol01]+.+0|i111+[l1]i*l[^il01][l1][O1]|[l1 ]+00[l01]*O*1l+0+1|l?[Oil0]0+.?Oi*l*O*)[Oil]+1[Oi01]O[i01]?[Ol0]?[Ol0]*1 *[^l1]0?.|O+.i+.+0.O*([^Ol1]O[i0]00*.O[^il0]|1[il1]+[^Oi]+|[Oi0]?[^O01]+ 1*i?[Oi1]?.0?lOl|[^Oil]0+O+|.+[^i1]l[^O01])0?O?[^Oil]?1[il0]+[^iO]0?l?.i *[Oil]+)?[Ol1]+[Ol1][Ol1]l1*O?[Oi1].[Ol1]?0+|[^Ol]?.l?O[^iOl1]+i?|[i01]? i01?.*i+|O1[i01]lll*i+l1*[^Oil]|..*[^iOl]+0[iOl1]?i|..l*1i?[O0]+Oi*(.+[^ i01]+O*[O01][Ol1]?11?.+Oi?|[Oil1]l+.+O0?1*[^iO0]i+[il1]*[Oi1]+[^O1]?|[i0 1][^l01]*1+0+i?.l|OO?01*.*i+O[^Ol]1?0OOO?[iO01]?|[Oi1]?[il0]*[il1]O)+11[ i01][O1]?0+.l+.[^il0][O0]O|10?i?)*[i01]111l?0?|O+0*[O01]+O*[il01]ii[01]? [^il1]0*O.+1*(1+[il0]*0*[^Ol1]*ii*O?|[^iO1]?1*i+l.[^iO0].+[^Oil1]1([il01 ].?OOO+[l01]?[i01]?([^il1].[l0]*1|0+O+[Oil].*0l*[Oil]?|lll?1[^Ol]Olli?|l +.?[^i01]*[iO1]1*0+l0+.+O+1|O?[^iOl1][i1]0+[iO])+0*i+.+1?[iOl1]*[il1]+[i l0]?|i...l*i.OOO?0*|l[O1]*111+l[Oil].*[^il0][^l0]*1|i*[Oi0]*.?l?|01.+[^O 0][l01]+.?[il1]l|1*l*1[iOl]l+|O?1?i?.O*[i01]i?1+[O1]+O+1+|[il0]+[il0]+O? l?.1*i?0[O1]+|[il01].l1[l01]*i[iO0]O+.*0[iO]+OOO?|O?.?[^Ol0]*1l+[Oil1])* i.O*[Ol1]?0*|[^Ol]?O*1i1Ol*0O+l*[^i0]|.?1?l+[O01]*.?111?l(iO+l?[Ol1]+[^i l0]?[Ol1]+|0O?[i0]01*[i01]|.00*l?|.?.[Ol0][l0]O+.|.O[Ol0]*i*l*O|[^Ol0]*. +l.+.i.1+|O+[^il1]1*[^l01]+[i01]?[i01]+0[Ol]*O0.|1110.*1[^Ol1][Ol01]i[O1 ]?[^01]+|..OOO*[i01]*lll?11*)+0*[^iOl]+1+.[il1]|0?1ii+)?Ol0[iOl]?[^l1]l[ i01]*|i+.*[^il0]+l*([il1][l01]+l+i*[Oi0]+|1[^i1]*.[l0]+il*|[Ol01]?Oll?O[ iO0]+0*[^l1]?[il0])*O*[l1]i[^i0]+.*.?0*1|[O1]?[iOl0][^Oil1]*1*[^l0](l.*O |i?[Ol]?l?[O01]|i?l[Ol1]+O1*|l?iii?l.[^iO1][iOl]+O?[O01]*|.*i1+|[^Ol0]*l *[Oi0]?|O+.[l01]1+.+0?.+O|[^O0]+[^il1]ii*OiOi*O0[Oi0]*i.+|[iO0]+0O+[Oi0] ?i?|[Ol01]*ll+1*[il1]*l1+[i01]*)?[^O01]?[^l01]+[Ol01]+[iOl0]1[Ol0]O+[^il 1].*|[^il0]*l*.+[i01]+.?[^i01]*0?l[iO]*[iOl](0*[i01]+.l[O01]O+1+[Ol01].* [i01].+[^01]|i.[i01]+.0+l*|[il01][01]?O+iii*..1[Ol0]?[Ol]|[i01]+[il0]*i? 1?O*[i0]?1[iO]*[O01]?[Ol0][O0]|[iO1]1+0?[^il01]*1[l01])+O*.*i[iO1]?|[l01 ]l?0?1000?O?[^Ol1].?0i?(0[Oi]+[^O0]+1110O+0l?|[Ol0]+[Ol1]?[il]*10?[^O0]+ [Oi]*[^Oi0]*1.|[Oi0]*O+.[^Oil]*[^l01]i[il1]+)?l?[^il]+10[Oi01]O.?|O+l*[^ l01]?i?1?[O01]+([^Ol0]*O*.*ii?[l01]*[^Oi1]+[O0]?1i[^il0]+[^Ol]+|0?[Oil]+ [01]iii1.[O1]l[^Ol1][^i0]+[^l1]+.|O+lO+0[Ol0]*[il1].*.*|O*liOl+)[^l01]*[ Oil]*[Ol1]?[Ol1]1?O.[Oil]lll*O?l*11*|.?i.?[Oil1]?l*.?[il1]*0(iii*[i01]*[ ^Oil1]+|[l0]*[O01]*[il1]*[il0]*|[^Ol1]+000*i[Ol0]?l+[^Ol1]0*|[i0][Ol0]+[ ^l0]?O+1*i*[Oi0].+[Oil]?[il0]*|[^il1]*1?0?1*[il01]l|l*[il][Ol]i?[iO01]+O ..?|..[i1]?1[01])+[il1]?[iO1]*[Ol1]+l*i[^Ol1]+1[il1]+l*[^Ol]11|l1.(1?.?0 00|1[O0]?l+[O1]?.O[^il1]*l+.|Ol?[i01]000+|[il0]+O*[Ol0]i+[^il1]|.?[il0]i [l1]+[Oi1]1+O+0+[Oi0]+.|li0[Ol0]1?|.i0.+O+[i01]1+[01]+l?[il0]0*|l?[^01]+ .)+[l01][Ol1]*[Oi0]|l+i?.+l?10*(.*l+[Ol]*|1?[O01].*0*1*il|[01]?l*i*O11?O [^il0]*|[^iO0]+[i0]?i.0*[^iO][Oil]?[Ol01]?[l0]?1+|O*0+O*1+.O?l?1?|Oi?[O0 ]?0O+l[iO1][l1]+1|[il0]l[^Ol0]+ii[iOl0]?Ol+1?.|[^Ol0][^l0]*[i01][il1]+O+ 1i|i*[01]?1[^l0]*0?O?.[^l01]([Oi1]l*.?1[Oi1]+|1[Ol01]*lllOl?O?|[O1]1[^il 1]*.?i|.[^il1]+0[O0]?i|iO+.[iO1][O1]+.*l[i0]|Oi.111*)+i*.[iO0]+0+[il1][^ Oil]?O?.*l*O.?.|.[^Oi]Ol*0?O?[l1]?.+0+..*.)+0.+O*[^Oil][Ol1]?0+i*O+|i+Ol iO10i+[i1][Ol1][l1]*(1?0*.O?i*.*0?i[Ol1]OOO?0*1|0?1+[^l01]+|[i01].[Ol01] [iO1][il0]*1*.?0[l01]?.[Ol1]|l+[O01][i01]+O[i0]+0+[^iO0]*i+1?[^il1]+l*[^ iO0]+|l*i+1?OO?0+i?|[O1][^i1]+OiO.+0?i+|.[^l1]?[il0]?O*.l*.+i[O0]+[^01]? O?|[Ol]*1?.?[^iO0]+|iii*0iO0[^O01]+1*0?i*0.*[iOl]|1[il]*l)O..?1iO[iO01]? [iO0]*0$

So long.
February 14, 2004
davepermen wrote:

[...]
> somehow i can't see anything except tons of garbage-tokens..
[...]


You are right. It is systematically built garbage to test whether the highlighting works the way intended.

So long.
February 15, 2004
Walter wrote:

[...]
> for just such an emergency <g>.

Yeah. Stomp me into the dust. It was a bad example anyway. Highlighting can make such errors stand out easily.

So long.
February 16, 2004
> In many fonts the glyphs for capital "O" and zero "0" looks exactly the same.
> The glyphs for capital "I", small "l" and number "1" quite often looks just too damn similar.
> And the worst part - if those questionable characters are in the identifier's name,
> even syntax highlighting is powerless to warn you about imminent disaster.

An obvious help (for Windows, at least) is to use a font designed for programming.
See
www.catexa.com
for a mono-spaced font similar to courier that distinguishes 1, l, 0 O
It also has outsize punctuation so that perios, colons, braces etc. are
visible

Karl Bochert


February 16, 2004
On Mon, 16 Feb 2004 04:30:07 GMT (02/16/04 15:30:07)
, Karl Bochert <kbochert@copper.net> wrote:

>
>> In many fonts the glyphs for capital "O" and zero "0" looks exactly the same.
>> The glyphs for capital "I", small "l" and number "1" quite often looks just too damn similar.
>> And the worst part - if those questionable characters are in the identifier's name,
>> even syntax highlighting is powerless to warn you about imminent disaster.
>
> An obvious help (for Windows, at least) is to use a font designed for programming.
> See
> www.catexa.com
> for a mono-spaced font similar to courier that distinguishes 1, l, 0 O
> It also has outsize punctuation so that perios, colons, braces etc. are
> visible
>

Pity that catexa's been hacked though.


-- 
Derek
February 16, 2004
On Mon, 16 Feb 2004 16:55:03 +1100 (02/16/04 16:55:03)
, Derek Parnell <Derek.Parnell@No.Spam> wrote:

> On Mon, 16 Feb 2004 04:30:07 GMT (02/16/04 15:30:07)
> , Karl Bochert <kbochert@copper.net> wrote:
>
>>
>>> In many fonts the glyphs for capital "O" and zero "0" looks exactly the same.
>>> The glyphs for capital "I", small "l" and number "1" quite often looks just too damn similar.
>>> And the worst part - if those questionable characters are in the identifier's name,
>>> even syntax highlighting is powerless to warn you about imminent disaster.
>>
>> An obvious help (for Windows, at least) is to use a font designed for programming.
>> See
>> www.catexa.com
>> for a mono-spaced font similar to courier that distinguishes 1, l, 0 O
>> It also has outsize punctuation so that perios, colons, braces etc. are
>> visible
>>
>
> Pity that catexa's been hacked though.
>
>

There's another copy of these fonts at  http://www.rapideuphoria.com/kfonts.zip


-- 
Derek
February 16, 2004
uhm.. i normally just take my code:D garbage enough, hehe

"Manfred Nowak" <svv1999@hotmail.com> schrieb im Newsbeitrag news:c0k7b1$1dmo$1@digitaldaemon.com...
> davepermen wrote:
>
> [...]
> > somehow i can't see anything except tons of garbage-tokens..
> [...]
>
>
> You are right. It is systematically built garbage to test whether the highlighting works the way intended.
>
> So long.