* xmlread.pp, renamed TXMLReader to TXMLTextReader.

git-svn-id: trunk@18054 -
This commit is contained in:
sergei 2011-08-01 19:46:30 +00:00
parent da3fb5de0f
commit 65b41a6c73

View File

@ -160,13 +160,13 @@ type
TDOMEntityEx = class(TDOMEntity); TDOMEntityEx = class(TDOMEntity);
TXMLReader = class; TXMLTextReader = class;
TXMLCharSource = class(TObject) TXMLCharSource = class(TObject)
private private
FBuf: PWideChar; FBuf: PWideChar;
FBufEnd: PWideChar; FBufEnd: PWideChar;
FReader: TXMLReader; FReader: TXMLTextReader;
FParent: TXMLCharSource; FParent: TXMLCharSource;
FEntity: TEntityDecl; FEntity: TEntityDecl;
FLineNo: Integer; FLineNo: Integer;
@ -268,7 +268,7 @@ type
TLiteralType = (ltPlain, ltPubid, ltEntity); TLiteralType = (ltPlain, ltPubid, ltEntity);
TXMLReader = class TXMLTextReader = class
private private
FSource: TXMLCharSource; FSource: TXMLCharSource;
FNameTable: THashTable; FNameTable: THashTable;
@ -536,7 +536,7 @@ procedure TDOMParser.Parse(Src: TXMLInputSource; out ADoc: TXMLDocument);
var var
InputSrc: TXMLCharSource; InputSrc: TXMLCharSource;
begin begin
with TXMLReader.Create(Self) do with TXMLTextReader.Create(Self) do
try try
ConvertSource(Src, InputSrc); // handles 'no-input-specified' case ConvertSource(Src, InputSrc); // handles 'no-input-specified' case
ProcessXML(InputSrc) ProcessXML(InputSrc)
@ -551,7 +551,7 @@ var
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
ADoc := nil; ADoc := nil;
with TXMLReader.Create(Self) do with TXMLTextReader.Create(Self) do
try try
if ResolveResource(URI, '', '', Src) then if ResolveResource(URI, '', '', Src) then
ProcessXML(Src) ProcessXML(Src)
@ -581,7 +581,7 @@ begin
if not (node.NodeType in [ELEMENT_NODE, DOCUMENT_FRAGMENT_NODE]) then if not (node.NodeType in [ELEMENT_NODE, DOCUMENT_FRAGMENT_NODE]) then
raise EDOMHierarchyRequest.Create('DOMParser.ParseWithContext'); raise EDOMHierarchyRequest.Create('DOMParser.ParseWithContext');
with TXMLReader.Create(Self) do with TXMLTextReader.Create(Self) do
try try
ConvertSource(Src, InputSrc); // handles 'no-input-specified' case ConvertSource(Src, InputSrc); // handles 'no-input-specified' case
Frag := Context.OwnerDocument.CreateDocumentFragment; Frag := Context.OwnerDocument.CreateDocumentFragment;
@ -957,9 +957,9 @@ begin
inherited Destroy; inherited Destroy;
end; end;
{ TXMLReader } { TXMLTextReader }
procedure TXMLReader.ConvertSource(SrcIn: TXMLInputSource; out SrcOut: TXMLCharSource); procedure TXMLTextReader.ConvertSource(SrcIn: TXMLInputSource; out SrcOut: TXMLCharSource);
begin begin
SrcOut := nil; SrcOut := nil;
if Assigned(SrcIn) then if Assigned(SrcIn) then
@ -975,13 +975,13 @@ begin
DoErrorPos(esFatal, 'No input source specified', NullLocation); DoErrorPos(esFatal, 'No input source specified', NullLocation);
end; end;
procedure TXMLReader.StoreLocation(out Loc: TLocation); procedure TXMLTextReader.StoreLocation(out Loc: TLocation);
begin begin
Loc.Line := FSource.FLineNo; Loc.Line := FSource.FLineNo;
Loc.LinePos := FSource.FBuf-FSource.LFPos; Loc.LinePos := FSource.FBuf-FSource.LFPos;
end; end;
function TXMLReader.ResolveResource(const ASystemID, APublicID, ABaseURI: WideString; out Source: TXMLCharSource): Boolean; function TXMLTextReader.ResolveResource(const ASystemID, APublicID, ABaseURI: WideString; out Source: TXMLCharSource): Boolean;
var var
AbsSysID: WideString; AbsSysID: WideString;
Filename: string; Filename: string;
@ -1012,7 +1012,7 @@ begin
Result := Assigned(Source); Result := Assigned(Source);
end; end;
procedure TXMLReader.Initialize(ASource: TXMLCharSource); procedure TXMLTextReader.Initialize(ASource: TXMLCharSource);
begin begin
ASource.FParent := FSource; ASource.FParent := FSource;
FSource := ASource; FSource := ASource;
@ -1021,29 +1021,29 @@ begin
FSource.Initialize; FSource.Initialize;
end; end;
procedure TXMLReader.FatalError(Expected: WideChar); procedure TXMLTextReader.FatalError(Expected: WideChar);
begin begin
// FIX: don't output what is found - anything may be found, including exploits... // FIX: don't output what is found - anything may be found, including exploits...
FatalError('Expected "%1s"', [string(Expected)]); FatalError('Expected "%1s"', [string(Expected)]);
end; end;
procedure TXMLReader.FatalError(const descr: String; LineOffs: Integer); procedure TXMLTextReader.FatalError(const descr: String; LineOffs: Integer);
begin begin
DoError(esFatal, descr, LineOffs); DoError(esFatal, descr, LineOffs);
end; end;
procedure TXMLReader.FatalError(const descr: string; const args: array of const; LineOffs: Integer); procedure TXMLTextReader.FatalError(const descr: string; const args: array of const; LineOffs: Integer);
begin begin
DoError(esFatal, Format(descr, args), LineOffs); DoError(esFatal, Format(descr, args), LineOffs);
end; end;
procedure TXMLReader.ValidationError(const Msg: string; const Args: array of const; LineOffs: Integer); procedure TXMLTextReader.ValidationError(const Msg: string; const Args: array of const; LineOffs: Integer);
begin begin
if FValidate then if FValidate then
DoError(esError, Format(Msg, Args), LineOffs); DoError(esError, Format(Msg, Args), LineOffs);
end; end;
procedure TXMLReader.ValidationErrorWithName(const Msg: string; LineOffs: Integer); procedure TXMLTextReader.ValidationErrorWithName(const Msg: string; LineOffs: Integer);
var var
ws: WideString; ws: WideString;
begin begin
@ -1051,7 +1051,7 @@ begin
ValidationError(Msg, [ws], LineOffs); ValidationError(Msg, [ws], LineOffs);
end; end;
procedure TXMLReader.DoError(Severity: TErrorSeverity; const descr: string; LineOffs: Integer); procedure TXMLTextReader.DoError(Severity: TErrorSeverity; const descr: string; LineOffs: Integer);
var var
Loc: TLocation; Loc: TLocation;
begin begin
@ -1065,13 +1065,13 @@ begin
DoErrorPos(Severity, descr, FTokenStart); DoErrorPos(Severity, descr, FTokenStart);
end; end;
procedure TXMLReader.DoErrorPos(Severity: TErrorSeverity; const descr: string; procedure TXMLTextReader.DoErrorPos(Severity: TErrorSeverity; const descr: string;
const args: array of const; const ErrPos: TLocation); const args: array of const; const ErrPos: TLocation);
begin begin
DoErrorPos(Severity, Format(descr, args), ErrPos); DoErrorPos(Severity, Format(descr, args), ErrPos);
end; end;
procedure TXMLReader.DoErrorPos(Severity: TErrorSeverity; const descr: string; const ErrPos: TLocation); procedure TXMLTextReader.DoErrorPos(Severity: TErrorSeverity; const descr: string; const ErrPos: TLocation);
var var
E: EXMLReadError; E: EXMLReadError;
sysid: WideString; sysid: WideString;
@ -1095,7 +1095,7 @@ begin
E.Free; E.Free;
end; end;
procedure TXMLReader.CheckMaxChars(ToAdd: Cardinal); procedure TXMLTextReader.CheckMaxChars(ToAdd: Cardinal);
var var
src: TXMLCharSource; src: TXMLCharSource;
total: Cardinal; total: Cardinal;
@ -1113,7 +1113,7 @@ begin
until src = nil; until src = nil;
end; end;
procedure TXMLReader.CallErrorHandler(E: EXMLReadError); procedure TXMLTextReader.CallErrorHandler(E: EXMLReadError);
begin begin
try try
if Assigned(FCtrl) and Assigned(FCtrl.FOnError) then if Assigned(FCtrl) and Assigned(FCtrl.FOnError) then
@ -1127,7 +1127,7 @@ begin
end; end;
end; end;
function TXMLReader.SkipWhitespace(PercentAloneIsOk: Boolean): Boolean; function TXMLTextReader.SkipWhitespace(PercentAloneIsOk: Boolean): Boolean;
begin begin
Result := False; Result := False;
repeat repeat
@ -1162,13 +1162,13 @@ begin
until False; until False;
end; end;
procedure TXMLReader.ExpectWhitespace; procedure TXMLTextReader.ExpectWhitespace;
begin begin
if not SkipWhitespace then if not SkipWhitespace then
FatalError('Expected whitespace'); FatalError('Expected whitespace');
end; end;
function TXMLReader.SkipS(Required: Boolean): Boolean; function TXMLTextReader.SkipS(Required: Boolean): Boolean;
var var
p: PWideChar; p: PWideChar;
begin begin
@ -1193,7 +1193,7 @@ begin
FatalError('Expected whitespace'); FatalError('Expected whitespace');
end; end;
procedure TXMLReader.ExpectString(const s: String); procedure TXMLTextReader.ExpectString(const s: String);
var var
I: Integer; I: Integer;
begin begin
@ -1205,7 +1205,7 @@ begin
end; end;
end; end;
function TXMLReader.CheckForChar(c: WideChar): Boolean; function TXMLTextReader.CheckForChar(c: WideChar): Boolean;
begin begin
Result := (FSource.FBuf^ = c); Result := (FSource.FBuf^ = c);
if Result then if Result then
@ -1216,7 +1216,7 @@ begin
end; end;
end; end;
procedure TXMLReader.SkipQuote(out Delim: WideChar; required: Boolean); procedure TXMLTextReader.SkipQuote(out Delim: WideChar; required: Boolean);
begin begin
Delim := #0; Delim := #0;
if (FSource.FBuf^ = '''') or (FSource.FBuf^ = '"') then if (FSource.FBuf^ = '''') or (FSource.FBuf^ = '"') then
@ -1232,7 +1232,7 @@ end;
const const
PrefixDefault: array[0..4] of WideChar = ('x','m','l','n','s'); PrefixDefault: array[0..4] of WideChar = ('x','m','l','n','s');
constructor TXMLReader.Create; constructor TXMLTextReader.Create;
begin begin
inherited Create; inherited Create;
BufAllocate(FName, 128); BufAllocate(FName, 128);
@ -1246,7 +1246,7 @@ begin
SetLength(FValidators, 16); SetLength(FValidators, 16);
end; end;
constructor TXMLReader.Create(AParser: TDOMParser); constructor TXMLTextReader.Create(AParser: TDOMParser);
begin begin
Create; Create;
FCtrl := AParser; FCtrl := AParser;
@ -1264,7 +1264,7 @@ begin
FMaxChars := FCtrl.Options.MaxChars; FMaxChars := FCtrl.Options.MaxChars;
end; end;
destructor TXMLReader.Destroy; destructor TXMLTextReader.Destroy;
var var
i: Integer; i: Integer;
begin begin
@ -1288,7 +1288,7 @@ begin
inherited Destroy; inherited Destroy;
end; end;
procedure TXMLReader.XML11_BuildTables; procedure TXMLTextReader.XML11_BuildTables;
begin begin
FNamePages := Xml11NamePages; FNamePages := Xml11NamePages;
FXML11 := True; FXML11 := True;
@ -1297,7 +1297,7 @@ end;
{ Must be executed after doc has been set. { Must be executed after doc has been set.
After introducing own NameTable, merge this into constructor } After introducing own NameTable, merge this into constructor }
procedure TXMLReader.NSPrepare; procedure TXMLTextReader.NSPrepare;
begin begin
if FNamespaces then if FNamespaces then
begin begin
@ -1311,7 +1311,7 @@ begin
end; end;
end; end;
procedure TXMLReader.ProcessXML(ASource: TXMLCharSource); procedure TXMLTextReader.ProcessXML(ASource: TXMLCharSource);
begin begin
doc := TXMLDocument.Create; doc := TXMLDocument.Create;
doc.documentURI := ASource.SystemID; // TODO: to be changed to URI or BaseURI doc.documentURI := ASource.SystemID; // TODO: to be changed to URI or BaseURI
@ -1337,7 +1337,7 @@ begin
FIDMap := nil; FIDMap := nil;
end; end;
procedure TXMLReader.ProcessFragment(ASource: TXMLCharSource; AOwner: TDOMNode); procedure TXMLTextReader.ProcessFragment(ASource: TXMLCharSource; AOwner: TDOMNode);
var var
DoctypeNode: TDOMDocumentTypeEx; DoctypeNode: TDOMDocumentTypeEx;
begin begin
@ -1368,7 +1368,7 @@ begin
ParseContent(aOwner as TDOMNode_WithChildren); ParseContent(aOwner as TDOMNode_WithChildren);
end; end;
function TXMLReader.CheckName(aFlags: TCheckNameFlags): Boolean; function TXMLTextReader.CheckName(aFlags: TCheckNameFlags): Boolean;
var var
p: PWideChar; p: PWideChar;
NameStartFlag: Boolean; NameStartFlag: Boolean;
@ -1441,13 +1441,13 @@ begin
RaiseNameNotFound; RaiseNameNotFound;
end; end;
procedure TXMLReader.CheckNCName; procedure TXMLTextReader.CheckNCName;
begin begin
if FNamespaces and (FColonPos <> -1) then if FNamespaces and (FColonPos <> -1) then
FatalError('Names of entities, notations and processing instructions may not contain colons', FName.Length); FatalError('Names of entities, notations and processing instructions may not contain colons', FName.Length);
end; end;
procedure TXMLReader.RaiseNameNotFound; procedure TXMLTextReader.RaiseNameNotFound;
begin begin
if FColonPos <> -1 then if FColonPos <> -1 then
FatalError('Bad QName syntax, local part is missing') FatalError('Bad QName syntax, local part is missing')
@ -1460,13 +1460,13 @@ begin
FatalError('Name starts with invalid character'); FatalError('Name starts with invalid character');
end; end;
function TXMLReader.ExpectName: WideString; function TXMLTextReader.ExpectName: WideString;
begin begin
CheckName; CheckName;
SetString(Result, FName.Buffer, FName.Length); SetString(Result, FName.Buffer, FName.Length);
end; end;
function TXMLReader.ResolvePredefined: Boolean; function TXMLTextReader.ResolvePredefined: Boolean;
var var
wc: WideChar; wc: WideChar;
begin begin
@ -1500,7 +1500,7 @@ begin
Result := True; Result := True;
end; end;
function TXMLReader.ParseRef(var ToFill: TWideCharBuf): Boolean; // [67] function TXMLTextReader.ParseRef(var ToFill: TWideCharBuf): Boolean; // [67]
var var
Code: Integer; Code: Integer;
begin begin
@ -1560,7 +1560,7 @@ const
a node chain starting from AttrData.FNext. Node chain is built only for the a node chain starting from AttrData.FNext. Node chain is built only for the
first level. If NonCDATA=True, additionally normalizes whitespace in string value. } first level. If NonCDATA=True, additionally normalizes whitespace in string value. }
procedure TXMLReader.ExpectAttValue(AttrData: PNodeData; NonCDATA: Boolean); procedure TXMLTextReader.ExpectAttValue(AttrData: PNodeData; NonCDATA: Boolean);
var var
wc: WideChar; wc: WideChar;
Delim: WideChar; Delim: WideChar;
@ -1641,7 +1641,7 @@ end;
const const
PrefixChar: array[Boolean] of string = ('', '%'); PrefixChar: array[Boolean] of string = ('', '%');
procedure TXMLReader.EntityToSource(AEntity: TEntityDecl; out Src: TXMLCharSource); procedure TXMLTextReader.EntityToSource(AEntity: TEntityDecl; out Src: TXMLCharSource);
begin begin
if AEntity.FOnStack then if AEntity.FOnStack then
FatalError('Entity ''%s%s'' recursively references itself', [PrefixChar[AEntity.FIsPE], AEntity.FName]); FatalError('Entity ''%s%s'' recursively references itself', [PrefixChar[AEntity.FIsPE], AEntity.FName]);
@ -1670,7 +1670,7 @@ begin
Src.FEntity := AEntity; Src.FEntity := AEntity;
end; end;
function TXMLReader.ContextPush(AEntity: TEntityDecl): Boolean; function TXMLTextReader.ContextPush(AEntity: TEntityDecl): Boolean;
var var
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
@ -1680,7 +1680,7 @@ begin
Initialize(Src); Initialize(Src);
end; end;
function TXMLReader.ContextPop(Forced: Boolean): Boolean; function TXMLTextReader.ContextPop(Forced: Boolean): Boolean;
var var
Src: TXMLCharSource; Src: TXMLCharSource;
Error: Boolean; Error: Boolean;
@ -1705,7 +1705,7 @@ begin
end; end;
end; end;
function TXMLReader.EntityCheck(NoExternals: Boolean): TEntityDecl; function TXMLTextReader.EntityCheck(NoExternals: Boolean): TEntityDecl;
var var
RefName: WideString; RefName: WideString;
cnt: Integer; cnt: Integer;
@ -1742,7 +1742,7 @@ begin
CheckMaxChars(Result.FCharCount - cnt); CheckMaxChars(Result.FCharCount - cnt);
end; end;
procedure TXMLReader.StartPE; procedure TXMLTextReader.StartPE;
var var
PEnt: TEntityDecl; PEnt: TEntityDecl;
begin begin
@ -1770,7 +1770,7 @@ begin
FHavePERefs := True; FHavePERefs := True;
end; end;
function TXMLReader.PrefetchEntity(AEntity: TEntityDecl): Boolean; function TXMLTextReader.PrefetchEntity(AEntity: TEntityDecl): Boolean;
begin begin
Result := ContextPush(AEntity); Result := ContextPush(AEntity);
if Result then if Result then
@ -1796,7 +1796,7 @@ const
[#0, '%', '&', '''', '"'] // ltEntity [#0, '%', '&', '''', '"'] // ltEntity
); );
function TXMLReader.ParseLiteral(var ToFill: TWideCharBuf; aType: TLiteralType; function TXMLTextReader.ParseLiteral(var ToFill: TWideCharBuf; aType: TLiteralType;
Required: Boolean): Boolean; Required: Boolean): Boolean;
var var
start: TObject; start: TObject;
@ -1845,7 +1845,7 @@ begin
BufNormalize(ToFill, dummy); BufNormalize(ToFill, dummy);
end; end;
function TXMLReader.SkipUntilSeq(const Delim: TSetOfChar; c1: WideChar; c2: WideChar = #0): Boolean; function TXMLTextReader.SkipUntilSeq(const Delim: TSetOfChar; c1: WideChar; c2: WideChar = #0): Boolean;
var var
wc: WideChar; wc: WideChar;
begin begin
@ -1871,7 +1871,7 @@ begin
until wc = #0; until wc = #0;
end; end;
procedure TXMLReader.ParseComment(discard: Boolean); // [15] procedure TXMLTextReader.ParseComment(discard: Boolean); // [15]
var var
SaveLength: Integer; SaveLength: Integer;
begin begin
@ -1892,7 +1892,7 @@ begin
FValue.Length := SaveLength; FValue.Length := SaveLength;
end; end;
procedure TXMLReader.ParsePI; // [16] procedure TXMLTextReader.ParsePI; // [16]
begin begin
FSource.NextChar; // skip '?' FSource.NextChar; // skip '?'
CheckName; CheckName;
@ -1919,7 +1919,7 @@ begin
FNameTable.FindOrAdd(FName.Buffer, FName.Length)); FNameTable.FindOrAdd(FName.Buffer, FName.Length));
end; end;
function TXMLReader.CreatePINode: TDOMNode; function TXMLTextReader.CreatePINode: TDOMNode;
var var
NameStr, ValueStr: WideString; NameStr, ValueStr: WideString;
begin begin
@ -1931,7 +1931,7 @@ end;
const const
vers: array[Boolean] of TXMLVersion = (xmlVersion10, xmlVersion11); vers: array[Boolean] of TXMLVersion = (xmlVersion10, xmlVersion11);
procedure TXMLReader.ParseXmlOrTextDecl(TextDecl: Boolean); procedure TXMLTextReader.ParseXmlOrTextDecl(TextDecl: Boolean);
var var
Delim: WideChar; Delim: WideChar;
buf: array[0..31] of WideChar; buf: array[0..31] of WideChar;
@ -2012,7 +2012,7 @@ begin
FXML11 := True; FXML11 := True;
end; end;
procedure TXMLReader.DTDReloadHook; procedure TXMLTextReader.DTDReloadHook;
var var
p: PWideChar; p: PWideChar;
begin begin
@ -2031,7 +2031,7 @@ begin
FDTDStartPos := TXMLDecodingSource(FSource).FBufStart; FDTDStartPos := TXMLDecodingSource(FSource).FBufStart;
end; end;
procedure TXMLReader.ParseDoctypeDecl; // [28] procedure TXMLTextReader.ParseDoctypeDecl; // [28]
var var
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
@ -2092,7 +2092,7 @@ begin
FCurrNode^.FNodeType := ntDocumentType; FCurrNode^.FNodeType := ntDocumentType;
end; end;
procedure TXMLReader.ExpectEq; // [25] procedure TXMLTextReader.ExpectEq; // [25]
begin begin
if FSource.FBuf^ <> '=' then if FSource.FBuf^ <> '=' then
SkipS; SkipS;
@ -2105,18 +2105,18 @@ end;
{ DTD stuff } { DTD stuff }
procedure TXMLReader.BadPENesting(S: TErrorSeverity); procedure TXMLTextReader.BadPENesting(S: TErrorSeverity);
begin begin
if (S = esFatal) or FValidate then if (S = esFatal) or FValidate then
DoError(S, 'Parameter entities must be properly nested'); DoError(S, 'Parameter entities must be properly nested');
end; end;
procedure TXMLReader.StandaloneError(LineOffs: Integer); procedure TXMLTextReader.StandaloneError(LineOffs: Integer);
begin begin
ValidationError('Standalone constriant violation', [], LineOffs); ValidationError('Standalone constriant violation', [], LineOffs);
end; end;
function TXMLReader.ParseQuantity: TCPQuant; function TXMLTextReader.ParseQuantity: TCPQuant;
begin begin
case FSource.FBuf^ of case FSource.FBuf^ of
'?': Result := cqZeroOrOnce; '?': Result := cqZeroOrOnce;
@ -2129,7 +2129,7 @@ begin
FSource.NextChar; FSource.NextChar;
end; end;
function TXMLReader.FindOrCreateElDef: TElementDecl; function TXMLTextReader.FindOrCreateElDef: TElementDecl;
var var
p: PHashItem; p: PHashItem;
begin begin
@ -2143,7 +2143,7 @@ begin
end; end;
end; end;
procedure TXMLReader.ExpectChoiceOrSeq(CP: TContentParticle; MustEndIn: TObject); // [49], [50] procedure TXMLTextReader.ExpectChoiceOrSeq(CP: TContentParticle; MustEndIn: TObject); // [49], [50]
var var
Delim: WideChar; Delim: WideChar;
CurrentCP: TContentParticle; CurrentCP: TContentParticle;
@ -2183,7 +2183,7 @@ begin
CP.CPType := ctSeq; // '(foo)' is a sequence! CP.CPType := ctSeq; // '(foo)' is a sequence!
end; end;
procedure TXMLReader.ParseElementDecl; // [45] procedure TXMLTextReader.ParseElementDecl; // [45]
var var
ElDef: TElementDecl; ElDef: TElementDecl;
CurrentEntity: TObject; CurrentEntity: TObject;
@ -2263,7 +2263,7 @@ begin
end; end;
procedure TXMLReader.ParseNotationDecl; // [82] procedure TXMLTextReader.ParseNotationDecl; // [82]
var var
NameStr, SysID, PubID: WideString; NameStr, SysID, PubID: WideString;
begin begin
@ -2290,7 +2290,7 @@ const
'NOTATION' 'NOTATION'
); );
procedure TXMLReader.ParseAttlistDecl; // [52] procedure TXMLTextReader.ParseAttlistDecl; // [52]
var var
ElDef: TElementDecl; ElDef: TElementDecl;
AttDef: TAttributeDef; AttDef: TAttributeDef;
@ -2423,7 +2423,7 @@ begin
end; end;
end; end;
procedure TXMLReader.ParseEntityDecl; // [70] procedure TXMLTextReader.ParseEntityDecl; // [70]
var var
IsPE, Exists: Boolean; IsPE, Exists: Boolean;
Entity: TEntityDecl; Entity: TEntityDecl;
@ -2500,7 +2500,7 @@ begin
end; end;
procedure TXMLReader.ParseMarkupDecl; // [29] procedure TXMLTextReader.ParseMarkupDecl; // [29]
var var
IncludeLevel: Integer; IncludeLevel: Integer;
IgnoreLevel: Integer; IgnoreLevel: Integer;
@ -2611,7 +2611,7 @@ begin
FatalError('Illegal character in DTD'); FatalError('Illegal character in DTD');
end; end;
procedure TXMLReader.ProcessDTD(ASource: TXMLCharSource); procedure TXMLTextReader.ProcessDTD(ASource: TXMLCharSource);
begin begin
doc := TXMLDocument.Create; doc := TXMLDocument.Create;
FNameTable := doc.Names; FNameTable := doc.Names;
@ -2624,9 +2624,9 @@ begin
end; end;
procedure TXMLReader.LoadEntity(AEntity: TEntityDecl); procedure TXMLTextReader.LoadEntity(AEntity: TEntityDecl);
var var
InnerReader: TXMLReader; InnerReader: TXMLTextReader;
Src: TXMLCharSource; Src: TXMLCharSource;
Ent: TDOMEntityEx; Ent: TDOMEntityEx;
DoctypeNode: TDOMDocumentType; DoctypeNode: TDOMDocumentType;
@ -2637,7 +2637,7 @@ begin
Ent := TDOMEntityEx(DocTypeNode.Entities.GetNamedItem(AEntity.FName)); Ent := TDOMEntityEx(DocTypeNode.Entities.GetNamedItem(AEntity.FName));
if Ent = nil then if Ent = nil then
Exit; Exit;
InnerReader := TXMLReader.Create(FCtrl); InnerReader := TXMLTextReader.Create(FCtrl);
try try
InnerReader.FAttrTag := FAttrTag; InnerReader.FAttrTag := FAttrTag;
InnerReader.FDocType := FDocType.Reference; InnerReader.FDocType := FDocType.Reference;
@ -2654,7 +2654,7 @@ begin
end; end;
end; end;
procedure TXMLReader.ValidateCurrentNode; procedure TXMLTextReader.ValidateCurrentNode;
var var
ElDef: TElementDecl; ElDef: TElementDecl;
AttDef: TAttributeDef; AttDef: TAttributeDef;
@ -2750,7 +2750,7 @@ begin
end; end;
end; end;
procedure TXMLReader.HandleEntityStart; procedure TXMLTextReader.HandleEntityStart;
begin begin
{ FNesting+1 is available due to overallocation in AllocNodeData() } { FNesting+1 is available due to overallocation in AllocNodeData() }
FCurrNode := @FNodeStack[FNesting+1]; FCurrNode := @FNodeStack[FNesting+1];
@ -2760,7 +2760,7 @@ begin
FCurrNode^.FValueLength := 0; FCurrNode^.FValueLength := 0;
end; end;
procedure TXMLReader.HandleEntityEnd; procedure TXMLTextReader.HandleEntityEnd;
begin begin
ContextPop(True); ContextPop(True);
if FNesting > 0 then Dec(FNesting); if FNesting > 0 then Dec(FNesting);
@ -2770,7 +2770,7 @@ begin
FNext := xtText; FNext := xtText;
end; end;
procedure TXMLReader.ResolveEntity; procedure TXMLTextReader.ResolveEntity;
begin begin
if FCurrNode^.FNodeType <> ntEntityReference then if FCurrNode^.FNodeType <> ntEntityReference then
raise EInvalidOperation.Create('Wrong node type'); raise EInvalidOperation.Create('Wrong node type');
@ -2780,7 +2780,7 @@ begin
FNext := xtPushEntity; FNext := xtPushEntity;
end; end;
procedure TXMLReader.DoStartEntity; procedure TXMLTextReader.DoStartEntity;
var var
src: TXMLCharSource; src: TXMLCharSource;
begin begin
@ -2798,7 +2798,7 @@ begin
FNext := xtText; FNext := xtText;
end; end;
function TXMLReader.DoStartElement: TDOMElement; function TXMLTextReader.DoStartElement: TDOMElement;
var var
Attr: TDOMAttr; Attr: TDOMAttr;
i: Integer; i: Integer;
@ -2871,7 +2871,7 @@ const
ntText ntText
); );
procedure TXMLReader.ParseContent(parent: TDOMNode_WithChildren); procedure TXMLTextReader.ParseContent(parent: TDOMNode_WithChildren);
var var
cursor: TDOMNode_WithChildren; cursor: TDOMNode_WithChildren;
element: TDOMElement; element: TDOMElement;
@ -2920,7 +2920,7 @@ begin
end; end;
end; end;
function TXMLReader.ReadTopLevel: Boolean; function TXMLTextReader.ReadTopLevel: Boolean;
var var
nonWs: Boolean; nonWs: Boolean;
wc: WideChar; wc: WideChar;
@ -3020,7 +3020,7 @@ begin
Result := tok <> xtEOF; Result := tok <> xtEOF;
end; end;
function TXMLReader.Read: Boolean; function TXMLTextReader.Read: Boolean;
var var
nonWs: Boolean; nonWs: Boolean;
wc: WideChar; wc: WideChar;
@ -3199,7 +3199,7 @@ begin
Reload; Reload;
end; end;
procedure TXMLReader.ExpectChar(wc: WideChar); procedure TXMLTextReader.ExpectChar(wc: WideChar);
begin begin
if FSource.FBuf^ = wc then if FSource.FBuf^ = wc then
FSource.NextChar FSource.NextChar
@ -3208,7 +3208,7 @@ begin
end; end;
// Element name already in FNameBuffer // Element name already in FNameBuffer
procedure TXMLReader.ParseStartTag; // [39] [40] [44] procedure TXMLTextReader.ParseStartTag; // [39] [40] [44]
var var
ElDef: TElementDecl; ElDef: TElementDecl;
IsEmpty: Boolean; IsEmpty: Boolean;
@ -3295,7 +3295,7 @@ begin
FNext := xtPopEmptyElement; FNext := xtPopEmptyElement;
end; end;
procedure TXMLReader.ParseEndTag; // [42] procedure TXMLTextReader.ParseEndTag; // [42]
var var
ElName: PHashItem; ElName: PHashItem;
begin begin
@ -3321,7 +3321,7 @@ begin
FNext := xtPopElement; FNext := xtPopElement;
end; end;
procedure TXMLReader.ParseAttribute(ElDef: TElementDecl); procedure TXMLTextReader.ParseAttribute(ElDef: TElementDecl);
var var
attrName: PHashItem; attrName: PHashItem;
attrData: PNodeData; attrData: PNodeData;
@ -3385,7 +3385,7 @@ begin
end; end;
end; end;
procedure TXMLReader.AddForwardRef(Buf: PWideChar; Length: Integer); procedure TXMLTextReader.AddForwardRef(Buf: PWideChar; Length: Integer);
var var
w: PForwardRef; w: PForwardRef;
begin begin
@ -3395,7 +3395,7 @@ begin
FForwardRefs.Add(w); FForwardRefs.Add(w);
end; end;
procedure TXMLReader.ClearForwardRefs; procedure TXMLTextReader.ClearForwardRefs;
var var
I: Integer; I: Integer;
begin begin
@ -3404,7 +3404,7 @@ begin
FForwardRefs.Clear; FForwardRefs.Clear;
end; end;
procedure TXMLReader.ValidateIdRefs; procedure TXMLTextReader.ValidateIdRefs;
var var
I: Integer; I: Integer;
begin begin
@ -3415,7 +3415,7 @@ begin
ClearForwardRefs; ClearForwardRefs;
end; end;
procedure TXMLReader.ProcessDefaultAttributes(ElDef: TElementDecl); procedure TXMLTextReader.ProcessDefaultAttributes(ElDef: TElementDecl);
var var
I: Integer; I: Integer;
AttDef: TAttributeDef; AttDef: TAttributeDef;
@ -3460,7 +3460,7 @@ begin
end; end;
function TXMLReader.AddBinding(attrData: PNodeData): Boolean; function TXMLTextReader.AddBinding(attrData: PNodeData): Boolean;
var var
nsUri, Pfx: PHashItem; nsUri, Pfx: PHashItem;
begin begin
@ -3488,7 +3488,7 @@ begin
FNSHelper.BindPrefix(attrData^.FValueStr, Pfx); FNSHelper.BindPrefix(attrData^.FValueStr, Pfx);
end; end;
procedure TXMLReader.ProcessNamespaceAtts; procedure TXMLTextReader.ProcessNamespaceAtts;
var var
I, J: Integer; I, J: Integer;
Pfx, AttrName: PHashItem; Pfx, AttrName: PHashItem;
@ -3518,7 +3518,7 @@ begin
end; end;
end; end;
function TXMLReader.ParseExternalID(out SysID, PubID: WideString; // [75] function TXMLTextReader.ParseExternalID(out SysID, PubID: WideString; // [75]
SysIdOptional: Boolean): Boolean; SysIdOptional: Boolean): Boolean;
var var
I: Integer; I: Integer;
@ -3551,7 +3551,7 @@ begin
Result := True; Result := True;
end; end;
function TXMLReader.ValidateAttrSyntax(AttrDef: TAttributeDef; const aValue: WideString): Boolean; function TXMLTextReader.ValidateAttrSyntax(AttrDef: TAttributeDef; const aValue: WideString): Boolean;
begin begin
case AttrDef.DataType of case AttrDef.DataType of
dtId, dtIdRef, dtEntity: Result := IsXmlName(aValue, FXML11) and dtId, dtIdRef, dtEntity: Result := IsXmlName(aValue, FXML11) and
@ -3567,7 +3567,7 @@ begin
end; end;
end; end;
procedure TXMLReader.ValidateAttrValue(AttrDef: TAttributeDef; attrData: PNodeData); procedure TXMLTextReader.ValidateAttrValue(AttrDef: TAttributeDef; attrData: PNodeData);
var var
L, StartPos, EndPos: Integer; L, StartPos, EndPos: Integer;
Entity: TEntityDecl; Entity: TEntityDecl;
@ -3608,7 +3608,7 @@ begin
end; end;
end; end;
procedure TXMLReader.ValidateDTD; procedure TXMLTextReader.ValidateDTD;
var var
I: Integer; I: Integer;
begin begin
@ -3619,7 +3619,7 @@ begin
end; end;
function TXMLReader.DoCDSect(ch: PWideChar; Count: Integer): TDOMNode; function TXMLTextReader.DoCDSect(ch: PWideChar; Count: Integer): TDOMNode;
var var
s: WideString; s: WideString;
begin begin
@ -3629,7 +3629,7 @@ begin
result := doc.CreateCDATASection(s); result := doc.CreateCDATASection(s);
end; end;
procedure TXMLReader.DoNotationDecl(const aName, aPubID, aSysID: WideString); procedure TXMLTextReader.DoNotationDecl(const aName, aPubID, aSysID: WideString);
var var
Notation: TNotationDecl; Notation: TNotationDecl;
Entry: PHashItem; Entry: PHashItem;
@ -3647,7 +3647,7 @@ begin
ValidationError('Duplicate notation declaration: ''%s''', [aName]); ValidationError('Duplicate notation declaration: ''%s''', [aName]);
end; end;
function TXMLReader.AddId(aNodeData: PNodeData): Boolean; function TXMLTextReader.AddId(aNodeData: PNodeData): Boolean;
var var
e: PHashItem; e: PHashItem;
begin begin
@ -3659,7 +3659,7 @@ begin
aNodeData^.FIDEntry := e; aNodeData^.FIDEntry := e;
end; end;
function TXMLReader.AllocAttributeData: PNodeData; function TXMLTextReader.AllocAttributeData: PNodeData;
begin begin
Result := AllocNodeData(FNesting + FAttrCount + 1); Result := AllocNodeData(FNesting + FAttrCount + 1);
Result^.FNodeType := ntAttribute; Result^.FNodeType := ntAttribute;
@ -3667,7 +3667,7 @@ begin
Inc(FAttrCount); Inc(FAttrCount);
end; end;
function TXMLReader.AllocNodeData(AIndex: Integer): PNodeData; function TXMLTextReader.AllocNodeData(AIndex: Integer): PNodeData;
begin begin
{make sure we have an extra slot to place child text/comment/etc} {make sure we have an extra slot to place child text/comment/etc}
if AIndex >= Length(FNodeStack)-1 then if AIndex >= Length(FNodeStack)-1 then
@ -3679,7 +3679,7 @@ begin
Result^.FIDEntry := nil; Result^.FIDEntry := nil;
end; end;
function TXMLReader.AllocAttributeValueChunk(APrev: PNodeData): PNodeData; function TXMLTextReader.AllocAttributeValueChunk(APrev: PNodeData): PNodeData;
begin begin
{ when parsing DTD, don't take ownership of allocated data } { when parsing DTD, don't take ownership of allocated data }
if FState = rsDTD then if FState = rsDTD then
@ -3705,7 +3705,7 @@ begin
APrev^.FNext := result; APrev^.FNext := result;
end; end;
procedure TXMLReader.CleanupAttributes; procedure TXMLTextReader.CleanupAttributes;
var var
i: Integer; i: Integer;
begin begin
@ -3715,7 +3715,7 @@ begin
FAttrCleanupFlag := False; FAttrCleanupFlag := False;
end; end;
procedure TXMLReader.CleanupAttribute(aNode: PNodeData); procedure TXMLTextReader.CleanupAttribute(aNode: PNodeData);
var var
chunk, tmp: PNodeData; chunk, tmp: PNodeData;
begin begin
@ -3730,7 +3730,7 @@ begin
aNode^.FNext := nil; aNode^.FNext := nil;
end; end;
procedure TXMLReader.SetNodeInfoWithValue(typ: TXMLNodeType; AName: PHashItem = nil); procedure TXMLTextReader.SetNodeInfoWithValue(typ: TXMLNodeType; AName: PHashItem = nil);
begin begin
{FNesting+1 is available due to overallocation in AllocNodeData() } {FNesting+1 is available due to overallocation in AllocNodeData() }
FCurrNode := @FNodeStack[FNesting+1]; FCurrNode := @FNodeStack[FNesting+1];
@ -3740,7 +3740,7 @@ begin
FCurrNode^.FValueLength := FValue.Length; FCurrNode^.FValueLength := FValue.Length;
end; end;
function TXMLReader.SetupFakeLF(nextstate: TXMLToken): Boolean; function TXMLTextReader.SetupFakeLF(nextstate: TXMLToken): Boolean;
begin begin
FValue.Buffer[0] := #10; FValue.Buffer[0] := #10;
FValue.Length := 1; FValue.Length := 1;
@ -3749,7 +3749,7 @@ begin
Result := True; Result := True;
end; end;
procedure TXMLReader.PushVC(aElDef: TElementDecl); procedure TXMLTextReader.PushVC(aElDef: TElementDecl);
begin begin
Inc(FValidatorNesting); Inc(FValidatorNesting);
if FValidatorNesting >= Length(FValidators) then if FValidatorNesting >= Length(FValidators) then
@ -3770,7 +3770,7 @@ begin
end; end;
end; end;
procedure TXMLReader.PopElement; procedure TXMLTextReader.PopElement;
begin begin
if FNamespaces then if FNamespaces then
FNSHelper.EndElement; FNSHelper.EndElement;
@ -3831,12 +3831,12 @@ end;
procedure ReadXMLFile(out ADoc: TXMLDocument; var f: Text); procedure ReadXMLFile(out ADoc: TXMLDocument; var f: Text);
var var
Reader: TXMLReader; Reader: TXMLTextReader;
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
ADoc := nil; ADoc := nil;
Src := TXMLFileInputSource.Create(f); Src := TXMLFileInputSource.Create(f);
Reader := TXMLReader.Create; Reader := TXMLTextReader.Create;
try try
Reader.ProcessXML(Src); Reader.ProcessXML(Src);
finally finally
@ -3847,11 +3847,11 @@ end;
procedure ReadXMLFile(out ADoc: TXMLDocument; f: TStream; const ABaseURI: String); procedure ReadXMLFile(out ADoc: TXMLDocument; f: TStream; const ABaseURI: String);
var var
Reader: TXMLReader; Reader: TXMLTextReader;
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
ADoc := nil; ADoc := nil;
Reader := TXMLReader.Create; Reader := TXMLTextReader.Create;
try try
Src := TXMLStreamInputSource.Create(f, False); Src := TXMLStreamInputSource.Create(f, False);
Src.SystemID := ABaseURI; Src.SystemID := ABaseURI;
@ -3882,10 +3882,10 @@ end;
procedure ReadXMLFragment(AParentNode: TDOMNode; var f: Text); procedure ReadXMLFragment(AParentNode: TDOMNode; var f: Text);
var var
Reader: TXMLReader; Reader: TXMLTextReader;
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
Reader := TXMLReader.Create; Reader := TXMLTextReader.Create;
try try
Src := TXMLFileInputSource.Create(f); Src := TXMLFileInputSource.Create(f);
Reader.ProcessFragment(Src, AParentNode); Reader.ProcessFragment(Src, AParentNode);
@ -3896,10 +3896,10 @@ end;
procedure ReadXMLFragment(AParentNode: TDOMNode; f: TStream; const ABaseURI: String); procedure ReadXMLFragment(AParentNode: TDOMNode; f: TStream; const ABaseURI: String);
var var
Reader: TXMLReader; Reader: TXMLTextReader;
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
Reader := TXMLReader.Create; Reader := TXMLTextReader.Create;
try try
Src := TXMLStreamInputSource.Create(f, False); Src := TXMLStreamInputSource.Create(f, False);
Src.SystemID := ABaseURI; Src.SystemID := ABaseURI;
@ -3929,11 +3929,11 @@ end;
procedure ReadDTDFile(out ADoc: TXMLDocument; var f: Text); procedure ReadDTDFile(out ADoc: TXMLDocument; var f: Text);
var var
Reader: TXMLReader; Reader: TXMLTextReader;
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
ADoc := nil; ADoc := nil;
Reader := TXMLReader.Create; Reader := TXMLTextReader.Create;
try try
Src := TXMLFileInputSource.Create(f); Src := TXMLFileInputSource.Create(f);
Reader.ProcessDTD(Src); Reader.ProcessDTD(Src);
@ -3945,11 +3945,11 @@ end;
procedure ReadDTDFile(out ADoc: TXMLDocument; f: TStream; const ABaseURI: String); procedure ReadDTDFile(out ADoc: TXMLDocument; f: TStream; const ABaseURI: String);
var var
Reader: TXMLReader; Reader: TXMLTextReader;
Src: TXMLCharSource; Src: TXMLCharSource;
begin begin
ADoc := nil; ADoc := nil;
Reader := TXMLReader.Create; Reader := TXMLTextReader.Create;
try try
Src := TXMLStreamInputSource.Create(f, False); Src := TXMLStreamInputSource.Create(f, False);
Src.SystemID := ABaseURI; Src.SystemID := ABaseURI;