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

📄 synuniformatnativexml.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
字号:
{
@abstract(Provides Native Format highlighters import and export)
@authors(Vitalik [2vitalik@gmail.com], Quadr0 [quadr02005@gmail.com])
@created(2005)
@lastmod(2006-07-23)
}

{$IFNDEF QSynUniFormatNativeXml}
unit SynUniFormatNativeXml;
{$ENDIF}

{$I SynUniHighlighter.inc}

interface

uses
{$IFDEF SYN_CLX}
  QGraphics,
  QSynUniClasses,
{$ELSE}
  SysUtils,
  Graphics,
  Classes,
{$IFDEF SYN_COMPILER_6_UP}
  Variants,
{$ENDIF}
  SynUniFormat,
  SynUniClasses,
  SynUniRules,
  SynUniHighlighter,
{$ENDIF}
(*
{$IFDEF MSWINDOWS}
  MSXML,
{$ELSE}
  oxmldom,
{$ENDIF}
*)
  { XMLDoc,
  XMLIntf;  } // DW
  SimpleXML; // DW

type
  TSynUniFormatNativeXml = class(TSynUniFormat)
    class function ImportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean; virtual;
    class function ExportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean; virtual;
    class function ImportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean; virtual;
    class function ExportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean; virtual;
    class function ImportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean; virtual;
    class function ExportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean; virtual;
    class function ImportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean; virtual;
    class function ExportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean; virtual;
    class function ImportToken(AToken: TSynMultiToken; ANode: IXMLNode): Boolean; virtual;
    class function ExportToken(AToken: TSynMultiToken; ANode: IXMLNode): Boolean; virtual;
    class function ImportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean; virtual;
    class function ExportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean; virtual;
    class function ImportSet(ASet: TSynSet; ANode: IXMLNode): Boolean; virtual;
    class function ExportSet(ASet: TSynSet; ANode: IXMLNode): Boolean; virtual;
    class function ImportRange(ARange: TSynRange; ANode: IXMLNode): Boolean; virtual;
    class function ExportRange(ARange: TSynRange; ANode: IXMLNode): Boolean; virtual;
    class function ImportHighlighter(SynUniSyn: TSynUniSyn; ANode: IXMLNode): Boolean; virtual;
    class function ExportHighlighter(SynUniSyn: TSynUniSyn; ANode: IXMLNode): Boolean; virtual;
    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;

  function CreateXmlDocument(RootNode: string): IXmlDocument;

  {$IFNDEF SYN_COMPILER_6_UP}
  function VarToStr(const V: Variant; const ADefault: string = ''): string;
  {$ENDIF}
  function VarToBool(const V: Variant; Default: Boolean = False): Boolean;
  function VarToColor(const V: Variant; Default: TColor): TColor;
  function VarToInt(const V: Variant; Default: Integer = 0): Integer;
  function VarToSet(const V: Variant): TCharSet;

  {$IFNDEF SYN_COMPILER_7_UP}
  function StrToBoolDef(const S: string; const Default: Boolean): Boolean;
  function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
  {$ENDIF}

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;

//------------------------------------------------------------------------------
function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
const
  cSimpleBoolStrs: array [Boolean] of String = ('0', '-1');
begin
  if UseBoolStrs then
  begin
    if B then
      Result := 'True'
    else
      Result := 'False';
  end
  else
    Result := cSimpleBoolStrs[B];
end;
{$ENDIF}

//------------------------------------------------------------------------------
function CreateXmlDocument(RootNode: string): IXmlDocument;
begin
  Result := SimpleXML.CreateXmlDocument(RootNode);
  // Result.Active := True;
  // Result.Options := [doNodeAutoIndent, doAttrNull, doNodeAutoCreate];
  // Result.Version := '1.0';
  // Result.Encoding := 'windows-1251';
  //if RootNode <> '' then
  //  Result.Node.AddChild(RootNode);
end;

{$IFNDEF SYN_COMPILER_6_UP}
//------------------------------------------------------------------------------
function FindVarData(const V: Variant): PVarData;
begin
  Result := @TVarData(V);
  while Result.VType = varByRef or varVariant do
    Result := PVarData(Result.VPointer);
end;

//------------------------------------------------------------------------------
function VarIsNull(const V: Variant): Boolean;
begin
  Result := FindVarData(V)^.VType = varNull;
end;

//------------------------------------------------------------------------------
function VarToStr(const V: Variant; const ADefault: string): string;
begin
  if not VarIsNull(V) then
    Result := V
  else
    Result := ADefault;
end;
{$ENDIF}

//------------------------------------------------------------------------------
function VarToBool(const V: Variant; Default: Boolean): Boolean;
begin
  Result := StrToBoolDef(VarToStr(V), Default);
end;

//------------------------------------------------------------------------------
function VarToColor(const V: Variant; Default: TColor): TColor;
begin
  if VarToStr(V) <> '' then
    Result := StringToColor(VarToStr(V))
  else
    Result := Default;
end;

//------------------------------------------------------------------------------
function VarToInt(const V: Variant; Default: Integer): Integer;
begin
  Result := StrToIntDef(VarToStr(V), Default);
end;

//------------------------------------------------------------------------------
function VarToSet(const V: Variant): TCharSet;
begin
  Result := StrToSet(VarToStr(V));
end;

//------------------------------------------------------------------------------
function VarToPChar(const V: Variant): PChar;
begin
  Result := PChar(VarToStr(V));
end;

//------------------------------------------------------------------------------
//----------------------- TSynUniFormatNativeXml -------------------------------
//------------------------------------------------------------------------------

class function TSynUniFormatNativeXml.ImportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean;
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ImportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ImportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ImportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ImportToken(AToken: TSynMultiToken; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportToken(AToken: TSynMultiToken; ANode: IXMLNode): Boolean; 
begin Result := False; end;

class function TSynUniFormatNativeXml.ImportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean;
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean;
begin Result := False; end;

class function TSynUniFormatNativeXml.ImportSet(ASet: TSynSet; ANode: IXMLNode): Boolean;
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportSet(ASet: TSynSet; ANode: IXMLNode): Boolean;
begin Result := False; end;

class function TSynUniFormatNativeXml.ImportRange(ARange: TSynRange; ANode: IXMLNode): Boolean;
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportRange(ARange: TSynRange; ANode: IXMLNode): Boolean;
begin Result := False; end;

class function TSynUniFormatNativeXml.ImportHighlighter(SynUniSyn: TSynUniSyn; ANode: IXMLNode): Boolean;
begin Result := False; end;

class function TSynUniFormatNativeXml.ExportHighlighter(SynUniSyn: TSynUniSyn; ANode: IXMLNode): Boolean;
begin Result := False; end;

//------------------------------------------------------------------------------
class function TSynUniFormatNativeXml.ImportFromStream(AObject: TObject; AStream: TStream): Boolean;
var
  XMLDocument: IXMLDocument;
begin
  VerifyStream(AStream);
  AStream.Position := 0; // DW

  XMLDocument := CreateXmlDocument('');
  XMLDocument.Load(AStream);
  if AObject is TSynUniSyn then
  begin
    Result := ImportHighlighter(TSynUniSyn(AObject), XMLDocument.DocumentElement);
    //TSynUniSyn(AObject).Prepare(); //TODO: 腕骓?腓 

⌨️ 快捷键说明

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