2
$Id: htmldefs.pp,v 1.2 2003/03/16 22:32:44 sg Exp $
3
This file is part of the Free Component Library
5
HTML definitions and utility functions
6
Copyright (c) 2000-2002 by
7
Areca Systems GmbH / Sebastian Guenther, sg@freepascal.org
9
See the file COPYING.FPC, included in this distribution,
10
for details about the copyright.
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
**********************************************************************}
28
THTMLElementFlags = set of (
29
efSubelementContent, // may have subelements
30
efPCDATAContent, // may have PCDATA content
31
efPreserveWhitespace); // preserve all whitespace
33
PHTMLElementProps = ^THTMLElementProps;
34
THTMLElementProps = record
36
Flags: THTMLElementFlags;
42
HTMLElProps: array[0..78] of THTMLElementProps = (
43
(Name: 'a'; Flags: [efSubelementContent, efPCDATAContent]),
44
(Name: 'abbr'; Flags: [efSubelementContent, efPCDATAContent]),
45
(Name: 'acronym'; Flags: [efSubelementContent, efPCDATAContent]),
46
(Name: 'address'; Flags: [efSubelementContent, efPCDATAContent]),
47
(Name: 'applet'; Flags: [efSubelementContent, efPCDATAContent]),
48
(Name: 'b'; Flags: [efSubelementContent, efPCDATAContent]),
49
(Name: 'basefont'; Flags: []),
50
(Name: 'bdo'; Flags: [efSubelementContent, efPCDATAContent]),
51
(Name: 'big'; Flags: [efSubelementContent, efPCDATAContent]),
52
(Name: 'blockquote';Flags: [efSubelementContent]),
53
(Name: 'body'; Flags: [efSubelementContent]),
54
(Name: 'br'; Flags: []),
55
(Name: 'button'; Flags: [efSubelementContent, efPCDATAContent]),
56
(Name: 'caption'; Flags: [efSubelementContent, efPCDATAContent]),
57
(Name: 'center'; Flags: [efSubelementContent]),
58
(Name: 'cite'; Flags: [efSubelementContent, efPCDATAContent]),
59
(Name: 'code'; Flags: [efSubelementContent, efPCDATAContent]),
60
(Name: 'col'; Flags: []),
61
(Name: 'colgroup'; Flags: [efSubelementContent]),
62
(Name: 'del'; Flags: [efSubelementContent]),
63
(Name: 'dfn'; Flags: [efSubelementContent, efPCDATAContent]),
64
(Name: 'dir'; Flags: [efSubelementContent]),
65
(Name: 'div'; Flags: [efSubelementContent]),
66
(Name: 'dl'; Flags: [efSubelementContent]),
67
(Name: 'em'; Flags: [efSubelementContent, efPCDATAContent]),
68
(Name: 'fieldset'; Flags: [efSubelementContent, efPCDATAContent]),
69
(Name: 'font'; Flags: [efSubelementContent, efPCDATAContent]),
70
(Name: 'form'; Flags: [efSubelementContent]),
71
(Name: 'h1'; Flags: [efSubelementContent, efPCDATAContent]),
72
(Name: 'h2'; Flags: [efSubelementContent, efPCDATAContent]),
73
(Name: 'h3'; Flags: [efSubelementContent, efPCDATAContent]),
74
(Name: 'h4'; Flags: [efSubelementContent, efPCDATAContent]),
75
(Name: 'h5'; Flags: [efSubelementContent, efPCDATAContent]),
76
(Name: 'h6'; Flags: [efSubelementContent, efPCDATAContent]),
77
(Name: 'head'; Flags: [efSubelementContent]),
78
(Name: 'hr'; Flags: []),
79
(Name: 'html'; Flags: [efSubelementContent]),
80
(Name: 'i'; Flags: [efSubelementContent, efPCDATAContent]),
81
(Name: 'iframe'; Flags: [efSubelementContent]),
82
(Name: 'img'; Flags: []),
83
(Name: 'input'; Flags: []),
84
(Name: 'ins'; Flags: [efSubelementContent]),
85
(Name: 'isindex'; Flags: []),
86
(Name: 'kbd'; Flags: [efSubelementContent, efPCDATAContent]),
87
(Name: 'label'; Flags: [efSubelementContent, efPCDATAContent]),
88
(Name: 'link'; Flags: []),
89
(Name: 'map'; Flags: [efSubelementContent]),
90
(Name: 'menu'; Flags: [efSubelementContent]),
91
(Name: 'meta'; Flags: []),
92
(Name: 'noframes'; Flags: [efSubelementContent, efPCDATAContent]),
93
(Name: 'noscript'; Flags: [efSubelementContent, efPCDATAContent]),
94
(Name: 'object'; Flags: [efSubelementContent, efPCDATAContent]),
95
(Name: 'ol'; Flags: [efSubelementContent]),
96
(Name: 'p'; Flags: [efSubelementContent, efPCDATAContent]),
97
(Name: 'pre'; Flags: [efSubelementContent, efPCDATAContent, efPreserveWhitespace]),
98
(Name: 'q'; Flags: [efSubelementContent, efPCDATAContent]),
99
(Name: 's'; Flags: [efSubelementContent, efPCDATAContent]),
100
(Name: 'samp'; Flags: [efSubelementContent, efPCDATAContent]),
101
(Name: 'script'; Flags: [efPCDATAContent]),
102
(Name: 'select'; Flags: [efSubelementContent]),
103
(Name: 'small'; Flags: [efSubelementContent, efPCDATAContent]),
104
(Name: 'span'; Flags: [efSubelementContent, efPCDATAContent]),
105
(Name: 'strike'; Flags: [efSubelementContent, efPCDATAContent]),
106
(Name: 'strong'; Flags: [efSubelementContent, efPCDATAContent]),
107
(Name: 'style'; Flags: [efPCDATAContent]),
108
(Name: 'sub'; Flags: [efSubelementContent, efPCDATAContent]),
109
(Name: 'sup'; Flags: [efSubelementContent, efPCDATAContent]),
110
(Name: 'table'; Flags: [efSubelementContent]),
111
(Name: 'textarea'; Flags: [efPCDATAContent]),
112
(Name: 'tbody'; Flags: [efSubelementContent]),
113
(Name: 'td'; Flags: [efSubelementContent, efPCDATAContent]),
114
(Name: 'tfoot'; Flags: [efSubelementContent]),
115
(Name: 'th'; Flags: [efSubelementContent, efPCDATAContent]),
116
(Name: 'thead'; Flags: [efSubelementContent]),
117
(Name: 'tr'; Flags: [efSubelementContent]),
118
(Name: 'tt'; Flags: [efSubelementContent, efPCDATAContent]),
119
(Name: 'u'; Flags: [efSubelementContent, efPCDATAContent]),
120
(Name: 'ul'; Flags: [efSubelementContent]),
121
(Name: 'var'; Flags: [efSubelementContent, efPCDATAContent]));
124
// ISO8859-1 mapping:
125
HTMLEntities: array[#160..#255] of String = (
127
'nbsp', 'iexcl', 'cent', 'pound', 'curren', 'yen', 'brvbar', 'sect',
128
'uml', 'copy', 'ordf', 'laquo', 'not', 'shy', 'reg', 'macr',
129
'deg', 'plusmn', 'sup2', 'sup3', 'acute', 'micro', 'para', 'middot',
130
'cedil', 'sup1', 'ordm', 'raquo', 'frac14', 'frac12', 'frac34', 'iquest',
132
'Agrave', 'Aacute', 'Acirc', 'Atilde', 'Auml', 'Aring', 'AElig', 'Ccedil',
133
'Egrave', 'Eacute', 'Ecirc', 'Euml', 'Igrave', 'Iacute', 'Icirc', 'Iuml',
134
'ETH', 'Ntilde', 'Ograve', 'Oacute', 'Ocirc', 'Otilde', 'Ouml', 'times',
135
'Oslash', 'Ugrave', 'Uacute', 'Ucirc', 'Uuml', 'Yacute', 'THORN', 'szlig',
137
'agrave', 'aacute', 'acirc', 'atilde', 'auml', 'aring', 'aelig', 'ccedil',
138
'egrave', 'eacute', 'ecirc', 'euml', 'igrave', 'iacute', 'icirc', 'iuml',
139
'eth', 'ntilde', 'ograve', 'oacute', 'ocirc', 'otilde', 'ouml', 'divide',
140
'oslash', 'ugrave', 'uacute', 'ucirc', 'uuml', 'yacute', 'thorn', 'yuml');
143
UnicodeHTMLEntities: array[0..141] of String = (
290
function ResolveHTMLEntityReference(const Name: String;
291
var Entity: Char): Boolean;
299
function ResolveHTMLEntityReference(const Name: String;
300
var Entity: Char): Boolean;
305
if Name = 'quot' then
309
end else if Name = 'apos' then
313
end else if Name = 'amp' then
317
end else if Name = 'lt' then
321
end else if Name = 'gt' then
325
end else if (Length(Name) > 0) and (Name[1] = '#') then
327
for i := 2 to Length(Name) do
328
if (Name[i] < '0') or (Name[i] > '9') then
332
Entity := Chr(StrToInt(Copy(Name, 2, i - 1)));
338
for Ent := Low(HTMLEntities) to High(HTMLEntities) do
339
if HTMLEntities[Ent] = Name then
353
$Log: htmldefs.pp,v $
354
Revision 1.2 2003/03/16 22:32:44 sg
355
* Fixed td and th attributes
357
Revision 1.1 2002/11/29 18:04:25 sg
358
* Improved HTML writing, now uses the HTML definition unit
359
(moved from FPDoc into FCL)