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

📄 synuniformatnativexml15.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
字号:
{
@abstract(Provides Old Format 1.5 highlighters import)
@authors(Vitalik [just_vitalik@yahoo.com])
@created(2005)
@lastmod(2006-07-23)
}

{$IFNDEF QSynUniFormatNativeXml15}
unit SynUniFormatNativeXml15;
{$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,
{$ENDIF}
  SysUtils,
  Dialogs,
  {XMLIntf; } // DW
  SimpleXML;
  
type
  TSynUniFormatNativeXml15 = 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; Kind: string = ''): Boolean;
    class function ExportToken(AToken: TSynMultiToken; ANode: IXMLNode; Kind: string = ''): Boolean;
    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;
    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

{$IFNDEF SYN_COMPILER_7_UP}
function StrToBoolDef(const S: string; const Default: Boolean): Boolean;
begin
  if (S = 'True') or (S = '1') or (S = '-1') then
    Result := True
  else if (S = 'False') or (S = '0') then
    Result := False
  else
    Result := Default;
end;
{$ENDIF}

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ImportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean;
var
  i: integer;
begin
  with ANode, AInfo do
  begin
    with EnsureChild('General'), General do
    begin
      Name       := EnsureChild('Name').Text;
      Extensions := EnsureChild('FileTypeName').Text;
                    EnsureChild('Layout').Text;
    end;
    with EnsureChild('Author'), Author do
    begin
      Name      := EnsureChild('Name').Text;
      Email     := EnsureChild('Email').Text;
      Web       := EnsureChild('Web').Text;
      Copyright := EnsureChild('Copyright').Text;
      Company   := EnsureChild('Company').Text;
      Remark    := EnsureChild('Remark').Text;
    end;
    with EnsureChild('Version'), General do
    begin
      Version  := StrToInt(EnsureChild('Version').Text);
      Revision := StrToInt(EnsureChild('Revision').Text);
                  EnsureChild('Date').Text;
                  EnsureChild('Type').Text;
    end;
    with EnsureChild('Sample'), General do
      for i := 0 to ChildNodes.Count-1 do
        Sample := Sample + ChildNodes[i].Text + #13#10;
    with EnsureChild('History'), General do
      for i := 0 to ChildNodes.Count-1 do
        History := History + ChildNodes[i].Text + #13#10;
  end;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ExportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean;
var
  i: Integer;
  Buffer: TStringList;
  Node: IXMLNode;
begin
  with AInfo, ANode do
  begin
    with General, AppendElement('General') do
    begin
      AppendElement('Name').Text := Name;
      AppendElement('FileTypeName').Text := Extensions;
    end;
    with Author, AppendElement('Author') do
    begin
      AppendElement('Name').Text := Name;
      AppendElement('Email').Text := Email;
      AppendElement('Web').Text := Web;
      AppendElement('Copyright').Text := Copyright;
      AppendElement('Company').Text := Company;
      AppendElement('Remark').Text := Remark;
    end;
    with General, AppendElement('Version') do
    begin
      AppendElement('Version').Text := IntToStr(Version);
      AppendElement('Revision').Text := IntToStr(Revision);
    end;
    Buffer := TStringList.Create();
    with General, AppendElement('History') do
    begin
      Text := #13#10;
      Buffer.Text := History;
      for i := 0 to Buffer.Count-1 do
      begin
        Node := AppendElement('H');
        Node.Text := Buffer[i];
      end;
    end;
    with General, AppendElement('Sample') do
    begin
      Text := ' ';
      Buffer.Text := Sample;
      for i := 0 to Buffer.Count-1 do
      begin
        Node := AppendElement('S');
        Node.Text := Buffer[i];
      end;
    end;
    FreeAndNil(Buffer);
  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ImportEditorProperties(AEditorProperties:
  TEditorProperties; ANode: IXMLNode): Boolean;
begin
  // 纛痨囹 礤 镱滗屦骅忄弪
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ExportEditorProperties(AEditorProperties:
  TEditorProperties; ANode: IXMLNode): Boolean;
begin
  // 纛痨囹 礤 镱滗屦骅忄弪
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ImportAttributes(Attributes: TSynAttributes;
  ANode: IXMLNode): Boolean;
