unit SpkXMLTools;

{$mode ObjFpc}
{$H+}

interface

uses
  Graphics, SysUtils, SpkXMLParser;

type TSpkXMLTools = class
     private
     protected
     public
       class procedure Save(Node : TSpkXMLNode; Font : TFont); overload;
       class procedure Load(Node : TSpkXMLNode; Font : TFont); overload;
     end;

implementation

{ TXMLTools }

class procedure TSpkXMLTools.Load(Node: TSpkXMLNode; Font: TFont);

var Subnode, Subnode2 : TSpkXMLNode;

begin
if not(assigned(Node)) then
   raise exception.create('TSpkXMLTools.Load: Nieprawidłowa gałąź XML!');
if not(assigned(Font)) then
   raise exception.create('TSpkXMLTools.Load: Brak obiektu czcionki do wczytania!');

Subnode:=Node['Charset',false];
if assigned(Subnode) then
   Font.Charset:=TFontCharset(Subnode.TextAsInteger);

Subnode:=Node['Color',false];
if assigned(Subnode) then
   Font.Color:=Subnode.TextAsInteger;

Subnode:=Node['Name',false];
if assigned(Subnode) then
   Font.Name:=Subnode.Text;

Subnode:=Node['Orientation',false];
if assigned(Subnode) then
   Font.Orientation:=Subnode.TextAsInteger;

Subnode:=Node['Pitch',false];
if assigned(Subnode) then
   Font.Pitch:=TFontPitch(Subnode.TextAsInteger);

Subnode:=Node['Size',false];
if assigned(Subnode) then
   Font.Size:=Subnode.TextAsInteger;

Subnode:=Node['Style',false];
if assigned(Subnode) then
   begin
   Subnode2:=Subnode['Bold',false];
   if assigned(Subnode2) then
      if Subnode2.TextAsBoolean then
         Font.Style:=Font.Style + [fsBold] else
         Font.Style:=Font.Style - [fsBold];

   Subnode2:=Subnode['Italic',false];
   if assigned(Subnode2) then
      if Subnode2.TextAsBoolean then
         Font.Style:=Font.Style + [fsItalic] else
         Font.Style:=Font.Style - [fsItalic];

   Subnode2:=Subnode['Underline',false];
   if assigned(Subnode2) then
      if Subnode2.TextAsBoolean then
         Font.Style:=Font.Style + [fsUnderline] else
         Font.Style:=Font.Style - [fsUnderline];
   end;
end;

class procedure TSpkXMLTools.Save(Node: TSpkXMLNode; Font: TFont);

var Subnode, Subnode2 : TSpkXMLNode;

begin
if not(assigned(Node)) then
   raise exception.create('TSpkXMLTools.Save: Nieprawidłowa gałąź XML!');
if not(assigned(Font)) then
   raise exception.create('TSpkXMLTools.Save: Brak obiektu czcionki do zapisania!');

Subnode:=Node['Charset',true];
Subnode.TextAsInteger:=Font.Charset;

Subnode:=Node['Color',true];
Subnode.TextAsInteger:=Font.Color;

Subnode:=Node['Name',true];
Subnode.Text:=Font.Name;

Subnode:=Node['Orientation',true];
Subnode.TextAsInteger:=Font.Orientation;

Subnode:=Node['Pitch',true];
Subnode.TextAsInteger:=ord(Font.Pitch);

Subnode:=Node['Size',true];
Subnode.TextAsInteger:=Font.Size;

Subnode:=Node['Style',true];
Subnode2:=Subnode['Bold',true];
Subnode2.TextAsBoolean:=fsBold in Font.Style;

Subnode2:=Subnode['Italic',true];
Subnode2.TextAsBoolean:=fsItalic in Font.Style;

Subnode2:=Subnode['Underline',true];
Subnode2.TextAsBoolean:=fsUnderline in Font.Style;
end;

end.
