From 7a26a4a5bada47f10b5dd461a7180362801ba2c7 Mon Sep 17 00:00:00 2001 From: Fellippe Heitor Date: Thu, 18 Feb 2021 15:07:07 -0300 Subject: [PATCH] Fixes layout of $IF blocks with operators like >, <, etc. Also: Colorizes internal special variables/values as part of the $IF metacommand. (DEFINED, UNDEFINED, WINDOWS, WIN, LINUX, MAC, MACOSX, 32BIT, 64BIT, VERSION). --- source/ide/ide_methods.bas | 5 +++++ source/qb64.bas | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/source/ide/ide_methods.bas b/source/ide/ide_methods.bas index ff55b5886..f5ee06a5a 100644 --- a/source/ide/ide_methods.bas +++ b/source/ide/ide_methods.bas @@ -8413,6 +8413,11 @@ SUB ideshowtext ELSEIF INSTR(listOfCustomKeywords$, "@" + removesymbol2$(checkKeyword$) + "@") > 0 THEN isCustomKeyword = -1 isKeyword = LEN(checkKeyword$) + ELSEIF INSTR(UserDefineList$, "@" + checkKeyword$ + "@") > 0 AND _ + (UCASE$(LEFT$(LTRIM$(a2$), 3)) = "$IF" OR _ + UCASE$(LEFT$(LTRIM$(a2$), 7)) = "$ELSEIF") THEN + isCustomKeyword = -1 + isKeyword = LEN(checkKeyword$) END IF END IF END IF diff --git a/source/qb64.bas b/source/qb64.bas index fb6d541d5..43114c335 100644 --- a/source/qb64.bas +++ b/source/qb64.bas @@ -32,7 +32,8 @@ DIM ExecLevel(255), ExecCounter AS INTEGER REDIM SHARED UserDefine(1, 100) AS STRING '0 element is the name, 1 element is the string value REDIM SHARED InValidLine(10000) AS _BYTE DIM DefineElse(255) AS _BYTE -DIM SHARED UserDefineCount AS INTEGER +DIM SHARED UserDefineCount AS INTEGER, UserDefineList$ +UserDefineList$ = "@DEFINED@UNDEFINED@WINDOWS@WIN@LINUX@MAC@MACOSX@32BIT@64BIT@VERSION@" UserDefine(0, 0) = "WINDOWS": UserDefine(0, 1) = "WIN" UserDefine(0, 2) = "LINUX" UserDefine(0, 3) = "MAC": UserDefine(0, 4) = "MACOSX" @@ -2881,7 +2882,16 @@ DO temp$ = LTRIM$(MID$(a3u$, 4)) 'strip off the $IF and extra spaces temp$ = RTRIM$(LEFT$(temp$, LEN(temp$) - 4)) 'and strip off the THEN and extra spaces - temp = INSTR(temp$, "=") + temp = 0 + IF temp = 0 THEN tempOp$ = "<=": temp = INSTR(temp$, tempOp$) + IF temp = 0 THEN tempOp$ = "=<": temp = INSTR(temp$, tempOp$): tempOp$ = "<=" + IF temp = 0 THEN tempOp$ = ">=": temp = INSTR(temp$, tempOp$) + IF temp = 0 THEN tempOp$ = "=>": temp = INSTR(temp$, tempOp$): tempOp$ = ">=" + IF temp = 0 THEN tempOp$ = "<>": temp = INSTR(temp$, tempOp$) + IF temp = 0 THEN tempOp$ = "><": temp = INSTR(temp$, tempOp$): tempOp$ = "<>" + IF temp = 0 THEN tempOp$ = "=": temp = INSTR(temp$, tempOp$) + IF temp = 0 THEN tempOp$ = ">": temp = INSTR(temp$, tempOp$) + IF temp = 0 THEN tempOp$ = "<": temp = INSTR(temp$, tempOp$) ExecCounter = ExecCounter + 1 ExecLevel(ExecCounter) = -1 'default to a skip value @@ -2896,8 +2906,8 @@ DO controllevel = controllevel + 1 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 + 1)) - layout$ = SCase$("$If ") + l$ + " = " + r$ + SCase$(" Then") + l$ = RTRIM$(LEFT$(temp$, temp - 1)): r$ = LTRIM$(MID$(temp$, temp + LEN(tempOp$))) + layout$ = SCase$("$If ") + l$ + " " + tempOp$ + " " + r$ + SCase$(" Then") GOTO finishednonexec END IF