Nice! Only thing I don't see is dealing with block comments - the things surrounded by "/*" and "*/" and possibly spanning several lines.
Pete lcSQL Software <http://www.lcsql.com> Home of lcStackBrowser <http://www.lcsql.com/lcstackbrowser.html> and SQLiteAdmin <http://www.lcsql.com/sqliteadmin.html> On Thu, Jul 2, 2015 at 11:36 PM, Mark Wieder <mwie...@ahsoftware.net> wrote: > On 07/02/2015 08:20 PM, Kay C Lan wrote: > >> Which proves the point that it isn't as easy as you first made out. As you >> say, cracking the GLX2 code is probably the easiest route to take and I'd >> be surprise if that code wasn't developed over a long period of time of >> 'discovering' odd edge cases cropping up here and there, that Jerry never >> envisage in a single session of coding. >> > > Well, here's the easy part from glx2: > > -- gather the script local variables > function getLocals pScript > local tTemp, tLocals > > filter pScript with "local *" > repeat for each line tLine in pScript > put word 2 to -1 of tLine & cr after tTemp > end repeat > -- allow for multiple declarations in one line > replace "," with cr in tTemp > repeat for each line tLine in tTemp > put word 1 of tLine & cr after tLocals > end repeat > chomp tLocals -- chomp is in the frontscript, removes trailing cr > set the tLocals of this card to tLocals > end getLocals > > -- here's the part that looks at usage (watch the lineWrap) > > --theHandler here could be the entire script of a single handler > repeat for each line theLine in theHandler > if word 1 to 3 of theLine is "repeat for each" then > put word 5 of theLine into theWord > if theTemps is empty then > put theWord into theTemps > else > if theWord is not among the lines of theTemps then > put cr & theWord after theTemps > end if > end if > next repeat > end if > if "into" is among the words of theLine or "after" is among the words > of theLine or "before" is among the words of theLine or word 1 of theLine > is "repeat then > put 0 into tWordNum > repeat for each word theWord in theLine > add 1 to tWordNum > if char 1 of theWord is "#" or char 1 to 2 of theWord is "--" then > exit repeat > end if > if char 1 of theWord is quote then > if theTemps is empty then > put theWord into theTemps > else > if theWord is not among the lines of theTemps then > put cr & theWord after theTemps > end if > end if > next repeat > end if > if theWord is among the items of "each,with,into,after,before" then > put word tWordNum+1 of theLine into theNextWord > if "(" is in theNextWord then > next repeat > end if > put token 1 of theNextWord into theNextWord > if theNextWord is not among the lines of theTokens and > theNExtWord is not empty then > if "[" is in theNextWord then > replace "[" with cr in theNextWord > replace "]" with "" in theNextWord > end if > if theTemps is empty then > put theNextWord into theTemps > else > if theNextWord is not among the lines of theTemps then > put cr & theNextWord after theTemps > end if > end if > end if > end if > end repeat > end if > end repeat > > -- > Mark Wieder > ahsoftw...@gmail.com > > > _______________________________________________ > use-livecode mailing list > use-livecode@lists.runrev.com > Please visit this url to subscribe, unsubscribe and manage your > subscription preferences: > http://lists.runrev.com/mailman/listinfo/use-livecode > _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode