diff options
-rw-r--r-- | src/LexOthers.cxx | 49 |
1 files changed, 13 insertions, 36 deletions
diff --git a/src/LexOthers.cxx b/src/LexOthers.cxx index 6d79bf26a..d3b58a635 100644 --- a/src/LexOthers.cxx +++ b/src/LexOthers.cxx @@ -58,7 +58,6 @@ static void ColouriseBatchLine( Accessor &styler) { unsigned int offset = 0; // Line Buffer Offset - unsigned int enVarEnd; // Environment Variable End point unsigned int cmdLoc; // External Command / Program Location char wordBuffer[81]; // Word Buffer - large to catch long paths unsigned int wbl; // Word Buffer Length @@ -111,39 +110,6 @@ static void ColouriseBatchLine( if (lineBuffer[offset] == '@') { styler.ColourTo(startLine + offset, SCE_BAT_HIDE); offset++; - // Check for Argument (%n) or Environment Variable (%x...%) - } else if (lineBuffer[offset] == '%') { - enVarEnd = offset + 1; - // Search end of word for second % (can be a long path) - while ((enVarEnd < lengthLine) && - (!isspacechar(lineBuffer[enVarEnd])) && - (lineBuffer[enVarEnd] != '%') && - (!IsBOperator(lineBuffer[enVarEnd])) && - (!IsBSeparator(lineBuffer[enVarEnd]))) { - enVarEnd++; - } - // Check for Argument (%n) - if ((Is0To9(lineBuffer[offset + 1])) && - (lineBuffer[enVarEnd] != '%')) { - // Colorize Argument - styler.ColourTo(startLine + offset + 1, SCE_BAT_IDENTIFIER); - offset += 2; - // Check for External Command / Program - if (offset < lengthLine && !isspacechar(lineBuffer[offset])) { - cmdLoc = offset; - } - // Check for Environment Variable (%x...%) - } else if ((lineBuffer[offset + 1] != '%') && - (lineBuffer[enVarEnd] == '%')) { - offset = enVarEnd; - // Colorize Environment Variable - styler.ColourTo(startLine + offset, SCE_BAT_IDENTIFIER); - offset++; - // Check for External Command / Program - if (offset < lengthLine && !isspacechar(lineBuffer[offset])) { - cmdLoc = offset; - } - } } // Skip next spaces while ((offset < lengthLine) && (isspacechar(lineBuffer[offset]))) { @@ -350,8 +316,8 @@ static void ColouriseBatchLine( (!IsBSeparator(wordBuffer[wbo]))) { wbo++; } - // Check for Argument (%n) - if ((Is0To9(wordBuffer[1])) && + // Check for Argument (%n) or (%*) + if (((Is0To9(wordBuffer[1])) || (wordBuffer[1] == '*')) && (wordBuffer[wbo] != '%')) { // Check for External Command / Program if (cmdLoc == offset - wbl) { @@ -361,6 +327,17 @@ static void ColouriseBatchLine( styler.ColourTo(startLine + offset - 1 - (wbl - 2), SCE_BAT_IDENTIFIER); // Reset Offset to re-process remainder of word offset -= (wbl - 2); + // Check for Expanded Argument (%~...) / Variable (%%~...) + } else if (((wbl > 1) && (wordBuffer[1] == '~')) || + ((wbl > 2) && (wordBuffer[1] == '%') && (wordBuffer[2] == '~'))) { + // Check for External Command / Program + if (cmdLoc == offset - wbl) { + cmdLoc = offset - (wbl - wbo); + } + // Colorize Expanded Argument / Variable + styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_BAT_IDENTIFIER); + // Reset Offset to re-process remainder of word + offset -= (wbl - wbo); // Check for Environment Variable (%x...%) } else if ((wordBuffer[1] != '%') && (wordBuffer[wbo] == '%')) { |