📄 synuniformatnativexml.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 + -