Ignore:
Timestamp:
Sep 8, 2010, 4:17:21 PM (14 years ago)
Author:
george
Message:
  • Přidáno: Z PHP kódů převedeno zobrazení stránek a hlavního menu. Pro generování kostry použity třídy HTMLClasses a XMLClasses.
  • Přidáno: Styly a obrázky.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/lazarus/Common/UHtmlClasses.pas

    r23 r24  
    66
    77uses
    8   UXmlClasses, Classes, SysUtils;
     8  UXmlClasses, Classes, SysUtils, Contnrs, UStringListEx;
    99
    1010type
    11   TStringArray = array of string;
    12 
    1311  TDomainAddress = class(TPersistent)
    1412  private
     
    9795  public
    9896    BlockType: TBlockType;
    99     SubItems: TList; // of THtmlElement;
     97    SubItems: TObjectList; // of THtmlElement;
    10098    constructor Create;
    10199    destructor Destroy; override;
     
    113111
    114112  TSizeUnits = (suPixels, suPercents);
     113
    115114  THtmlSize = record
    116115    Width: Integer;
     
    130129  end;
    131130
    132   THtmlPage = class
     131  THtmlDocument = class
    133132  private
    134133    function GetAsXmlDocument: TXmlDocument;
    135134  public
    136135    Title: string;
    137     Charset: string;
     136    ContentEncoding: string;
     137    ContentLanguage: string;
    138138    Body: THtmlBlock;
     139    Styles: TStringList;
     140    Scripts: TStringList;
    139141    property AsXmlDocument: TXmlDocument read GetAsXmlDocument;
    140142    constructor Create;
     
    142144  end;
    143145
    144 function Explode(Separator: Char; Source: string): TStringArray;
    145 
    146146implementation
    147 
    148 function Explode(Separator: Char; Source: string): TStringArray;
    149 begin
    150   SetLength(Result, 0);
    151   while Pos(Separator, Source) > 0 do begin
    152     SetLength(Result, Length(Result) + 1);
    153     Result[High(Result)] := Copy(Source, 1, Pos(Separator, Source) - 1);
    154     Delete(Source, 1, Length(Result[High(Result)]) + 1);
    155   end;
    156   SetLength(Result, Length(Result) + 1);
    157   Result[High(Result)] := Source;
    158 end;
    159147
    160148function LeftCutString(var Source, Output: string; Delimiter: string; Allowed: string = ''): Boolean;
     
    210198end;
    211199
    212 { THtmlPage }
    213 
    214 constructor THtmlPage.Create;
     200{ THtmlDocument }
     201
     202constructor THtmlDocument.Create;
    215203begin
    216204  Body := THtmlBlock.Create;
    217 end;
    218 
    219 destructor THtmlPage.Destroy;
     205  Styles := TStringList.Create;
     206  Scripts := TStringList.Create;
     207  ContentLanguage := 'en';
     208  ContentEncoding := 'utf-8';
     209end;
     210
     211destructor THtmlDocument.Destroy;
    220212begin
    221213  Body.Free;
     214  Styles.Free;
     215  Scripts.Free;
    222216  inherited;
    223217end;
    224218
    225 function THtmlPage.GetAsXmlDocument: TXmlDocument;
     219function THtmlDocument.GetAsXmlDocument: TXmlDocument;
     220var
     221  DocType: TXMLTag;
     222  HTMLTag: TXMLTag;
     223  I: Integer;
    226224begin
    227225  Result := TXmlDocument.Create;
    228226  with Result, Content do begin
    229227    Formated := True;
    230     TagName := 'html';
    231     with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
    232       TagName := 'head';
     228    DocType := TXMlTag.Create;
     229    DocType.Name := '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"';
     230    Doctype.EndTagSymbol := '';
     231    SubElements.Add(DocType);
     232    HTMLTag := TXMLTag.Create;
     233    with HTMLTag do begin
     234      Name := 'html';
    233235      with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
    234         TagName := 'title';
    235         with TXmlString(SubElements[SubElements.Add(TXmlString.Create)]) do begin
    236           Text := Title;
     236        Name := 'head';
     237        with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
     238          Name := 'title';
     239          with TXmlString(SubElements[SubElements.Add(TXmlString.Create)]) do begin
     240            Text := Title;
     241          end;
     242        end;
     243        with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
     244          Name := 'meta';
     245          Attributes.AddNameValue('http-equiv', 'Content-Language');
     246          Attributes.AddNameValue('content', ContentLanguage);
     247        end;
     248        with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
     249          Name := 'meta';
     250          Attributes.AddNameValue('http-equiv', 'Content-Type');
     251          Attributes.AddNameValue('content', 'text/html; charset=' + ContentEncoding);
     252        end;
     253        for I := 0 to Styles.Count - 1 do
     254        with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
     255          Name := 'link';
     256          Attributes.AddNameValue('rel', 'stylesheet');
     257          Attributes.AddNameValue('href', Styles[I]);
     258          Attributes.AddNameValue('type', 'text/css');
     259          Attributes.AddNameValue('media', 'all');
     260        end;
     261        for I := 0 to Scripts.Count - 1 do
     262        with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
     263          Name := 'script';
     264          ShringEmpty := False;
     265          Attributes.AddNameValue('type', 'text/javascript');
     266          Attributes.AddNameValue('src', Scripts[I]);
    237267        end;
    238268      end;
    239269      with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
    240         TagName := 'meta';
    241         Attributes.AddNameValue('http-equiv', 'Content-Language');
    242         Attributes.AddNameValue('content', 'cs');
    243       end;
    244       with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
    245         TagName := 'meta';
    246         Attributes.AddNameValue('http-equiv', 'Content-Type');
    247         Attributes.AddNameValue('content', 'text/html; charset=' + Charset);
     270        Name := 'body';
     271        SubElements.Add(Body.AsXmlElement);
    248272      end;
    249273    end;
    250     with TXmlTag(SubElements[SubElements.Add(TXmlTag.Create)]) do begin
    251       TagName := 'body';
    252       SubElements.Add(Body.AsXmlElement);
    253 
    254 
    255     end;
     274    SubElements.Add(HTMLTag);
    256275  end;
    257276end;
     
    261280constructor THtmlBlock.Create;
    262281begin
    263   SubItems := TList.Create;
     282  SubItems := TObjectList.Create;
    264283end;
    265284
    266285destructor THtmlBlock.Destroy;
    267 var
    268   I: Integer;
    269 begin
    270   for I := 0 to SubItems.Count - 1 do THtmlElement(SubItems[I]).Free;
     286begin
    271287  SubItems.Free;
    272288  inherited;
     
    280296  with TXmlTag(Result) do begin
    281297    case BlockType of
    282       btBlockLevel: TagName := 'div';
    283       btInline: TagName := 'span';
    284       btNoTag: TagName := '';
     298      btBlockLevel: Name := 'div';
     299      btInline: Name := 'span';
     300      btNoTag: Name := '';
    285301    end;
    286302    for I := 0 to SubItems.Count - 1 do
     
    351367procedure TIpAddress.SetAsString(const Value: string);
    352368var
    353   Parts: TStringArray;
    354 begin
    355   Parts := Explode('.', Value);
     369  Parts: TStringListEx;
     370begin
    356371  try
     372    Parts := TStringListEx.Create;
     373    Parts.Explode('.', Value);
     374    try
    357375//    if Length(Parts) = 4 then begin
    358     Octets[0] := StrToInt(Parts[3]);
    359     Octets[1] := StrToInt(Parts[2]);
    360     Octets[2] := StrToInt(Parts[1]);
    361     Octets[3] := StrToInt(Parts[0]);
     376      Octets[0] := StrToInt(Parts[3]);
     377      Octets[1] := StrToInt(Parts[2]);
     378      Octets[2] := StrToInt(Parts[1]);
     379      Octets[3] := StrToInt(Parts[0]);
    362380//    end else raise EConvertError.Create('String to IP address conversion error');
    363   except
    364     raise EConvertError.Create('String to IP address conversion error');
     381    except
     382      raise EConvertError.Create('String to IP address conversion error');
     383    end;
     384  finally
     385    Parts.Free;
    365386  end;
    366387end;
     
    430451procedure TDomainAddress.SetAsString(const Value: string);
    431452var
    432   StrArray: TStringArray;
     453  StrArray: TStringListEx;
    433454  I: Integer;
    434455begin
    435   StrArray := Explode('.', Value);
    436   SetLength(Levels, Length(StrArray));
    437   for I := 0 to High(StrArray) do Levels[High(StrArray) - I] := StrArray[I];
     456  try
     457    StrArray := TStringListEx.Create;
     458    StrArray.Explode('.', Value);
     459    SetLength(Levels, StrArray.Count);
     460    for I := 0 to StrArray.Count do
     461      Levels[StrArray.Count - I] := StrArray[I];
     462  finally
     463    StrArray.Free;
     464  end;
    438465end;
    439466
     
    455482  Result := TXmlTag.Create;
    456483  with TXmlTag(Result) do begin
    457     TagName := 'a';
     484    Name := 'a';
    458485    Attributes.Add('href='+Target.AsString);
    459486    if Assigned(Content) then SubElements.Add(Content.AsXmlElement);
     
    522549  Result := TXmlTag.Create;
    523550  with TXmlTag(Result) do begin
    524     TagName := 'img';
     551    Name := 'img';
    525552    Attributes.AddNameValue('src', Source.AsString);
    526553    Attributes.AddNameValue('width', IntToStr(Size.Width));
Note: See TracChangeset for help on using the changeset viewer.