ATSynEdit EControl adapter

From Lazarus wiki
Revision as of 23:05, 11 September 2015 by Alextp (talk | contribs) (→‎Syntax tree)
Jump to navigationJump to search

Intro

ATSynEdit has adapter for lexers from SynWrite editor. It's EControl lexer engine. Use these:

  • units from https://github.com/Alexey-T/EControl
  • unit from ATSynEdit: ATSynEdit_Adapter_EControl which contains class TATAdapterEControl. You must create object of this class and assign this object to editor property AdapterHilite.

For ex, if you have editor object:

  //form's OnCreate
  Adapter:= TATAdapterEControl.Create(Self);
  Edit1.AdapterHilite:= Adapter;

For ex, if you have 2 editor objects with the same text-source (see help topic ATSynEdit):

  Adapter:= TATAdapterEControl.Create(Self);
  Adapter.AddEditor(Ed1);
  Adapter.AddEditor(Ed2);
  Ed1.AdapterHilite:= Adapter;
  Ed2.AdapterHilite:= Adapter;

Properties

  • Lexer: TecSyntAnalyzer. You must set this prop from SyntaxManager object. SyntaxManager is a collection of lexers, which is loaded from .lxl file. After you load SyntaxManager, get its any item and assign it to Lexer prop. Example exists in demo of ATSynEdit.
  • DynamicHiliteEnabled: boolean. This enables dynamic highlight, ie highlight of tokens depending on caret position. If enabled, adapter reads editor's caret-pos-changed event and recalculates hiliting if needed. Some lexers use this feature: HTML hilites tags with green if caret is inside tag; Pascal hilites "begin"/"end" with green if caret is inside block; rare C-like lexers hilite brackets.
  • OnParseBegin, OnParseDone: these events called by adapter on analyzing start and after analyzing finish. If big file parsed, OnParseDone will fire after few seconds, during which user may edit/scroll file.

Syntax tree

Support for syntax tree is lite in SynWrite. Many lexers support tree, e.g. most C-based, Pascal, HTML, CSS, Python. You need to add TTreeView to your form and use it in this API.

    property TreeBusy: boolean

It is true during filling of tree by TreeFill.

    procedure TreeFill(ATree: TTreeView);

It fills tree with nodes from adapter. Call it only after parsing is done. On parsing start, better clear the tree.

    procedure TreeShowItemForCaret(Tree: TTreeView; P: TPoint);

This focuses tree node, for given caret position. Only if position has a node.

    function TreeGetPositionOfRange(R: TecTextRange): TPoint;
    function TreeGetRangeOfPosition(P: TPoint): TecTextRange;