From 7a2c4ba7b024c8df8cdf75e6c15f82c6cd830dd2 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Mon, 18 Feb 2019 06:30:46 +0100 Subject: [PATCH] fix #450 - Token strings cause wrong auto indentation --- src/u_dlang.pas | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/u_dlang.pas b/src/u_dlang.pas index 910b6b93..69c2e653 100644 --- a/src/u_dlang.pas +++ b/src/u_dlang.pas @@ -311,11 +311,18 @@ var decSet: boolean; expSet: boolean; noComment: boolean; + tokenStringBraceBalance: integer = 0; + inTokenString: boolean = false; procedure addToken(aTk: TLexTokenKind); var ptk: PLexToken; begin + if (inTokenString) then + begin + identifier := ''; + exit; + end; if (aTk = ltkComment) and (noComment) then exit; ptk := new(PLexToken); @@ -565,16 +572,21 @@ begin end; // token string - if (reader.head^ = 'q') then + if reader.head^ = 'q' then begin if (reader.Next^ = '{') then begin - reader.saveBeginning; + if not inTokenString then + begin + inTokenString:=true; + tokenStringBraceBalance := 1; + reader.saveBeginning; + identifier := ''; + end + else tokenStringBraceBalance += 1; reader.Next; if isOutOfBound then exit; - identifier := 'q{'; - addToken(ltkSymbol); if callBackDoStop then exit; continue; @@ -843,9 +855,22 @@ begin begin reader.saveBeginning; identifier += reader.head^; - if (reader.head^ = '}') and ((reader.head + 1)^ in stringPostfixes) and not - isIdentifier((reader.head + 2)^) then + if inTokenString then + begin + tokenStringBraceBalance -= Byte(reader.head^ = '}'); + tokenStringBraceBalance += Byte(reader.head^ = '{'); + if tokenStringBraceBalance = 0 then + begin + if (reader.head^ = '}') and ((reader.head + 1)^ in stringPostfixes) and not + isIdentifier((reader.head + 2)^) then + reader.Next; + inTokenString:=false; + identifier := '()'; + addToken(ltkString); reader.Next; + continue; + end; + end; reader.Next; addToken(ltkSymbol); if callBackDoStop then