ColorizeScript challenge

Dave Cragg dcragg at lacscentre.co.uk
Wed Apr 26 16:17:37 CDT 2006


On 26 Apr 2006, at 20:06, J. Landman Gay wrote:
>
> I played with this for about an hour last night. I was using the  
> same technique, converting the script to htmltext using the replace  
> command. I had it mostly working but got stuck on exactly the issue  
> you mention. So let's let Geoff do it. :)

I probably should, but a challenge is hard to resist.

I think the script below gets round the html entity issue. It also  
preserves spaces more safely than my earlier attempt. And being a  
nervous type, I added a check at the end so it won't change the  
script if the new version doesn't match the old version. (I'm not  
sure if the "answer" dialog is appropriate for this script.)

It still has limitations. It won't allow the coloring of ampersands.  
The original didn't do this either, but it could have been added to  
the tokencolors array. It doesn't color function names that are  
followed by parentheses. It also depends on the engine's non-standard  
handling of html with respect to multiple spaces and other non-ASCII  
characters.

One thing that neither the original or this version do is color  
tokens that have no space between them. Things like x&y. But it's a  
bad habit anyway. :-)

But why DarkOrchid4? Isn't that the name of an Empire battle cruiser?

Cheers
Dave
------------------------------------------------

on colorizescript_2
   local s, tAddReturn, tNL, tEachLine, tLine, tOff1, tOff2
   local tComment, w, tNS

   if tokencolors["if"] is empty then setupcolors

   put field "Editor Field" into s

   if char -1 of s = return then put true into tAddReturn

   repeat for each line tEachLine in s
     put empty into tNL
     put tEachLine into tLine
     replace "&" with "&" in tLine
     if "<" is in tLine then replace "<" with "&lt;" in tLine
     if ">" is in tLine then replace ">" with "&gt;" in tLine

     put offset("#",tLine) into tOff1
     put offset("--",tLine) into tOff2

     if tOff1 > 0 or tOff2 > 0 then
       if tOff1 = 0 then
         put tOff2 into tOff1
       else if tOff2 = 0 then
         put tOff1 into tOff2
       end if
       put char min(tOff1,tOff2) to -1 of tLine into tComment
       delete char min(tOff1,tOff2) to -1 of tLine
     else
       put empty into tComment
     end if

     replace space with return  in tLine

     repeat for each line w in tLine

       if tokencolors[w] is not empty then
         put "<font color=" & tokencolors[w] & ">"after tNL
         put w after tNL
         put "</font>" after tNL
       else
         put w after tNL
       end if
       put space after tNL
     end repeat
     if char -1 of tLine <> return then delete char -1 of tNL

     if tComment <> empty then
       put "<font color=DarkOrchid4>" & tComment & "</font>" after tNL
     end if

     put "<p>" & tNL & "</p>" after tNS
   end repeat
   if tAddReturn then put "<p></p>" after tNS
   set the htmlText of field "Editor Field" to tNS
   if the text of field "Editor Field"  <> s then
     answer "Unable to colorize script."
     put s into field "Editor Field"
   end if
end colorizescript_2



More information about the metacard mailing list