Two questions about trev
Jerry Daniels
jerry.daniels at me.com
Tue Sep 15 10:50:22 EDT 2009
Thanks, Richard!
Best,
Jerry Daniels
Watch tRev - The Movie
http://reveditor.com/trev-the-movie
On Sep 15, 2009, at 9:37 AM, Richard Gaskin wrote:
> Tereza Snyder wrote:
> > Some satisfaction might be obtained if, by clicking a parenthesis
> with
> > a modifier key pressed, one could select all the text between it and
> > its partner. Similarly, click the keyword "if" and all text to the
> > matching "end if" is selected and vice-versa. Same for repeat and
> > switch.
>
> I like the way you think, Tereza. That strikes a perfect balance,
> providing the clarity Mark Wieder was looking for while keeping the
> script displayed as the whole block of text it is. I'll admit I
> have a few long handlers of my own where this will be very helpful. :)
>
> I just added the code below to my own script editor, and I really
> like it. Thanks for the suggestion.
>
>
> Jerry, I found that as sloppy as this code is it performs reasonably
> well as long as I store the top of the graphic "ControlSel" (for
> "Control Stucture Selection") in a property so I can update it
> during scrolling without having to recalculate the rect on the fly.
>
> The code assumes you have a graphic named "ControlSel" below your
> transparent editor field (since my editor is a fork of MC's my
> editor field is named simply "Editor Field"). Here I use a color
> slightly darker than the light gray of the background color of the
> stack, but brighter colors may look good too.
>
> If one of the BBEdit users here could send me a screenshot of how
> that app displays this that would be very helpful. It would also be
> good to know how they handle knowing what closure means for
> different languages (prefs settings?).
>
> ShowControlSel is called from a CommandKeyDown handler (I used Cmd-J
> simply because it was available, but if you use a different one it
> would be good to know so I can change mine for consistency before I
> share it). When invoked it'll draw the "ControlSel" graphic at
> the bounds of the relevant block, i.e. if a handler it'll surround
> the whole handler, if a switch it'll do the switch, if "if" it'll do
> until the "end".
>
> The ControlStructureClosureLine function is used in a few places in
> my editor, handy for finding the line offset where a handler or
> control structure closes. It's way sloppy in style (cleaning it up
> is on my to-do list after a long list of client features), but seems
> to work okay where I'm using it. With "if", "switch", and "repeat"
> it should account for nested control structures (please let me know
> if it fails to catch any).
>
> You're welcome to use any of this that's helpful:
>
>
>
> on ShowControlSel
> hide grc "ControlSel"
> put word 2 of the selectedLine into tLineNum
> put line tLineNum of fld "Editor Field" into tLine
> put ControlStructureClosureLine(tLineNum) into tClosingLineNum
> --
> put ((tLineNum-1) * the effective textHeight of \
> fld "Editor Field") + the top of fld "Editor Field" \
> + 2 into tTop
> put (tClosingLineNum * the effective textHeight of \
> fld "Editor Field") + the top of fld "Editor Field" \
> + 6 into tBottom -- 6 added for borders and margins
> set the uTop of grc "ControlSel" to tTop -- used for updating
> during scroll
> set the rect of grc "ControlSel" to \
> the left of fld "Editor Field", \
> tTop - the vScroll of fld "Editor Field", \
> the right of fld "Editor Field", \
> tBottom- the vScroll of fld "Editor Field"
> show grc "ControlSel"
> end ShowControlSel
>
>
> function ControlStructureClosureLine tLineNum
> put line tLineNum to (the number of lines of fld "Editor Field") \
> of fld "Editor Field" into tScript
> put line 1 of tScript into tLine
> put word 1 of tLine into tToken
> if tToken is among the words of "if switch repeat" then
> put 0 into i
> put 0 into tNestedCount
> repeat for each line tLine in tScript
> add 1 to i
> if word 1 of tLine is tToken then
> add 1 to tNestedCount
> end if
> --
> if word 1 of tLine is "end" AND word 2 of tLine is tToken then
> subtract 1 from tNestedCount
> if tNestedCount = 0 then
> return i+tLineNum-1
> end if
> end if
> end repeat
> --
> -- If we got here we may have an "if" closed by "else" so:
> if tToken is "if" then
> put 0 into i
> repeat for each line tLine in tScript
> add 1 to i
> if word 1 of tLine = "else" then
> return i+tLineNum-1
> end if
> end repeat
> --
> -- If we got this far perhaps the "if" dangles "then" on the
> next line:
> put 0 into i
> repeat for each line tLine in tScript
> add 1 to i
> if word 1 of tLine = "then" then
> return i+tLineNum-1
> end if
> end repeat
> end if
> --
> else
> -- Get whole handler?
> if tToken is among the words of "on private command function
> getProp setProp" then
> if word 1 of tLine is "private" then put word 3 of tScript into
> tToken
> else put word 2 of tLine into tToken
> put 0 into i
> repeat for each line tLine in tScript
> add 1 to i
> if word 1 of tLine = "end" AND word 2 of tLine is tToken then
> return i+tLineNum-1
> end if
> end repeat
> end if
> end if -- closable token
> return tLineNum
> end ControlStructureClosureLine
>
>
>
> --
> Richard Gaskin
> Fourth World
> Revolution training and consulting: http://www.fourthworld.com
> Webzine for Rev developers: http://www.revjournal.com
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
More information about the use-livecode
mailing list