dbertoni 00/12/12 08:34:15
Modified: c/src/XMLSupport FormatterToHTML.cpp FormatterToHTML.hpp
FormatterToXML.cpp FormatterToXML.hpp
Log:
Fixed bug where illegal characters were allowed in names.
Revision Changes Path
1.37 +78 -86 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.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- FormatterToHTML.cpp 2000/12/06 21:14:59 1.36
+++ FormatterToHTML.cpp 2000/12/12 16:34:10 1.37
@@ -339,30 +339,30 @@
// specified
if(isEmptySystem == false || isEmptyPublic == false)
{
- accum(s_doctypeHeaderStartString);
+ accumContent(s_doctypeHeaderStartString);
if(isEmptyPublic == false)
{
- accum(s_doctypeHeaderPublicString);
- accum(m_doctypePublic);
- accum(XalanUnicode::charQuoteMark);
+ accumContent(s_doctypeHeaderPublicString);
+ accumContent(m_doctypePublic);
+ accumContent(XalanUnicode::charQuoteMark);
}
if(isEmptySystem == false)
{
if(isEmptyPublic == true)
{
- accum(s_doctypeHeaderSystemString);
+ accumContent(s_doctypeHeaderSystemString);
}
- accum(XalanUnicode::charSpace);
- accum(XalanUnicode::charQuoteMark);
+ accumContent(XalanUnicode::charSpace);
+ accumContent(XalanUnicode::charQuoteMark);
- accum(m_doctypeSystem);
- accum(XalanUnicode::charQuoteMark);
+ accumContent(m_doctypeSystem);
+ accumContent(XalanUnicode::charQuoteMark);
}
- accum(XalanUnicode::charGreaterThanSign);
+ accumContent(XalanUnicode::charGreaterThanSign);
outputLineSep();
}
@@ -415,9 +415,9 @@
m_isRawStack.push_back(elemDesc.is(ElemDesc::RAW));
- accum(XalanUnicode::charLessThanSign);
+ accumContent(XalanUnicode::charLessThanSign);
- writeCharacters(name);
+ accumName(name);
const unsigned int nAttrs = attrs.getLength();
@@ -474,25 +474,25 @@
indent(m_currentIndent);
}
- accum(XalanUnicode::charLessThanSign);
- accum(XalanUnicode::charSolidus);
- writeCharacters(name);
- accum(XalanUnicode::charGreaterThanSign);
+ accumContent(XalanUnicode::charLessThanSign);
+ accumContent(XalanUnicode::charSolidus);
+ accumName(name);
+ accumContent(XalanUnicode::charGreaterThanSign);
}
else
{
if(elemDesc.is(ElemDesc::EMPTY) == false)
{
- accum(XalanUnicode::charGreaterThanSign);
+ accumContent(XalanUnicode::charGreaterThanSign);
- accum(XalanUnicode::charLessThanSign);
- accum(XalanUnicode::charSolidus);
- writeCharacters(name);
- accum(XalanUnicode::charGreaterThanSign);
+ accumContent(XalanUnicode::charLessThanSign);
+ accumContent(XalanUnicode::charSolidus);
+ accumName(name);
+ accumContent(XalanUnicode::charGreaterThanSign);
}
else
{
- accum(XalanUnicode::charGreaterThanSign);
+ accumContent(XalanUnicode::charGreaterThanSign);
}
}
@@ -566,11 +566,11 @@
void
-FormatterToHTML::entityReference(const XMLCh* const name)
+FormatterToHTML::entityReference(const XMLCh* const name)
{
- accum(XalanUnicode::charAmpersand);
- accum(name);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumName(name);
+ accumContent(XalanUnicode::charSemicolon);
}
@@ -604,7 +604,7 @@
indent(m_currentIndent);
}
- accum(ch, 0, length);
+ accumContent(ch, 0, length);
}
else
{
@@ -636,21 +636,21 @@
indent(m_currentIndent);
}
- accum(XalanUnicode::charLessThanSign);
- accum(XalanUnicode::charQuestionMark);
- writeCharacters(target);
+ accumContent(XalanUnicode::charLessThanSign);
+ accumContent(XalanUnicode::charQuestionMark);
+ accumName(target);
if (length(data) > 0)
{
if(isXMLWhitespace(data[0]) == false)
{
- accum(XalanUnicode::charSpace);
+ accumContent(XalanUnicode::charSpace);
}
- writeCharacters(data);
+ accumName(data);
}
- accum(XalanUnicode::charGreaterThanSign); // different from XML
+ accumContent(XalanUnicode::charGreaterThanSign); // different
from XML
m_startNewLine = true;
}
@@ -684,7 +684,7 @@
if(ch < SPECIALSSIZE && m_charsMap[ch] != 'S')
{
- accum(ch);
+ accumContent(ch);
}
else if (XalanUnicode::charLF == ch)
{
@@ -758,7 +758,7 @@
else if(ch >= 0x007Fu && ch <= m_maxCharacter)
{
// Hope this is right...
- accum(ch);
+ accumContent(ch);
}
else
{
@@ -782,13 +782,13 @@
if(ch < SPECIALSSIZE && m_attrCharsMap[ch] != 'S')
{
- accum(ch);
+ accumContent(ch);
}
else if(XalanUnicode::charAmpersand == ch &&
i + 1 < strLen &&
XalanUnicode::charLeftCurlyBracket == string[i
+ 1])
{
- accum(ch); // no escaping in this case, as specified in
15.2
+ accumContent(ch); // no escaping in this case, as
specified in 15.2
}
else if (accumDefaultEntity(ch, i, string, strLen, false) ==
false)
{
@@ -814,42 +814,42 @@
next = ((ch - 0xd800) << 10) + next
-0xdc00 + 0x00010000;
}
- accum(XalanUnicode::charAmpersand);
- accum(XalanUnicode::charNumberSign);
- accum(UnsignedLongToDOMString(next));
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charNumberSign);
+ accumContent(UnsignedLongToDOMString(next));
+ accumContent(XalanUnicode::charSemicolon);
}
else if(ch >= 160 && ch <= 255)
{
- accum(XalanUnicode::charAmpersand);
- accum(theHTMLLatin1Symbols[ch - 160]);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(theHTMLLatin1Symbols[ch - 160]);
+ accumContent(XalanUnicode::charSemicolon);
}
else if(ch >= 913 && ch <= 937 && ch != 930)
{
- accum(XalanUnicode::charAmpersand);
- accum(theHTMLSymbols1[ch - 913]);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(theHTMLSymbols1[ch - 913]);
+ accumContent(XalanUnicode::charSemicolon);
}
else if(ch >= 945 && ch <= 969)
{
- accum(XalanUnicode::charAmpersand);
- accum(theHTMLSymbols2[ch - 945]);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(theHTMLSymbols2[ch - 945]);
+ accumContent(XalanUnicode::charSemicolon);
}
else if(ch >= 977 && ch <= 978)
{
- accum(XalanUnicode::charAmpersand);
- // substracting the number of unused characters
- accum(theHTMLSymbols2[ch - 945 - 7]);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ // subtracting the number of unused characters
+ accumContent(theHTMLSymbols2[ch - 945 - 7]);
+ accumContent(XalanUnicode::charSemicolon);
}
else if(ch == 982)
{
- accum(XalanUnicode::charAmpersand);
- // substracting the number of unused characters
- accum(theHTMLSymbols2[ch - 945 - 10]);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ // subtracting the number of unused characters
+ accumContent(theHTMLSymbols2[ch - 945 - 10]);
+ accumContent(XalanUnicode::charSemicolon);
}
else if (338 == ch)
{
@@ -870,26 +870,18 @@
void
-FormatterToHTML::commentData(const XalanDOMChar* data)
-{
- writeCharacters(data);
-}
-
-
-
-void
FormatterToHTML::copyEntityIntoBuffer(const XalanDOMChar* s)
{
const unsigned int len = length(s);
- accum(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charAmpersand);
for(unsigned int i = 0; i < len; ++i)
{
- accum(s[i]);
+ accumContent(s[i]);
}
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charSemicolon);
}
@@ -899,14 +891,14 @@
{
const unsigned int len = length(s);
- accum(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charAmpersand);
for(unsigned int i = 0; i < len; ++i)
{
- accum(charAt(s, i));
+ accumContent(charAt(s, i));
}
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charSemicolon);
}
@@ -914,14 +906,14 @@
void
FormatterToHTML::copyEntityIntoBuffer(const XalanDOMCharVectorType&
s)
{
- accum(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charAmpersand);
for(XalanDOMCharVectorType::const_iterator i = s.begin(); *i != 0; ++i)
{
- accum(*i);
+ accumContent(*i);
}
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charSemicolon);
}
@@ -932,18 +924,18 @@
const XalanDOMChar* value,
const ElemDesc& elemDesc)
{
- accum(XalanUnicode::charSpace);
+ accumContent(XalanUnicode::charSpace);
if(elemDesc.isAttrFlagSet(name, ElemDesc::ATTREMPTY) == true &&
(length(value) == 0) || equalsIgnoreCaseASCII(value, name) == true)
{
- writeCharacters(name);
+ accumName(name);
}
else
{
- writeCharacters(name);
- accum(XalanUnicode::charEqualsSign);
- accum(XalanUnicode::charQuoteMark);
+ accumName(name);
+ accumContent(XalanUnicode::charEqualsSign);
+ accumContent(XalanUnicode::charQuoteMark);
if(elemDesc.isAttrFlagSet(name, ElemDesc::ATTRURL) == true)
{
@@ -954,7 +946,7 @@
writeAttrString(value, m_encoding);
}
- accum(XalanUnicode::charQuoteMark);
+ accumContent(XalanUnicode::charQuoteMark);
}
}
@@ -979,17 +971,17 @@
if(b1 != 0)
{
- accum(XalanUnicode::charPercentSign);
+ accumContent(XalanUnicode::charPercentSign);
- accum(UnsignedLongToHexDOMString(b1));
+ accumContent(UnsignedLongToHexDOMString(b1));
}
- accum(XalanUnicode::charPercentSign);
- accum(UnsignedLongToHexDOMString(b2));
+ accumContent(XalanUnicode::charPercentSign);
+ accumContent(UnsignedLongToHexDOMString(b2));
}
else
{
- accum(ch);
+ accumContent(ch);
}
}
}
1.16 +1 -4 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.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- FormatterToHTML.hpp 2000/12/06 21:15:01 1.15
+++ FormatterToHTML.hpp 2000/12/12 16:34:10 1.16
@@ -58,7 +58,7 @@
#define FORMATTERTOHTML_HEADER_GUARD_1357924680
/**
- * $Id: FormatterToHTML.hpp,v 1.15 2000/12/06 21:15:01 dbertoni Exp $
+ * $Id: FormatterToHTML.hpp,v 1.16 2000/12/12 16:34:10 dbertoni Exp $
*
* $State: Exp $
*
@@ -285,9 +285,6 @@
writeAttrString(
const XalanDOMChar* string,
const XalanDOMString& encoding);
-
- virtual void
- commentData(const XalanDOMChar* data);
void
writeCharacters(const XalanDOMString& theString);
1.38 +265 -167 xml-xalan/c/src/XMLSupport/FormatterToXML.cpp
Index: FormatterToXML.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToXML.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- FormatterToXML.cpp 2000/12/06 21:15:03 1.37
+++ FormatterToXML.cpp 2000/12/12 16:34:11 1.38
@@ -133,7 +133,9 @@
m_pos(0),
m_byteBuf(),
m_level(0),
- m_elemStack()
+ m_elemStack(),
+ m_accumNameFunction(0),
+ m_accumContentFunction(0)
{
assert(isEmpty(m_encoding) == false);
@@ -173,10 +175,18 @@
m_bytesEqualChars = true;
m_byteBuf.resize(s_maxBufferSize);
+
+ m_accumNameFunction = accumNameAsByte;
+
+ m_accumContentFunction = accumContentAsByte;
}
else
{
m_charBuf.resize(s_maxBufferSize);
+
+ m_accumNameFunction = accumNameAsChar;
+
+ m_accumContentFunction = accumContentAsChar;
}
// Do this last so we initialize the map according to the value of
@@ -244,26 +254,26 @@
void
FormatterToXML::outputDocTypeDecl(const XalanDOMChar* name)
{
- accum(s_doctypeHeaderStartString); // "<!DOCTYPE "
+ accumName(s_doctypeHeaderStartString); // "<!DOCTYPE "
- accum(name);
+ accumName(name);
if(length(m_doctypePublic) != 0)
{
- accum(s_doctypeHeaderPublicString); // " PUBLIC \""
- accum(m_doctypePublic);
- accum(XalanUnicode::charQuoteMark);
- accum(XalanUnicode::charSpace);
- accum(XalanUnicode::charQuoteMark);
+ accumName(s_doctypeHeaderPublicString); // " PUBLIC \""
+ accumName(m_doctypePublic);
+ accumName(XalanUnicode::charQuoteMark);
+ accumName(XalanUnicode::charSpace);
+ accumName(XalanUnicode::charQuoteMark);
}
else
{
- accum(s_doctypeHeaderSystemString); // " SYSTEM \""
+ accumName(s_doctypeHeaderSystemString); // " SYSTEM \""
}
- accum(m_doctypeSystem);
- accum(XalanUnicode::charQuoteMark);
- accum(XalanUnicode::charGreaterThanSign);
+ accumName(m_doctypeSystem);
+ accumName(XalanUnicode::charQuoteMark);
+ accumName(XalanUnicode::charGreaterThanSign);
outputLineSep();
}
@@ -271,50 +281,109 @@
void
-FormatterToXML::accum(XalanDOMChar ch)
+FormatterToXML::accumNameAsByte(XalanDOMChar ch)
{
- if (m_bytesEqualChars == true)
+ if (ch > m_maxCharacter)
{
- if (ch > 255)
- {
- writeNumberedEntityReference(ch);
- }
- else
- {
- m_byteBuf[m_pos++] = char(ch);
- }
+ m_byteBuf[m_pos++] = char(XalanUnicode::charQuestionMark);
+ }
+ else
+ {
+ m_byteBuf[m_pos++] = char(ch);
+ }
- if(m_pos == s_maxBufferSize)
- {
- flushBytes();
- }
+ if(m_pos == s_maxBufferSize)
+ {
+ flushBytes();
}
+}
+
+
+
+void
+FormatterToXML::accumContentAsByte(XalanDOMChar ch)
+{
+ if (ch > m_maxCharacter)
+ {
+ writeNumberedEntityReference(ch);
+ }
else
{
+ m_byteBuf[m_pos++] = char(ch);
+ }
+
+ if(m_pos == s_maxBufferSize)
+ {
+ flushBytes();
+ }
+}
+
+
+
+void
+FormatterToXML::accumNameAsChar(XalanDOMChar ch)
+{
+ if (ch > m_maxCharacter)
+ {
+ m_charBuf[m_pos++] = char(XalanUnicode::charQuestionMark);
+ }
+ else
+ {
m_charBuf[m_pos++] = ch;
+ }
- if(m_pos == s_maxBufferSize)
- {
- flushChars();
- }
+ if(m_pos == s_maxBufferSize)
+ {
+ flushChars();
+ }
+}
+
+
+
+void
+FormatterToXML::accumContentAsChar(XalanDOMChar ch)
+{
+ if (ch > m_maxCharacter)
+ {
+ writeNumberedEntityReference(ch);
+ }
+ else
+ {
+ m_charBuf[m_pos++] = ch;
+ }
+
+ if(m_pos == s_maxBufferSize)
+ {
+ flushChars();
}
}
void
-FormatterToXML::accum(const XalanDOMChar* chars)
+FormatterToXML::accumName(const XalanDOMChar* chars)
{
for(; *chars!= 0; ++chars)
{
- accum(*chars);
+ accumName(*chars);
}
}
void
-FormatterToXML::accum(
+FormatterToXML::accumContent(const XalanDOMChar* chars)
+{
+ for(; *chars!= 0; ++chars)
+ {
+ accumContent(*chars);
+ }
+}
+
+
+
+void
+FormatterToXML::accumName(
const XalanDOMChar chars[],
unsigned int start,
unsigned int length)
@@ -323,29 +392,61 @@
for(DOMCharBufferType::size_type i = start; i < n; ++i)
{
- accum(chars[i]);
+ accumName(chars[i]);
}
}
void
-FormatterToXML::accum(const XalanDOMString& str)
+FormatterToXML::accumContent(
+ const XalanDOMChar chars[],
+ unsigned int start,
+ unsigned int length)
{
- accum(c_wstr(str), 0, length(str));
+ const DOMCharBufferType::size_type n = start + length;
+
+ for(DOMCharBufferType::size_type i = start; i < n; ++i)
+ {
+ accumContent(chars[i]);
+ }
}
void
-FormatterToXML::accum(const XalanDOMCharVectorType& theVector)
+FormatterToXML::accumName(const XalanDOMString& str)
{
- accum(c_wstr(theVector), 0, theVector.size() - 1);
+ accumName(c_wstr(str), 0, length(str));
}
void
+FormatterToXML::accumContent(const XalanDOMString& str)
+{
+ accumContent(c_wstr(str), 0, length(str));
+}
+
+
+
+void
+FormatterToXML::accumName(const XalanDOMCharVectorType& theVector)
+{
+ accumName(c_wstr(theVector), 0, theVector.size() - 1);
+}
+
+
+
+void
+FormatterToXML::accumContent(const XalanDOMCharVectorType& theVector)
+{
+ accumContent(c_wstr(theVector), 0, theVector.size() - 1);
+}
+
+
+
+void
FormatterToXML::throwInvalidUTF16SurrogateException(XalanDOMChar ch)
{
const XalanDOMString theMessage(TranscodeFromLocalCodePage("Invalid
UTF-16 surrogate detected: ") +
@@ -413,7 +514,7 @@
}
else
{
- accum(ch);
+ accumContent(ch);
}
}
}
@@ -459,43 +560,43 @@
}
else if (XalanUnicode::charLessThanSign == ch)
{
- accum(XalanUnicode::charAmpersand);
- accum(XalanUnicode::charLetter_l);
- accum(XalanUnicode::charLetter_t);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charLetter_l);
+ accumContent(XalanUnicode::charLetter_t);
+ accumContent(XalanUnicode::charSemicolon);
}
else if (XalanUnicode::charGreaterThanSign == ch)
{
- accum(XalanUnicode::charAmpersand);
- accum(XalanUnicode::charLetter_g);
- accum(XalanUnicode::charLetter_t);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charLetter_g);
+ accumContent(XalanUnicode::charLetter_t);
+ accumContent(XalanUnicode::charSemicolon);
}
else if (XalanUnicode::charAmpersand == ch)
{
- accum(XalanUnicode::charAmpersand);
- accum(XalanUnicode::charLetter_a);
- accum(XalanUnicode::charLetter_m);
- accum(XalanUnicode::charLetter_p);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charLetter_a);
+ accumContent(XalanUnicode::charLetter_m);
+ accumContent(XalanUnicode::charLetter_p);
+ accumContent(XalanUnicode::charSemicolon);
}
else if (XalanUnicode::charQuoteMark == ch)
{
- accum(XalanUnicode::charAmpersand);
- accum(XalanUnicode::charLetter_q);
- accum(XalanUnicode::charLetter_u);
- accum(XalanUnicode::charLetter_o);
- accum(XalanUnicode::charLetter_t);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charLetter_q);
+ accumContent(XalanUnicode::charLetter_u);
+ accumContent(XalanUnicode::charLetter_o);
+ accumContent(XalanUnicode::charLetter_t);
+ accumContent(XalanUnicode::charSemicolon);
}
else if (XalanUnicode::charApostrophe == ch)
{
- accum(XalanUnicode::charAmpersand);
- accum(XalanUnicode::charLetter_a);
- accum(XalanUnicode::charLetter_p);
- accum(XalanUnicode::charLetter_o);
- accum(XalanUnicode::charLetter_s);
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charLetter_a);
+ accumContent(XalanUnicode::charLetter_p);
+ accumContent(XalanUnicode::charLetter_o);
+ accumContent(XalanUnicode::charLetter_s);
+ accumContent(XalanUnicode::charSemicolon);
}
else
{
@@ -572,35 +673,35 @@
if(m_shouldWriteXMLHeader == true)
{
- accum(s_xmlHeaderStartString); // "<?xml version=\""
+ accumName(s_xmlHeaderStartString); // "<?xml
version=\""
if (length(m_version) != 0)
{
- accum(m_version);
+ accumName(m_version);
}
else
{
- accum(s_defaultVersionString);
+ accumName(s_defaultVersionString);
}
- accum(s_xmlHeaderEncodingString); // "\"
encoding=\""
+ accumName(s_xmlHeaderEncodingString); // "\"
encoding=\""
if (isEmpty(m_encoding) == true)
{
- accum(s_iso88591String);
+ accumName(s_iso88591String);
}
else
{
- accum(m_encoding);
+ accumName(m_encoding);
}
if (length(m_standalone) != 0)
{
- accum(s_xmlHeaderStandaloneString);
- accum(m_standalone);
+ accumName(s_xmlHeaderStandaloneString);
+ accumName(m_standalone);
}
- accum(s_xmlHeaderEndString);
+ accumName(s_xmlHeaderEndString);
outputLineSep();
}
@@ -650,8 +751,8 @@
m_startNewLine = true;
- accum(XalanUnicode::charLessThanSign);
- accum(name);
+ accumName(XalanUnicode::charLessThanSign);
+ accumName(name);
const unsigned int nAttrs = attrs.getLength();
@@ -685,21 +786,21 @@
indent(m_currentIndent);
}
- accum(XalanUnicode::charLessThanSign);
- accum(XalanUnicode::charSolidus);
- accum(name);
+ accumName(XalanUnicode::charLessThanSign);
+ accumName(XalanUnicode::charSolidus);
+ accumName(name);
}
else
{
if(m_spaceBeforeClose == true)
{
- accum(XalanUnicode::charSpace);
+ accumName(XalanUnicode::charSpace);
}
- accum(XalanUnicode::charSolidus);
+ accumName(XalanUnicode::charSolidus);
}
- accum(XalanUnicode::charGreaterThanSign);
+ accumName(XalanUnicode::charGreaterThanSign);
if (hasChildNodes == true)
{
@@ -743,21 +844,21 @@
indent(m_currentIndent);
}
- accum(XalanUnicode::charLessThanSign);
- accum(XalanUnicode::charQuestionMark);
- accum(target);
+ accumName(XalanUnicode::charLessThanSign);
+ accumName(XalanUnicode::charQuestionMark);
+ accumName(target);
const unsigned int len = length(data);
if ( len > 0 && !isXMLWhitespace(data[0]))
{
- accum(XalanUnicode::charSpace);
+ accumName(XalanUnicode::charSpace);
}
accumNormalizedPIData(data, len);
- accum(XalanUnicode::charQuestionMark);
- accum(XalanUnicode::charGreaterThanSign);
+ accumName(XalanUnicode::charQuestionMark);
+ accumName(XalanUnicode::charGreaterThanSign);
m_startNewLine = true;
}
@@ -801,7 +902,7 @@
}
else
{
- accum(ch);
+ accumContent(ch);
}
}
@@ -826,7 +927,7 @@
m_ispreserve = true;
- accum(chars, 0, length);
+ accumContent(chars, 0, length);
}
}
@@ -851,7 +952,7 @@
}
else
{
- accum(ch);
+ accumName(ch);
}
}
}
@@ -859,14 +960,6 @@
void
-FormatterToXML::commentData(const XalanDOMChar* data)
-{
- accum(data);
-}
-
-
-
-void
FormatterToXML::writeNormalizedChars(
const XalanDOMChar ch[],
unsigned int start,
@@ -903,7 +996,7 @@
{
if(i != 0)
{
- accum(s_dtdCDATACloseString);
+ accumContent(s_dtdCDATACloseString);
}
// This needs to go into a function...
@@ -938,15 +1031,15 @@
if(i != 0 && i < end - 1)
{
// "<![CDATA["
- accum(XalanUnicode::charLessThanSign);
- accum(XalanUnicode::charExclamationMark);
- accum(XalanUnicode::charLeftSquareBracket);
- accum(XalanUnicode::charLetter_C);
- accum(XalanUnicode::charLetter_D);
- accum(XalanUnicode::charLetter_A);
- accum(XalanUnicode::charLetter_T);
- accum(XalanUnicode::charLetter_A);
- accum(XalanUnicode::charLeftSquareBracket);
+ accumContent(XalanUnicode::charLessThanSign);
+ accumContent(XalanUnicode::charExclamationMark);
+
accumContent(XalanUnicode::charLeftSquareBracket);
+ accumContent(XalanUnicode::charLetter_C);
+ accumContent(XalanUnicode::charLetter_D);
+ accumContent(XalanUnicode::charLetter_A);
+ accumContent(XalanUnicode::charLetter_T);
+ accumContent(XalanUnicode::charLetter_A);
+
accumContent(XalanUnicode::charLeftSquareBracket);
}
}
else if(isCData == true &&
@@ -956,21 +1049,21 @@
XalanUnicode::charGreaterThanSign == ch[ i + 2])
{
// "]]]]><![CDATA[>"
- accum(XalanUnicode::charRightSquareBracket);
- accum(XalanUnicode::charRightSquareBracket);
- accum(XalanUnicode::charRightSquareBracket);
- accum(XalanUnicode::charRightSquareBracket);
- accum(XalanUnicode::charGreaterThanSign);
- accum(XalanUnicode::charLessThanSign);
- accum(XalanUnicode::charExclamationMark);
- accum(XalanUnicode::charLeftSquareBracket);
- accum(XalanUnicode::charLetter_C);
- accum(XalanUnicode::charLetter_D);
- accum(XalanUnicode::charLetter_A);
- accum(XalanUnicode::charLetter_T);
- accum(XalanUnicode::charLetter_A);
- accum(XalanUnicode::charLeftSquareBracket);
- accum(XalanUnicode::charGreaterThanSign);
+ accumContent(XalanUnicode::charRightSquareBracket);
+ accumContent(XalanUnicode::charRightSquareBracket);
+ accumContent(XalanUnicode::charRightSquareBracket);
+ accumContent(XalanUnicode::charRightSquareBracket);
+ accumContent(XalanUnicode::charGreaterThanSign);
+ accumContent(XalanUnicode::charLessThanSign);
+ accumContent(XalanUnicode::charExclamationMark);
+ accumContent(XalanUnicode::charLeftSquareBracket);
+ accumContent(XalanUnicode::charLetter_C);
+ accumContent(XalanUnicode::charLetter_D);
+ accumContent(XalanUnicode::charLetter_A);
+ accumContent(XalanUnicode::charLetter_T);
+ accumContent(XalanUnicode::charLetter_A);
+ accumContent(XalanUnicode::charLeftSquareBracket);
+ accumContent(XalanUnicode::charGreaterThanSign);
i += 2;
}
@@ -978,7 +1071,7 @@
{
if(c <= m_maxCharacter)
{
- accum(c);
+ accumContent(c);
}
// This needs to go into a function...
else if (0xd800 <= c && c < 0xdc00)
@@ -1017,10 +1110,10 @@
void
FormatterToXML::writeNumberedEntityReference(unsigned long theNumber)
{
- accum(XalanUnicode::charAmpersand);
- accum(XalanUnicode::charNumberSign);
- accum(UnsignedLongToDOMString(theNumber));
- accum(XalanUnicode::charSemicolon);
+ accumContent(XalanUnicode::charAmpersand);
+ accumContent(XalanUnicode::charNumberSign);
+ accumContent(UnsignedLongToDOMString(theNumber));
+ accumContent(XalanUnicode::charSemicolon);
}
@@ -1035,9 +1128,9 @@
indent(m_currentIndent);
}
- m_writer.write(XalanUnicode::charAmpersand);
- m_writer.write(name);
- m_writer.write(XalanUnicode::charSemicolon);
+ accumName(XalanUnicode::charAmpersand);
+ accumName(name);
+ accumName(XalanUnicode::charSemicolon);
}
@@ -1075,16 +1168,16 @@
indent(m_currentIndent);
}
- accum(XalanUnicode::charLessThanSign);
- accum(XalanUnicode::charExclamationMark);
- accum(XalanUnicode::charHyphenMinus);
- accum(XalanUnicode::charHyphenMinus);
-
- commentData(data);
-
- accum(XalanUnicode::charHyphenMinus);
- accum(XalanUnicode::charHyphenMinus);
- accum(XalanUnicode::charGreaterThanSign);
+ accumName(XalanUnicode::charLessThanSign);
+ accumName(XalanUnicode::charExclamationMark);
+ accumName(XalanUnicode::charHyphenMinus);
+ accumName(XalanUnicode::charHyphenMinus);
+
+ accumName(data);
+
+ accumName(XalanUnicode::charHyphenMinus);
+ accumName(XalanUnicode::charHyphenMinus);
+ accumName(XalanUnicode::charGreaterThanSign);
m_startNewLine = true;
}
@@ -1126,15 +1219,15 @@
ch[0] <= m_maxCharacter)
{
// "<![CDATA["
- accum(XalanUnicode::charLessThanSign);
-
accum(XalanUnicode::charExclamationMark);
-
accum(XalanUnicode::charLeftSquareBracket);
- accum(XalanUnicode::charLetter_C);
- accum(XalanUnicode::charLetter_D);
- accum(XalanUnicode::charLetter_A);
- accum(XalanUnicode::charLetter_T);
- accum(XalanUnicode::charLetter_A);
-
accum(XalanUnicode::charLeftSquareBracket);
+
accumContent(XalanUnicode::charLessThanSign);
+
accumContent(XalanUnicode::charExclamationMark);
+
accumContent(XalanUnicode::charLeftSquareBracket);
+
accumContent(XalanUnicode::charLetter_C);
+
accumContent(XalanUnicode::charLetter_D);
+
accumContent(XalanUnicode::charLetter_A);
+
accumContent(XalanUnicode::charLetter_T);
+
accumContent(XalanUnicode::charLetter_A);
+
accumContent(XalanUnicode::charLeftSquareBracket);
}
}
@@ -1145,9 +1238,9 @@
if(length >= 1 &&
ch[length - 1] <= m_maxCharacter)
{
-
accum(XalanUnicode::charRightSquareBracket);
-
accum(XalanUnicode::charRightSquareBracket);
-
accum(XalanUnicode::charGreaterThanSign);
+
accumContent(XalanUnicode::charRightSquareBracket);
+
accumContent(XalanUnicode::charRightSquareBracket);
+
accumContent(XalanUnicode::charGreaterThanSign);
}
}
}
@@ -1164,7 +1257,8 @@
// See if the parent element has already been flagged as having
children.
if(false == m_elemStack.back())
{
- accum(XalanUnicode::charGreaterThanSign);
+ accumContent(XalanUnicode::charGreaterThanSign);
+
m_isprevtext = false;
m_elemStack.pop_back();
@@ -1207,12 +1301,12 @@
const XalanDOMChar* name,
const XalanDOMChar* value)
{
- accum(XalanUnicode::charSpace);
- accum(name);
- accum(XalanUnicode::charEqualsSign);
- accum(XalanUnicode::charQuoteMark);
+ accumContent(XalanUnicode::charSpace);
+ accumName(name);
+ accumContent(XalanUnicode::charEqualsSign);
+ accumContent(XalanUnicode::charQuoteMark);
writeAttrString(value, m_encoding);
- accum(XalanUnicode::charQuoteMark);
+ accumContent(XalanUnicode::charQuoteMark);
}
@@ -1221,10 +1315,10 @@
FormatterToXML::outputLineSep()
{
#if defined(XALAN_NEWLINE_IS_CRLF)
- accum(XalanUnicode::charCR);
- accum(XalanUnicode::charLF);
+ accumContent(XalanUnicode::charCR);
+ accumContent(XalanUnicode::charLF);
#else
- accum(XalanUnicode::charLF);
+ accumContent(XalanUnicode::charLF);
#endif
}
@@ -1235,7 +1329,7 @@
{
for (int i = 0; i < n; i ++)
{
- accum(XalanUnicode::charSpace);
+ accumContent(XalanUnicode::charSpace);
}
}
@@ -1270,14 +1364,16 @@
{
const XalanDOMChar theChar = theData[i];
- if (theChar == XalanUnicode::charQuestionMark && i + 1 <
theLength && theData[i + 1] == XalanUnicode::charGreaterThanSign)
+ if (theChar == XalanUnicode::charQuestionMark &&
+ i + 1 < theLength &&
+ theData[i + 1] == XalanUnicode::charGreaterThanSign)
{
- accum(XalanUnicode::charQuestionMark);
- accum(XalanUnicode::charSpace);
+ accumContent(XalanUnicode::charQuestionMark);
+ accumContent(XalanUnicode::charSpace);
}
else
{
- accum(theChar);
+ accumName(theChar);
}
}
}
@@ -1309,6 +1405,8 @@
s_revhash.find(toUpperCase(encoding));
return (*it).second;
}
+
+
void FormatterToXML::initEncodings()
{
1.25 +122 -13 xml-xalan/c/src/XMLSupport/FormatterToXML.hpp
Index: FormatterToXML.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToXML.hpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- FormatterToXML.hpp 2000/12/06 21:15:04 1.24
+++ FormatterToXML.hpp 2000/12/12 16:34:11 1.25
@@ -349,20 +349,53 @@
/**
* Append a wide character to the buffer.
+ * Characters that are not representable
+ * in the encoding are not written as
+ * entities.
*
* @ch the character to append.
*/
void
- accum(XalanDOMChar ch);
+ accumName(XalanDOMChar ch)
+ {
+ assert(m_accumNameFunction != 0);
+
+ (this->*m_accumNameFunction)(ch);
+ }
/**
+ * Append a wide character to the buffer.
+ * Characters that are not representable
+ * in the encoding are not written as
+ * entities.
+ *
+ * @ch the character to append.
+ */
+ void
+ accumContent(XalanDOMChar ch)
+ {
+ assert(m_accumContentFunction != 0);
+
+ (this->*m_accumContentFunction)(ch);
+ }
+
+ /**
+ * Append a null-terminated array of wide characters to
+ * the buffer.
+ *
+ * @chars the array to append
+ */
+ void
+ accumName(const XalanDOMChar* chars);
+
+ /**
* Append a null-terminated array of wide characters to
* the buffer.
*
* @chars the array to append
*/
void
- accum(const XalanDOMChar* chars);
+ accumContent(const XalanDOMChar* chars);
/**
* Append an array of wide character to the buffer.
@@ -372,18 +405,41 @@
* @length the number of characters to append
*/
void
- accum(
+ accumName(
const XalanDOMChar chars[],
unsigned int start,
unsigned int length);
/**
+ * Append an array of wide character to the buffer.
+ *
+ * @chars the array to append
+ * @start the offset into the array to start from
+ * @length the number of characters to append
+ */
+ void
+ accumContent(
+ const XalanDOMChar chars[],
+ unsigned int start,
+ unsigned int length);
+
+ /**
+ * Append a string to the buffer.
+ *
+ * @param str the string to append
+ */
+ void
+ accumName(const XalanDOMString& str);
+
+ typedef void (FormatterToXML::*AccumFunctionType)(XalanDOMChar);
+
+ /**
* Append a string to the buffer.
*
* @param str the string to append
*/
void
- accum(const XalanDOMString& str);
+ accumContent(const XalanDOMString& str);
/**
* Append a vector of wide characters to the buffer.
@@ -391,9 +447,17 @@
* @param theVector the vector to append
*/
void
- accum(const XalanDOMCharVectorType& theVector);
+ accumName(const XalanDOMCharVectorType& theVector);
/**
+ * Append a vector of wide characters to the buffer.
+ *
+ * @param theVector the vector to append
+ */
+ void
+ accumContent(const XalanDOMCharVectorType& theVector);
+
+ /**
* Escape and accum a character.
*/
void
@@ -505,13 +569,6 @@
const XalanDOMString& encoding);
/**
- * Write the data of a comment.
- * @param data The string to write.
- */
- virtual void
- commentData(const XalanDOMChar* data);
-
- /**
* Throw an exception when an invalid
* surrogate is encountered.
* @param ch The first character in the surrogate
@@ -656,6 +713,46 @@
initEncodings();
/**
+ * Append a wide character to the buffer.
+ * Characters that are not representable
+ * in the encoding are not written as
+ * entities.
+ *
+ * @ch the character to append.
+ */
+ void
+ accumNameAsByte(XalanDOMChar ch);
+
+ /**
+ * Append a wide character to the buffer.
+ * Characters that are not representable
+ * in the encoding are written as entities.
+ *
+ * @ch the character to append.
+ */
+ void
+ accumContentAsByte(XalanDOMChar ch);
+
+ /**
+ * Append a wide character to the buffer.
+ * Characters that are not representable
+ * in the encoding are not written as
+ * entities.
+ *
+ * @ch the character to append.
+ */
+ void
+ accumNameAsChar(XalanDOMChar ch);
+
+ /**
+ * Append a wide character to the buffer.
+ *
+ * @ch the character to append.
+ */
+ void
+ accumContentAsChar(XalanDOMChar ch);
+
+ /**
* Output the doc type declaration.
*
* @param name the name of the doctype.
@@ -817,8 +914,20 @@
/**
* A stack of Boolean objects that tell if the given element
* has children.
+ */
+ BoolStackType m_elemStack;
+
+ /**
+ * A pointer to the member function that will do the accumulating
+ * for names.
+ */
+ AccumFunctionType m_accumNameFunction;
+
+ /**
+ * A pointer to the member function that will do the accumulating
+ * for content.
*/
- BoolStackType m_elemStack;
+ AccumFunctionType m_accumContentFunction;
};