Declaration
TIEDictionary = class;
Description
TIEDictionary is a String->Object dictionary (hashmap).
It can import/export key-values in a JSON-like (not fully compatible yet) style.
PropertiesMethodsNote:
◼Use '#content' as the key to get content from tags (like <tag ...> content </tag>), e.g. dict := xmpDict.GetDictionary('#content', false);
◼Use '#text' as the key to get the values from a tag list, e.g. memo1.lines.add( dict.GetString( '#text', false ));
// Dump dictionary content as XML
var
dict: TIEDictionary;
begin
dict := TIEDictionary.Create();
dict.Insert('doublekey', 10.1);
dict.Insert('integerkey', 100);
dict.Insert('stringkey', 'hello');
dict.Insert('bool_true', true);
dict.Insert('bool_false', false);
dict.Insert('dict', TIEDictionary.Create());
dict.GetDictionary('dict').Insert('one', 1);
dict.GetDictionary('dict').Insert('two', 'two');
dict.Insert('list', TObjectList.Create());
dict.GetList('list').Add( TIEDictionaryValueWideString.Create('mike') );
dict.GetList('list').Add( TIEDictionaryValueWideString.Create('robert') );
dict.GetList('list').Add( TIEDictionaryValueWideString.Create('john') );
dict.GetList('list').Add( TIEDictionaryValueInteger.Create(2013) );
memo1.Text := dict.Dump(ieplXML);
dict.free;
end;
// Dump the structure of the dictionary
var
ss : TStringList;
dict: TIEDictionary;
begin
ss := TStringList.Create;
dict := TIEDictionary.Create();
ss.LoadFromFile('d:\XML_TEST.xml');
dict.parse( ss.Text );
// Dump structure
memo1.Text := dict.Dump(ieplStructure);
dict.free;
ss.Free;
end;
// Parse all DictionaryEntries from XML file
// Download file from: www.imageen.com/files/UnitTestFiles/XML_TEST.xml
{
SAMPLE:
<?xml version="1.0" encoding="UTF-8"?>
<Proofreader>
<Rules Language="EN">
<DictionaryEntries>
<Entry>absolute</Entry>
<Entry>add</Entry>
<Entry>ancestor</Entry>
<Entry>anchor</Entry>
<Entry>begin</Entry>
...
OUTPUT:
absolute
add
ancestor
anchor
begin
...
}
var
ss : TStringList;
xmlDict: TIEDictionary; // Dict to parse source XML
navDict: TIEDictionary; // Dict to navigate XML structure
list: TObjectList;
i: integer;
begin
ss := TStringList.Create;
xmlDict := TIEDictionary.Create();
ss.LoadFromFile('D:\XML_TEST.xml');
xmlDict.parse( ss.Text );
// Output all entries of Proofreader->Rules->DictionaryEntries into "memo1"
navDict := xmlDict.GetDictionary('Proofreader', false);
navDict := navDict.GetDictionary('#content', false);
navDict := TIEDictionary(navDict.GetList('Rules', false)[0]);
navDict := navDict.GetDictionary('#content', false);
navDict := navDict.GetDictionary('DictionaryEntries', false);
navDict := navDict.GetDictionary('#content', false);
list := navDict.GetList('Entry', false);
for i := 0 to list.Count - 1 do
begin
navDict := TIEDictionary(list[i]).GetDictionary('#content', false);
memo1.lines.add( navDict.GetString('#text', false) );
end;
xmlDict.free;
ss.Free;
end;
// Save a PNG file as a lossless WebP with lossless compression (using ImageMagick plug-in)
var
imDict: TIEDictionary
begin
ImageEnView1.IO.LoadFromFile( 'D:\Image.png' );
imDict := TIEDictionary.Create();
imDict.Insert( 'webp:lossless', true );
imDict.Insert( 'webp:method', 0 );
imDict.Insert( 'webp:auto-filter', true );
ImageEnView1.IO.Params.Dict.Insert( 'ImageMagick', imDict );
ImageEnView1.IO.SaveToFile( 'D:\Image_out.webp' );
end;
// List items in "ImageMagick" dictionary
var
dict: TIEDictionary;
curr: TIEStrStrEnumerator;
key, val: String;
begin
dict := TIEDictionary( ImageEnView1.IO.Params.Dict.Get( 'ImageMagick', True, False ));
if dict = nil then
exit;
curr := TIEStrStrEnumerator.Create();
try
while dict.GetNext( curr ) do
begin
key := curr.item.key;
val := IEDictValueToStr( curr.item.value );
Memo1.Lines.Add( key + '=' + val );
end;
finally
curr.Free();
end;
end;
{
Result:
webp:method=0
webp:lossless=true
webp:auto-filter=true
}