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

📄 synuniformatnativexml20.pas

📁 用delphi写的delphi源代码 用delphi写的delphi源代码 用delphi写的delphi源代码 用delphi写的delphi源代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{
@abstract(Provides Format 2.0 highlighters import and export)
@authors(Vitalik [2vitalik@gmail.com], Quadr0 [quadr02005@gmail.com])
@created(2005)
@lastmod(2006-07-23)
}

{$IFNDEF QSynUniFormatNativeXml20}
unit SynUniFormatNativeXml20;
{$ENDIF}

{$I SynUniHighlighter.inc}

interface

uses
{$IFDEF SYN_CLX}
  QClasses,
  QGraphics,
  QSynUniFormat,
  QSynUniClasses,
  QSynUniRules,
  QSynUniHighlighter
{$ELSE}
  Classes,
  Graphics,
{$IFDEF SYN_COMPILER_6_UP}
  Variants,
{$ENDIF}
  SynUniFormat,
  SynUniFormatNativeXml,
  SynUniClasses,
  SynUniRules,
  SynUniHighlighter,
{$IFDEF CODEFOLDING}
  SynEditCodeFolding,
{$ENDIF}
{$ENDIF}
  SysUtils,
  SimpleXML; // DW

type
  TSynUniFormatNativeXml20 = class(TSynUniFormatNativeXml)
    class function ImportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean; override;
    class function ExportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean; override;
    class function ImportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean; override;
    class function ExportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean; override;
    class function ImportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean; override;
    class function ExportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean; override;
    class function ImportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean; override;
    class function ExportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean; override;
    class function ImportToken(AToken: TSynMultiToken; ANode: IXMLNode): Boolean; override;
    class function ExportToken(AToken: TSynMultiToken; ANode: IXMLNode): Boolean; override;
    class function ImportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean; override;
    class function ExportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean; override;
    class function ImportSet(ASet: TSynSet; ANode: IXMLNode): Boolean; override;
    class function ExportSet(ASet: TSynSet; ANode: IXMLNode): Boolean; override;
    class function ImportRange(ARange: TSynRange; ANode: IXMLNode): Boolean; override;
    class function ExportRange(ARange: TSynRange; ANode: IXMLNode): Boolean; override;
    {$IFDEF CODEFOLDING}
    class function ImportCodeFolding(AFoldRegions: TFoldRegions; ANode: IXMLNode): Boolean;
    class function ExportCodeFolding(AFoldRegions: TFoldRegions; ANode: IXMLNode): Boolean;
    {$ENDIF}
    {$IFDEF CUSTOMDATA}
    class function ImportCustomData(ACustomData: TStringList; ANode: IXMLNode): Boolean;
    class function ExportCustomData(ACustomData: TStringList; ANode: IXMLNode): Boolean;
    {$ENDIF}
    class function ImportHighlighter(SynUniSyn: TSynUniSyn; ANode: IXMLNode): Boolean; override;
    class function ExportHighlighter(SynUniSyn: TSynUniSyn; ANode: IXMLNode): Boolean; override;
    class function ImportFromStream(AObject: TObject; AStream: TStream): Boolean; override;
    class function ExportToStream(AObject: TObject; AStream: TStream): Boolean; override;
    class function ImportFromFile(AObject: TObject; AFileName: string): Boolean; override;
    class function ExportToFile(AObject: TObject; AFileName: string): Boolean; override;
  end;

implementation

{$IFDEF CODEFOLDING}
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ImportCodeFolding(AFoldRegions: TFoldRegions; ANode: IXMLNode): Boolean;
var
  i: integer;
  NewRegion: TFoldRegionItem;
