SynEdit: Starting on Ifdef Markup

git-svn-id: trunk@41050 -
This commit is contained in:
martin 2013-05-06 12:25:21 +00:00
parent d1c3754024
commit 9d378cba7a
3 changed files with 43 additions and 5 deletions

View File

@ -529,11 +529,20 @@ begin
inherited Create;
FDict := TSynSearchDictionary.Create;
FDict.Add('{$if', 1);
FDict.Add('{$ifc', 1);
FDict.Add('{$ifdef', 1);
FDict.Add('{$ifndef', 1);
FDict.Add('{$ifopt', 1);
FDict.Add('{$endif', 3);
FDict.Add('{$else', 2);
FDict.Add('{$elsec', 2);
//FDict.Add('{$elseif', 4);
//FDict.Add('{$elifc', 4);
FDict.Add('{$endif', 3);
FDict.Add('{$ifend', 3);
FDict.Add('{$endc', 3);
end;
destructor TSynRefCountedDict.Destroy;
@ -2069,6 +2078,7 @@ begin
assert(sfaClose in fn.FoldAction, 'sfaOpen in fn.FoldAction');
NType := idnEndIf;
end;
// 4: // ElseIf
else
begin
assert(false, 'not found ifdef');
@ -2714,7 +2724,7 @@ begin
FOuterLines := FIfDefTree.CreateOpeningList;
MarkupInfo.Clear;
MarkupInfo.Background := clGray;
MarkupInfo.Background := clLtGray;
end;
destructor TSynEditMarkupIfDef.Destroy;

View File

@ -1387,6 +1387,14 @@ DebugLn('--------');FTestTree.DebugPrint(true);
CheckNodes(n, 4, [ ExpN( 1,11, idnIfdef, idnDisabled), ExpN(13,21, idnEndIf, idnDisabled ) ]);
FNodeStateResponses.Clear;
FNodeStateRequests.Clear;
FTestTree.SetNodeState(2,1, idnNotInCode);
DebugLn('--------');FTestTree.DebugPrint(true);
AssertEquals(n + 'Got NO reqest for 2/1' , '', FNodeStateRequests.Values['2/1']);
AssertEquals(n + 'Got NO reqest for 4/1' , '', FNodeStateRequests.Values['4/1']);
CheckNodes(n, 2, [ ExpN( 1,11, idnIfdef, idnNotInCode), ExpN(13,21, idnEndIf ) ]);
CheckNodes(n, 4, [ ExpN( 1,11, idnIfdef, idnDisabled), ExpN(13,21, idnEndIf, idnDisabled ) ]);

View File

@ -47,12 +47,13 @@ uses
LazSynIMM,
{$ENDIF}
Classes, SysUtils, Controls, LCLProc, LCLType, Graphics, Menus, math, LazarusIDEStrConsts,
SynEdit, SynEditMiscClasses, SynGutter, SynGutterBase, SynEditMarks,
SynEditTypes, SynGutterLineNumber, SynGutterCodeFolding, SynGutterMarks, SynGutterChanges,
SynEdit, SynEditMiscClasses, SynGutter, SynGutterBase, SynEditMarks, SynEditTypes,
SynGutterLineNumber, SynGutterCodeFolding, SynGutterMarks, SynGutterChanges,
SynGutterLineOverview, SynEditMarkup, SynEditMarkupGutterMark, SynEditMarkupSpecialLine,
SynEditTextBuffer, SynEditFoldedView, SynTextDrawer, SynEditTextBase, LazSynEditText,
SynPluginTemplateEdit, SynPluginSyncroEdit, LazSynTextArea, SynEditHighlighter,
SynEditHighlighterFoldBase, SynHighlighterPas, SynEditMarkupHighAll, SynEditKeyCmds;
SynEditHighlighterFoldBase, SynHighlighterPas, SynEditMarkupHighAll, SynEditKeyCmds,
SynEditMarkupIfDef;
type
@ -207,6 +208,9 @@ type
FSyncroEdit: TSynPluginSyncroEdit;
FTemplateEdit: TSynPluginTemplateEdit;
FMarkupForGutterMark: TSynEditMarkupGutterMark;
{$IFDEF WithSynMarkupIfDef}
FMarkupIfDef: TSynEditMarkupIfDef;
{$ENDIF}
FTopInfoDisplay: TSourceLazSynTopInfoView;
FSrcSynCaretChangedLock: boolean;
FExtraMarkupLine: TSynEditMarkupSpecialLine;
@ -1510,6 +1514,13 @@ begin
inherited SetHighlighter(Value);
{$IFDEF WithSynMarkupIfDef}
if Highlighter is TSynPasSyn then
FMarkupIfDef.Highlighter := TSynPasSyn(Highlighter)
else
FMarkupIfDef.Highlighter := nil;
{$ENDIF}
if FUserWordsList = nil then
exit;
if Highlighter <> nil then
@ -1526,9 +1537,16 @@ begin
FUserWordsList := TList.Create;
FTemplateEdit:=TSynPluginTemplateEdit.Create(Self);
FSyncroEdit := TSynPluginSyncroEdit.Create(Self);
FMarkupForGutterMark := TSynEditMarkupGutterMark.Create(Self, FWordBreaker);
TSynEditMarkupManager(MarkupMgr).AddMarkUp(FMarkupForGutterMark);
{$IFDEF WithSynMarkupIfDef}
FMarkupIfDef := TSynEditMarkupIfDef.Create(Self);
FMarkupIfDef.FoldView := TSynEditFoldedView(FoldedTextBuffer);
TSynEditMarkupManager(MarkupMgr).AddMarkUp(FMarkupIfDef);
{$ENDIF}
FPaintArea := TSourceLazSynSurfaceManager.Create(Self, FPaintArea);
GetCaretObj.AddChangeHandler({$IFDEF FPC}@{$ENDIF}SrcSynCaretChanged);
@ -1540,6 +1558,8 @@ begin
FTopInfoMarkup := TSynSelectedColor.Create;
FTopInfoMarkup.Clear;
// Markup for top info hint
FExtraMarkupLine := TSynEditMarkupSpecialLine.Create(Self);
FExtraMarkupLine.OnSpecialLineMarkup := @GetTopInfoMarkupForLine;
FExtraMarkupMgr := TSynEditMarkupManager.Create(Self);