1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-09-28 11:17:46 +00:00

Allow multihighlight for var.element items. Also:

- Improved number detection (negatives, decimals, trailing type suffixes);
- Properly clear the status area before showing "converting..." message for QB45BIN.
This commit is contained in:
FellippeHeitor 2017-10-07 03:16:46 -03:00
parent e8e1da2987
commit 70fd9d872e

View file

@ -3773,8 +3773,10 @@ FUNCTION ide2 (ignore)
FOR i = 1 TO LEN(ideCurrentSingleLineSelection) FOR i = 1 TO LEN(ideCurrentSingleLineSelection)
IF INSTR(char.sep$, MID$(ideCurrentSingleLineSelection, i, 1)) > 0 THEN IF INSTR(char.sep$, MID$(ideCurrentSingleLineSelection, i, 1)) > 0 THEN
'separators in selection don't trigger multi-highlight 'separators in selection don't trigger multi-highlight
ideCurrentSingleLineSelection = "" IF MID$(ideCurrentSingleLineSelection, i, 1) <> "." THEN
EXIT FOR ideCurrentSingleLineSelection = ""
EXIT FOR
END IF
END IF END IF
NEXT i NEXT i
END IF END IF
@ -7886,7 +7888,7 @@ SUB ideshowtext
END IF END IF
_PALETTECOLOR 5, _RGB32(Bracket.r&, Bracket.g&, Bracket.b&), 0 _PALETTECOLOR 5, _RGB32(Bracket.r&, Bracket.g&, Bracket.b&), 0
char.sep$ = CHR$(34) + " =<>+-/\^:;,*().'" char.sep$ = CHR$(34) + " =<>+-/\^:;,*()'"
cc = -1 cc = -1
@ -8101,14 +8103,18 @@ SUB ideshowtext
IF LCASE$(MID$(a2$, m, LEN(ideCurrentSingleLineSelection))) = LCASE$(ideCurrentSingleLineSelection) THEN IF LCASE$(MID$(a2$, m, LEN(ideCurrentSingleLineSelection))) = LCASE$(ideCurrentSingleLineSelection) THEN
IF m > 1 THEN IF m > 1 THEN
IF INSTR(char.sep$, MID$(a2$, m - 1, 1)) > 0 THEN IF INSTR(char.sep$, MID$(a2$, m - 1, 1)) > 0 THEN
IF m + LEN(ideCurrentSingleLineSelection) < LEN(a2$) AND INSTR(char.sep$, MID$(a2$, m + LEN(ideCurrentSingleLineSelection), 1)) > 0 THEN IF m + LEN(ideCurrentSingleLineSelection) < LEN(a2$) AND _
(INSTR(char.sep$, MID$(a2$, m + LEN(ideCurrentSingleLineSelection), 1)) > 0 OR _
MID$(a2$, m + LEN(ideCurrentSingleLineSelection), 1) = ".") THEN
multiHighlightLength = LEN(ideCurrentSingleLineSelection) multiHighlightLength = LEN(ideCurrentSingleLineSelection)
ELSEIF m + LEN(ideCurrentSingleLineSelection) >= LEN(a2$) THEN ELSEIF m + LEN(ideCurrentSingleLineSelection) >= LEN(a2$) THEN
multiHighlightLength = LEN(ideCurrentSingleLineSelection) multiHighlightLength = LEN(ideCurrentSingleLineSelection)
END IF END IF
END IF END IF
ELSE ELSE
IF m + LEN(ideCurrentSingleLineSelection) < LEN(a2$) AND INSTR(char.sep$, MID$(a2$, m + LEN(ideCurrentSingleLineSelection), 1)) > 0 THEN IF m + LEN(ideCurrentSingleLineSelection) < LEN(a2$) AND _
(INSTR(char.sep$, MID$(a2$, m + LEN(ideCurrentSingleLineSelection), 1)) > 0 OR _
MID$(a2$, m + LEN(ideCurrentSingleLineSelection), 1) = ".") THEN
multiHighlightLength = LEN(ideCurrentSingleLineSelection) multiHighlightLength = LEN(ideCurrentSingleLineSelection)
ELSEIF m + LEN(ideCurrentSingleLineSelection) >= LEN(a2$) THEN ELSEIF m + LEN(ideCurrentSingleLineSelection) >= LEN(a2$) THEN
multiHighlightLength = LEN(ideCurrentSingleLineSelection) multiHighlightLength = LEN(ideCurrentSingleLineSelection)
@ -8131,8 +8137,9 @@ SUB ideshowtext
IF INSTR(char.sep$, oldChar$) > 0 AND INSTR(char.sep$, thisChar$) = 0 THEN IF INSTR(char.sep$, oldChar$) > 0 AND INSTR(char.sep$, thisChar$) = 0 THEN
'a new "word" begins; check if it's an internal keyword 'a new "word" begins; check if it's an internal keyword
checkKeyword$ = "" checkKeyword$ = ""
right.sep$ = ""
FOR i = m TO LEN(a2$) FOR i = m TO LEN(a2$)
IF INSTR(char.sep$, MID$(a2$, i, 1)) THEN EXIT FOR IF INSTR(char.sep$, MID$(a2$, i, 1)) > 0 OR MID$(a2$, i, 1) = "." THEN right.sep$ = MID$(a2$, i, 1): EXIT FOR
checkKeyword$ = checkKeyword$ + MID$(a2$, i, 1) checkKeyword$ = checkKeyword$ + MID$(a2$, i, 1)
NEXT NEXT
checkKeyword$ = UCASE$(checkKeyword$) checkKeyword$ = UCASE$(checkKeyword$)
@ -8146,8 +8153,45 @@ SUB ideshowtext
END IF END IF
isKeyword = LEN(checkKeyword$) isKeyword = LEN(checkKeyword$)
ELSE ELSE
is_Number = 0
'maybe a number literal? 'maybe a number literal?
readFullNumber:
is_Number = 0
extraChars = 0
'Continue reading if checkKeyword$ ended in a "."
IF right.sep$ = "." OR thisChar$ = "-" OR thisChar$ = "." THEN
checkKeyword$ = checkKeyword$ + right.sep$
FOR i = i + 1 TO LEN(a2$)
IF INSTR(char.sep$, MID$(a2$, i, 1)) THEN
IF MID$(a2$, i, 1) = "." AND right.sep$ = "." THEN
'a number won't contain two ".", so this
'can be safely discarded
checkKeyword$ = ""
END IF
EXIT FOR
END IF
checkKeyword$ = checkKeyword$ + MID$(a2$, i, 1)
NEXT
END IF
'Remove eventual type sygils
SELECT CASE RIGHT$(checkKeyword$, 1)
CASE "`", "%", "&", "!", "#"
checkKeyword$ = LEFT$(checkKeyword$, LEN(checkKeyword$) - 1)
extraChars = 1
END SELECT
SELECT CASE RIGHT$(checkKeyword$, 1)
CASE "~", "%", "&", "#"
checkKeyword$ = LEFT$(checkKeyword$, LEN(checkKeyword$) - 1)
extraChars = extraChars + 1
END SELECT
IF RIGHT$(checkKeyword$, 1) = "~" THEN
checkKeyword$ = LEFT$(checkKeyword$, LEN(checkKeyword$) - 1)
extraChars = extraChars + 1
END IF
IF isnumber(checkKeyword$) THEN IF isnumber(checkKeyword$) THEN
is_Number = -1 is_Number = -1
ELSEIF LEFT$(checkKeyword$, 2) = "&H" OR _ ELSEIF LEFT$(checkKeyword$, 2) = "&H" OR _
@ -8155,7 +8199,27 @@ SUB ideshowtext
LEFT$(checkKeyword$, 2) = "&B" THEN LEFT$(checkKeyword$, 2) = "&B" THEN
is_Number = -1 is_Number = -1
END IF END IF
IF is_Number THEN isKeyword = LEN(checkKeyword$) ELSE checkKeyword$ = "" IF is_Number THEN isKeyword = LEN(checkKeyword$) + extraChars ELSE checkKeyword$ = ""
END IF
ELSE
'is this a negative number?
IF thisChar$ = "-" AND LEN(oldChar$) > 0 AND INSTR(char.sep$, oldChar$) > 0 THEN
nextChar$ = MID$(a2$, m + 1, 1)
checkNegNumber:
IF LEN(nextChar$) THEN
IF (ASC(nextChar$) >= 48 AND ASC(nextChar$) <= 57) THEN
'it's a number
checkKeyword$ = "-"
right.sep$ = ""
i = m
GOTO readFullNumber
ELSEIF ASC(nextChar$) = 46 THEN
nextChar$ = MID$(a2$, m + 2, 1)
IF LEN(nextChar$) > 0 THEN
IF ASC(nextChar$) <> 46 THEN GOTO checkNegNumber
END IF
END IF
END IF
END IF END IF
END IF END IF
END IF END IF
@ -14257,6 +14321,7 @@ FUNCTION BinaryFormatCheck% (pathToCheck$, pathSepToCheck$, fileToCheck$)
SCREEN , , 3, 0 SCREEN , , 3, 0
dummy = DarkenFGBG(1) dummy = DarkenFGBG(1)
COLOR 7, 1: LOCATE idewy - 3, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 2, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 1, 2: PRINT SPACE$(idewx - 2); 'clear status window
LOCATE idewy - 3, 2 LOCATE idewy - 3, 2
COLOR 15, 1 COLOR 15, 1
PRINT "Converting... " PRINT "Converting... "
@ -14265,9 +14330,7 @@ FUNCTION BinaryFormatCheck% (pathToCheck$, pathSepToCheck$, fileToCheck$)
convertLine$ = convertUtility$ + " " + QuotedFilename$(file$) + " -o " + QuotedFilename$(ofile$) convertLine$ = convertUtility$ + " " + QuotedFilename$(file$) + " -o " + QuotedFilename$(ofile$)
SHELL _HIDE convertLine$ SHELL _HIDE convertLine$
LOCATE idewy - 3, 2 COLOR 7, 1: LOCATE idewy - 3, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 2, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 1, 2: PRINT SPACE$(idewx - 2); 'clear status window
COLOR 15, 1
PRINT " "
dummy = DarkenFGBG(0) dummy = DarkenFGBG(0)
PCOPY 3, 0 PCOPY 3, 0
@ -14299,15 +14362,14 @@ FUNCTION BinaryFormatCheck% (pathToCheck$, pathSepToCheck$, fileToCheck$)
PCOPY 3, 0 PCOPY 3, 0
SCREEN , , 3, 0 SCREEN , , 3, 0
dummy = DarkenFGBG(1) dummy = DarkenFGBG(1)
COLOR 7, 1: LOCATE idewy - 3, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 2, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 1, 2: PRINT SPACE$(idewx - 2); 'clear status window
LOCATE idewy - 3, 2 LOCATE idewy - 3, 2
COLOR 15, 1 COLOR 15, 1
PRINT "Preparing to convert..." PRINT "Preparing to convert..."
PCOPY 3, 0 PCOPY 3, 0
SHELL _HIDE "qb64 -x source/utilities/QB45BIN.bas -o internal/utilities/QB45BIN" SHELL _HIDE "qb64 -x source/utilities/QB45BIN.bas -o internal/utilities/QB45BIN"
IF _FILEEXISTS(convertUtility$) THEN GOTO ConvertIt IF _FILEEXISTS(convertUtility$) THEN GOTO ConvertIt
LOCATE idewy - 3, 2 COLOR 7, 1: LOCATE idewy - 3, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 2, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 1, 2: PRINT SPACE$(idewx - 2); 'clear status window
COLOR 15, 1
PRINT " "
dummy = DarkenFGBG(0) dummy = DarkenFGBG(0)
PCOPY 3, 0 PCOPY 3, 0
idemessagebox "Binary format", "Error launching conversion utility." idemessagebox "Binary format", "Error launching conversion utility."