⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synunidesignerform.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
📖 第 1 页 / 共 5 页
字号:

        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 + -