Dick Kriesel wrote:

On 3/21/06 2:37 AM, "Alex Tweedly" <[EMAIL PROTECTED]> wrote:

I suspect you have a different idea for what handler 'a' will do - in
fact, it *always" ask the time.

You suspected correctly, Alex.  Thanks for finding another mistake.  That
example only shows that the list of tokens is insufficient to reproduce the
_appearance_ of the handler.

Despite that weak example, the point was that the list of tokens is
insufficient to reproduce the _semantics_ of the handler, and therefore not
useful to "get a handler from a script."  Here's a better-chosen example of
two handlers with different semantics but the same tokens for the bodies of
the handlers:

But the interesting thing is that if you do something like
  token K1 to K2 of someScript
then it gives you the complete text between the char position of token K1 and the char position of token K2

I've uploaded a stack to revonline (username alextweedly, name FindHandler, category programming) which does this. Moderately tested .... but not thoroughly. (btw - only for handlers - extension to functions, setprop, etc.. is easy)

The essence of the (short) version is


function findhandler pScript, pHandler
    put 0 into tStart
    put 0 into tEnd
    put 0 into i
    put token 1 to -1 of pScript into pScript
    repeat for each token t in pScript
        add 1 to i
        if t = "on" then
            if token i+1 of pScript = pHandler then
                put i into tStart
            end if
        end if
        if t = "end" then
            if token i+1 of pScript = pHandler then
                put i into tEnd
                if tStart > 0 then exit repeat
            end if
        end if
    end repeat
    if tStart = 0 or tEnd = 0 then  return ""
-- to simply return the handler text
    return token tStart to tEnd+1 of pScript
end findhandler

Note that this fails to return any closing, trailing comment. For example, if the last line had been

   end findhandler    -- end of function to do something

it would not have included the comment.

The stack includes another version which returns the line numbers of the start and end lines of the handler, and therefore allows you to include such trailing comments. It does not handle trailing, multi-line, block comments :-( but I'd regard a format like

end findhandler /* some comment
                              in here */

as particularly bad style.


NB This is still only a 99.99% solution. It will fail in the case where there is a multi-line block comment which includes a complete, EXACT copy of the handler being sought, and which precedes the handler in question. Since it must be an exact copy, then if you use this to duplicate the handler somewhere else, it will give the correct result anyway :-)


--
Alex Tweedly       http://www.tweedly.net

No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.385 / Virus Database: 268.2.6/286 - Release Date: 20/03/2006
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to