diff --git a/htmlparser/src/nsHTMLTags.cpp b/htmlparser/src/nsHTMLTags.cpp
new file mode 100644
index 00000000000..9e4131ae0d4
--- /dev/null
+++ b/htmlparser/src/nsHTMLTags.cpp
@@ -0,0 +1,61 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is Mozilla Communicator client code.
+ *
+ * The Initial Developer of the Original Code is Netscape Communications
+ * Corporation. Portions created by Netscape are Copyright (C) 1998
+ * Netscape Communications Corporation. All Rights Reserved.
+ */
+
+/* Do not edit - generated by gentags.pl */
+#include
+#include "nsHTMLTags.h"
+
+static char* tagTable[] = {
+ "A", "ABBR", "ACRONYM", "ADDRESS", "APPLET", "AREA", "B", "BASE",
+ "BASEFONT", "BDO", "BIG", "BLINK", "BLOCKQUOTE", "BODY", "BR", "BUTTON",
+ "CAPTION", "CENTER", "CITE", "CODE", "COL", "COLGROUP", "DD", "DEL", "DFN",
+ "DIR", "DIV", "DL", "DT", "EM", "EMBED", "FIELDSET", "FONT", "FORM",
+ "FRAME", "FRAMESET", "H1", "H2", "H3", "H4", "H5", "H6", "HEAD", "HR",
+ "HTML", "I", "IFRAME", "ILAYER", "IMG", "INPUT", "INS", "ISINDEX", "KBD",
+ "KEYGEN", "LABEL", "LAYER", "LEGEND", "LI", "LINK", "LISTING", "MAP",
+ "MENU", "META", "MULTICOL", "NOBR", "NOEMBED", "NOFRAMES", "NOLAYER",
+ "NOSCRIPT", "OBJECT", "OL", "OPTGROUP", "OPTION", "P", "PARAM",
+ "PLAINTEXT", "PRE", "Q", "S", "SAMP", "SCRIPT", "SELECT", "SERVER",
+ "SMALL", "SPACER", "SPAN", "STRIKE", "STRONG", "STYLE", "SUB", "SUP",
+ "TABLE", "TBODY", "TD", "TEXTAREA", "TFOOT", "TH", "THEAD", "TITLE", "TR",
+ "TT", "U", "UL", "VAR", "WBR", "XMP"
+};
+
+nsHTMLTag NS_TagToEnum(const char* aTagName) {
+ int low = 0;
+ int high = NS_HTML_TAG_MAX - 1;
+ while (low <= high) {
+ int middle = (low + high) >> 1;
+ int result = strcmp(aTagName, tagTable[middle]);
+ if (result == 0)
+ return (nsHTMLTag) middle;
+ if (result < 0)
+ high = middle - 1;
+ else
+ low = middle + 1;
+ }
+ return eHTMLTag_userdefined;
+}
+
+const char* NS_EnumToTag(nsHTMLTag aTagID) {
+ if ((unsigned int)aTagID > NS_HTML_TAG_MAX) {
+ return 0;
+ }
+ return tagTable[(int) aTagID];
+}
diff --git a/htmlparser/src/nsHTMLTags.h b/htmlparser/src/nsHTMLTags.h
new file mode 100644
index 00000000000..67c9920aa39
--- /dev/null
+++ b/htmlparser/src/nsHTMLTags.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is Mozilla Communicator client code.
+ *
+ * The Initial Developer of the Original Code is Netscape Communications
+ * Corporation. Portions created by Netscape are Copyright (C) 1998
+ * Netscape Communications Corporation. All Rights Reserved.
+ */
+
+/* Do not edit - generated by gentags.pl */
+#ifndef nsHTMLTags_h___
+#define nsHTMLTags_h___
+#include "nshtmlpars.h"
+enum nsHTMLTag {
+ eHTMLTag_a=0, eHTMLTag_abbr=1, eHTMLTag_acronym=2, eHTMLTag_address=3,
+ eHTMLTag_applet=4, eHTMLTag_area=5, eHTMLTag_b=6, eHTMLTag_base=7,
+ eHTMLTag_basefont=8, eHTMLTag_bdo=9, eHTMLTag_big=10, eHTMLTag_blink=11,
+ eHTMLTag_blockquote=12, eHTMLTag_body=13, eHTMLTag_br=14,
+ eHTMLTag_button=15, eHTMLTag_caption=16, eHTMLTag_center=17,
+ eHTMLTag_cite=18, eHTMLTag_code=19, eHTMLTag_col=20, eHTMLTag_colgroup=21,
+ eHTMLTag_dd=22, eHTMLTag_del=23, eHTMLTag_dfn=24, eHTMLTag_dir=25,
+ eHTMLTag_div=26, eHTMLTag_dl=27, eHTMLTag_dt=28, eHTMLTag_em=29,
+ eHTMLTag_embed=30, eHTMLTag_fieldset=31, eHTMLTag_font=32,
+ eHTMLTag_form=33, eHTMLTag_frame=34, eHTMLTag_frameset=35, eHTMLTag_h1=36,
+ eHTMLTag_h2=37, eHTMLTag_h3=38, eHTMLTag_h4=39, eHTMLTag_h5=40,
+ eHTMLTag_h6=41, eHTMLTag_head=42, eHTMLTag_hr=43, eHTMLTag_html=44,
+ eHTMLTag_i=45, eHTMLTag_iframe=46, eHTMLTag_ilayer=47, eHTMLTag_img=48,
+ eHTMLTag_input=49, eHTMLTag_ins=50, eHTMLTag_isindex=51, eHTMLTag_kbd=52,
+ eHTMLTag_keygen=53, eHTMLTag_label=54, eHTMLTag_layer=55,
+ eHTMLTag_legend=56, eHTMLTag_li=57, eHTMLTag_link=58, eHTMLTag_listing=59,
+ eHTMLTag_map=60, eHTMLTag_menu=61, eHTMLTag_meta=62, eHTMLTag_multicol=63,
+ eHTMLTag_nobr=64, eHTMLTag_noembed=65, eHTMLTag_noframes=66,
+ eHTMLTag_nolayer=67, eHTMLTag_noscript=68, eHTMLTag_object=69,
+ eHTMLTag_ol=70, eHTMLTag_optgroup=71, eHTMLTag_option=72, eHTMLTag_p=73,
+ eHTMLTag_param=74, eHTMLTag_plaintext=75, eHTMLTag_pre=76, eHTMLTag_q=77,
+ eHTMLTag_s=78, eHTMLTag_samp=79, eHTMLTag_script=80, eHTMLTag_select=81,
+ eHTMLTag_server=82, eHTMLTag_small=83, eHTMLTag_spacer=84,
+ eHTMLTag_span=85, eHTMLTag_strike=86, eHTMLTag_strong=87,
+ eHTMLTag_style=88, eHTMLTag_sub=89, eHTMLTag_sup=90, eHTMLTag_table=91,
+ eHTMLTag_tbody=92, eHTMLTag_td=93, eHTMLTag_textarea=94, eHTMLTag_tfoot=95,
+ eHTMLTag_th=96, eHTMLTag_thead=97, eHTMLTag_title=98, eHTMLTag_tr=99,
+ eHTMLTag_tt=100, eHTMLTag_u=101, eHTMLTag_ul=102, eHTMLTag_var=103,
+ eHTMLTag_wbr=104, eHTMLTag_xmp=105,
+
+ /* The remaining enums are not for tags */
+ eHTMLTag_text=106, eHTMLTag_whitespace=107, eHTMLTag_newline=108,
+ eHTMLTag_comment=109, eHTMLTag_entity=110, eHTMLTag_userdefined=111,
+ eHTMLTag_unknown=112, eHTMLTag_secret_h1style=113,
+ eHTMLTag_secret_h2style=114, eHTMLTag_secret_h3style=115,
+ eHTMLTag_secret_h4style=116, eHTMLTag_secret_h5style=117,
+ eHTMLTag_secret_h6style=118
+};
+#define NS_HTML_TAG_MAX 106
+
+extern NS_HTMLPARS nsHTMLTag NS_TagToEnum(const char* aTag);
+extern NS_HTMLPARS const char* NS_EnumToTag(nsHTMLTag aEnum);
+#endif /* nsHTMLTags_h___ */
diff --git a/htmlparser/tools/gentags.pl b/htmlparser/tools/gentags.pl
new file mode 100644
index 00000000000..01dfc9c197b
--- /dev/null
+++ b/htmlparser/tools/gentags.pl
@@ -0,0 +1,292 @@
+#! /usr/local/bin/perl
+
+# The contents of this file are subject to the Netscape Public License
+# Version 1.0 (the "License"); you may not use this file except in
+# compliance with the License. You may obtain a copy of the License at
+# http://www.mozilla.org/NPL/
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# The Original Code is Mozilla Communicator client code.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are Copyright (C) 1998
+# Netscape Communications Corporation. All Rights Reserved.
+
+######################################################################
+
+# Table of tag names; it doesn't have to be sorted because code
+# below will do it. However, for the sake of ease of additions, keep
+# it sorted so that its easy to tell where to add a new tag and that
+# the tag hasn't already been added.
+$i = 0;
+$tags[$i++] = "a";
+$tags[$i++] = "abbr";
+$tags[$i++] = "acronym";
+$tags[$i++] = "address";
+$tags[$i++] = "applet";
+$tags[$i++] = "area";
+$tags[$i++] = "b";
+$tags[$i++] = "base";
+$tags[$i++] = "basefont";
+$tags[$i++] = "bdo";
+$tags[$i++] = "big";
+$tags[$i++] = "blink";
+$tags[$i++] = "blockquote";
+$tags[$i++] = "body";
+$tags[$i++] = "br";
+$tags[$i++] = "button";
+$tags[$i++] = "caption";
+$tags[$i++] = "center";
+$tags[$i++] = "cite";
+$tags[$i++] = "code";
+$tags[$i++] = "col";
+$tags[$i++] = "colgroup";
+$tags[$i++] = "dd";
+$tags[$i++] = "del";
+$tags[$i++] = "dfn";
+$tags[$i++] = "dir";
+$tags[$i++] = "div";
+$tags[$i++] = "dl";
+$tags[$i++] = "dt";
+$tags[$i++] = "em";
+$tags[$i++] = "embed";
+$tags[$i++] = "fieldset";
+$tags[$i++] = "font";
+$tags[$i++] = "form";
+$tags[$i++] = "frame";
+$tags[$i++] = "frameset";
+$tags[$i++] = "h1";
+$tags[$i++] = "h2";
+$tags[$i++] = "h3";
+$tags[$i++] = "h4";
+$tags[$i++] = "h5";
+$tags[$i++] = "h6";
+$tags[$i++] = "head";
+$tags[$i++] = "hr";
+$tags[$i++] = "html";
+$tags[$i++] = "i";
+$tags[$i++] = "iframe";
+$tags[$i++] = "ilayer";
+$tags[$i++] = "img";
+$tags[$i++] = "input";
+$tags[$i++] = "ins";
+$tags[$i++] = "isindex";
+$tags[$i++] = "kbd";
+$tags[$i++] = "keygen";
+$tags[$i++] = "label";
+$tags[$i++] = "layer";
+$tags[$i++] = "legend";
+$tags[$i++] = "li";
+$tags[$i++] = "link";
+$tags[$i++] = "listing";
+$tags[$i++] = "map";
+$tags[$i++] = "menu";
+$tags[$i++] = "meta";
+$tags[$i++] = "multicol";
+$tags[$i++] = "nobr";
+$tags[$i++] = "noembed";
+$tags[$i++] = "noframes";
+$tags[$i++] = "nolayer";
+$tags[$i++] = "noscript";
+$tags[$i++] = "object";
+$tags[$i++] = "ol";
+$tags[$i++] = "optgroup";
+$tags[$i++] = "option";
+$tags[$i++] = "p";
+$tags[$i++] = "param";
+$tags[$i++] = "plaintext";
+$tags[$i++] = "pre";
+$tags[$i++] = "q";
+$tags[$i++] = "s";
+$tags[$i++] = "samp";
+$tags[$i++] = "script";
+$tags[$i++] = "select";
+$tags[$i++] = "server";
+$tags[$i++] = "small";
+$tags[$i++] = "spacer";
+$tags[$i++] = "span";
+$tags[$i++] = "strike";
+$tags[$i++] = "strong";
+$tags[$i++] = "style";
+$tags[$i++] = "sub";
+$tags[$i++] = "sup";
+$tags[$i++] = "table";
+$tags[$i++] = "tbody";
+$tags[$i++] = "td";
+$tags[$i++] = "textarea";
+$tags[$i++] = "tfoot";
+$tags[$i++] = "th";
+$tags[$i++] = "thead";
+$tags[$i++] = "title";
+$tags[$i++] = "tr";
+$tags[$i++] = "tt";
+$tags[$i++] = "u";
+$tags[$i++] = "ul";
+$tags[$i++] = "var";
+$tags[$i++] = "wbr";
+$tags[$i++] = "xmp";
+
+######################################################################
+
+# These are not tags; rather they are extra values to place into the
+# tag enumeration after the normal tags. These do not need to be sorted
+# and they do not go into the tag table, just into the tag enumeration.
+$extra = 0;
+$extra_tags[$extra++] = "text";
+$extra_tags[$extra++] = "whitespace";
+$extra_tags[$extra++] = "newline";
+$extra_tags[$extra++] = "comment";
+$extra_tags[$extra++] = "entity";
+$extra_tags[$extra++] = "userdefined";
+$extra_tags[$extra++] = "unknown";
+$extra_tags[$extra++] = "secret_h1style";
+$extra_tags[$extra++] = "secret_h2style";
+$extra_tags[$extra++] = "secret_h3style";
+$extra_tags[$extra++] = "secret_h4style";
+$extra_tags[$extra++] = "secret_h5style";
+$extra_tags[$extra++] = "secret_h6style";
+
+######################################################################
+
+# Sort the tag table before using it
+@tags = sort @tags;
+
+$copyright = "/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the \"License\"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an \"AS IS\"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is Mozilla Communicator client code.
+ *
+ * The Initial Developer of the Original Code is Netscape Communications
+ * Corporation. Portions created by Netscape are Copyright (C) 1998
+ * Netscape Communications Corporation. All Rights Reserved.
+ */
+
+/* Do not edit - generated by gentags.pl */
+";
+
+######################################################################
+
+$file_base = @ARGV[0];
+
+# Generate the header file first
+open(HEADER_FILE, ">$file_base.h");
+
+# Print out copyright and do not edit notice
+print HEADER_FILE $copyright;
+print HEADER_FILE "#ifndef " . $file_base . "_h___\n";
+print HEADER_FILE "#define " . $file_base . "_h___\n";
+print HEADER_FILE "#include \"nshtmlpars.h\"\n";
+
+# Print out enum's for the tag symbols
+print HEADER_FILE "enum nsHTMLTag {\n ";
+$width = 2;
+for ($j = 0; $j < $i; $j++) {
+ $lower = $tags[$j];
+ $lower =~ tr/A-Z/a-z/;
+ $str = "eHTMLTag_" . $lower . "=" . $j;
+ $str = $str . ", ";
+ $len = length($str);
+ if ($width + $len > 78) {
+ print HEADER_FILE "\n ";
+ $width = 2;
+ }
+ print HEADER_FILE $str;
+ $width = $width + $len;
+}
+print HEADER_FILE "\n\n /* The remaining enums are not for tags */\n ";
+
+# Print out extra enum's that are not in the tag table
+$width = 2;
+for ($k = 0; $k < $extra; $k++) {
+ $lower = $extra_tags[$k];
+ $lower =~ tr/A-Z/a-z/;
+ $str = "eHTMLTag_" . $lower . "=" . ($j + $k);
+ if ($k < $extra - 1) {
+ $str = $str . ", ";
+ }
+ $len = length($str);
+ if ($width + $len > 78) {
+ print HEADER_FILE "\n ";
+ $width = 2;
+ }
+ print HEADER_FILE $str;
+ $width = $width + $len;
+}
+
+print HEADER_FILE "\n};\n#define NS_HTML_TAG_MAX " . $j . "\n\n";
+print HEADER_FILE
+ "extern NS_HTMLPARS nsHTMLTag NS_TagToEnum(const char* aTag);\n";
+print HEADER_FILE
+ "extern NS_HTMLPARS const char* NS_EnumToTag(nsHTMLTag aEnum);\n";
+print HEADER_FILE "#endif /* " . $file_base . "_h___ */\n";
+close(HEADER_FILE);
+
+######################################################################
+
+# Generate the source file
+open(CPP_FILE, ">$file_base.cpp");
+print CPP_FILE $copyright;
+print CPP_FILE "#include \n";
+print CPP_FILE "#include \"$file_base.h\"\n\n";
+
+# Print out table of tag names
+print CPP_FILE "static char* tagTable[] = {\n ";
+$width = 2;
+for ($j = 0; $j < $i; $j++) {
+ $upper = $tags[$j];
+ $upper =~ tr/a-z/A-Z/;
+ $str = "\"" . $upper . "\"";
+ if ($j < $i - 1) {
+ $str = $str . ", ";
+ }
+ $len = length($str);
+ if ($width + $len > 78) {
+ print CPP_FILE "\n ";
+ $width = 2;
+ }
+ print CPP_FILE $str;
+ $width = $width + $len;
+}
+print CPP_FILE "\n};\n";
+
+# Finally, dump out the search routine that takes a char* and finds it
+# in the table.
+print CPP_FILE "
+nsHTMLTag NS_TagToEnum(const char* aTagName) {
+ int low = 0;
+ int high = NS_HTML_TAG_MAX - 1;
+ while (low <= high) {
+ int middle = (low + high) >> 1;
+ int result = strcmp(aTagName, tagTable[middle]);
+ if (result == 0)
+ return (nsHTMLTag) middle;
+ if (result < 0)
+ high = middle - 1;
+ else
+ low = middle + 1;
+ }
+ return eHTMLTag_userdefined;
+}
+
+const char* NS_EnumToTag(nsHTMLTag aTagID) {
+ if ((unsigned int)aTagID > NS_HTML_TAG_MAX) {
+ return 0;
+ }
+ return tagTable[(int) aTagID];
+}
+";
+
+close(CPP_FILE);
diff --git a/parser/htmlparser/src/nsHTMLTags.cpp b/parser/htmlparser/src/nsHTMLTags.cpp
new file mode 100644
index 00000000000..9e4131ae0d4
--- /dev/null
+++ b/parser/htmlparser/src/nsHTMLTags.cpp
@@ -0,0 +1,61 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is Mozilla Communicator client code.
+ *
+ * The Initial Developer of the Original Code is Netscape Communications
+ * Corporation. Portions created by Netscape are Copyright (C) 1998
+ * Netscape Communications Corporation. All Rights Reserved.
+ */
+
+/* Do not edit - generated by gentags.pl */
+#include
+#include "nsHTMLTags.h"
+
+static char* tagTable[] = {
+ "A", "ABBR", "ACRONYM", "ADDRESS", "APPLET", "AREA", "B", "BASE",
+ "BASEFONT", "BDO", "BIG", "BLINK", "BLOCKQUOTE", "BODY", "BR", "BUTTON",
+ "CAPTION", "CENTER", "CITE", "CODE", "COL", "COLGROUP", "DD", "DEL", "DFN",
+ "DIR", "DIV", "DL", "DT", "EM", "EMBED", "FIELDSET", "FONT", "FORM",
+ "FRAME", "FRAMESET", "H1", "H2", "H3", "H4", "H5", "H6", "HEAD", "HR",
+ "HTML", "I", "IFRAME", "ILAYER", "IMG", "INPUT", "INS", "ISINDEX", "KBD",
+ "KEYGEN", "LABEL", "LAYER", "LEGEND", "LI", "LINK", "LISTING", "MAP",
+ "MENU", "META", "MULTICOL", "NOBR", "NOEMBED", "NOFRAMES", "NOLAYER",
+ "NOSCRIPT", "OBJECT", "OL", "OPTGROUP", "OPTION", "P", "PARAM",
+ "PLAINTEXT", "PRE", "Q", "S", "SAMP", "SCRIPT", "SELECT", "SERVER",
+ "SMALL", "SPACER", "SPAN", "STRIKE", "STRONG", "STYLE", "SUB", "SUP",
+ "TABLE", "TBODY", "TD", "TEXTAREA", "TFOOT", "TH", "THEAD", "TITLE", "TR",
+ "TT", "U", "UL", "VAR", "WBR", "XMP"
+};
+
+nsHTMLTag NS_TagToEnum(const char* aTagName) {
+ int low = 0;
+ int high = NS_HTML_TAG_MAX - 1;
+ while (low <= high) {
+ int middle = (low + high) >> 1;
+ int result = strcmp(aTagName, tagTable[middle]);
+ if (result == 0)
+ return (nsHTMLTag) middle;
+ if (result < 0)
+ high = middle - 1;
+ else
+ low = middle + 1;
+ }
+ return eHTMLTag_userdefined;
+}
+
+const char* NS_EnumToTag(nsHTMLTag aTagID) {
+ if ((unsigned int)aTagID > NS_HTML_TAG_MAX) {
+ return 0;
+ }
+ return tagTable[(int) aTagID];
+}
diff --git a/parser/htmlparser/src/nsHTMLTags.h b/parser/htmlparser/src/nsHTMLTags.h
new file mode 100644
index 00000000000..67c9920aa39
--- /dev/null
+++ b/parser/htmlparser/src/nsHTMLTags.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is Mozilla Communicator client code.
+ *
+ * The Initial Developer of the Original Code is Netscape Communications
+ * Corporation. Portions created by Netscape are Copyright (C) 1998
+ * Netscape Communications Corporation. All Rights Reserved.
+ */
+
+/* Do not edit - generated by gentags.pl */
+#ifndef nsHTMLTags_h___
+#define nsHTMLTags_h___
+#include "nshtmlpars.h"
+enum nsHTMLTag {
+ eHTMLTag_a=0, eHTMLTag_abbr=1, eHTMLTag_acronym=2, eHTMLTag_address=3,
+ eHTMLTag_applet=4, eHTMLTag_area=5, eHTMLTag_b=6, eHTMLTag_base=7,
+ eHTMLTag_basefont=8, eHTMLTag_bdo=9, eHTMLTag_big=10, eHTMLTag_blink=11,
+ eHTMLTag_blockquote=12, eHTMLTag_body=13, eHTMLTag_br=14,
+ eHTMLTag_button=15, eHTMLTag_caption=16, eHTMLTag_center=17,
+ eHTMLTag_cite=18, eHTMLTag_code=19, eHTMLTag_col=20, eHTMLTag_colgroup=21,
+ eHTMLTag_dd=22, eHTMLTag_del=23, eHTMLTag_dfn=24, eHTMLTag_dir=25,
+ eHTMLTag_div=26, eHTMLTag_dl=27, eHTMLTag_dt=28, eHTMLTag_em=29,
+ eHTMLTag_embed=30, eHTMLTag_fieldset=31, eHTMLTag_font=32,
+ eHTMLTag_form=33, eHTMLTag_frame=34, eHTMLTag_frameset=35, eHTMLTag_h1=36,
+ eHTMLTag_h2=37, eHTMLTag_h3=38, eHTMLTag_h4=39, eHTMLTag_h5=40,
+ eHTMLTag_h6=41, eHTMLTag_head=42, eHTMLTag_hr=43, eHTMLTag_html=44,
+ eHTMLTag_i=45, eHTMLTag_iframe=46, eHTMLTag_ilayer=47, eHTMLTag_img=48,
+ eHTMLTag_input=49, eHTMLTag_ins=50, eHTMLTag_isindex=51, eHTMLTag_kbd=52,
+ eHTMLTag_keygen=53, eHTMLTag_label=54, eHTMLTag_layer=55,
+ eHTMLTag_legend=56, eHTMLTag_li=57, eHTMLTag_link=58, eHTMLTag_listing=59,
+ eHTMLTag_map=60, eHTMLTag_menu=61, eHTMLTag_meta=62, eHTMLTag_multicol=63,
+ eHTMLTag_nobr=64, eHTMLTag_noembed=65, eHTMLTag_noframes=66,
+ eHTMLTag_nolayer=67, eHTMLTag_noscript=68, eHTMLTag_object=69,
+ eHTMLTag_ol=70, eHTMLTag_optgroup=71, eHTMLTag_option=72, eHTMLTag_p=73,
+ eHTMLTag_param=74, eHTMLTag_plaintext=75, eHTMLTag_pre=76, eHTMLTag_q=77,
+ eHTMLTag_s=78, eHTMLTag_samp=79, eHTMLTag_script=80, eHTMLTag_select=81,
+ eHTMLTag_server=82, eHTMLTag_small=83, eHTMLTag_spacer=84,
+ eHTMLTag_span=85, eHTMLTag_strike=86, eHTMLTag_strong=87,
+ eHTMLTag_style=88, eHTMLTag_sub=89, eHTMLTag_sup=90, eHTMLTag_table=91,
+ eHTMLTag_tbody=92, eHTMLTag_td=93, eHTMLTag_textarea=94, eHTMLTag_tfoot=95,
+ eHTMLTag_th=96, eHTMLTag_thead=97, eHTMLTag_title=98, eHTMLTag_tr=99,
+ eHTMLTag_tt=100, eHTMLTag_u=101, eHTMLTag_ul=102, eHTMLTag_var=103,
+ eHTMLTag_wbr=104, eHTMLTag_xmp=105,
+
+ /* The remaining enums are not for tags */
+ eHTMLTag_text=106, eHTMLTag_whitespace=107, eHTMLTag_newline=108,
+ eHTMLTag_comment=109, eHTMLTag_entity=110, eHTMLTag_userdefined=111,
+ eHTMLTag_unknown=112, eHTMLTag_secret_h1style=113,
+ eHTMLTag_secret_h2style=114, eHTMLTag_secret_h3style=115,
+ eHTMLTag_secret_h4style=116, eHTMLTag_secret_h5style=117,
+ eHTMLTag_secret_h6style=118
+};
+#define NS_HTML_TAG_MAX 106
+
+extern NS_HTMLPARS nsHTMLTag NS_TagToEnum(const char* aTag);
+extern NS_HTMLPARS const char* NS_EnumToTag(nsHTMLTag aEnum);
+#endif /* nsHTMLTags_h___ */
diff --git a/parser/htmlparser/tools/gentags.pl b/parser/htmlparser/tools/gentags.pl
new file mode 100644
index 00000000000..01dfc9c197b
--- /dev/null
+++ b/parser/htmlparser/tools/gentags.pl
@@ -0,0 +1,292 @@
+#! /usr/local/bin/perl
+
+# The contents of this file are subject to the Netscape Public License
+# Version 1.0 (the "License"); you may not use this file except in
+# compliance with the License. You may obtain a copy of the License at
+# http://www.mozilla.org/NPL/
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# The Original Code is Mozilla Communicator client code.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are Copyright (C) 1998
+# Netscape Communications Corporation. All Rights Reserved.
+
+######################################################################
+
+# Table of tag names; it doesn't have to be sorted because code
+# below will do it. However, for the sake of ease of additions, keep
+# it sorted so that its easy to tell where to add a new tag and that
+# the tag hasn't already been added.
+$i = 0;
+$tags[$i++] = "a";
+$tags[$i++] = "abbr";
+$tags[$i++] = "acronym";
+$tags[$i++] = "address";
+$tags[$i++] = "applet";
+$tags[$i++] = "area";
+$tags[$i++] = "b";
+$tags[$i++] = "base";
+$tags[$i++] = "basefont";
+$tags[$i++] = "bdo";
+$tags[$i++] = "big";
+$tags[$i++] = "blink";
+$tags[$i++] = "blockquote";
+$tags[$i++] = "body";
+$tags[$i++] = "br";
+$tags[$i++] = "button";
+$tags[$i++] = "caption";
+$tags[$i++] = "center";
+$tags[$i++] = "cite";
+$tags[$i++] = "code";
+$tags[$i++] = "col";
+$tags[$i++] = "colgroup";
+$tags[$i++] = "dd";
+$tags[$i++] = "del";
+$tags[$i++] = "dfn";
+$tags[$i++] = "dir";
+$tags[$i++] = "div";
+$tags[$i++] = "dl";
+$tags[$i++] = "dt";
+$tags[$i++] = "em";
+$tags[$i++] = "embed";
+$tags[$i++] = "fieldset";
+$tags[$i++] = "font";
+$tags[$i++] = "form";
+$tags[$i++] = "frame";
+$tags[$i++] = "frameset";
+$tags[$i++] = "h1";
+$tags[$i++] = "h2";
+$tags[$i++] = "h3";
+$tags[$i++] = "h4";
+$tags[$i++] = "h5";
+$tags[$i++] = "h6";
+$tags[$i++] = "head";
+$tags[$i++] = "hr";
+$tags[$i++] = "html";
+$tags[$i++] = "i";
+$tags[$i++] = "iframe";
+$tags[$i++] = "ilayer";
+$tags[$i++] = "img";
+$tags[$i++] = "input";
+$tags[$i++] = "ins";
+$tags[$i++] = "isindex";
+$tags[$i++] = "kbd";
+$tags[$i++] = "keygen";
+$tags[$i++] = "label";
+$tags[$i++] = "layer";
+$tags[$i++] = "legend";
+$tags[$i++] = "li";
+$tags[$i++] = "link";
+$tags[$i++] = "listing";
+$tags[$i++] = "map";
+$tags[$i++] = "menu";
+$tags[$i++] = "meta";
+$tags[$i++] = "multicol";
+$tags[$i++] = "nobr";
+$tags[$i++] = "noembed";
+$tags[$i++] = "noframes";
+$tags[$i++] = "nolayer";
+$tags[$i++] = "noscript";
+$tags[$i++] = "object";
+$tags[$i++] = "ol";
+$tags[$i++] = "optgroup";
+$tags[$i++] = "option";
+$tags[$i++] = "p";
+$tags[$i++] = "param";
+$tags[$i++] = "plaintext";
+$tags[$i++] = "pre";
+$tags[$i++] = "q";
+$tags[$i++] = "s";
+$tags[$i++] = "samp";
+$tags[$i++] = "script";
+$tags[$i++] = "select";
+$tags[$i++] = "server";
+$tags[$i++] = "small";
+$tags[$i++] = "spacer";
+$tags[$i++] = "span";
+$tags[$i++] = "strike";
+$tags[$i++] = "strong";
+$tags[$i++] = "style";
+$tags[$i++] = "sub";
+$tags[$i++] = "sup";
+$tags[$i++] = "table";
+$tags[$i++] = "tbody";
+$tags[$i++] = "td";
+$tags[$i++] = "textarea";
+$tags[$i++] = "tfoot";
+$tags[$i++] = "th";
+$tags[$i++] = "thead";
+$tags[$i++] = "title";
+$tags[$i++] = "tr";
+$tags[$i++] = "tt";
+$tags[$i++] = "u";
+$tags[$i++] = "ul";
+$tags[$i++] = "var";
+$tags[$i++] = "wbr";
+$tags[$i++] = "xmp";
+
+######################################################################
+
+# These are not tags; rather they are extra values to place into the
+# tag enumeration after the normal tags. These do not need to be sorted
+# and they do not go into the tag table, just into the tag enumeration.
+$extra = 0;
+$extra_tags[$extra++] = "text";
+$extra_tags[$extra++] = "whitespace";
+$extra_tags[$extra++] = "newline";
+$extra_tags[$extra++] = "comment";
+$extra_tags[$extra++] = "entity";
+$extra_tags[$extra++] = "userdefined";
+$extra_tags[$extra++] = "unknown";
+$extra_tags[$extra++] = "secret_h1style";
+$extra_tags[$extra++] = "secret_h2style";
+$extra_tags[$extra++] = "secret_h3style";
+$extra_tags[$extra++] = "secret_h4style";
+$extra_tags[$extra++] = "secret_h5style";
+$extra_tags[$extra++] = "secret_h6style";
+
+######################################################################
+
+# Sort the tag table before using it
+@tags = sort @tags;
+
+$copyright = "/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the \"License\"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an \"AS IS\"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is Mozilla Communicator client code.
+ *
+ * The Initial Developer of the Original Code is Netscape Communications
+ * Corporation. Portions created by Netscape are Copyright (C) 1998
+ * Netscape Communications Corporation. All Rights Reserved.
+ */
+
+/* Do not edit - generated by gentags.pl */
+";
+
+######################################################################
+
+$file_base = @ARGV[0];
+
+# Generate the header file first
+open(HEADER_FILE, ">$file_base.h");
+
+# Print out copyright and do not edit notice
+print HEADER_FILE $copyright;
+print HEADER_FILE "#ifndef " . $file_base . "_h___\n";
+print HEADER_FILE "#define " . $file_base . "_h___\n";
+print HEADER_FILE "#include \"nshtmlpars.h\"\n";
+
+# Print out enum's for the tag symbols
+print HEADER_FILE "enum nsHTMLTag {\n ";
+$width = 2;
+for ($j = 0; $j < $i; $j++) {
+ $lower = $tags[$j];
+ $lower =~ tr/A-Z/a-z/;
+ $str = "eHTMLTag_" . $lower . "=" . $j;
+ $str = $str . ", ";
+ $len = length($str);
+ if ($width + $len > 78) {
+ print HEADER_FILE "\n ";
+ $width = 2;
+ }
+ print HEADER_FILE $str;
+ $width = $width + $len;
+}
+print HEADER_FILE "\n\n /* The remaining enums are not for tags */\n ";
+
+# Print out extra enum's that are not in the tag table
+$width = 2;
+for ($k = 0; $k < $extra; $k++) {
+ $lower = $extra_tags[$k];
+ $lower =~ tr/A-Z/a-z/;
+ $str = "eHTMLTag_" . $lower . "=" . ($j + $k);
+ if ($k < $extra - 1) {
+ $str = $str . ", ";
+ }
+ $len = length($str);
+ if ($width + $len > 78) {
+ print HEADER_FILE "\n ";
+ $width = 2;
+ }
+ print HEADER_FILE $str;
+ $width = $width + $len;
+}
+
+print HEADER_FILE "\n};\n#define NS_HTML_TAG_MAX " . $j . "\n\n";
+print HEADER_FILE
+ "extern NS_HTMLPARS nsHTMLTag NS_TagToEnum(const char* aTag);\n";
+print HEADER_FILE
+ "extern NS_HTMLPARS const char* NS_EnumToTag(nsHTMLTag aEnum);\n";
+print HEADER_FILE "#endif /* " . $file_base . "_h___ */\n";
+close(HEADER_FILE);
+
+######################################################################
+
+# Generate the source file
+open(CPP_FILE, ">$file_base.cpp");
+print CPP_FILE $copyright;
+print CPP_FILE "#include \n";
+print CPP_FILE "#include \"$file_base.h\"\n\n";
+
+# Print out table of tag names
+print CPP_FILE "static char* tagTable[] = {\n ";
+$width = 2;
+for ($j = 0; $j < $i; $j++) {
+ $upper = $tags[$j];
+ $upper =~ tr/a-z/A-Z/;
+ $str = "\"" . $upper . "\"";
+ if ($j < $i - 1) {
+ $str = $str . ", ";
+ }
+ $len = length($str);
+ if ($width + $len > 78) {
+ print CPP_FILE "\n ";
+ $width = 2;
+ }
+ print CPP_FILE $str;
+ $width = $width + $len;
+}
+print CPP_FILE "\n};\n";
+
+# Finally, dump out the search routine that takes a char* and finds it
+# in the table.
+print CPP_FILE "
+nsHTMLTag NS_TagToEnum(const char* aTagName) {
+ int low = 0;
+ int high = NS_HTML_TAG_MAX - 1;
+ while (low <= high) {
+ int middle = (low + high) >> 1;
+ int result = strcmp(aTagName, tagTable[middle]);
+ if (result == 0)
+ return (nsHTMLTag) middle;
+ if (result < 0)
+ high = middle - 1;
+ else
+ low = middle + 1;
+ }
+ return eHTMLTag_userdefined;
+}
+
+const char* NS_EnumToTag(nsHTMLTag aTagID) {
+ if ((unsigned int)aTagID > NS_HTML_TAG_MAX) {
+ return 0;
+ }
+ return tagTable[(int) aTagID];
+}
+";
+
+close(CPP_FILE);