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; inherited Create;
FDict := TSynSearchDictionary.Create; FDict := TSynSearchDictionary.Create;
FDict.Add('{$if', 1); FDict.Add('{$if', 1);
FDict.Add('{$ifc', 1);
FDict.Add('{$ifdef', 1); FDict.Add('{$ifdef', 1);
FDict.Add('{$ifndef', 1); FDict.Add('{$ifndef', 1);
FDict.Add('{$ifopt', 1); FDict.Add('{$ifopt', 1);
FDict.Add('{$endif', 3);
FDict.Add('{$else', 2); 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; end;
destructor TSynRefCountedDict.Destroy; destructor TSynRefCountedDict.Destroy;
@ -2069,6 +2078,7 @@ begin
assert(sfaClose in fn.FoldAction, 'sfaOpen in fn.FoldAction'); assert(sfaClose in fn.FoldAction, 'sfaOpen in fn.FoldAction');
NType := idnEndIf; NType := idnEndIf;
end; end;
// 4: // ElseIf
else else
begin begin
assert(false, 'not found ifdef'); assert(false, 'not found ifdef');
@ -2714,7 +2724,7 @@ begin
FOuterLines := FIfDefTree.CreateOpeningList; FOuterLines := FIfDefTree.CreateOpeningList;
MarkupInfo.Clear; MarkupInfo.Clear;
MarkupInfo.Background := clGray; MarkupInfo.Background := clLtGray;
end; end;
destructor TSynEditMarkupIfDef.Destroy; 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 ) ]); 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, LazSynIMM,
{$ENDIF} {$ENDIF}
Classes, SysUtils, Controls, LCLProc, LCLType, Graphics, Menus, math, LazarusIDEStrConsts, Classes, SysUtils, Controls, LCLProc, LCLType, Graphics, Menus, math, LazarusIDEStrConsts,
SynEdit, SynEditMiscClasses, SynGutter, SynGutterBase, SynEditMarks, SynEdit, SynEditMiscClasses, SynGutter, SynGutterBase, SynEditMarks, SynEditTypes,
SynEditTypes, SynGutterLineNumber, SynGutterCodeFolding, SynGutterMarks, SynGutterChanges, SynGutterLineNumber, SynGutterCodeFolding, SynGutterMarks, SynGutterChanges,
SynGutterLineOverview, SynEditMarkup, SynEditMarkupGutterMark, SynEditMarkupSpecialLine, SynGutterLineOverview, SynEditMarkup, SynEditMarkupGutterMark, SynEditMarkupSpecialLine,
SynEditTextBuffer, SynEditFoldedView, SynTextDrawer, SynEditTextBase, LazSynEditText, SynEditTextBuffer, SynEditFoldedView, SynTextDrawer, SynEditTextBase, LazSynEditText,
SynPluginTemplateEdit, SynPluginSyncroEdit, LazSynTextArea, SynEditHighlighter, SynPluginTemplateEdit, SynPluginSyncroEdit, LazSynTextArea, SynEditHighlighter,
SynEditHighlighterFoldBase, SynHighlighterPas, SynEditMarkupHighAll, SynEditKeyCmds; SynEditHighlighterFoldBase, SynHighlighterPas, SynEditMarkupHighAll, SynEditKeyCmds,
SynEditMarkupIfDef;
type type
@ -207,6 +208,9 @@ type
FSyncroEdit: TSynPluginSyncroEdit; FSyncroEdit: TSynPluginSyncroEdit;
FTemplateEdit: TSynPluginTemplateEdit; FTemplateEdit: TSynPluginTemplateEdit;
FMarkupForGutterMark: TSynEditMarkupGutterMark; FMarkupForGutterMark: TSynEditMarkupGutterMark;
{$IFDEF WithSynMarkupIfDef}
FMarkupIfDef: TSynEditMarkupIfDef;
{$ENDIF}
FTopInfoDisplay: TSourceLazSynTopInfoView; FTopInfoDisplay: TSourceLazSynTopInfoView;
FSrcSynCaretChangedLock: boolean; FSrcSynCaretChangedLock: boolean;
FExtraMarkupLine: TSynEditMarkupSpecialLine; FExtraMarkupLine: TSynEditMarkupSpecialLine;
@ -1510,6 +1514,13 @@ begin
inherited SetHighlighter(Value); inherited SetHighlighter(Value);
{$IFDEF WithSynMarkupIfDef}
if Highlighter is TSynPasSyn then
FMarkupIfDef.Highlighter := TSynPasSyn(Highlighter)
else
FMarkupIfDef.Highlighter := nil;
{$ENDIF}
if FUserWordsList = nil then if FUserWordsList = nil then
exit; exit;
if Highlighter <> nil then if Highlighter <> nil then
@ -1526,9 +1537,16 @@ begin
FUserWordsList := TList.Create; FUserWordsList := TList.Create;
FTemplateEdit:=TSynPluginTemplateEdit.Create(Self); FTemplateEdit:=TSynPluginTemplateEdit.Create(Self);
FSyncroEdit := TSynPluginSyncroEdit.Create(Self); FSyncroEdit := TSynPluginSyncroEdit.Create(Self);
FMarkupForGutterMark := TSynEditMarkupGutterMark.Create(Self, FWordBreaker); FMarkupForGutterMark := TSynEditMarkupGutterMark.Create(Self, FWordBreaker);
TSynEditMarkupManager(MarkupMgr).AddMarkUp(FMarkupForGutterMark); TSynEditMarkupManager(MarkupMgr).AddMarkUp(FMarkupForGutterMark);
{$IFDEF WithSynMarkupIfDef}
FMarkupIfDef := TSynEditMarkupIfDef.Create(Self);
FMarkupIfDef.FoldView := TSynEditFoldedView(FoldedTextBuffer);
TSynEditMarkupManager(MarkupMgr).AddMarkUp(FMarkupIfDef);
{$ENDIF}
FPaintArea := TSourceLazSynSurfaceManager.Create(Self, FPaintArea); FPaintArea := TSourceLazSynSurfaceManager.Create(Self, FPaintArea);
GetCaretObj.AddChangeHandler({$IFDEF FPC}@{$ENDIF}SrcSynCaretChanged); GetCaretObj.AddChangeHandler({$IFDEF FPC}@{$ENDIF}SrcSynCaretChanged);
@ -1540,6 +1558,8 @@ begin
FTopInfoMarkup := TSynSelectedColor.Create; FTopInfoMarkup := TSynSelectedColor.Create;
FTopInfoMarkup.Clear; FTopInfoMarkup.Clear;
// Markup for top info hint
FExtraMarkupLine := TSynEditMarkupSpecialLine.Create(Self); FExtraMarkupLine := TSynEditMarkupSpecialLine.Create(Self);
FExtraMarkupLine.OnSpecialLineMarkup := @GetTopInfoMarkupForLine; FExtraMarkupLine.OnSpecialLineMarkup := @GetTopInfoMarkupForLine;
FExtraMarkupMgr := TSynEditMarkupManager.Create(Self); FExtraMarkupMgr := TSynEditMarkupManager.Create(Self);