Am 16.11.2015 um 11:36 schrieb Max Voss:
Hello again,
Sure, I can describe the algorithm:
First it checks for the editor signal (although atm it just takes /any/ "editor-notify" not just text change).
Then it gets the line and checks if there is a symbol that has to be aligned.
Then it gets the adjecent lines and checks those too, for misaligned symbols, indentation, and stop conditions like if there is a ":" in that line, for example I don't want to align:
a=1 while a==1: ...
Then it splits the line into variables and arguments at the location of the "=" , so left, right basically.
Is this plugin specific to python source code? Or can it auto-align (for example) C code as well?
Then it strips the indentation white space and newline characters and gets the max. length of a variable. All variable names that are shorter than that get buffered with spaces until they're equal in length.
The newlines get created with " indentation + variable + = + value "
All the old lines and new lines get compiled into a block each, I search the document for the entire old block, do some string slicing and plug the new block into the old blocks place.
Then all text gets set to the text with the plugged new block and the cursor position gets set to the end of the new block.
Setting replacing the entire text has a serious drawback. The undo action that is recorded by scintilla will be large in memory, basically the size of the document. It seems auto-aligning is a frequent thing so this sounds troublesome.
Best regards