new
git-svn-id: svn://10.0.0.236/trunk@5007 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
292
mozilla/parser/htmlparser/tools/gentags.pl
Normal file
292
mozilla/parser/htmlparser/tools/gentags.pl
Normal file
@@ -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 <string.h>\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);
|
||||
Reference in New Issue
Block a user