1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #pragma once
21 
22 #include <svtools/svtdllapi.h>
23 #include <sal/types.h>
24 #include <stdexcept>
25 
26 namespace rtl {
27     class OUString;
28 };
29 enum class HtmlOptionId;
30 enum class HtmlTokenId : sal_Int16;
31 
32 // search the char for the CharName
33 sal_Unicode GetHTMLCharName( const rtl::OUString& rName );
34 
35 // search the TokenID for the token
36 SVT_DLLPUBLIC HtmlTokenId GetHTMLToken( const rtl::OUString& rName );
37 
38 // search the TokenId for an attribute token
39 HtmlOptionId GetHTMLOption( const rtl::OUString& rName );
40 
41 // search the 24-bit color for a color name (not found = SAL_MAX_UINT32)
42 SVT_DLLPUBLIC sal_uInt32 GetHTMLColor( const rtl::OUString& rName );
43 
44 enum class HtmlTokenId : sal_Int16
45 {
46     INVALID = -1,
47     NONE = 0,
48 // always starting from 256 on, greater than a char
49     TEXTTOKEN                      = 0x100,
50     SINGLECHAR,
51     NEWPARA,
52     TABCHAR,
53     RAWDATA,
54     LINEFEEDCHAR,
55 
56     // these will only be turned on
57     AREA, // Netscape 2.0
58     BASE, // HTML 3.0
59     COMMENT,
60     DOCTYPE,
61     EMBED, // Netscape 2.0            ignore </EMBED>
62     HORZRULE,                      // ignore </HR>
63     IMAGE,                         // ignore </IMG>
64     INPUT,                         // ignore </INPUT>
65     LINEBREAK,                     // </BR> -> <BR>
66     LINK, // HTML 3.0
67     META, // HTML 3.0                 ignore </META>
68     OPTION,                        // ignore </OPTION>
69     PARAM, // HotJava
70     SPACER, // Netscape 3.0b5      // ignore </SPACER>
71 
72     // tokens recognised using HTML character
73     NONBREAKSPACE,
74     SOFTHYPH,
75 
76     // these will be turned back off,
77     //  the off value is always located behind (+1) !!
78     ONOFF_START,
79     ABBREVIATION_ON = ONOFF_START, // HTML 3.0
80     ABBREVIATION_OFF, // HTML 3.0
81     ACRONYM_ON, // HTML 3.0
82     ACRONYM_OFF, // HTML 3.0
83     ADDRESS_ON,
84     ADDRESS_OFF,
85     ANCHOR_ON,
86     ANCHOR_OFF,
87     APPLET_ON, // HotJava
88     APPLET_OFF, // HotJava
89     AUTHOR_ON, // HTML 3.0
90     AUTHOR_OFF, // HTML 3.0
91     BANNER_ON, // HTML 3.0
92     BANNER_OFF, // HTML 3.0
93     BASEFONT_ON, // Netscape
94     BASEFONT_OFF, // Netscape
95     BIGPRINT_ON, // HTML 3.0
96     BIGPRINT_OFF, // HTML 3.0
97     BLINK_ON, // Netscape
98     BLINK_OFF, // Netscape
99     BLOCKQUOTE30_ON, // HTML 3.0
100     BLOCKQUOTE30_OFF, // HTML 3.0
101     BLOCKQUOTE_ON,
102     BLOCKQUOTE_OFF,
103     BODY_ON,
104     BODY_OFF,
105     BOLD_ON,
106     BOLD_OFF,
107     CAPTION_ON, // HTML 3.0
108     CAPTION_OFF, // HTML 3.0
109     CENTER_ON, // Netscape
110     CENTER_OFF,  // Netscape
111     CITATION_ON,
112     CITATION_OFF,
113     CODE_ON,
114     CODE_OFF,
115     COL_ON, // HTML3 Table Model Draft
116     COL_OFF, // HTML3 Table Model Draft
117     COLGROUP_ON, // HTML3 Table Model Draft
118     COLGROUP_OFF, // HTML3 Table Model Draft
119     CREDIT_ON, // HTML 3.0
120     CREDIT_OFF, // HTML 3.0
121     DD_ON,
122     DD_OFF,
123     DEFLIST_ON,
124     DEFLIST_OFF,
125     DELETEDTEXT_ON, // HTML 3.0
126     DELETEDTEXT_OFF, // HTML 3.0
127     DIRLIST_ON,
128     DIRLIST_OFF,
129     DIVISION_ON, // HTML 3.0
130     DIVISION_OFF, // HTML 3.0
131     DT_ON,
132     DT_OFF,
133     EMPHASIS_ON,
134     EMPHASIS_OFF,
135     FIGURE_ON, // HTML 3.0
136     FIGURE_OFF, // HTML 3.0
137     FONT_ON, // Netscape
138     FONT_OFF, // Netscape
139     FOOTNOTE_ON, // HTML 3.0
140     FOOTNOTE_OFF, // HTML 3.0
141     FORM_ON,
142     FORM_OFF,
143     FRAME_ON, // Netscape 2.0
144     FRAME_OFF, // Netscape 2.0
145     FRAMESET_ON, // Netscape 2.0
146     FRAMESET_OFF, // Netscape 2.0
147     HEAD1_ON,
148     HEAD1_OFF,
149     HEAD2_ON,
150     HEAD2_OFF,
151     HEAD3_ON,
152     HEAD3_OFF,
153     HEAD4_ON,
154     HEAD4_OFF,
155     HEAD5_ON,
156     HEAD5_OFF,
157     HEAD6_ON,
158     HEAD6_OFF,
159     HEAD_ON,
160     HEAD_OFF,
161     HTML_ON,
162     HTML_OFF,
163     IFRAME_ON, // IE 3.0b2
164     IFRAME_OFF, // IE 3.0b2
165     INSERTEDTEXT_ON, // HTML 3.0
166     INSERTEDTEXT_OFF, // HTML 3.0
167     ITALIC_ON,
168     ITALIC_OFF,
169     KEYBOARD_ON,
170     KEYBOARD_OFF,
171     LANGUAGE_ON, // HTML 3.0
172     LANGUAGE_OFF, // HTML 3.0
173     LISTHEADER_ON, // HTML 3.0
174     LISTHEADER_OFF, // HTML 3.0
175     LI_ON,
176     LI_OFF,
177     MAP_ON, // Netscape 2.0
178     MAP_OFF, // Netscape 2.0
179     MENULIST_ON,
180     MENULIST_OFF,
181     MULTICOL_ON, // Netscape 3.0b5
182     MULTICOL_OFF, // Netscape 3.0b5
183     NOBR_ON, // Netscape
184     NOBR_OFF, // Netscape
185     NOEMBED_ON, // Netscape 2.0
186     NOEMBED_OFF, // Netscape 2.0
187     NOFRAMES_ON, // Netscape 2.0
188     NOFRAMES_OFF, // Netscape 2.0
189     NOSCRIPT_ON, // Netscape 2.0
190     NOSCRIPT_OFF, // Netscape 3.0
191     NOTE_ON, // HTML 3.0
192     NOTE_OFF, // HTML 3.0
193     OBJECT_ON, // HotJava
194     OBJECT_OFF, // HotJava
195     ORDERLIST_ON,
196     ORDERLIST_OFF,
197     PARABREAK_ON,
198     PARABREAK_OFF,
199     PERSON_ON, // HTML 3.0
200     PERSON_OFF, // HTML 3.0
201     PLAINTEXT_ON, // HTML 3.0
202     PLAINTEXT_OFF, // HTML 3.0
203     PREFORMTXT_ON,
204     PREFORMTXT_OFF,
205     SAMPLE_ON,
206     SAMPLE_OFF,
207     SCRIPT_ON, // HTML 3.2
208     SCRIPT_OFF,    // HTML 3.2
209     SELECT_ON,
210     SELECT_OFF,
211     SHORTQUOTE_ON, // HTML 3.0
212     SHORTQUOTE_OFF, // HTML 3.0
213     SMALLPRINT_ON, // HTML 3.0
214     SMALLPRINT_OFF, // HTML 3.0
215     SPAN_ON, // Style Sheets
216     SPAN_OFF, // Style Sheets
217     STRIKETHROUGH_ON, // HTML 3.0
218     STRIKETHROUGH_OFF, // HTML 3.0
219     STRONG_ON,
220     STRONG_OFF,
221     STYLE_ON, // HTML 3.0
222     STYLE_OFF, // HTML 3.0
223     SUBSCRIPT_ON, // HTML 3.0
224     SUBSCRIPT_OFF, // HTML 3.0
225     SUPERSCRIPT_ON, // HTML 3.0
226     SUPERSCRIPT_OFF, // HTML 3.0
227     TABLE_ON, // HTML 3.0
228     TABLE_OFF, // HTML 3.0
229     TABLEDATA_ON, // HTML 3.0
230     TABLEDATA_OFF, // HTML 3.0
231     TABLEHEADER_ON, // HTML 3.0
232     TABLEHEADER_OFF, // HTML 3.0
233     TABLEROW_ON, // HTML 3.0
234     TABLEROW_OFF, // HTML 3.0
235     TBODY_ON, // HTML3 Table Model Draft
236     TBODY_OFF, // HTML3 Table Model Draft
237     TELETYPE_ON,
238     TELETYPE_OFF,
239     TEXTAREA_ON,
240     TEXTAREA_OFF,
241     TFOOT_ON, // HTML3 Table Model Draft
242     TFOOT_OFF, // HTML3 Table Model Draft
243     THEAD_ON, // HTML3 Table Model Draft
244     THEAD_OFF, // HTML3 Table Model Draft
245     TITLE_ON,
246     TITLE_OFF,
247     UNDERLINE_ON,
248     UNDERLINE_OFF,
249     UNORDERLIST_ON,
250     UNORDERLIST_OFF,
251     VARIABLE_ON,
252     VARIABLE_OFF,
253 
254     // obsolete features
255     XMP_ON,
256     XMP_OFF,
257     LISTING_ON,
258     LISTING_OFF,
259 
260     // proposed features
261     DEFINSTANCE_ON,
262     DEFINSTANCE_OFF,
263     STRIKE_ON,
264     STRIKE_OFF,
265 
266     UNKNOWNCONTROL_ON,
267     UNKNOWNCONTROL_OFF,
268 
269     // Microsoft features
270     COMMENT2_ON, // HTML 2.0 ?
271     COMMENT2_OFF, // HTML 2.0 ?
272     MARQUEE_ON,
273     MARQUEE_OFF,
274     PLAINTEXT2_ON, // HTML 2.0 ?
275     PLAINTEXT2_OFF, // HTML 2.0 ?
276 
277     SDFIELD_ON,
278     SDFIELD_OFF
279 };
280 
isOffToken(HtmlTokenId nToken)281 constexpr bool isOffToken(HtmlTokenId nToken)
282 {
283     return (nToken == HtmlTokenId::NONE || nToken >= HtmlTokenId::ONOFF_START)
284       ? (1 & static_cast<int>(nToken))
285       : throw std::logic_error("Assertion failed!"); // C++11 does not do assert in constexpr
286 }
287 
getOnToken(HtmlTokenId nToken)288 constexpr HtmlTokenId getOnToken(HtmlTokenId nToken)
289 {
290     return (nToken == HtmlTokenId::NONE || nToken >= HtmlTokenId::ONOFF_START)
291       ? HtmlTokenId(~1 & static_cast<int>(nToken))
292       : throw std::logic_error("Assertion failed!"); // C++11 does not do assert in constexpr
293 }
294 
295 // HTML attribute token (=Options)
296 
297 enum class HtmlOptionId
298 {
299 // always starting from 256 on, greater than a char
300 BOOL_START          = 0x100,
301 
302 // attributes without value
303     CHECKED              = BOOL_START,
304     COMPACT,
305     DECLARE, // IExplorer 3.0b5
306     DISABLED,
307     ISMAP,
308     MAYSCRIPT, // Netscape 3.0
309     MULTIPLE,
310     NOHREF, // Netscape
311     NORESIZE, // Netscape 2.0
312     NOSHADE, // Netscape
313     NOWRAP,
314     SDFIXED,
315     SELECTED,
316 BOOL_END,
317 
318 // attributes with a string as value
319 STRING_START        = BOOL_END,
320     ACCEPT               = STRING_START,
321     ACCESSKEY,
322     ALT,
323     AXIS,
324     CHAR, // HTML3 Table Model Draft
325     CHARSET,
326     CLASS,
327     CODE, // HotJava
328     CODETYPE,
329     CONTENT,
330     COORDS, // Netscape 2.0
331     ENCTYPE,
332     FACE, // IExplorer 2.0
333     FRAMEBORDER, // IExplorer 3.0
334     HTTPEQUIV,
335     LANGUAGE, // JavaScript
336     NAME,
337     PROMPT,
338     SHAPE,
339     STANDBY,
340     STYLE, // Style Sheets
341     TITLE,
342     VALUE,
343     SDVAL, // StarDiv NumberValue
344     SDNUM, // StarDiv NumberFormat
345     SDLIBRARY,
346     SDMODULE,
347 STRING_END,
348 
349 // attributes with an SGML identifier as value
350 SGMLID_START        = STRING_END,
351     ID                   = SGMLID_START,
352     TARGET, // Netscape 2.0
353     TO,
354 SGMLID_END,
355 
356 // attributes with a URI as value
357 URI_START           = SGMLID_END,
358     ACTION               = URI_START,
359     ARCHIVE,
360     BACKGROUND,
361     CLASSID,
362     CODEBASE, // HotJava
363     DATA,
364     HREF,
365     SCRIPT,
366     SRC,
367     USEMAP, // Netscape 2.0
368 URI_END,
369 
370 // attributes with a color as value (all Netscape)
371 COLOR_START         = URI_END,
372     ALINK                = COLOR_START,
373     BGCOLOR,
374     BORDERCOLOR, // IExplorer 2.0
375     BORDERCOLORLIGHT, // IExplorer 2.0
376     BORDERCOLORDARK, // IExplorer 2.0
377     COLOR,
378     LINK,
379     TEXT,
380     VLINK,
381 COLOR_END,
382 
383 // attributes with a numeric value
384 NUMBER_START        = COLOR_END,
385     BORDER               = NUMBER_START,
386     CELLSPACING, // HTML3 Table Model Draft
387     CELLPADDING, // HTML3 Table Model Draft
388     CHAROFF, // HTML3 Table Model Draft
389     COLSPAN,
390     FRAMESPACING, // IExplorer 3.0
391     GUTTER, // Netscape 3.0b5
392     HEIGHT,
393     HSPACE,          // Netscape
394     LEFT,
395     LOOP, // IExplorer 2.0
396     MARGINWIDTH, // Netscape 2.0
397     MARGINHEIGHT, // Netscape 2.0
398     MAXLENGTH,
399     ROWSPAN,
400     SCROLLAMOUNT, // IExplorer 2.0
401     SCROLLDELAY, // IExplorer 2.0
402     SPAN, // HTML3 Table Model Draft
403     TABINDEX,
404     VSPACE,          // Netscape
405     WIDTH,
406     ZINDEX,
407 NUMBER_END,
408 
409 // attributes with Enum values
410 ENUM_START          = NUMBER_END,
411     BEHAVIOR             = ENUM_START, // IExplorer 2.0
412     CLEAR,
413     DIR,
414     DIRECTION, // IExplorer 2.0
415     FORMAT,
416     FRAME, // HTML3 Table Model Draft
417     LANG,
418     METHOD,
419     REL,
420     REV,
421     RULES, // HTML3 Table Model Draft
422     SCROLLING, // Netscape 2.0
423     SDREADONLY,
424     SUBTYPE,
425     TYPE,
426     VALIGN,
427     VALUETYPE,
428     WRAP,
429 ENUM_END,
430 
431 // attributes with script code as value
432 SCRIPT_START        = ENUM_END,
433     ONABORT              = SCRIPT_START, // JavaScript
434     ONBLUR,      // JavaScript
435     ONCHANGE,    // JavaScript
436     ONCLICK,     // JavaScript
437     ONERROR,     // JavaScript
438     ONFOCUS,     // JavaScript
439     ONLOAD,      // JavaScript
440     ONMOUSEOUT,  // JavaScript
441     ONMOUSEOVER, // JavaScript
442     ONRESET,     // JavaScript
443     ONSELECT,    // JavaScript
444     ONSUBMIT,    // JavaScript
445     ONUNLOAD,    // JavaScript
446 
447     SDONABORT,       // StarBasic
448     SDONBLUR,        // StarBasic
449     SDONCHANGE,      // StarBasic
450     SDONCLICK,       // StarBasic
451     SDONERROR,       // StarBasic
452     SDONFOCUS,       // StarBasic
453     SDONLOAD,        // StarBasic
454     SDONMOUSEOUT,    // StarBasic
455     SDONMOUSEOVER,   // StarBasic
456     SDONRESET,       // StarBasic
457     SDONSELECT,      // StarBasic
458     SDONSUBMIT,      // StarBasic
459     SDONUNLOAD,      // StarBasic
460 SCRIPT_END,
461 
462 // attributes with context dependent values
463 CONTEXT_START       = SCRIPT_END,
464     ALIGN                = CONTEXT_START,
465     COLS, // Netscape 2.0 vs HTML 2.0
466     ROWS, // Netscape 2.0 vs HTML 2.0
467     SIZE,
468     START,
469 CONTEXT_END,
470 
471 // an unknown option
472 UNKNOWN                  = CONTEXT_END,
473 END
474 };
475 
476 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
477