xhtml.pp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. {
  2. $Id$
  3. This file is part of the Free Component Library
  4. XHTML helper classes
  5. Copyright (c) 2000 by
  6. Areca Systems GmbH / Sebastian Guenther, [email protected]
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. unit XHTML;
  14. {$MODE objfpc}
  15. {$H+}
  16. interface
  17. uses DOM, DOM_HTML;
  18. type
  19. TXHTMLTitleElement = class(TDOMElement);
  20. TXHTMLHeadElement = class(TDOMElement)
  21. private
  22. function GetTitleElement: TXHTMLTitleElement;
  23. public
  24. function RequestTitleElement: TXHTMLTitleElement;
  25. property TitleElement: TXHTMLTitleElement read GetTitleElement;
  26. end;
  27. TXHTMLBodyElement = class(TDOMElement);
  28. TXHTMLType = (xhtmlStrict, xhtmlTransitional);
  29. TXHTMLDocument = class(THTMLDocument)
  30. private
  31. function GetHeadElement: TXHTMLHeadElement;
  32. function GetBodyElement: TXHTMLBodyElement;
  33. public
  34. procedure CreateRoot(XHTMLType: TXHTMLType);
  35. function RequestHeadElement: TXHTMLHeadElement;
  36. function RequestBodyElement(const Lang: DOMString): TXHTMLBodyElement;
  37. property HeadElement: TXHTMLHeadElement read GetHeadElement;
  38. property BodyElement: TXHTMLBodyElement read GetBodyElement;
  39. end;
  40. implementation
  41. function TXHTMLHeadElement.RequestTitleElement: TXHTMLTitleElement;
  42. begin
  43. Result := TitleElement;
  44. if not Assigned(Result) then
  45. begin
  46. Result := TXHTMLTitleElement(OwnerDocument.CreateElement('title'));
  47. AppendChild(Result);
  48. end;
  49. end;
  50. function TXHTMLHeadElement.GetTitleElement: TXHTMLTitleElement;
  51. begin
  52. Result := TXHTMLTitleElement(FindNode('title'));
  53. end;
  54. procedure TXHTMLDocument.CreateRoot(XHTMLType: TXHTMLType);
  55. var
  56. s: DOMString;
  57. HtmlEl: TDOMElement;
  58. begin
  59. case XHTMLType of
  60. xhtmlStrict:
  61. s := 'html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"';
  62. xhtmlTransitional:
  63. s := 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"';
  64. end;
  65. AppendChild(CreateProcessingInstruction('DOCTYPE', s));
  66. HtmlEl := CreateElement('html');
  67. AppendChild(HtmlEl);
  68. HtmlEl['xmlns'] := 'http://www.w3.org/1999/xhtml';
  69. end;
  70. function TXHTMLDocument.RequestHeadElement: TXHTMLHeadElement;
  71. begin
  72. Result := HeadElement;
  73. if not Assigned(Result) then
  74. begin
  75. Result := TXHTMLHeadElement(CreateElement('head'));
  76. DocumentElement.AppendChild(Result);
  77. end;
  78. end;
  79. function TXHTMLDocument.RequestBodyElement(const Lang: DOMString):
  80. TXHTMLBodyElement;
  81. begin
  82. Result := BodyElement;
  83. if not Assigned(Result) then
  84. begin
  85. Result := TXHTMLBodyElement(CreateElement('body'));
  86. DocumentElement.AppendChild(Result);
  87. Result['xmlns'] := 'http://www.w3.org/1999/xhtml';
  88. Result['xml:lang'] := Lang;
  89. Result['lang'] := Lang;
  90. end;
  91. end;
  92. function TXHTMLDocument.GetHeadElement: TXHTMLHeadElement;
  93. begin
  94. Result := TXHTMLHeadElement(DocumentElement.FindNode('head'));
  95. end;
  96. function TXHTMLDocument.GetBodyElement: TXHTMLBodyElement;
  97. begin
  98. Result := TXHTMLBodyElement(DocumentElement.FindNode('body'));
  99. end;
  100. end.
  101. {
  102. $Log$
  103. Revision 1.3 2002-12-11 21:11:58 sg
  104. * TXHTMLDocument is now derived from THTMLDocument instead of TXMLDocument.
  105. Probably future versions of DOM_HTML will be able to completely replace
  106. this unit.
  107. Revision 1.2 2002/09/07 15:15:29 peter
  108. * old logs removed and tabs fixed
  109. }