mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 17:16:01 +02:00
SynEdit C++ Highlighter: Add multi line strings. Issue #13308 Based on a patch by equinox
git-svn-id: trunk@19004 -
This commit is contained in:
parent
36cd39a33d
commit
3f77b5575f
@ -76,7 +76,27 @@ type
|
||||
xtkXorAssign);
|
||||
|
||||
TRangeState = (rsUnknown, rsAnsiC, rsAnsiCAsm, rsAnsiCAsmBlock, rsAsm,
|
||||
rsAsmBlock, rsDirective, rsDirectiveComment, rsString34, rsString39);
|
||||
rsAsmBlock, rsDirective, rsDirectiveComment, {rsString34, rsString39,}
|
||||
rsAsmBlockString, rsAsmString, rsDirectiveString, rsString
|
||||
);
|
||||
|
||||
const
|
||||
// map the range into a stringtype range (comments are never mapped into string)
|
||||
// keep the range, if it already is a string-range
|
||||
SynCppRangeToStringRange: Array [TRangeState] of TRangeState
|
||||
= (rsString, rsString, rsString, rsString, rsAsmString,
|
||||
rsAsmBlockString, rsDirectiveString, rsString,
|
||||
rsAsmBlockString, rsAsmString, rsDirectiveString, rsString
|
||||
);
|
||||
// map the string-range back into the correct range
|
||||
// non string ranges are kept as they were
|
||||
SynCppStringRangeToRange: Array [TRangeState] of TRangeState
|
||||
= (rsUnknown, rsAnsiC, rsAnsiCAsm, rsAnsiCAsmBlock, rsAsm,
|
||||
rsAsmBlock, rsDirective, rsDirectiveComment,
|
||||
rsAsmBlock, rsAsm, rsDirective, rsUnknown
|
||||
);
|
||||
|
||||
type
|
||||
|
||||
TProcTableProc = procedure of object;
|
||||
|
||||
@ -1334,7 +1354,25 @@ begin
|
||||
end;
|
||||
|
||||
procedure TSynCppSyn.StringProc;
|
||||
Var
|
||||
begin
|
||||
case FLine[Run] of
|
||||
#0:
|
||||
begin
|
||||
NullProc;
|
||||
exit;
|
||||
end;
|
||||
#10:
|
||||
begin
|
||||
LFProc;
|
||||
exit;
|
||||
end;
|
||||
#13:
|
||||
begin
|
||||
CRProc;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
fTokenID := tkString;
|
||||
repeat
|
||||
if fLine[Run] = '\' then begin
|
||||
@ -1343,8 +1381,13 @@ begin
|
||||
end;
|
||||
inc(Run);
|
||||
until fLine[Run] in [#0, #10, #13, #34];
|
||||
if FLine[Run] = #34 then
|
||||
if FLine[Run] = #34 then begin
|
||||
inc(Run);
|
||||
fRange := SynCppStringRangeToRange[fRange];
|
||||
end else begin
|
||||
// string continues in next line
|
||||
fRange := SynCppRangeToStringRange[fRange];
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSynCppSyn.TildeProc;
|
||||
@ -1386,9 +1429,12 @@ begin
|
||||
fAsmStart := False;
|
||||
fTokenPos := Run;
|
||||
case fRange of
|
||||
rsAnsiC, rsAnsiCAsm,
|
||||
rsAnsiCAsmBlock, rsDirectiveComment: AnsiCProc;
|
||||
rsDirective: DirectiveProc;
|
||||
rsAnsiC, rsAnsiCAsm, rsAnsiCAsmBlock, rsDirectiveComment:
|
||||
AnsiCProc;
|
||||
rsAsmBlockString,rsAsmString,rsDirectiveString,rsString:
|
||||
StringProc;
|
||||
rsDirective:
|
||||
DirectiveProc;
|
||||
else
|
||||
begin
|
||||
fRange := rsUnknown;
|
||||
|
Loading…
Reference in New Issue
Block a user