//  FoldRegionList: TFoldRegions;
begin
{  if ParentRegion = nil then
    FoldRegionList := FoldRegions
  else
    FoldRegionList := ParentRegion.SubFoldRegions;}
  for i := 0 to ANode.ChildNodes.Count - 1 do
  begin
    with ANode.ChildNodes.Item[i] do begin
      // Modified by Administrator 2007-12-1 上午 12:09:48
      if LowerCase(NodeName) = 'skipregion' then
      begin
        AFoldRegions.SkipRegions.Add(
          EnsureChild('Open').GetAttr('Symbol'),
          EnsureChild('Close').GetAttr('Symbol'),
          EnsureChild('Escape').GetAttr('Symbol'),
          TSkipRegionItemType(EnsureChild('RegionType').GetIntAttr('Type')));
        Continue;
      end;
      NewRegion := AFoldRegions.Add(
        TFoldRegionType(GetIntAttr('Type')),
        EnsureChild('Properties').GetBoolAttr('AddEnding'),
        EnsureChild('Properties').GetBoolAttr('AllowNoSubs'),
        EnsureChild('Properties').GetBoolAttr('WholeWords'),
        PChar(EnsureChild('OpenToken').GetAttr('Symbol')),   //PChar
        PChar(EnsureChild('CloseToken').GetAttr('Symbol'))); //PChar
      with NewRegion do begin
        Name           := GetAttr('Name');
        RegExpOpen     := PChar(EnsureChild('OpenToken').GetAttr('RegExpr'));  //PChar
        RegExpClose    := PChar(EnsureChild('CloseToken').GetAttr('RegExpr')); //PChar
        RegExpUseOpen  := EnsureChild('OpenToken').GetBoolAttr('UseRegExpr');
        RegExpUseClose := EnsureChild('CloseToken').GetBoolAttr('UseRegExpr');
      end;
      ImportCodeFolding(NewRegion.SubFoldRegions, EnsureChild('SubRegions'));
    end
  end
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ExportCodeFolding(AFoldRegions: TFoldRegions; ANode: IXMLNode): Boolean;
var
  i: integer;
  NewNode: IXMLNode;
//  FoldRegionList: TFoldRegions;
begin
{  if ARegion = nil then
    FoldRegionList := FoldRegions
  else
    FoldRegionList := ARegion.SubFoldRegions;}

  // Modified by Administrator 2007-12-1 上午 12:10:57
  for i := 0 to AFoldRegions.SkipRegions.Count - 1 do
  begin
    NewNode := ANode.AppendElement('SkipRegion');
    with NewNode, AFoldRegions.SkipRegions.SkipRegions[i] do
    begin
      if StrLen(Open) > 0 then
        AppendElement('Open').SetVarAttr('Symbol', string(open));
      if StrLen(Close) > 0 then
        AppendElement('Close').SetVarAttr('Symbol', string(Close));
      if StrLen(Escape) > 0 then
        AppendElement('Escape').SetVarAttr('Symbol', string(Escape));
      AppendElement('RegionType').SetVarAttr('Type', Integer(RegionType));
    end;
  end;

  for i := 0 to AFoldRegions.Count - 1 do
  begin
    NewNode := ANode.AppendElement('FoldRegion');
    with NewNode, AFoldRegions.Items[i] do
    begin
      SetVarAttr('Name',Name);
      SetVarAttr('Type',Ord(FoldRegionType));
      with AppendElement('OpenToken') do
      begin
        if StrLen(Open) > 0 then
          SetVarAttr('Symbol', string(Open));
        if StrLen(RegExpOpen) > 0 then
          SetVarAttr('RegExpr', string(RegExpOpen));
        if RegExpUseOpen then
          SetVarAttr('UseRegExpr', BoolToStr(RegExpUseOpen, True));
      end;
      with AppendElement('CloseToken') do
      begin
        if StrLen(Close) > 0 then
          SetVarAttr('Symbol', string(Close));
        if StrLen(RegExpClose) > 0 then
          SetVarAttr('RegExpr', string(RegExpClose));
        if RegExpUseClose then
          SetVarAttr('UseRegExpr', BoolToStr(RegExpUseClose, True));
      end;
      with AppendElement('Properties') do
      begin
        if AddEnding then
          SetVarAttr('AddEnding', BoolToStr(AddEnding, True));
        if NoSubFoldRegions then
          SetVarAttr('AllowNoSubs', BoolToStr(NoSubFoldRegions, True));
        if WholeWords then
          SetVarAttr('WholeWords', BoolToStr(WholeWords, True));
      end;
      ExportCodeFolding(AFoldRegions.Items[i].SubFoldRegions, AppendElement('SubRegions'));
    end;
  end;
