`A`u`t`o`m`a`t`i`c` `I`n`d`e`n`t`e`r`
Root / Submissions / [.]
12Me21Created:
Version:1.1Size:2.39KB
A big problem with SmileBasic is that it doesn't automatically indent your code.
I made a program that adds proper indenting (based on TABSTEP) to another program.
Replying to:Defaultio
This is probably one of the most useless programs here. You know that you could just press space and it will automatically keep that indention for future lines. Still don't know how this would be useful.... sorry.
It indents an otherwise non-indented code file. It can fix the indenting on a file which has broken indenting (if it works correctly).
Replying to:Defaultio
This is probably one of the most useless programs here. You know that you could just press space and it will automatically keep that indention for future lines. Still don't know how this would be useful.... sorry.
Yes, it converts any code into code with proper indenting.
For example:
WHILE 1
BEEP
WEND
would be converted to
WHILE 1
BEEP
WEND
Etc.
I like this idea! I don't know yet if it works correctly but I don't see why not :)
Here's a tip for fixing the problem you described:
1. Find where a comment starts in a line. Comments start with the first ' character that isn't inside a string
2. Remove the comment entirely (for your internal processing only)
3. Remove any trailing whitespace.
4. At this point you can just use the code you already have, maybe with a few tweaks (for example, you need to put the comment back in)
5. Hopefully, bug-free automatic indentation!
Replying to:NeatNit
I like this idea! I don't know yet if it works correctly but I don't see why not :)
Here's a tip for fixing the problem you described:
1. Find where a comment starts in a line. Comments start with the first ' character that isn't inside a string
2. Remove the comment entirely (for your internal processing only)
3. Remove any trailing whitespace.
4. At this point you can just use the code you already have, maybe with a few tweaks (for example, you need to put the comment back in)
5. Hopefully, bug-free automatic indentation!
I will try to add this eventuallly.
Luckily, the comment problem only affects
IF ... THEN 'COMMENT
...
ENDIF
and (this is rare)
IF ... THEN ... ' THEN
.
The main issue is things like:
NEXT:NEXT.
That will me much harder to solve.
Replying to:NeatNit
I like this idea! I don't know yet if it works correctly but I don't see why not :)
Here's a tip for fixing the problem you described:
1. Find where a comment starts in a line. Comments start with the first ' character that isn't inside a string
2. Remove the comment entirely (for your internal processing only)
3. Remove any trailing whitespace.
4. At this point you can just use the code you already have, maybe with a few tweaks (for example, you need to put the comment back in)
5. Hopefully, bug-free automatic indentation!
Oh, and also there's the problem of ' inside of strings, where it doesn't make a comment.
I finally have a solution!
Originally I was lazy (and efficient), and only checked the first "word" (text with a space after it) in each line, except when the first word was "IF", where I had to check if the final 4 characters were "THEN"
This causes problems when people do stuff like
NEXT:NEXT (even the first one isn't detected because there's no space)
REPEAT:UNTIL BUTTON()
etc.
So now I have a new solution!
Replying to:12Me21
I finally have a solution!
Originally I was lazy (and efficient), and only checked the first "word" (text with a space after it) in each line, except when the first word was "IF", where I had to check if the final 4 characters were "THEN"
This causes problems when people do stuff like
NEXT:NEXT (even the first one isn't detected because there's no space)
REPEAT:UNTIL BUTTON()
etc.
So now I have a new solution!
I made a function to check a line for valid occurances of a keyword.
The rules it uses are:
-It can't be inside a string
-It can't be in a comment (comments start with ' outside a string)*
-It can't have a LETTER, @, or _ directly in front of it
-It can't have a NUMBER, LETTER, $, #, %, or _ directly after it
I think this covers every possible scenario.
So now, I can just do INLIN(LINE$, IF,0), for example, and find out if that line has the keyword IF in it (and not something like ENDIF)
Now, I just need to make it find multiple keywords...
And... Detect non-block IF statements.
I think that could be detected if I checked if there was anything besides : , ' , or spaces after THEN...
UGH...
*REM is not technically a comment marker, it is just a statement that does nothing. And no one uses it.
Replying to:12Me21
I finally have a solution!
Originally I was lazy (and efficient), and only checked the first "word" (text with a space after it) in each line, except when the first word was "IF", where I had to check if the final 4 characters were "THEN"
This causes problems when people do stuff like
NEXT:NEXT (even the first one isn't detected because there's no space)
REPEAT:UNTIL BUTTON()
etc.
So now I have a new solution!
I'm just trying to think what how smileBASIC determines this, and not how I would do it, since I might miss something..
So, It seems that if there is anything after the THEN, except space and CR, (and comments,) it will be considered a single-line IF statement.
So then I do something like
IF {the line has IF in it} THEN
IF {the line has THEN in it, and nothing is after THEN (except comments...)} THEN
INC I, TAB
ENDIF
ENDIF
comment detection... hmm...
1 year ago
Can you post the original source code on Pastebin, I actually enjoyed this very much and deleted it by accident