📄 synunidesignerform.pas
字号:
Symbol := CloseToken.Symbols[MultiTagIndex];
edTo.Text := Symbol;
len := length(Symbol);
if len > 0 then
chToEOL.Checked := Symbol[len] = #0
else
chToEOL.Checked := False;
chEnabledRange.Checked := Enabled;
chCloseOnWord.Checked := CloseOnTerm;
chCloseOnEOL.Checked := CloseOnEol;
chCloseParent.Checked := AllowPreviousClose;
chCaseRange.Checked := CaseSensitive;
edDelimitersRange.Text := SetToStr(Delimiters);
popOpenTagMenu.Items.Items[2].Checked := OpenToken.StartLine = slFirst;
popOpenTagMenu.Items.Items[3].Checked := OpenToken.StartLine = slFirstNonSpace;
popCloseTagMenu.Items.Items[2].Checked := CloseToken.StartLine = slFirst;
popCloseTagMenu.Items.Items[3].Checked := CloseToken.StartLine = slFirstNonSpace;
if OpenToken.StartType = stAny then
if OpenToken.BreakType = btAny then
popOpenTagMenu.Items.Items[5].Checked := True
else
popOpenTagMenu.Items.Items[7].Checked := True
else
if OpenToken.BreakType = btAny then
popOpenTagMenu.Items.Items[6].Checked := True
else
popOpenTagMenu.Items.Items[8].Checked := True;
if CloseToken.StartType = stAny then
if CloseToken.BreakType = btAny then
popCloseTagMenu.Items.Items[5].Checked := True
else
popCloseTagMenu.Items.Items[7].Checked := True
else
if CloseToken.BreakType = btAny then
popCloseTagMenu.Items.Items[6].Checked := True
else
popCloseTagMenu.Items.Items[8].Checked := True;
SetControlAttributes(Node, True);
PageControl.ActivePage := tabRange;
end;
end;
ntRoot: begin
chEnabledRoot.Checked := TSynRange(Node.data).Enabled;
SetControlAttributes(Node, True);
with SynUniSyn.EditorProperties do
begin
{$IFNDEF SYNEDIT11}frActiveLineColor.Color := ActiveLineColor;{$ENDIF}
frSelectForeColor.Color := SelectedForeground;
frSelectBackColor.Color := SelectedBackground;
end;
chCaseRoot.Checked := TSynRange(Node.data).CaseSensitive;
//###edStylesFile.Text := SynUniSyn.SchemeFileName;
edDelimitersRoot.Text := SetToStr(TSynRange(Node.data).Delimiters);
PageControl.ActivePage := tabRoot;
end;
ntKeywords: begin
chEnabledKeyList.Checked := TSynKeyList(Node.Data).Enabled;
Memo.Lines.Assign(TSynKeyList(Node.Data).KeyList);
SetControlAttributes(Node, True);
PageControl.ActivePage := tabKeywords;
end;
ntSet: begin
chEnabledSet.Checked := TSynSet(Node.Data).Enabled;
SetControlAttributes(Node, True);
edSymbSet.Text := SetToStr(TSynSet(Node.Data).CharSet);
udQuantity.Position := TSynSet(Node.Data).Quantity;
PageControl.ActivePage := tabSet;
end;
{$IFDEF CODEFOLDING}
// Modified by Administrator 2007-12-1 上午 01:26:01
ntSkipRegion : begin
SkipRegion := TSkipRegionItem(Node.Data);
SREdit2.Text := SkipRegion.Open;
SREdit3.Text := SkipRegion.Close;
SREdit4.Text := SkipRegion.Escape;
SRComboBox1.ItemIndex := Integer(SkipRegion.RegionType);
PageControl.ActivePage := tabSkipRegion;
end;
ntFoldRoot: begin
SetControlAttributes(Node, True);
PageControl.ActivePage := tabFoldRoot;
end;
ntFoldRegion: begin
FoldRegion := TFoldRegionItem(Node.Data);
with FoldRegion do
begin
case FoldRegionType of
rtChar: rbChar.Checked := True;
rtKeyWord: rbKeyword.Checked := True;
end;
edOpen.Text := Open;
edOpenRegExpr.Text := RegExpOpen;
edClose.Text := Close;
edCloseRegExpr.Text := RegExpClose;
chUseOpenRegExpr.Checked := RegExpUseOpen;
chUseCloseRegExpr.Checked := RegExpUseClose;
chAddKeyword.Checked := AddEnding;
chNoSubFolds.Checked := NoSubFoldRegions;
chWholeWords.Checked := WholeWords;
end;
SetControlAttributes(Node, True);
PageControl.ActivePage := tabFoldRegion;
end;
{$ENDIF}
end;
{$IFDEF SYN_COMPILER_6_UP}
end;
{$ENDIF}
UpdatingControls := False;
end;
//=== Fill Tree with Rules ===================================================
procedure TfmDesigner.FillTree(); //: Fill Tree with Rules
var
Node: TTreeNode;
begin
//Info
Node := Tree.Items.Add(nil, 'Information');
SetNodeData(Node, SynUniSyn.Info, True);
//MainRules
TreeAddRange(nil, SynUniSyn.MainRules);
{$IFDEF CODEFOLDING}
//CodeFolding
CodeFoldingNode := Tree.Items.Add(nil, 'CodeFolding');
SetNodeData(CodeFoldingNode, nil, True);
TreeAddFoldRegions(CodeFoldingNode, SynUniSyn.FoldRegions);
TreeAddSkipRegions(CodeFoldingNode, SynUniSyn.FoldRegions.SkipRegions);
{$ENDIF}
{$IFDEF CUSTOMDATA}
//CustomData
Node := Tree.Items.Add(nil, 'CustomData');
SetNodeData(Node, SynUniSyn.CustomData, True);
{$ENDIF}
end;
procedure TfmDesigner.SetNodeData(ANode: TTreeNode; AObject: TObject; Root: Boolean);
begin
if AObject is TSynInfo then begin
ANode.ImageIndex := 8;
ANode.SelectedIndex := 8;
end else
if AObject is TStringList then begin
ANode.ImageIndex := 9;
ANode.SelectedIndex := 9;
end else
if AObject is TSynRange then begin
if Root then begin
ANode.ImageIndex := 0;
ANode.SelectedIndex := 0;
end
else begin
ANode.ImageIndex := 1;
ANode.SelectedIndex := 1;
end
{###else if Rule is TSynRangeLink then begin
ANode.ImageIndex := 7;
ANode.SelectedIndex := 7;
end}
end else
if AObject is TSynKeyList then begin
ANode.ImageIndex := 2;
ANode.SelectedIndex := 2;
end else
if AObject is TSynSet then begin
ANode.ImageIndex := 3;
ANode.SelectedIndex := 3;
end else
{$IFDEF CODEFOLDING}
if AObject is TSkipRegionItem then begin
ANode.ImageIndex := 5;
ANode.SelectedIndex := 5;
end else
if AObject is TFoldRegionItem then begin
if Root then begin
ANode.ImageIndex := 4;
ANode.SelectedIndex := 4;
end
else begin
ANode.ImageIndex := 5;
ANode.SelectedIndex := 5;
end
end else
if Root then begin
ANode.ImageIndex := 4;
ANode.SelectedIndex := 4;
end
else
{$ENDIF}
raise Exception.Create(ClassName + '.SetNodeData - Unknown rule to set node!');
ANode.Data := AObject;
end;
function TfmDesigner.TreeAddRule(ParentNode: TTreeNode; Rule: TSynRule; AddKind: TAddKind): TTreeNode;
begin
//###if Rule is TSynRangeLink then Result:= TreeAddRangeLink(ParentNode, TSynRangeLink(Rule), AddKind) else
if Rule is TSynRange then Result:= TreeAddRange(ParentNode, TSynRange(Rule), AddKind) else
if Rule is TSynKeyList then Result:= TreeAddKeyList(ParentNode, TSynKeyList(Rule), AddKind) else
if Rule is TSynSet then Result:= TreeAddSet(ParentNode, TSynSet(Rule), AddKind) else
raise Exception.Create(ClassName + '.TreeAddRule - Unknown rule to add!');
end;
{###function TfmDesigner.TreeAddRangeLink(Node: TTreeNode; RangeLink: TSynRangeLink; AddKind: TAddKind): TTreeNode;
begin
Result := Tree.Items.AddChild(Node, RangeLink.Range.Name);
SetNodeData(Result, RangeLink);
end;}
function TfmDesigner.TreeAddRange(Node: TTreeNode; Range: TSynRange; AddKind: TAddKind): TTreeNode;
var
i, ind: Integer;
begin
if AddKind = akReplace then
Result := Node
else
if Node = nil then begin
if (Range.Name = '') or (Range.Name = 'Root') then Range.Name := _Root;
Result := Tree.Items.Add(nil, Range.Name);
SetNodeData(Result, Range, True);
end
else begin
if AddKind = akInsert then begin
ind := Node.Index;
Result := Tree.Items.Insert(Node.Parent.Item[ind], Range.Name)
end else
Result := Tree.Items.AddChild(Node, Range.Name);
SetNodeData(Result, Range);
end;
for i := 0 to Range.KeyListCount-1 do TreeAddKeyList(Result, Range.KeyLists[i]);
for i := 0 to Range.SetCount-1 do TreeAddSet(Result, Range.Sets[i]);
for i := 0 to Range.RangeCount-1 do TreeAddRange(Result, Range.Ranges[i]);
end;
{$IFDEF CODEFOLDING}
function TfmDesigner.TreeAddSkipRegions(ANode: TTreeNode;
ASkipRegions: TSkipRegions): TTreeNode;
var
i : Integer;
Node : TTreeNode;
begin
for i := 0 to ASkipRegions.Count-1 do
begin
Node := TRee.Items.AddChild(ANode, 'SkipRegion');
SetNodeData(Node, ASkipRegions.SkipRegions[i]);
end;
end;
function TfmDesigner.TreeAddFoldRegions(ANode: TTreeNode; AFoldRegions: TFoldRegions; AddKind: TAddKind): TTreeNode;
var
i, j, ind: Integer;
CurFoldRegion: TFoldRegionItem;
begin
for i := 0 to AFoldRegions.Count-1 do
begin
CurFoldRegion := AFoldRegions[i];
if AddKind = akReplace then
Result := ANode
else
if ANode = nil then
begin
Result := Tree.Items.Add(nil, CurFoldRegion.Name);
SetNodeData(Result, CurFoldRegion, True);
end
else
begin
if AddKind = akInsert then
begin
ind := ANode.Index;
Result := Tree.Items.Insert(ANode.Parent.Item[ind], CurFoldRegion.Name)
end else
Result := Tree.Items.AddChild(ANode, CurFoldRegion.Name);
SetNodeData(Result, CurFoldRegion);
end;
TreeAddFoldRegions(Result, CurFoldRegion.SubFoldRegions);
end;
end;
function TfmDesigner.TreeAddFoldRegion(ANode: TTreeNode; AFoldRegion: TFoldRegionItem; AddKind: TAddKind): TTreeNode;
var
i, j, ind: Integer;
begin
if AddKind = akReplace then
Result := ANode
else
if ANode = nil then
begin
Result := Tree.Items.Add(nil, AFoldRegion.Name);
SetNodeData(Result, AFoldRegion, True);
end
else
begin
if AddKind = akInsert then
begin
ind := ANode.Index;
Result := Tree.Items.Insert(ANode.Parent.Item[ind], AFoldRegion.Name)
end else
Result := Tree.Items.AddChild(ANode, AFoldRegion.Name);
SetNodeData(Result, AFoldRegion);
end;
TreeAddFoldRegions(Result, AFoldRegion.SubFoldRegions);
end;
{$ENDIF}
function TfmDesigner.TreeAddKeyList(Node: TTreeNode; Keyword: TSynKeyList; AddKind: TAddKind): TTreeNode;
var
i, ind: Integer;
NeedToInsert: Boolean;
begin
if AddKind = akReplace then
Result := Node
else
if AddKind = akInsert then begin
ind := Node.Index;
Result := Tree.Items.Insert(Node.Parent.Item[ind], Keyword.Name)
end else
if Node.Count = 0 then
Result := Tree.Items.AddChild(Node, Keyword.Name)
else begin
NeedToInsert := False;
for i := 0 to Node.Count-1 do
if (TObject(Node.Item[i].Data) is TSynRange) or (TObject(Node.Item[i].Data) is TSynSet) then begin
NeedToInsert := True; break; end;
if NeedToInsert then Result := Tree.Items.Insert(Node.Item[i], Keyword.Name)
else Result := Tree.Items.AddChild(Node, Keyword.Name);
end;
SetNodeData(Result, Keyword);
end;
function TfmDesigner.TreeAddSet(Node: TTreeNode; SymbSet: TSynSet; AddKind: TAddKind): TTreeNode;
var
i, ind: Integer;
NeedToInsert: Boolean;
begin
if AddKind = akReplace then
Result := Node
else
if AddKind = akInsert then begin
ind := Node.Index;
Result := Tree.Items.Insert(Node.Parent.Item[ind], SymbSet.Name)
end else
if Node.Count = 0 then
Result := Tree.Items.AddChild(Node, SymbSet.Name)
else begin
NeedToInsert := False;
for i := 0 to Node.Count-1 do
if TObject(Node.Item[i].Data) is TSynRange then begin
NeedToInsert := True; break; end;
if NeedToInsert then Result := Tree.Items.Insert(Node.Item[i], SymbSet.Name)
else Result := Tree.Items.AddChild(Node, SymbSet.Name);
end;
SetNodeData(Result, SymbSet);
end;
//=== Adding RangeLink =======================================================
procedure TfmDesigner.DoAddRangeLinkToRoot(Sender:TObject); //: Click on button
begin
//###AddingRangeLink(Tree.Items[0]);
Modified();
end;
procedure TfmDesigner.DoAddRangeLink(Sender: TObject); //: Click on button
begin
//###AddingRangeLink(Tree.Selected);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -