Goodbye stsMLXEditor

Peter Haworth pete at lcsql.com
Wed Sep 2 22:10:08 EDT 2015


Hi Mark,
You sent me that a few months ago when I was writing my script and I
incorporated it.

Not sure what other things might make it a bad idea, but I do incorporate
an algorithm that attempts to find variable names that might be
misspellings with various choices on what to do with them.

It's not designed to be used as a shortcut to typing local statements but
it works very well if you decide to start using strict compilation mode but
don;t want to spend hours wading through code to add the local statements.

I guess I should change it so set explicitVars now!


On Wed, Sep 2, 2015 at 6:54 PM Mark Wieder <mwieder at ahsoftware.net> wrote:

> On 09/02/2015 12:38 PM, Peter Haworth wrote:
> > Assuming the errors you are referring to are of the "undeclared variable"
> > type, I have a utility that inserts local statements for any undeclared
> > variables.  Maybe I should offer it to the team.
>
> A number of reasons why this isn't a good idea.
> But there's a function for it in the glx2 script editor as well.
>
> The late Eric Chatonet and I had a great conversation with Jerry Daniels
> where we talked about why not to do this (and in the process almost had
> him convinced to use explicitVars)... I finally said something like I
> could maybe stomach it if the function grouped variables by theme,
> keeping like variables together, but that it was beyond what computers
> were capable of.
>
> The next morning Eric emailed an algorithm that did just that, and we
> tweaked it over the next few hours and came up with a function that
> would group variables very nicely. It does rely on CamelCase variable
> names, but that's the only restriction. Posted here for your amusement.
> Watch the line wrap - it's deadly.
>
>
> /**
> glx2GetSortedVars
> Eric Chatonet's contribution:
> Sort a CamelCase variable list thematically
> pVarList is a list of variables to sort, one per line
> */
> function glx2GetSortedVars pVarList
>
>      local tVar, tChar, tFound, tNumOfChars, tVarList
>      local tDeclaration
>      local tStart, tEnd
>      local tLength
>
>      if pVarList is not empty then
>          set the itemdelimiter to comma
>          repeat for each line tVar in pVarList
>              if IsCaps(char 2 of tVar) then
>                  delete the first char of tVar --CamelCase notation
>              end if
>              -- We don't care about trailing digits
>              repeat until the last char of tVar is not an integer --
> incremented vars
>                  delete the last char of tVar
>              end repeat
>
>              -- get the length of the variable name
>              put the number of chars of tVar into tNumOfChars
>              put tNumOfChars into tEnd
>
>              -- Gather a list of words
>              -- Relies on CamelCase notation: capitalized words will end
> up on this list
>              -- tHorizontalOffset will put Horizontal and offset into
> the list
>              repeat with tStart = tNumOfChars down to 1 -- unfortunately
> repeat for each can't be used
>                  -- if we have found the start of a word
>                  -- (make sure we're not looking at just the last char
> of the word)
>                  put tEnd - tStart into tLength
>                  if IsCaps(char tStart of tVar) and tStart < tNumOfChars
> then
>                      -- if we've already found a keyword in this
> variable name
>                      if IsCaps(char tEnd of tVar) then --
>                          if char tStart to tEnd - 1 of tVar is not among
> the items of tFound and tStart is not tEnd - 1 then
>                              if tLength > 2 then
>                                  put char tStart to tEnd - 1 of tVar &
> comma before tFound
>                              end if
>                          end if
>                      else
>                          -- This is the first keyword we've found in
> this variable name
>                          -- if we don't have this word in our list yet
>                          if char tStart to tEnd of tVar is not among the
> items of tFound then
>                              -- add it to the list
>                              if tLength > 2 then
>                                  put char tStart to tEnd of tVar & comma
> after tFound
>                              end if
>                          end if
>                      end if
>                      put tStart into tEnd
>                  end if
>              end repeat -- with i = tNumOfChars down to 1
>          end repeat -- for each line tVar in pVarList
>
>          -- now work our way through the list
>          repeat for each item tWord in tFound
>              put pVarList into tVarList
>              filter tVarList with "*" & tWord & "*"
>              filter pVarList without "*" & tWord & "*"
>              if tVarList is not empty then
>                  sort tVarList
>                  -- group similar items onto the same line
>                  replace cr with comma & space in tVarList
>                  put the cIndent of me & "local" && tVarList & cr after
> tDeclaration
>              end if
>          end repeat
>
>          -- if there's anything left in pVarList at this point then
>          -- we want to be sure to add it. This covers the case of variables
>          -- not in CamelCase notation.
>          put 1 into tNumOfChars
>          repeat for each line tLine in pVarList
>              if tNumOfChars is 1 then
>                  put the cIndent of me & "local " after tDeclaration
>              end if
>              put tLine after tDeclaration
>              add 1 to tNumOfChars
>              -- See if we've put four variables on this line already
>              if tNumOfChars is 4 then
>                  put cr after tDeclaration
>                  put 1 into tNumOfChars
>              else
>                  put comma after tDeclaration
>              end if
>          end repeat
>          if char -1 of tDeclaration is comma then
>              put cr into char -1 of tDeclaration
>          end if
>          sort tDeclaration
>
>          -- end with a delimiter to separate the automatically-generated
> declarations
>          -- from any declarations previously entered by the user
>          -- This will help identify problem declarations
>          put the cIndent of me & "-----" after tDeclaration
>          put the cIndent of me & "-----" & cr before tDeclaration
>      end if
>      return tDeclaration
> end glx2GetSortedVars
>
> --
>   Mark Wieder
>   ahsoftware at gmail.com
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>



More information about the use-livecode mailing list