begin
  with Attributes, ANode do begin
    if EnsureChild('Fore').Text <> '' then
      Foreground := StringToColor(EnsureChild('Fore').Text);
    if EnsureChild('Back').Text <> '' then
      Background := StringToColor(EnsureChild('Back').Text);
    Style := StrToFontStyle(EnsureChild('Style').Text);
    ParentForeground := StrToBoolDef(EnsureChild('ParentForeground').Text, False);
    ParentBackground := StrToBoolDef(EnsureChild('ParentBackground').Text, False);
  end;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ExportAttributes(Attributes: TSynAttributes;
  ANode: IXMLNode): Boolean;
begin
  with Attributes, ANode do
  begin
    AppendElement('Back').Text := IntToStr(Background);
    AppendElement('Fore').Text := IntToStr(Foreground);
    AppendElement('Style').Text := FontStyleToStr(Style);
    AppendElement('ParentForeground').Text := BoolToStr(ParentForeground,True);
    AppendElement('ParentBackground').Text := BoolToStr(ParentBackground,True);
  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ImportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean;
begin
  //TODO: Add implementation here
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ExportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean;
begin
  ANode.AppendElement('S').Text := 'Default';
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ImportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean;
var
  i: integer;
begin
  with AKeyList, ANode do begin
    Name := VarToStr(GetVarAttr('Name',''));
    ImportAttributes(AKeyList.Attributes, ChildNodes[0{%SchemeIndex}]); //TODO: 锐镳噔栩?    //???Enabled := StrToBoolDef(EnsureChild('Enabled').Text, True);
    for i := 0 to ChildNodes.Count-1 do
      if ChildNodes[i].NodeName = 'W' then
        KeyList.Add(ChildNodes[i].Text);
  end;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ExportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean;
var
  i: Integer;
  Buffer: TStringList;
  Node: IXMLNode;
begin
  with AKeyList, ANode do
  begin
    SetVarAttr('Name',Name);
    ExportAttributes(AKeyList.Attributes, AppendElement('Attri'));
    //???AppendElement('Enabled').Text := BoolToStr(Enabled, True);
    Buffer := TStringList.Create();
    Buffer.Text := KeyList.Text;
    for i := 0 to Buffer.Count-1 do
      AppendElement('W').Text := Buffer[i];
    FreeAndNil(Buffer);
  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ImportSet(ASet: TSynSet; ANode: IXMLNode): Boolean;
begin
  with ASet, ANode do begin
    Name := VarToStr(GetVarAttr('Name',''));
    ImportAttributes(ASet.Attributes, ChildNodes[0{%SchemeIndex}]); //TODO: 锐镳噔栩?    //???Enabled := StrToBoolDef(EnsureChild('Enabled').Text, True);
    CharSet := StrToSet(EnsureChild('S').Text);
  end;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ExportSet(ASet: TSynSet; ANode: IXMLNode): Boolean;
begin
  with ASet, ANode do
  begin
    SetVarAttr('Name', Name);
    ExportAttributes(ASet.Attributes, AppendElement('Attri'));
    //???AppendElement('Enabled').Text := BoolToStr(Enabled, True);
    AppendElement('S').Text := SetToStr(CharSet);
  end;
  Result := True;
end;

class function TSynUniFormatNativeXml15.ImportToken(AToken: TSynMultiToken; ANode: IXMLNode; Kind: string): Boolean; 
begin
  with AToken, ANode do begin
    FinishOnEol := StrToBoolDef(EnsureChild(Kind+'FinishOnEol').Text, False);
    StartLine   := StrToStartLine(EnsureChild(Kind+'StartLine').Text);
    StartType   := StrToStartType(EnsureChild(Kind+'PartOfTerm').Text);
    BreakType   := StrToBreakType(EnsureChild(Kind+'PartOfTerm').Text);
  end;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ExportToken(AToken: TSynMultiToken; ANode: IXMLNode; Kind: string = ''): Boolean;
begin
  with AToken, ANode do
  begin

  end;
  Result := True;
end;

//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml15.ImportRange(ARange: TSynRange; ANode: IXMLNode): Boolean;
var
  i: integer;
  NewRange: TSynRange;
  NewKeyList: TSynKeyList;
  NewSet: TSynSet;
begin
  with ARange, ANode do begin
    Name := VarToStr(GetVarAttr('Name',''));
    //TODO: 唁咫囹?聍栩

⌨️ 快捷键说明

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