mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 12:29:24 +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);
|
xtkXorAssign);
|
||||||
|
|
||||||
TRangeState = (rsUnknown, rsAnsiC, rsAnsiCAsm, rsAnsiCAsmBlock, rsAsm,
|
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;
|
TProcTableProc = procedure of object;
|
||||||
|
|
||||||
@ -1334,7 +1354,25 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynCppSyn.StringProc;
|
procedure TSynCppSyn.StringProc;
|
||||||
|
Var
|
||||||
begin
|
begin
|
||||||
|
case FLine[Run] of
|
||||||
|
#0:
|
||||||
|
begin
|
||||||
|
NullProc;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
#10:
|
||||||
|
begin
|
||||||
|
LFProc;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
#13:
|
||||||
|
begin
|
||||||
|
CRProc;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
fTokenID := tkString;
|
fTokenID := tkString;
|
||||||
repeat
|
repeat
|
||||||
if fLine[Run] = '\' then begin
|
if fLine[Run] = '\' then begin
|
||||||
@ -1343,8 +1381,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
inc(Run);
|
inc(Run);
|
||||||
until fLine[Run] in [#0, #10, #13, #34];
|
until fLine[Run] in [#0, #10, #13, #34];
|
||||||
if FLine[Run] = #34 then
|
if FLine[Run] = #34 then begin
|
||||||
inc(Run);
|
inc(Run);
|
||||||
|
fRange := SynCppStringRangeToRange[fRange];
|
||||||
|
end else begin
|
||||||
|
// string continues in next line
|
||||||
|
fRange := SynCppRangeToStringRange[fRange];
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynCppSyn.TildeProc;
|
procedure TSynCppSyn.TildeProc;
|
||||||
@ -1386,9 +1429,12 @@ begin
|
|||||||
fAsmStart := False;
|
fAsmStart := False;
|
||||||
fTokenPos := Run;
|
fTokenPos := Run;
|
||||||
case fRange of
|
case fRange of
|
||||||
rsAnsiC, rsAnsiCAsm,
|
rsAnsiC, rsAnsiCAsm, rsAnsiCAsmBlock, rsDirectiveComment:
|
||||||
rsAnsiCAsmBlock, rsDirectiveComment: AnsiCProc;
|
AnsiCProc;
|
||||||
rsDirective: DirectiveProc;
|
rsAsmBlockString,rsAsmString,rsDirectiveString,rsString:
|
||||||
|
StringProc;
|
||||||
|
rsDirective:
|
||||||
|
DirectiveProc;
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
fRange := rsUnknown;
|
fRange := rsUnknown;
|
||||||
|
Loading…
Reference in New Issue
Block a user