dbertoni 2002/08/23 14:20:42
Modified: c/src/XMLSupport FormatterToHTML.cpp FormatterToHTML.hpp
Log:
New implementation of element properties.
Revision Changes Path
1.73 +29 -679 xml-xalan/c/src/XMLSupport/FormatterToHTML.cpp
Index: FormatterToHTML.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToHTML.cpp,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -r1.72 -r1.73
--- FormatterToHTML.cpp 21 Aug 2002 23:42:07 -0000 1.72
+++ FormatterToHTML.cpp 23 Aug 2002 21:20:42 -0000 1.73
@@ -127,10 +127,9 @@
m_isUTF8(XalanTranscodingServices::encodingIsUTF8(m_encoding)),
m_elementLevel(0),
m_hasNamespaceStack(),
- m_omitMetaTag(omitMetaTag)
+ m_omitMetaTag(omitMetaTag),
+ m_elementPropertiesStack()
{
- assert(s_elementFlags != 0 && s_dummyDesc != 0);
-
initCharsMap();
}
@@ -199,26 +198,6 @@
-const FormatterToHTML::ElemDesc&
-FormatterToHTML::getElemDesc(const XalanDOMChar* name)
-{
- assert(s_elementFlags != 0 && s_dummyDesc != 0);
-
- const ElementFlagsMapType::const_iterator i =
- s_elementFlags->find(name);
-
- if (i == s_elementFlags->end())
- {
- return *s_dummyDesc;
- }
- else
- {
- return (*i).second;
- }
-}
-
-
-
void
FormatterToHTML::startDocument()
{
@@ -236,6 +215,7 @@
m_isRawStack.clear();
m_inScriptElemStack.push_back(false);
m_hasNamespaceStack.clear();
+ m_elementPropertiesStack.clear();
const bool isEmptySystem = isEmpty(m_doctypeSystem);
@@ -303,10 +283,15 @@
{
writeParentTagEnd();
- const ElemDesc& elemDesc =
- getElemDesc(name);
+ const XalanHTMLElementsProperties::ElementProperties&
elemProperties =
+ XalanHTMLElementsProperties::find(name);
+ assert(elemProperties.null() == false);
+
+ // Push a copy onto the stack for endElement(). Don't worry --
+ // the copy is cheap!
+ m_elementPropertiesStack.push_back(elemProperties);
- const bool isBlockElement = elemDesc.is(ElemDesc::BLOCK);
+ const bool isBlockElement =
elemProperties.is(XalanHTMLElementsProperties::BLOCK);
if (equalsIgnoreCaseASCII(name, c_wstr(s_scriptString)) == true)
{
@@ -342,7 +327,7 @@
m_inBlockElem = !isBlockElement;
- m_isRawStack.push_back(elemDesc.is(ElemDesc::RAW));
+
m_isRawStack.push_back(elemProperties.is(XalanHTMLElementsProperties::RAW));
accumContent(XalanUnicode::charLessThanSign);
@@ -352,7 +337,7 @@
for (unsigned int i = 0; i < nAttrs ; i++)
{
- processAttribute(attrs.getName(i), attrs.getValue(i),
elemDesc);
+ processAttribute(attrs.getName(i), attrs.getValue(i),
elemProperties);
}
// Flag the current element as not yet having any children.
@@ -362,7 +347,7 @@
m_isprevtext = false;
- if (elemDesc.is(ElemDesc::HEADELEM) == true)
+ if (elemProperties.is(XalanHTMLElementsProperties::HEADELEM) ==
true)
{
writeParentTagEnd();
@@ -405,14 +390,18 @@
assert(m_isRawStack.empty() == false);
assert(m_inScriptElemStack.empty() == false);
+ assert(m_elementPropertiesStack.empty() == false);
m_isRawStack.pop_back();
m_inScriptElemStack.pop_back();
-
- const ElemDesc& elemDesc =
- getElemDesc(name);
- const bool isBlockElement = elemDesc.is(ElemDesc::BLOCK);
+ const XalanHTMLElementsProperties::ElementProperties
elemProperties =
+ m_elementPropertiesStack.back();
+ assert(elemProperties.null() == false);
+
+ m_elementPropertiesStack.pop_back();
+
+ const bool isBlockElement =
elemProperties.is(XalanHTMLElementsProperties::BLOCK);
bool shouldIndent = false;
@@ -443,7 +432,7 @@
}
else
{
- if(elemDesc.is(ElemDesc::EMPTY) == false)
+
if(elemProperties.is(XalanHTMLElementsProperties::EMPTY) == false)
{
accumContent(XalanUnicode::charGreaterThanSign);
@@ -458,7 +447,7 @@
}
}
- if (elemDesc.is(ElemDesc::WHITESPACESENSITIVE) == true)
+ if
(elemProperties.is(XalanHTMLElementsProperties::WHITESPACESENSITIVE) == true)
{
m_ispreserve = true;
}
@@ -859,14 +848,14 @@
void
FormatterToHTML::processAttribute(
- const XalanDOMChar* name,
- const XalanDOMChar* value,
- const ElemDesc& elemDesc)
+ const XalanDOMChar*
name,
+ const XalanDOMChar*
value,
+ const XalanHTMLElementsProperties::ElementProperties&
elemProperties)
{
accumContent(XalanUnicode::charSpace);
if((length(value) == 0 || equalsIgnoreCaseASCII(name, value)) &&
- elemDesc.isAttrFlagSet(name, ElemDesc::ATTREMPTY) == true)
+ elemProperties.isAttribute(name,
XalanHTMLElementsProperties::ATTREMPTY) == true)
{
accumName(name);
}
@@ -876,7 +865,7 @@
accumContent(XalanUnicode::charEqualsSign);
accumContent(XalanUnicode::charQuoteMark);
- if(elemDesc.isAttrFlagSet(name, ElemDesc::ATTRURL) == true)
+ if(elemProperties.isAttribute(name,
XalanHTMLElementsProperties::ATTRURL) == true)
{
writeAttrURI(value);
}
@@ -1071,11 +1060,6 @@
-typedef FormatterToHTML::ElementFlagsMapType ElementFlagsMapType;
-typedef FormatterToHTML::ElemDesc ElemDesc;
-
-
-
bool
FormatterToHTML::popHasNamespace()
{
@@ -1133,614 +1117,6 @@
-static void
-initializeElementFlagsMap1(ElementFlagsMapType& theElementFlags)
-{
-#if defined(XALAN_NO_NAMESPACES)
- typedef pair<ElementFlagsMapType::iterator, bool> PairType;
-#else
- typedef std::pair<ElementFlagsMapType::iterator, bool> PairType;
-#endif
-
- // HTML 4.0 loose DTD
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("BASEFONT")),
- ElemDesc(0|ElemDesc::EMPTY)));
-
- PairType theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("FRAME")),
- ElemDesc(0|ElemDesc::EMPTY|ElemDesc::BLOCK)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("SRC")),
ElemDesc::ATTRURL);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("FRAMESET")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("NOFRAMES")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("ISINDEX")),
- ElemDesc(0|ElemDesc::EMPTY|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("APPLET")),
- ElemDesc(0|ElemDesc::WHITESPACESENSITIVE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("CENTER")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("DIR")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("MENU")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
-
- // HTML 4.0 strict DTD
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TT")),
- ElemDesc(0|ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("I")),
- ElemDesc(0|ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("B")),
- ElemDesc(0|ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("BIG")),
- ElemDesc(0|ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("SMALL")),
- ElemDesc(0|ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("EM")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("STRONG")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("DFN")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("CODE")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("SAMP")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("KBD")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("VAR")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("CITE")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("ABBR")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("ACRONYM")),
- ElemDesc(0|ElemDesc::PHRASE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("SUP")),
- ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("SUB")),
- ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("SPAN")),
- ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("BDO")),
- ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("BR")),
-
ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL|ElemDesc::EMPTY|ElemDesc::BLOCK)));
-
-}
-
-
-
-static void
-initializeElementFlagsMap2(ElementFlagsMapType& theElementFlags)
-{
-#if defined(XALAN_NO_NAMESPACES)
- typedef pair<ElementFlagsMapType::iterator, bool> PairType;
-#else
- typedef std::pair<ElementFlagsMapType::iterator, bool> PairType;
-#endif
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("BODY")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("ADDRESS")),
-
ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM|ElemDesc::BLOCKFORMFIELDSET)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("DIV")),
-
ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM|ElemDesc::BLOCKFORMFIELDSET)));
-
- PairType theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("A")),
- ElemDesc(0|ElemDesc::SPECIAL)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("HREF")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("NAME")),
ElemDesc::ATTRURL);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("MAP")),
-
ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL|ElemDesc::BLOCK)));
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("AREA")),
- ElemDesc(0|ElemDesc::EMPTY|ElemDesc::BLOCK)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("HREF")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("NOHREF")),
ElemDesc::ATTREMPTY);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("LINK")),
-
ElemDesc(0|ElemDesc::HEADMISC|ElemDesc::EMPTY|ElemDesc::BLOCK)));
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("IMG")),
-
ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL|ElemDesc::EMPTY|ElemDesc::WHITESPACESENSITIVE)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("SRC")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("LONGDESC")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("USEMAP")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("ISMAP")),
ElemDesc::ATTREMPTY);
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("OBJECT")),
-
ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL|ElemDesc::HEADMISC|ElemDesc::WHITESPACESENSITIVE)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("CLASSID")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("CODEBASE")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DATA")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("ARCHIVE")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("USEMAP")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DECLARE")),
ElemDesc::ATTREMPTY);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("PARAM")),
- ElemDesc(0|ElemDesc::EMPTY)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("HR")),
-
ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM|ElemDesc::BLOCKFORMFIELDSET|ElemDesc::EMPTY)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("P")),
-
ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM|ElemDesc::BLOCKFORMFIELDSET)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("H1")),
- ElemDesc(0|ElemDesc::HEAD|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("H2")),
- ElemDesc(0|ElemDesc::HEAD|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("H3")),
- ElemDesc(0|ElemDesc::HEAD|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("H4")),
- ElemDesc(0|ElemDesc::HEAD|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("H5")),
- ElemDesc(0|ElemDesc::HEAD|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("H6")),
- ElemDesc(0|ElemDesc::HEAD|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("PRE")),
- ElemDesc(0|ElemDesc::PREFORMATTED|ElemDesc::BLOCK)));
-
-}
-
-
-
-static void
-initializeElementFlagsMap3(ElementFlagsMapType& theElementFlags)
-{
-#if defined(XALAN_NO_NAMESPACES)
- typedef pair<ElementFlagsMapType::iterator, bool> PairType;
-#else
- typedef std::pair<ElementFlagsMapType::iterator, bool> PairType;
-#endif
-
- PairType theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("Q")),
- ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("CITE")),
ElemDesc::ATTRURL);
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("BLOCKQUOTE")),
-
ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM|ElemDesc::BLOCKFORMFIELDSET)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("CITE")),
ElemDesc::ATTRURL);
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("INS")),
- ElemDesc(0)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("CITE")),
ElemDesc::ATTRURL);
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("DEL")),
- ElemDesc(0)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("CITE")),
ElemDesc::ATTRURL);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("DL")),
-
ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM|ElemDesc::BLOCKFORMFIELDSET)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("DT")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("DD")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("OL")),
- ElemDesc(0|ElemDesc::LIST|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("UL")),
- ElemDesc(0|ElemDesc::LIST|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("LI")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("FORM")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("ACTION")),
ElemDesc::ATTRURL);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("LABEL")),
- ElemDesc(0|ElemDesc::FORMCTRL)));
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("INPUT")),
-
ElemDesc(0|ElemDesc::FORMCTRL|ElemDesc::INLINELABEL|ElemDesc::EMPTY)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("SRC")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("USEMAP")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("CHECKED")),
ElemDesc::ATTREMPTY);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DISABLED")),
ElemDesc::ATTREMPTY);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("ISMAP")),
ElemDesc::ATTREMPTY);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("READONLY")),
ElemDesc::ATTREMPTY);
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("SELECT")),
- ElemDesc(0|ElemDesc::FORMCTRL|ElemDesc::INLINELABEL)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DISABLED")),
ElemDesc::ATTREMPTY);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("MULTIPLE")),
ElemDesc::ATTREMPTY);
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("OPTGROUP")),
- ElemDesc(0)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DISABLED")),
ElemDesc::ATTREMPTY);
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("OPTION")),
- ElemDesc(0)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DISABLED")),
ElemDesc::ATTREMPTY);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("SELECTED")),
ElemDesc::ATTREMPTY);
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TEXTAREA")),
- ElemDesc(0|ElemDesc::FORMCTRL|ElemDesc::INLINELABEL)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DISABLED")),
ElemDesc::ATTREMPTY);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("READONLY")),
ElemDesc::ATTREMPTY);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("FIELDSET")),
- ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("LEGEND")),
- ElemDesc(0)));
-}
-
-
-
-static void
-initializeElementFlagsMap4(ElementFlagsMapType& theElementFlags)
-{
-#if defined(XALAN_NO_NAMESPACES)
- typedef pair<ElementFlagsMapType::iterator, bool> PairType;
-#else
- typedef std::pair<ElementFlagsMapType::iterator, bool> PairType;
-#endif
-
- PairType theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("BUTTON")),
- ElemDesc(0|ElemDesc::FORMCTRL|ElemDesc::INLINELABEL)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DISABLED")),
ElemDesc::ATTREMPTY);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TABLE")),
-
ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM|ElemDesc::BLOCKFORMFIELDSET)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("CAPTION")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("THEAD")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TFOOT")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TBODY")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("COLGROUP")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("COL")),
- ElemDesc(0|ElemDesc::EMPTY|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TR")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TH")),
- ElemDesc(0)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TD")),
- ElemDesc(0)));
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("HEAD")),
- ElemDesc(0|ElemDesc::BLOCK|ElemDesc::HEADELEM)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("PROFILE")),
ElemDesc::ATTRURL);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("TITLE")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("BASE")),
- ElemDesc(0|ElemDesc::EMPTY|ElemDesc::BLOCK)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("HREF")),
ElemDesc::ATTRURL);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("META")),
-
ElemDesc(0|ElemDesc::HEADMISC|ElemDesc::EMPTY|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("STYLE")),
-
ElemDesc(0|ElemDesc::HEADMISC|ElemDesc::RAW|ElemDesc::BLOCK)));
-
- theResult =
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("SCRIPT")),
-
ElemDesc(0|ElemDesc::SPECIAL|ElemDesc::ASPECIAL|ElemDesc::HEADMISC|ElemDesc::RAW)));
-
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("SRC")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("FOR")),
ElemDesc::ATTRURL);
-
(*theResult.first).second.setAttr(c_wstr(XALAN_STATIC_UCODE_STRING("DEFER")),
ElemDesc::ATTREMPTY);
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("NOSCRIPT")),
-
ElemDesc(0|ElemDesc::BLOCK|ElemDesc::BLOCKFORM|ElemDesc::BLOCKFORMFIELDSET)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("HTML")),
- ElemDesc(0|ElemDesc::BLOCK)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("FONT")),
- ElemDesc(0 | ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("S")),
- ElemDesc(0 | ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("STRIKE")),
- ElemDesc(0 | ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("U")),
- ElemDesc(0 | ElemDesc::FONTSTYLE)));
-
- theElementFlags.insert(
- ElementFlagsMapType::value_type(
- c_wstr(XALAN_STATIC_UCODE_STRING("NOBR")),
- ElemDesc(0 | ElemDesc::FONTSTYLE)));
-}
-
-
-
-void
-FormatterToHTML::initializeElementFlagsMap(ElementFlagsMapType&
theElementFlags)
-{
- initializeElementFlagsMap1(theElementFlags);
- initializeElementFlagsMap2(theElementFlags);
- initializeElementFlagsMap3(theElementFlags);
- initializeElementFlagsMap4(theElementFlags);
-}
-
-
-
-static XalanAutoPtr<FormatterToHTML::ElementFlagsMapType> s_elementFlags;
-
-
-const FormatterToHTML::ElementFlagsMapType*
FormatterToHTML::s_elementFlags = 0;
-
-
-static XalanAutoPtr<FormatterToHTML::ElemDesc> s_dummyDesc;
-
-const FormatterToHTML::ElemDesc* FormatterToHTML::s_dummyDesc = 0;
-
-
-
static XalanDOMString s_doctypeHeaderStartString;
static XalanDOMString s_doctypeHeaderPublicString;
@@ -2105,21 +1481,9 @@
const unsigned long FormatterToHTML::s_entitiesSize =
sizeof(s_entities) / sizeof (s_entities[0]);
-
void
FormatterToHTML::initialize()
{
- // Make sure there's nothing there first...
- ::s_elementFlags.reset();
- ::s_dummyDesc.reset();
-
- // New everything in a local so that an exception will clean up
everything...
- XalanAutoPtr<ElementFlagsMapType> theElementFlags(new
ElementFlagsMapType);
- XalanAutoPtr<ElemDesc> theDummyDesc(new
ElemDesc(ElemDesc::BLOCK));
-
- // Do initialization...
- initializeElementFlagsMap(*theElementFlags.get());
-
::s_doctypeHeaderStartString = XALAN_STATIC_UCODE_STRING("<!DOCTYPE
HTML");
::s_doctypeHeaderPublicString = XALAN_STATIC_UCODE_STRING(" PUBLIC \"");
@@ -2132,14 +1496,6 @@
::s_metaString = XALAN_STATIC_UCODE_STRING("<META
http-equiv=\"Content-Type\" content=\"text/html; charset=");
- // Everythings cool, so let the globals own the objects...
- ::s_elementFlags = theElementFlags;
- ::s_dummyDesc = theDummyDesc;
-
- // Update the class members...
- s_elementFlags = ::s_elementFlags.get();
- s_dummyDesc = ::s_dummyDesc.get();
-
#if defined(XALAN_LSTRSUPPORT) &&
!defined(XALAN_XALANDOMCHAR_USHORT_MISMATCH)
#else
initializeEntities(theLocalEntities, FormatterToHTML::s_entities);
@@ -2151,12 +1507,6 @@
void
FormatterToHTML::terminate()
{
- s_elementFlags = 0;
- s_dummyDesc = 0;
-
- ::s_elementFlags.reset();
- ::s_dummyDesc.reset();
-
releaseMemory(::s_doctypeHeaderStartString);
releaseMemory(::s_doctypeHeaderPublicString);
1.33 +17 -128 xml-xalan/c/src/XMLSupport/FormatterToHTML.hpp
Index: FormatterToHTML.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToHTML.hpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- FormatterToHTML.hpp 21 Aug 2002 23:42:08 -0000 1.32
+++ FormatterToHTML.hpp 23 Aug 2002 21:20:42 -0000 1.33
@@ -64,16 +64,20 @@
+#include <vector>
+
+
+
// Base class header file.
#include <XMLSupport/FormatterToXML.hpp>
-#include <Include/XalanArrayKeyMap.hpp>
+#include <PlatformSupport/DOMStringHelper.hpp>
-#include <PlatformSupport/DOMStringHelper.hpp>
+#include <XMLSupport/XalanHTMLElementsProperties.hpp>
@@ -82,9 +86,14 @@
*/
class XALAN_XMLSUPPORT_EXPORT FormatterToHTML : public FormatterToXML
{
-
public:
+#if defined(XALAN_NO_NAMESPACES)
+ typedef vector<XalanHTMLElementsProperties::ElementProperties>
ElementPropertiesStackType;
+#else
+ typedef std::vector<XalanHTMLElementsProperties::ElementProperties>
ElementPropertiesStackType;
+#endif
+
/**
* Perform static initialization. See class XMLSupportInit.
*/
@@ -186,104 +195,6 @@
m_escapeURLs = flag;
}
- class ElemDesc
- {
- public:
-
- enum eFlags
- {
- EMPTY = (1 << 1),
- FLOW = (1 << 2),
- BLOCK = (1 << 3),
- BLOCKFORM = (1 << 4),
- BLOCKFORMFIELDSET = (1 << 5),
- CDATA = (1 << 6),
- PCDATA = (1 << 7),
- RAW = (1 << 8),
- INLINE = (1 << 9),
- INLINEA = (1 << 10),
- INLINELABEL = (1 << 11),
- FONTSTYLE = (1 << 12),
- PHRASE = (1 << 13),
- FORMCTRL = (1 << 14),
- SPECIAL = (1 << 15),
- ASPECIAL = (1 << 16),
- HEADMISC = (1 << 17),
- HEAD = (1 << 18),
- LIST = (1 << 19),
- PREFORMATTED = (1 << 20),
- WHITESPACESENSITIVE = (1 << 21),
- HEADELEM = (1 << 22),
-
- ATTRURL = (1 << 1),
- ATTREMPTY = (1 << 2)
- };
-
- ElemDesc(unsigned int flags = 0) :
- m_flags(flags)
- {
- }
-
- ~ElemDesc()
- {
- }
-
- bool
- operator==(const ElemDesc& theRHS) const
- {
- return m_flags == theRHS.m_flags && m_attrs ==
theRHS.m_attrs;
- }
-
- bool
- is(unsigned int flags) const
- {
- return m_flags & flags ? true : false;
- }
-
- void
- setAttr(
- const XalanDOMChar* name,
- unsigned int flags)
- {
- m_attrs.insert(AttributeMapType::value_type(name,
flags));
- }
-
- bool
- isAttrFlagSet(
- const XalanDOMChar* name,
- unsigned int flags) const
- {
- const AttributeMapType::const_iterator i =
- m_attrs.find(name);
-
- if (i == m_attrs.end())
- {
- return false;
- }
- else
- {
- return (*i).second & flags ? true : false;
- }
- }
-
- private:
-
- typedef XalanArrayKeyMap<
- XalanDOMChar,
- unsigned int,
- less_no_case_ascii_wide_string>
AttributeMapType;
-
- const unsigned int m_flags;
-
- AttributeMapType m_attrs;
- };
-
-
- typedef XalanArrayKeyMap<
- XalanDOMChar,
- ElemDesc,
- less_no_case_ascii_wide_string>
ElementFlagsMapType;
-
struct EntityPair
{
XalanDOMChar m_char;
@@ -321,13 +232,6 @@
private:
- static const ElementFlagsMapType*
s_elementFlags;
-
- /**
- * Dummy description for elements not found.
- */
- static const ElemDesc* s_dummyDesc;
-
/**
* The string "<!DOCTYPE HTML".
*/
@@ -377,32 +281,15 @@
copyEntityIntoBuffer(const XalanDOMString& s);
/**
- * Get an ElemDesc instance for the specified name.
- *
- * @param name the name to search.
- * @return a const reference to the ElemDesc instance.
- */
- static const ElemDesc&
- getElemDesc(const XalanDOMChar* name);
-
- /**
- * Initialize the map of element flags.
- *
- * @return map of element flags.
- */
- static void
- initializeElementFlagsMap(ElementFlagsMapType& theMap);
-
- /**
* Process an attribute.
* @param name The name of the attribute.
* @param value The value of the attribute.
*/
virtual void
processAttribute(
- const XalanDOMChar* name,
- const XalanDOMChar* value,
- const ElemDesc& elemDesc);
+ const XalanDOMChar*
name,
+ const XalanDOMChar*
value,
+ const XalanHTMLElementsProperties::ElementProperties&
elemProperties);
/**
* Write the specified string after substituting non ASCII characters,
@@ -468,6 +355,8 @@
* This is set to true if we should omit the META tag in HTML output
(the default is false)
*/
bool m_omitMetaTag;
+
+ ElementPropertiesStackType m_elementPropertiesStack;
static const XalanDOMString s_emptyString;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]