end;
{$ENDIF}

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ImportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean;
begin
  with ANode do
  begin
    with AInfo.General, EnsureChild('General') do begin
      Name       := VarToStr(GetVarAttr('Name',''));
      Extensions := VarToStr(GetVarAttr('Extensions',''));
      Version    := VarToInt(GetVarAttr('Version',''));
      Revision   := VarToInt(GetVarAttr('Revision',''));
      Sample     := VarToStr(GetVarAttr('Sample',''));
      History    := VarToStr(GetVarAttr('History',''));
    end;
    with AInfo.Author, EnsureChild('Author') do begin
      Name      := VarToStr(GetVarAttr('Name',''));
      Email     := VarToStr(GetVarAttr('Mail','')); //TODO: 襄疱桁屙钼囹?钺疣蝽??'Email', 犭桧...
      Web       := VarToStr(GetVarAttr('Web',''));
      Copyright := VarToStr(GetVarAttr('Copyright',''));
      Company   := VarToStr(GetVarAttr('Company',''));
      Remark    := VarToStr(GetVarAttr('Remark',''));
    end;
  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ExportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean;
begin
  with AInfo, ANode do
  begin
    with General, AppendElement('General') do
    begin
      SetVarAttr('Name', Name);
      SetVarAttr('Extensions', Extensions);
      SetVarAttr('Version', Version);
      SetVarAttr('Revision', Revision);
      SetVarAttr('Sample', Sample);
      SetVarAttr('History', History);
    end;
    with Author, AppendElement('Author') do
    begin
      SetVarAttr('Name', Name);
      SetVarAttr('Mail', Email); //TODO: 襄疱桁屙钼囹?钺疣蝽??'Email', 犭桧...
      SetVarAttr('Web', Web);
      SetVarAttr('Copyright', Copyright);
      SetVarAttr('Company', Company);
      SetVarAttr('Remark', Remark);
    end;
  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ImportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean;
begin
  with AEditorProperties, ANode do
  begin
    ActiveLineColor := VarToColor(GetVarAttr('ActiveLineColor', ''), clNone);
    SelectedForeground := VarToColor(GetVarAttr('SelectedForeground', ''), clHighlightText);
    SelectedBackground := VarToColor(GetVarAttr('SelectedBackground', ''), clHighlight);
  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ExportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean;
begin
  with AEditorProperties, ANode do
  begin
    if ActiveLineColor <> clNone then
      SetVarAttr('ActiveLineColor', ColorToString(ActiveLineColor));
    if SelectedForeground <> clHighlightText then
      SetVarAttr('SelectedForeground', ColorToString(SelectedForeground));
    if SelectedBackground <> clHighlight then
      SetVarAttr('SelectedBackground', ColorToString(SelectedBackground));
  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ImportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean;
begin
  with Attributes, ANode do
  begin
    ParentForeground := False; // 腕骓?腓?..
    ParentBackground := False;
    Foreground := VarToColor(GetVarAttr('Foreground', ''), clWindowText);
    Background := VarToColor(GetVarAttr('Background', ''), clWindow);
    ParentForeground := VarToBool(GetVarAttr('ParentForeground', ''));
    ParentBackground := VarToBool(GetVarAttr('ParentBackground', ''));
    Style := StrToFontStyle(VarToStr(GetVarAttr('Style', '')));
  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ExportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean;
begin
  with Attributes, ANode do begin
    SetVarAttr('Foreground', ColorToString(Foreground));
    SetVarAttr('Background', ColorToString(Background));
    if ParentForeground then
      SetVarAttr('ParentForeground', BoolToStr(ParentForeground, True));
    if ParentBackground then
      SetVarAttr('ParentBackground', BoolToStr(ParentBackground, True));
    if Style <> [] then

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -