From 1e679627f4edf2a02cc7ba5757526c9f205a6be1 Mon Sep 17 00:00:00 2001 From: FellippeHeitor Date: Thu, 30 Sep 2021 00:48:38 -0300 Subject: [PATCH] Make indent level only increase once per line; closes #176 --- source/qb64.bas | 53 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/source/qb64.bas b/source/qb64.bas index 4f5856595..46f8835c7 100644 --- a/source/qb64.bas +++ b/source/qb64.bas @@ -874,6 +874,8 @@ DIM SHARED everycasenewcase AS LONG DIM SHARED controllevel AS INTEGER '0=not in a control block +DIM SHARED softcontrollevel AS INTEGER +DIM SHARED controllevelLastLine AS INTEGER DIM SHARED controltype(1000) AS INTEGER '1=IF (awaiting END IF) '2=FOR (awaiting NEXT) @@ -1445,6 +1447,7 @@ everycasenewcase = 0 qberrorhappened = 0: qberrorcode = 0: qberrorline = 0 FOR i = 1 TO 27: defineaz(i) = "SINGLE": defineextaz(i) = "!": NEXT controllevel = 0 +softcontrollevel = 0: controllevelLastLine = 0 findidsecondarg$ = "": findanotherid = 0: findidinternal = 0: currentid = 0 linenumber = 0 wholeline$ = "" @@ -2960,7 +2963,8 @@ DO layoutoriginal$ = a3$ layoutcomment$ = "" 'clear any previous layout comment - lhscontrollevel = controllevel + IF softcontrollevel < 0 THEN softcontrollevel = 0 + lhscontrollevel = controllevel - softcontrollevel linefragment = "[INFORMATION UNAVAILABLE]" IF LEN(a3$) = 0 THEN GOTO finishednonexec @@ -2984,6 +2988,7 @@ DO ExecCounter = ExecCounter - 1 layout$ = SCase$("$End If") controltype(controllevel) = 0 + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 GOTO finishednonexec END IF @@ -3018,6 +3023,10 @@ DO END IF controllevel = controllevel + 1 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controltype(controllevel) = 6 IF temp = 0 THEN layout$ = SCase$("$If ") + temp$ + SCase$(" Then"): GOTO finishednonexec 'no = sign in the $IF statement, so we're going to assume the user is doing something like $IF flag l$ = RTRIM$(LEFT$(temp$, temp - 1)): r$ = LTRIM$(MID$(temp$, temp + LEN(tempOp$))) @@ -4777,6 +4786,10 @@ DO IF ideindentsubs THEN controllevel = controllevel + 1 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controltype(controllevel) = 32 controlref(controllevel) = linenumber END IF @@ -5294,6 +5307,7 @@ DO IF controltype(controllevel) = 32 AND ideindentsubs THEN controltype(controllevel) = 0 + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 END IF @@ -5584,6 +5598,7 @@ DO END IF PRINT #12, "}" PRINT #12, "fornext_exit_" + str2$(controlid(controllevel)) + ":;" + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 IF n = 1 THEN EXIT FOR v$ = "" @@ -5614,6 +5629,10 @@ DO END IF controllevel = controllevel + 1 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controlref(controllevel) = linenumber controltype(controllevel) = 5 controlid(controllevel) = uniquenumber @@ -5649,6 +5668,7 @@ DO PRINT #12, "ww_continue_" + str2$(controlid(controllevel)) + ":;" PRINT #12, "}" PRINT #12, "ww_exit_" + str2$(controlid(controllevel)) + ":;" + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 l$ = SCase$("Wend") layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$ @@ -5670,6 +5690,10 @@ DO END IF controllevel = controllevel + 1 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controlref(controllevel) = linenumber l$ = SCase$("Do") IF n >= 2 THEN @@ -5750,6 +5774,7 @@ DO END IF END IF PRINT #12, "dl_exit_" + str2$(controlid(controllevel)) + ":;" + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$ IF n = 1 THEN GOTO finishednonexec '***no error causing code, event checking done by DO*** @@ -5777,6 +5802,10 @@ DO END IF controllevel = controllevel + 1 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controlref(controllevel) = linenumber controltype(controllevel) = 2 controlid(controllevel) = uniquenumber @@ -6040,6 +6069,10 @@ DO IF iftype = 0 THEN a$ = "Expected IF expression THEN/GOTO": GOTO errmes controllevel = controllevel + 1 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controlref(controllevel) = linenumber controltype(controllevel) = 1 controlvalue(controllevel) = 0 'number of extra closing } required at END IF @@ -6088,6 +6121,7 @@ DO FOR i = 1 TO controlvalue(controllevel) PRINT #12, "}" NEXT + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 GOTO finishednonexec '***no error causing code, event checking done by IF*** END IF @@ -6114,6 +6148,7 @@ DO FOR i = 1 TO controlvalue(controllevel) PRINT #12, "}" NEXT + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 GOTO finishednonexec '***no error causing code, event checking done by IF*** END IF @@ -6162,6 +6197,10 @@ DO u = uniquenumber controllevel = controllevel + 1 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controlvalue(controllevel) = 0 'id t$ = "" @@ -6240,11 +6279,13 @@ DO IF controltype(controllevel) = 18 THEN everycasenewcase = everycasenewcase + 1 PRINT #12, "sc_ec_" + str2$(everycasenewcase) + "_end:;" + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 IF EveryCaseSet(SelectCaseCounter) = 0 THEN PRINT #12, "goto sc_" + str2$(controlid(controllevel)) + "_end;" PRINT #12, "}" END IF IF controltype(controllevel) = 19 THEN + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 IF EveryCaseSet(SelectCaseCounter) THEN PRINT #12, "} /* End of SELECT EVERYCASE ELSE */" END IF @@ -6264,6 +6305,7 @@ DO END IF END IF + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 SelectCaseCounter = SelectCaseCounter - 1 l$ = SCase$("End" + sp + "Select") @@ -6289,6 +6331,7 @@ DO IF controltype(controllevel) = 19 THEN a$ = "Expected END SELECT": GOTO errmes IF controltype(controllevel) = 18 THEN lhscontrollevel = lhscontrollevel - 1 + softcontrollevel = softcontrollevel - 1 controllevel = controllevel - 1 everycasenewcase = everycasenewcase + 1 PRINT #12, "sc_ec_" + str2$(everycasenewcase) + "_end:;" @@ -6362,6 +6405,10 @@ DO IF getelement$(a$, 2) = "C-EL" THEN IF EveryCaseSet(SelectCaseCounter) THEN PRINT #12, "if (sc_" + str2$(controlid(controllevel)) + "_var==0) {" controllevel = controllevel + 1: controltype(controllevel) = 19 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controlref(controllevel) = controlref(controllevel - 1) l$ = l$ + sp + SCase$("Else") layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$ @@ -6540,6 +6587,10 @@ DO layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$ controllevel = controllevel + 1 + IF linenumber = controllevelLastLine THEN + softcontrollevel = softcontrollevel + 1 + END IF + controllevelLastLine = linenumber controlref(controllevel) = controlref(controllevel - 1) controltype(controllevel) = 18 GOTO finishedline