You've already forked lazarus-ccr
123 lines
3.0 KiB
ObjectPascal
123 lines
3.0 KiB
ObjectPascal
![]() |
{
|
||
|
*****************************************************************************
|
||
|
* *
|
||
|
* This file is part of the iPhone Laz Extension *
|
||
|
* *
|
||
|
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
|
||
|
* for details about the copyright. *
|
||
|
* *
|
||
|
* This program is distributed in the hope that it will be useful, *
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||
|
* *
|
||
|
*****************************************************************************
|
||
|
}
|
||
|
unit PlistFile;
|
||
|
|
||
|
{$mode delphi}
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses
|
||
|
Classes, SysUtils, DOM, XMLRead;
|
||
|
|
||
|
type
|
||
|
{ TPListFile }
|
||
|
TPListFile = class(TObject)
|
||
|
private
|
||
|
fFileName : String;
|
||
|
fDoc : TXMLDocument;
|
||
|
firstkey : TDOMNode;
|
||
|
protected
|
||
|
procedure ReadValues;
|
||
|
//todo: add "parent" for FindKeyNode
|
||
|
function FindKeyNode(const keyName: string): TDOMNode;
|
||
|
public
|
||
|
constructor Create(const AFileName: String);
|
||
|
destructor Destroy; override;
|
||
|
function GetStrValue(const Key: String): String;
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
{ TPListFile }
|
||
|
|
||
|
constructor TPListFile.Create(const AFileName: String);
|
||
|
begin
|
||
|
fFileName := AFileName;
|
||
|
inherited Create;
|
||
|
end;
|
||
|
|
||
|
destructor TPListFile.Destroy;
|
||
|
begin
|
||
|
fDOC.Free;
|
||
|
inherited Destroy;
|
||
|
end;
|
||
|
|
||
|
function TPListFile.GetStrValue(const Key: String): String;
|
||
|
var
|
||
|
node : TDOMNode;
|
||
|
begin
|
||
|
Result:='';
|
||
|
node:=FindKeyNode(Key);
|
||
|
if not Assigned(node) then Exit;
|
||
|
|
||
|
node:=node.NextSibling;
|
||
|
if Assigned(node) and (node.NodeName='string') then
|
||
|
Result:=node.TextContent
|
||
|
else
|
||
|
Result:='';
|
||
|
end;
|
||
|
|
||
|
procedure TPListFile.ReadValues;
|
||
|
var
|
||
|
plist : TDOMNode;
|
||
|
begin
|
||
|
firstkey:=nil;
|
||
|
try
|
||
|
ReadXMLFile(fDoc, fFileName);
|
||
|
except
|
||
|
end;
|
||
|
|
||
|
if not Assigned(fDoc) then begin
|
||
|
fDoc:=TXMLDocument.Create;
|
||
|
Exit; // create an empty document
|
||
|
end;
|
||
|
|
||
|
try
|
||
|
plist:=fDoc.FindNode('plist');
|
||
|
if not Assigned(plist) then Exit;
|
||
|
|
||
|
while Assigned(plist) do begin
|
||
|
if (plist is TDOMElement) and (plist.NodeName='plist') and (plist.ChildNodes.Count>0) then
|
||
|
Break;
|
||
|
plist:=plist.NextSibling;
|
||
|
end;
|
||
|
|
||
|
firstkey:=plist.FindNode('dict');
|
||
|
if Assigned(firstkey) then
|
||
|
firstkey:=firstkey.FindNode('key');
|
||
|
|
||
|
except
|
||
|
firstkey:=nil;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
function TPListFile.FindKeyNode(const keyName: string): TDOMNode;
|
||
|
begin
|
||
|
if not Assigned(fDoc) then ReadValues;
|
||
|
if not Assigned(firstkey) then begin
|
||
|
Result:=nil;
|
||
|
Exit;
|
||
|
end;
|
||
|
Result:=firstkey;
|
||
|
while Assigned(Result) do begin
|
||
|
if (Result.NodeName='key') and (Result.TextContent=keyName) then Exit;
|
||
|
Result:=Result.NextSibling;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
|
||
|
end.
|
||
|
|