📄 omnixml.pas
字号:
procedure WriteString(const Value: WideString);
function Write(const Buffer; Count: Longint): Longint; override;
end;
{$ENDIF}
TXMLTextStream = class(TInterfacedObject, IUnicodeStream)
private
FStreamMode: TStreamMode;
{$IFDEF MSWINDOWS}
FMode: TGpTSAccess;
FSize: Integer;
FXTS: TGpTextStream;
{$ENDIF}
{$IFDEF LINUX}
FXTS: TUnicodeStream;
{$ENDIF}
FPreviousOutBuffer: WideString;
FOutBuffer: PWideChar;
FOutBufferPos,
FOutBufferSize: Integer;
// undo support
FPreviousChar: WideChar;
FReadFromUndo: Boolean;
FCanUndo: Boolean;
FIndent: Integer;
FOutputFormat: TOutputFormat;
FLinePos,
FLine: Integer;
FLineStartPosition: Integer;
function GetPreviousChar: WideChar;
property PreviousChar: WideChar read GetPreviousChar;
function GetCodePage: Word;
procedure SetCodePage(const CodePage: Word);
function GetOutputFormat: TOutputFormat;
procedure SetOutputFormat(const Value: TOutputFormat);
protected
FStream: TStream;
FEOF: Boolean;
function ReadChar(var ReadChar: WideChar): Boolean; virtual;
function ProcessChar(var ch: WideChar): Boolean; virtual;
procedure IncreaseIndent;
procedure DecreaseIndent;
procedure WriteIndent(const ForceNextLine: Boolean = False);
// helper functions
function GetPosition: Integer;
function GetPreviousOutputBuffer: WideString;
function GetLastLine: WideString;
public
property OutputFormat: TOutputFormat read GetOutputFormat write SetOutputFormat;
property CodePage: Word read GetCodePage write SetCodePage;
constructor Create(const Stream: TStream; const Mode: TStreamMode; const Encoding: Word = CP_UTF16);
destructor Destroy; override;
procedure UndoRead; virtual;
function GetNextString(var ReadString: WideString; const Len: Integer): Boolean;
procedure WriteOutputChar(const OutChar: WideChar);
function GetOutputBuffer: WideString;
function OutputBufferLen: Integer;
procedure ClearOutputBuffer;
procedure WriteString(Value: WideString);
end;
IXMLParseError = interface
['{546E9AE4-4E1E-4014-B0B8-4F024C797544}']
// private
function GetErrorCode: Integer;
function GetFilePos: Integer;
function GetLine: Integer;
function GetLinePos: Integer;
function GetReason: string;
function GetSrcText: WideString;
function GetURL: string;
// public
property ErrorCode: Integer read GetErrorCode;
property FilePos: Integer read GetFilePos;
property Line: Integer read GetLine;
property LinePos: Integer read GetLinePos;
property Reason: string read GetReason;
property SrcText: WideString read GetSrcText;
property URL: string read GetURL;
end;
IXMLElement = interface;
IXMLDocument = interface;
IXMLNodeList = interface;
IXMLNamedNodeMap = interface;
IXMLNode = interface
['{F4D7D3DE-C6EC-4191-8E35-F652C2705E81}']
// private
function GetAttributes: IXMLNamedNodeMap;
function GetChildNodes: IXMLNodeList;
function GetFirstChild: IXMLNode;
function GetLastChild: IXMLNode;
function GetNextSibling: IXMLNode;
function GetNodeName: WideString;
function GetNodeType: TNodeType;
function GetNodeValue: WideString;
function GetOwnerDocument: IXMLDocument;
function GetParentNode: IXMLNode;
function GetPreviousSibling: IXMLNode;
procedure SetNodeValue(const Value: WideString);
procedure SetParentNode(const Parent: IXMLNode);
// public
function InsertBefore(const NewChild, RefChild: IXMLNode): IXMLNode;
function ReplaceChild(const NewChild, OldChild: IXMLNode): IXMLNode;
function RemoveChild(const OldChild: IXMLNode): IXMLNode;
function AppendChild(const NewChild: IXMLNode): IXMLNode;
function HasChildNodes: Boolean;
function CloneNode(const Deep: Boolean): IXMLNode;
property NodeName: WideString read GetNodeName;
property NodeValue: WideString read GetNodeValue write SetNodeValue;
property NodeType: TNodeType read GetNodeType;
property ParentNode: IXMLNode read GetParentNode;
property ChildNodes: IXMLNodeList read GetChildNodes;
property FirstChild: IXMLNode read GetFirstChild;
property LastChild: IXMLNode read GetLastChild;
property PreviousSibling: IXMLNode read GetPreviousSibling;
property NextSibling: IXMLNode read GetNextSibling;
property Attributes: IXMLNamedNodeMap read GetAttributes;
property OwnerDocument: IXMLDocument read GetOwnerDocument;
// MS (non-standard) extensions
function GetText: WideString;
procedure SetText(const Value: WideString);
property Text: WideString read GetText write SetText;
procedure WriteToStream(const OutputStream: IUnicodeStream);
procedure SelectSingleNode(Pattern: string; var Result: IXMLNode); overload;
function SelectSingleNode(Pattern: string): IXMLNode; overload;
procedure SelectNodes(Pattern: string; var Result: IXMLNodeList); overload;
function SelectNodes(Pattern: string): IXMLNodeList; overload;
function GetXML: WideString;
property XML: WideString read GetXML;
end;
IXMLCustomList = interface
['{6520A0BC-8738-4E40-8CDB-33713DED32ED}']
// protected
function GetLength: Integer;
function GetItem(const Index: Integer): IXMLNode;
// public
property Item[const Index: Integer]: IXMLNode read GetItem;
property Length: Integer read GetLength;
function Add(const XMLNode: IXMLNode): Integer;
function IndexOf(const XMLNode: IXMLNode): Integer;
procedure Insert(const Index: Integer; const XMLNode: IXMLNode);
function Remove(const XMLNode: IXMLNode): Integer;
procedure Delete(const Index: Integer);
procedure Clear;
end;
IXMLNodeList = interface(IXMLCustomList)
['{66AF674E-4697-4356-ACCC-4258DA138EA1}']
// public
function AddNode(const Arg: IXMLNode): IXMLNode;
// MS (non-standard) extensions
procedure Reset;
function NextNode: IXMLNode;
end;
IXMLNamedNodeMap = interface(IXMLCustomList)
['{87964B1D-F6CC-46D2-A602-67E198C8BFF5}']
// public
function GetNamedItem(const Name: WideString): IXMLNode;
function SetNamedItem(const Arg: IXMLNode): IXMLNode;
function RemoveNamedItem(const Name: WideString): IXMLNode;
end;
{ TODO -omr : re-add after IXMLDocumentType will be properly supported }
(*
IXMLDocumentType = interface(IXMLNode)
['{881517D3-A2F5-4AF0-8A3D-5A57D2C77ED9}']
// private
function GetEntities: IXMLNamedNodeMap;
function GetName: WideString;
function GetNotations: IXMLNamedNodeMap;
// public
property Name: WideString read GetName;
property Entities: IXMLNamedNodeMap read GetEntities;
property Notations: IXMLNamedNodeMap read GetNotations;
end;
*)
IXMLDocumentFragment = interface(IXMLNode)
['{A21A11BF-E489-4416-9607-172EFA2CFE45}']
end;
IXMLCharacterData = interface(IXMLNode)
['{613A6538-A0DC-49BC-AFA6-D8E611176B86}']
// private
function GetData: WideString;
function GetLength: Integer;
procedure SetData(const Value: WideString);
// public
property Data: WideString read GetData write SetData;
property Length: Integer read GetLength;
function SubstringData(const Offset, Count: Integer): WideString;
procedure AppendData(const Arg: WideString);
procedure InsertData(const Offset: Integer; const Arg: WideString);
procedure DeleteData(const Offset, Count: Integer);
procedure ReplaceData(const Offset, Count: Integer; const Arg: WideString);
end;
IXMLText = interface(IXMLCharacterData)
['{0EC46ED2-AB58-4DC9-B964-965615248564}']
// public
function SplitText(const Offset: Integer): IXMLText;
end;
IXMLComment = interface(IXMLCharacterData)
['{B094A54C-039F-4ED7-9331-F7CF5A711EDA}']
end;
IXMLCDATASection = interface(IXMLText)
['{CF58778D-775D-4299-884C-F1DC61925D54}']
end;
IXMLDocumentType = interface(IXMLText)
['{E956F945-E8F6-4589-BF8D-D4DC23DE1089}']
end;
IXMLProcessingInstruction = interface(IXMLNode)
['{AF449E32-2615-4EF7-82B6-B2E9DCCE9FC3}']
// private
function GetData: WideString;
function GetTarget: WideString;
// public
property Target: WideString read GetTarget;
property Data: WideString read GetData;
end;
IXMLAttr = interface(IXMLNode)
['{10796B8E-FBAC-4ADF-BDD8-E4BBC5A5196F}']
// private
function GetName: WideString;
function GetSpecified: Boolean;
function GetValue: WideString;
procedure SetValue(const Value: WideString);
// public
property Name: WideString read GetName;
property Specified: Boolean read GetSpecified;
property Value: WideString read GetValue write SetValue;
end;
IXMLEntityReference = interface(IXMLNode)
['{4EC18B2B-BD52-464D-BAD1-1FBE2C445989}']
end;
IXMLDocument = interface(IXMLNode)
['{59A76970-451C-4343-947C-242EFF17413C}']
// private
function GetDocType: IXMLDocumentType;
{ TODO -omr : re-add after IXMLDocumentType will be properly supported }
// procedure SetDocType(const Value: IXMLDocumentType);
function GetDocumentElement: IXMLElement;
procedure SetDocumentElement(const Value: IXMLElement);
function GetPreserveWhiteSpace: Boolean;
procedure SetPreserveWhiteSpace(const Value: Boolean);
// public
property DocType: IXMLDocumentType read GetDocType;
property DocumentElement: IXMLElement read GetDocumentElement write SetDocumentElement;
property PreserveWhiteSpace: Boolean read GetPreserveWhiteSpace write SetPreserveWhiteSpace;
function CreateAttribute(const Name: WideString): IXMLAttr;
function CreateCDATASection(const Data: WideString): IXMLCDATASection;
function CreateComment(const Data: WideString): IXMLComment;
function CreateDocType(const Data: WideString): IXMLDocumentType;
function CreateDocumentFragment: IXMLDocumentFragment;
function CreateElement(const TagName: WideString): IXMLElement;
function CreateEntityReference(const Name: WideString): IXMLEntityReference;
function CreateProcessingInstruction(const Target, Data: WideString): IXMLProcessingInstruction;
function CreateTextNode(const Data: WideString): IXMLText;
function GetElementsByTagName(const TagName: WideString): IXMLNodeList;
// MS (non-standard) extensions
function Load(const FileName: string): Boolean;
function LoadFromStream(const Stream: TStream): Boolean;
procedure Save(const FileName: string; const OutputFormat: TOutputFormat = ofNone);
procedure SaveToStream(const OutputStream: TStream; const OutputFormat: TOutputFormat = ofNone);
function LoadXML(const XML: WideString): Boolean;
function GetParseError: IXMLParseError;
property ParseError: IXMLParseError read GetParseError;
end;
IXMLElement = interface(IXMLNode)
['{C858C4E1-FB3F-4C98-8BDE-671E060D17B9}']
// private
function GetTagName: WideString;
// public
property TagName: WideString read GetTagName;
function GetAttribute(const Name: WideString): WideString;
procedure SetAttribute(const Name, Value: WideString);
procedure RemoveAttribute(const Name: WideString);
function GetAttributeNode(const Name: WideString): IXMLAttr;
function SetAttributeNode(const NewAttr: IXMLAttr): IXMLAttr;
function RemoveAttributeNode(const OldAttr: IXMLAttr): IXMLAttr;
function GetElementsByTagName(const Name: WideString): IXMLNodeList;
procedure Normalize;
end;
{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -