You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by dm...@apache.org on 2005/08/04 20:01:40 UTC
cvs commit: xml-xalan/c/src/xalanc/XMLSupport FormatterToXMLUnicode.hpp XalanFormatterWriter.hpp XalanXMLSerializerBase.cpp XalanXMLSerializerBase.hpp XalanXMLSerializerFactory.cpp
dmitryh 2005/08/04 11:01:40
Modified: c/src/xalanc/NLS/en_US XalanMsg_en_US.xlf
c/src/xalanc/XMLSupport FormatterToXMLUnicode.hpp
XalanFormatterWriter.hpp XalanXMLSerializerBase.cpp
XalanXMLSerializerBase.hpp
XalanXMLSerializerFactory.cpp
Log:
Fix for XALANC-532
Revision Changes Path
1.20 +6 -0 xml-xalan/c/src/xalanc/NLS/en_US/XalanMsg_en_US.xlf
Index: XalanMsg_en_US.xlf
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/NLS/en_US/XalanMsg_en_US.xlf,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- XalanMsg_en_US.xlf 2 May 2005 19:33:48 -0000 1.19
+++ XalanMsg_en_US.xlf 4 Aug 2005 18:01:40 -0000 1.20
@@ -960,6 +960,12 @@
<target>Expected a token but reached the end of the expression instead.</target>
</trans-unit>
+<trans-unit id="ForbiddenXMLCharacter_2Param">
+ <source>The Unicode code point '{0}' is not a legal XML {1} character.</source>
+ <target>The Unicode code point '{0}' is not a legal XML {1} character.</target>
+</trans-unit>
+
+
</body>
</file>
</xliff>
1.7 +65 -62 xml-xalan/c/src/xalanc/XMLSupport/FormatterToXMLUnicode.hpp
Index: FormatterToXMLUnicode.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XMLSupport/FormatterToXMLUnicode.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FormatterToXMLUnicode.hpp 30 Jun 2005 21:52:35 -0000 1.6
+++ FormatterToXMLUnicode.hpp 4 Aug 2005 18:01:40 -0000 1.7
@@ -49,10 +49,8 @@
template<
class UnicodeWriter,
class ConstantsType,
- class AttributePredicate,
- class ContentPredicate,
- class OutsideRangePredicate,
- class IndentHandeler,
+ class CharPredicate,
+ class IndentHandler,
FormatterListener::eXMLVersion XMLVersion>
class XALAN_XMLSUPPORT_EXPORT FormatterToXMLUnicode : public XalanXMLSerializerBase
{
@@ -101,9 +99,7 @@
m_stringBuffer(theManager),
m_writer(writer, theManager),
m_constants(),
- m_attributePredicate(),
- m_contentPredicate(),
- m_outsideRangePredicate(),
+ m_charPredicate(),
m_indentHandler(m_writer , indent)
{
}
@@ -430,7 +426,7 @@
{
const XalanDOMChar ch = chars[i];
- if(m_outsideRangePredicate(ch) == true)
+ if(m_charPredicate.range(ch) == true)
{
safeWriteContent(chars + firstIndex, i - firstIndex);
@@ -440,7 +436,7 @@
firstIndex = i;
}
- else if(m_contentPredicate(ch) == false)
+ else if(m_charPredicate.content(ch) == false)
{
++i;
}
@@ -501,15 +497,27 @@
void
writeDefaultEscape(XalanDOMChar ch)
{
+ assert(m_charPredicate.content(ch) == true);
+
if(!writeDefaultEntity(ch))
{
if (XalanUnicode::charLF == ch)
{
outputNewline();
}
- else if (XMLVersion == XML_VERSION_1_1)
+ else
{
- writeXML1_1CharacterReference(ch);
+ if(m_charPredicate.isForbidden(ch) == true)
+ {
+ XalanXMLSerializerBase::throwInvalidXMLCharacterException(
+ ch,
+ m_version,
+ getMemoryManager());
+ }
+ else
+ {
+ writeNumericCharacterReference(ch);
+ }
}
}
}
@@ -520,10 +528,22 @@
void
writeDefaultAttributeEscape(XalanDOMChar ch)
{
- if(writeDefaultAttributeEntity(ch) == false &&
- XMLVersion == XML_VERSION_1_1)
+ assert(m_charPredicate.attribute(ch) == true);
+
+ if(writeDefaultAttributeEntity(ch) == false)
{
- writeXML1_1CharacterReference(ch);
+ if(m_charPredicate.isForbidden(ch) == true)
+ {
+ XalanXMLSerializerBase::throwInvalidXMLCharacterException(
+ ch,
+ m_version,
+ getMemoryManager());
+ }
+ else
+ {
+ writeNumericCharacterReference(ch);
+ }
+
}
}
@@ -571,30 +591,12 @@
{
return true;
}
- else if (XalanUnicode::charLF == ch)
- {
- m_writer.write(
- m_constants.s_linefeedNCRString,
- m_constants.s_linefeedNCRStringLength);
- }
- else if (XalanUnicode::charCR == ch)
- {
- m_writer.write(
- m_constants.s_carriageReturnNCRString,
- m_constants.s_carriageReturnNCRStringLength);
- }
else if (XalanUnicode::charQuoteMark == ch)
{
m_writer.write(
m_constants.s_quoteEntityString,
m_constants.s_quoteEntityStringLength);
}
- else if (XalanUnicode::charHTab == ch)
- {
- m_writer.write(
- m_constants.s_htabNCRString,
- m_constants.s_htabNCRStringLength);
- }
else
{
return false;
@@ -640,14 +642,23 @@
}
else
{
- start = m_writer.write( chars, start, length);
+ if(m_charPredicate.isCharRefForbidden(ch))
+ {
+ XalanXMLSerializerBase::throwInvalidXMLCharacterException(
+ ch,
+ m_version,
+ getMemoryManager()); }
+ else
+ {
+ start = m_writer.write( chars, start, length);
+ }
}
return start;
}
void
- writeNumberedEntityReference(unsigned long theNumber)
+ writeNumericCharacterReference(unsigned long theNumber)
{
m_writer.write(value_type(XalanUnicode::charAmpersand));
m_writer.write(value_type(XalanUnicode::charNumberSign));
@@ -666,13 +677,14 @@
{
assert( start < length);
- XalanDOMChar ch = chars[start];
+ const XalanDOMChar ch = chars[start];
- assert(m_outsideRangePredicate(ch) == true);
+ assert(m_charPredicate.range(ch) == true);
- if (XalanUnicode::charLSEP == ch)
+ if (XMLVersion == XML_VERSION_1_1 &&
+ XalanUnicode::charLSEP == ch)
{
- writeNumberedEntityReference(ch);
+ writeNumericCharacterReference(ch);
}
else
{
@@ -682,19 +694,6 @@
return start;
}
- void
- writeXML1_1CharacterReference(XalanDOMChar theChar)
- {
- assert(XMLVersion == XML_VERSION_1_1);
- assert(m_outsideRangePredicate(theChar) == false);
-
- if(theChar < XalanUnicode::charSpace ||
- theChar <= 0x97 && theChar >= 0x80)
- {
- writeNumberedEntityReference(theChar);
- }
- }
-
/**
* Write characters for a CDATA section
*
@@ -747,8 +746,17 @@
{
outputNewline();
}
-
- i = m_writer.writeCDATAChar(chars, i, length, (int&)theCurrentState);
+ if(m_charPredicate.isCharRefForbidden(theChar))
+ {
+ XalanXMLSerializerBase::throwInvalidXMLCharacterException(
+ theChar,
+ m_version,
+ getMemoryManager()); }
+ else
+ {
+ i = m_writer.writeCDATAChar(chars, i, length, (int&)theCurrentState);
+ }
+
}
++i;
@@ -783,7 +791,7 @@
{
const XalanDOMChar ch = theString[i];
- if(m_outsideRangePredicate(ch) == true)
+ if(m_charPredicate.range(ch) == true)
{
safeWriteContent(theString + firstIndex, i - firstIndex);
@@ -793,7 +801,7 @@
firstIndex = i;
}
- else if (m_attributePredicate(ch) == false)
+ else if (m_charPredicate.attribute(ch) == false)
{
++i;
}
@@ -814,7 +822,6 @@
private:
-
/**
* Process an attribute.
* @param name The name of the attribute.
@@ -889,13 +896,9 @@
ConstantsType m_constants;
- AttributePredicate m_attributePredicate;
-
- ContentPredicate m_contentPredicate;
-
- OutsideRangePredicate m_outsideRangePredicate;
+ CharPredicate m_charPredicate;
- IndentHandeler m_indentHandler;
+ IndentHandler m_indentHandler;
};
1.6 +2 -2 xml-xalan/c/src/xalanc/XMLSupport/XalanFormatterWriter.hpp
Index: XalanFormatterWriter.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XMLSupport/XalanFormatterWriter.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XalanFormatterWriter.hpp 9 Jun 2005 20:27:19 -0000 1.5
+++ XalanFormatterWriter.hpp 4 Aug 2005 18:01:40 -0000 1.6
@@ -116,11 +116,11 @@
WriterType& m_writer;
};
- class CommonPresentableCharFunctor
+ class CommonRepresentableCharFunctor
{
public:
- CommonPresentableCharFunctor(const XalanOutputStream* stream) :
+ CommonRepresentableCharFunctor(const XalanOutputStream* stream) :
m_stream(stream)
{
assert( stream != 0 );
1.4 +35 -97 xml-xalan/c/src/xalanc/XMLSupport/XalanXMLSerializerBase.cpp
Index: XalanXMLSerializerBase.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XMLSupport/XalanXMLSerializerBase.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XalanXMLSerializerBase.cpp 10 Jun 2005 20:28:10 -0000 1.3
+++ XalanXMLSerializerBase.cpp 4 Aug 2005 18:01:40 -0000 1.4
@@ -33,14 +33,14 @@
XALAN_CPP_NAMESPACE_BEGIN
+const size_t XalanXMLSerializerBase::CharFunctor1_0::s_lastSpecial = 0x7fu;
-
-const char XalanXMLSerializerBase::s_specialChars1_0[eSpecialsSize] =
+const char XalanXMLSerializerBase::CharFunctor1_0::s_specialChars[s_lastSpecial + 1] =
{
- /* 00-07 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
- /* 08-0F */ eNone, eAttr, eBoth, eNone, eNone, eAttr, eNone, eNone,
- /* 10-17 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
- /* 18-1F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
+ /* 00-07 */ eForb, eForb, eForb, eForb, eForb, eForb, eForb, eForb,
+ /* 08-0F */ eForb, eAttr, eBoth, eForb, eForb, eBoth, eForb, eForb,
+ /* 10-17 */ eForb, eForb, eForb, eForb, eForb, eForb, eForb, eForb,
+ /* 18-1F */ eForb, eForb, eForb, eForb, eForb, eForb, eForb, eForb,
/* 20-27 */ eNone, eNone, eAttr, eNone, eNone, eNone, eBoth, eNone,
/* 28-2F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
/* 30-37 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
@@ -52,19 +52,18 @@
/* 60-67 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
/* 68-6F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
/* 70-77 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
- /* 78-7F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
- /* 88-8F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
- /* 90-96 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone
+ /* 78-7F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone
};
+const size_t XalanXMLSerializerBase::CharFunctor1_1::s_lastSpecial = 0x9fu;
-const char XalanXMLSerializerBase::s_specialChars1_1[eSpecialsSize] =
+const char XalanXMLSerializerBase::CharFunctor1_1::s_specialChars[s_lastSpecial + 1] =
{
- /* 00-07 */ eNone, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth,
- /* 08-0F */ eBoth, eAttr, eBoth, eBoth, eBoth, eAttr, eBoth, eBoth,
- /* 10-17 */ eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth,
- /* 18-1F */ eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth,
+ /* 00-07 */ eNone, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb,
+ /* 08-0F */ eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb,
+ /* 10-17 */ eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb,
+ /* 18-1F */ eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb,
/* 20-27 */ eNone, eNone, eAttr, eNone, eNone, eNone, eBoth, eNone,
/* 28-2F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
/* 30-37 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
@@ -76,14 +75,14 @@
/* 60-67 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
/* 68-6F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
/* 70-77 */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
- /* 78-7F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eNone,
- /* 80-87 */ eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth,
- /* 88-8F */ eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth,
- /* 90-96 */ eBoth, eBoth, eBoth, eBoth, eBoth, eBoth, eBoth
+ /* 78-7F */ eNone, eNone, eNone, eNone, eNone, eNone, eNone, eCRFb,
+ /* 80-87 */ eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eBoth, eCRFb, eCRFb,
+ /* 88-8F */ eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb,
+ /* 90-97 */ eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb,
+ /* 98-9F */ eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb, eCRFb
};
-
XalanXMLSerializerBase::XalanXMLSerializerBase(
MemoryManager& theManager,
eXMLVersion theXMLVersion,
@@ -207,6 +206,23 @@
throw SAXException(theMessage.c_str(), &theManager);
}
+void
+XalanXMLSerializerBase::throwInvalidXMLCharacterException(
+ unsigned int ch,
+ const XalanDOMString& theXMLversion,
+ MemoryManager& theManager)
+{
+ XalanDOMString theMessage(theManager);
+ XalanDOMString theBuffer(theManager);
+
+ XalanMessageLoader::getMessage(
+ theMessage,
+ XalanMessages::ForbiddenXMLCharacter_2Param,
+ UnsignedLongToHexDOMString(ch, theBuffer),
+ theXMLversion);
+
+ throw SAXException(theMessage.c_str(), &theManager);
+}
void
@@ -693,46 +709,6 @@
const XalanDOMString::size_type XalanXMLSerializerBase::UTF8::s_quoteEntityStringLength =
FXML_SIZE(s_quoteEntityString);
-const char XalanXMLSerializerBase::UTF8::s_linefeedNCRString[] =
-{
- char(XalanUnicode::charAmpersand),
- char(XalanUnicode::charNumberSign),
- char(XalanUnicode::charDigit_1),
- char(XalanUnicode::charDigit_0),
- char(XalanUnicode::charSemicolon),
- char(0)
-};
-
-const XalanDOMString::size_type XalanXMLSerializerBase::UTF8::s_linefeedNCRStringLength =
- FXML_SIZE(s_linefeedNCRString);
-
-const char XalanXMLSerializerBase::UTF8::s_carriageReturnNCRString[] =
-{
- char(XalanUnicode::charAmpersand),
- char(XalanUnicode::charNumberSign),
- char(XalanUnicode::charDigit_1),
- char(XalanUnicode::charDigit_3),
- char(XalanUnicode::charSemicolon),
- char(0)
-};
-
-const XalanDOMString::size_type XalanXMLSerializerBase::UTF8::s_carriageReturnNCRStringLength =
- FXML_SIZE(s_carriageReturnNCRString);
-
-const char XalanXMLSerializerBase::UTF8::s_htabNCRString[] =
-{
- char(XalanUnicode::charAmpersand),
- char(XalanUnicode::charNumberSign),
- char(XalanUnicode::charDigit_9),
- char(XalanUnicode::charSemicolon),
- char(0)
-};
-
-const XalanDOMString::size_type XalanXMLSerializerBase::UTF8::s_htabNCRStringLength =
- FXML_SIZE(s_htabNCRString);
-
-
-
const XalanDOMChar XalanXMLSerializerBase::UTF16::s_doctypeHeaderStartString[] =
{
XalanUnicode::charLessThanSign,
@@ -977,44 +953,6 @@
const XalanDOMString::size_type XalanXMLSerializerBase::UTF16::s_quoteEntityStringLength =
FXML_SIZE(s_quoteEntityString);
-const XalanDOMChar XalanXMLSerializerBase::UTF16::s_linefeedNCRString[] =
-{
- XalanUnicode::charAmpersand,
- XalanUnicode::charNumberSign,
- XalanUnicode::charDigit_1,
- XalanUnicode::charDigit_0,
- XalanUnicode::charSemicolon,
- XalanDOMChar(0)
-};
-
-const XalanDOMString::size_type XalanXMLSerializerBase::UTF16::s_linefeedNCRStringLength =
- FXML_SIZE(s_linefeedNCRString);
-
-const XalanDOMChar XalanXMLSerializerBase::UTF16::s_carriageReturnNCRString[] =
-{
- XalanUnicode::charAmpersand,
- XalanUnicode::charNumberSign,
- XalanUnicode::charDigit_1,
- XalanUnicode::charDigit_3,
- XalanUnicode::charSemicolon,
- XalanDOMChar(0)
-};
-
-const XalanDOMString::size_type XalanXMLSerializerBase::UTF16::s_carriageReturnNCRStringLength =
- FXML_SIZE(s_carriageReturnNCRString);
-
-const XalanDOMChar XalanXMLSerializerBase::UTF16::s_htabNCRString[] =
-{
- XalanUnicode::charAmpersand,
- XalanUnicode::charNumberSign,
- XalanUnicode::charDigit_9,
- XalanUnicode::charSemicolon,
- XalanDOMChar(0)
-};
-
-const XalanDOMString::size_type XalanXMLSerializerBase::UTF16::s_htabNCRStringLength =
- FXML_SIZE(s_htabNCRString);
-
XALAN_CPP_NAMESPACE_END
1.3 +89 -77 xml-xalan/c/src/xalanc/XMLSupport/XalanXMLSerializerBase.hpp
Index: XalanXMLSerializerBase.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XMLSupport/XalanXMLSerializerBase.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XalanXMLSerializerBase.hpp 6 Jun 2005 01:32:45 -0000 1.2
+++ XalanXMLSerializerBase.hpp 4 Aug 2005 18:01:40 -0000 1.3
@@ -308,27 +308,6 @@
static const char s_quoteEntityString[];
static const XalanDOMString::size_type s_quoteEntityStringLength;
-
- /**
- * The string " ".
- */
- static const char s_linefeedNCRString[];
-
- static const XalanDOMString::size_type s_linefeedNCRStringLength;
-
- /**
- * The string " ".
- */
- static const char s_carriageReturnNCRString[];
-
- static const XalanDOMString::size_type s_carriageReturnNCRStringLength;
-
- /**
- * The string "	".
- */
- static const char s_htabNCRString[];
-
- static const XalanDOMString::size_type s_htabNCRStringLength;
};
class XALAN_XMLSUPPORT_EXPORT UTF16
@@ -444,27 +423,6 @@
static const XalanDOMChar s_quoteEntityString[];
static const XalanDOMString::size_type s_quoteEntityStringLength;
-
- /**
- * The string " ".
- */
- static const XalanDOMChar s_linefeedNCRString[];
-
- static const XalanDOMString::size_type s_linefeedNCRStringLength;
-
- /**
- * The string " ".
- */
- static const XalanDOMChar s_carriageReturnNCRString[];
-
- static const XalanDOMString::size_type s_carriageReturnNCRStringLength;
-
- /**
- * The string "	".
- */
- static const XalanDOMChar s_htabNCRString[];
-
- static const XalanDOMString::size_type s_htabNCRStringLength;
};
enum
@@ -472,83 +430,125 @@
eBufferSize = 512 // The size of the buffer
};
- class XALAN_XMLSUPPORT_EXPORT AttributeFunctor1_0
+ class XALAN_XMLSUPPORT_EXPORT CharFunctor1_0
{
public:
bool
- operator()(XalanDOMChar theChar) const
+ attribute(XalanDOMChar theChar) const
{
- return theChar >= eSpecialsSize ?
+ return theChar > s_lastSpecial ?
false :
- s_specialChars1_0[theChar] > eNone;
+ s_specialChars[theChar] > eNone;
}
- };
-
- class XALAN_XMLSUPPORT_EXPORT AttributeFunctor1_1
- {
- public:
bool
- operator()(XalanDOMChar theChar) const
+ content(XalanDOMChar theChar) const
{
- return theChar >= eSpecialsSize ?
+ return theChar > s_lastSpecial ?
false :
- s_specialChars1_1[theChar] > eNone;
+ s_specialChars[theChar] > eAttr;
}
- };
- class XALAN_XMLSUPPORT_EXPORT ContentFunctor1_0
- {
- public:
+ bool
+ range(XalanDOMChar theChar) const
+ {
+ assert(theChar > 0);
+
+ return theChar > s_lastSpecial;
+ }
bool
- operator()(XalanDOMChar theChar) const
+ isForbidden(XalanDOMChar theChar) const
{
- return theChar >= eSpecialsSize ?
+ return theChar > s_lastSpecial ?
false :
- s_specialChars1_0[theChar] > eAttr;
+ s_specialChars[theChar] == eForb;
}
+
+ bool
+ isCharRefForbidden(XalanDOMChar theChar) const
+ {
+ return theChar > s_lastSpecial ?
+ false :
+ s_specialChars[theChar] == eForb;
+ }
+
+
+ private:
+ static const size_t s_lastSpecial;
+
+ static const char s_specialChars[];
};
- class XALAN_XMLSUPPORT_EXPORT ContentFunctor1_1
+
+
+ class XALAN_XMLSUPPORT_EXPORT CharFunctor1_1
{
public:
bool
- operator()(XalanDOMChar theChar) const
+ attribute(XalanDOMChar theChar) const
{
- return theChar >= eSpecialsSize ?
+ return theChar > s_lastSpecial ?
false :
- s_specialChars1_1[theChar] > eAttr;
+ s_specialChars[theChar] > eNone;
}
- };
- class XALAN_XMLSUPPORT_EXPORT RangeFunctor
- {
- public:
+ bool
+ content(XalanDOMChar theChar) const
+ {
+ return theChar > s_lastSpecial ?
+ false :
+ s_specialChars[theChar] > eAttr;
+ }
bool
- operator()(XalanDOMChar theChar) const
+ range(XalanDOMChar theChar) const
{
assert(theChar > 0);
- return theChar > eLastSpecial;
+ return theChar > s_lastSpecial;
+ }
+
+ bool
+ isForbidden(XalanDOMChar theChar) const
+ {
+ return theChar > s_lastSpecial ?
+ false :
+ s_specialChars[theChar] == eForb;
}
+
+ bool
+ isCharRefForbidden(XalanDOMChar theChar) const
+ {
+ return theChar > s_lastSpecial ?
+ false :
+ s_specialChars[theChar] == eCRFb;
+ }
+
+ private:
+ static const size_t s_lastSpecial;
+
+ static const char s_specialChars[];
+
};
+
+
+
enum
{
eNone = 0u,
eAttr = 1u, // A flag to indicate a value in s_specialChars applies to attributes
- eBoth = 2u, // A flag t0 indicate a value in s_specialChars applies to both content and attributes
- eSpecialsSize = 256u, // The size of s_specialChars
- eLastSpecial = 0x96u
+ eBoth = 2u, // A flag to indicate a value in s_specialChars applies to both content and attributes
+ eForb = 4u, // A flag to indicate a forbidden value in s_specialChars
+ // XML1.1 put a requirement to output chars #x1...#x1F and #x7F...#x9F as charRefs only
+ // In the comments , PI and CDATA usage of charRefs is forbidden, so we will report an error in
+ eCRFb = 5u // that case. For the elemets and attributes is should work the same as eBoth
};
+
- static const char s_specialChars1_0[];
-
- static const char s_specialChars1_1[];
protected:
@@ -735,6 +735,18 @@
unsigned int ch,
MemoryManager& theManager);
+
+ /**
+ * Throw an exception when an invalid
+ * character for the specific XML version is encountered.
+ * @param ch The first character in the surrogate
+ * @param next The next character in the surrogate
+ */
+ static void
+ throwInvalidXMLCharacterException(
+ unsigned int ch,
+ const XalanDOMString& theXMLversion,
+ MemoryManager& theManager);
private:
// These are not implemented.
1.3 +29 -53 xml-xalan/c/src/xalanc/XMLSupport/XalanXMLSerializerFactory.cpp
Index: XalanXMLSerializerFactory.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XMLSupport/XalanXMLSerializerFactory.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XalanXMLSerializerFactory.cpp 6 Jun 2005 01:32:45 -0000 1.2
+++ XalanXMLSerializerFactory.cpp 4 Aug 2005 18:01:40 -0000 1.3
@@ -74,15 +74,13 @@
typedef XalanFormatterWriter::NewLineWriterFunctor<XalanUTF8Writer> NewLineWriter;
typedef XalanFormatterWriter::WhiteSpaceWriterFunctor<XalanUTF8Writer> WhiteSpaceWriter;
- typedef XalanIndentWriter<WhiteSpaceWriter,NewLineWriter> IdentWriter;
+ typedef XalanIndentWriter<WhiteSpaceWriter,NewLineWriter> IndentWriter;
typedef FormatterToXMLUnicode<
XalanUTF8Writer,
XalanXMLSerializerBase::UTF8,
- XalanXMLSerializerBase::AttributeFunctor1_1,
- XalanXMLSerializerBase::ContentFunctor1_1,
- XalanXMLSerializerBase::RangeFunctor,
- IdentWriter,
+ XalanXMLSerializerBase::CharFunctor1_1,
+ IndentWriter,
FormatterListener::XML_VERSION_1_1> Type;
theFormatter =
@@ -98,15 +96,13 @@
}
else // doIndent == false
{
- typedef XalanDummyIndentWriter<XalanUTF8Writer> IdentWriter;
+ typedef XalanDummyIndentWriter<XalanUTF8Writer> IndentWriter;
typedef FormatterToXMLUnicode<
XalanUTF8Writer,
XalanXMLSerializerBase::UTF8,
- XalanXMLSerializerBase::AttributeFunctor1_1,
- XalanXMLSerializerBase::ContentFunctor1_1,
- XalanXMLSerializerBase::RangeFunctor,
- IdentWriter,
+ XalanXMLSerializerBase::CharFunctor1_1,
+ IndentWriter,
FormatterListener::XML_VERSION_1_1> Type;
theFormatter =
@@ -129,16 +125,14 @@
typedef XalanFormatterWriter::NewLineWriterFunctor<XalanUTF8Writer> NewLineWriter;
typedef XalanFormatterWriter::WhiteSpaceWriterFunctor<XalanUTF8Writer> WhiteSpaceWriter;
- typedef XalanIndentWriter<WhiteSpaceWriter,NewLineWriter> IdentWriter;
+ typedef XalanIndentWriter<WhiteSpaceWriter,NewLineWriter> IndentWriter;
typedef FormatterToXMLUnicode<
XalanUTF8Writer,
XalanXMLSerializerBase::UTF8,
- XalanXMLSerializerBase::AttributeFunctor1_0,
- XalanXMLSerializerBase::ContentFunctor1_0,
- XalanXMLSerializerBase::RangeFunctor,
- IdentWriter,
+ XalanXMLSerializerBase::CharFunctor1_0,
+ IndentWriter,
FormatterListener::XML_VERSION_1_0> Type;
theFormatter =
@@ -154,15 +148,13 @@
}
else // doIndent == false
{
- typedef XalanDummyIndentWriter<XalanUTF8Writer> IdentWriter;
+ typedef XalanDummyIndentWriter<XalanUTF8Writer> IndentWriter;
typedef FormatterToXMLUnicode<
XalanUTF8Writer,
XalanXMLSerializerBase::UTF8,
- XalanXMLSerializerBase::AttributeFunctor1_0,
- XalanXMLSerializerBase::ContentFunctor1_0,
- XalanXMLSerializerBase::RangeFunctor,
- IdentWriter,
+ XalanXMLSerializerBase::CharFunctor1_0,
+ IndentWriter,
FormatterListener::XML_VERSION_1_0> Type;
theFormatter =
@@ -194,9 +186,7 @@
typedef FormatterToXMLUnicode<
XalanUTF16Writer,
XalanXMLSerializerBase::UTF16,
- XalanXMLSerializerBase::AttributeFunctor1_1,
- XalanXMLSerializerBase::ContentFunctor1_1,
- XalanXMLSerializerBase::RangeFunctor,
+ XalanXMLSerializerBase::CharFunctor1_1,
IdentWriter,
FormatterListener::XML_VERSION_1_1> Type;
@@ -218,9 +208,7 @@
typedef FormatterToXMLUnicode<
XalanUTF16Writer,
XalanXMLSerializerBase::UTF16,
- XalanXMLSerializerBase::AttributeFunctor1_1,
- XalanXMLSerializerBase::ContentFunctor1_1,
- XalanXMLSerializerBase::RangeFunctor,
+ XalanXMLSerializerBase::CharFunctor1_1,
IdentWriter,
FormatterListener::XML_VERSION_1_1> Type;
@@ -248,9 +236,7 @@
typedef FormatterToXMLUnicode<
XalanUTF16Writer,
XalanXMLSerializerBase::UTF16,
- XalanXMLSerializerBase::AttributeFunctor1_0,
- XalanXMLSerializerBase::ContentFunctor1_0,
- XalanXMLSerializerBase::RangeFunctor,
+ XalanXMLSerializerBase::CharFunctor1_0,
IdentWriter,
FormatterListener::XML_VERSION_1_0> Type;
@@ -272,9 +258,7 @@
typedef FormatterToXMLUnicode<
XalanUTF16Writer,
XalanXMLSerializerBase::UTF16,
- XalanXMLSerializerBase::AttributeFunctor1_0,
- XalanXMLSerializerBase::ContentFunctor1_0,
- XalanXMLSerializerBase::RangeFunctor,
+ XalanXMLSerializerBase::CharFunctor1_0,
IdentWriter,
FormatterListener::XML_VERSION_1_0> Type;
@@ -294,7 +278,7 @@
}
else // all other encodings
{
- typedef XalanOtherEncodingWriter< XalanFormatterWriter::CommonPresentableCharFunctor,
+ typedef XalanOtherEncodingWriter< XalanFormatterWriter::CommonRepresentableCharFunctor,
XalanXMLSerializerBase::UTF16> WriterType ;
if( isVersion1_1 == true)
@@ -304,16 +288,14 @@
typedef XalanFormatterWriter::NewLineWriterFunctor<WriterType> NewLineWriter;
typedef XalanFormatterWriter::WhiteSpaceWriterFunctor<WriterType> WhiteSpaceWriter;
- typedef XalanIndentWriter<WhiteSpaceWriter,NewLineWriter> IdentWriter;
+ typedef XalanIndentWriter<WhiteSpaceWriter,NewLineWriter> IndentWriter;
typedef FormatterToXMLUnicode<
WriterType,
XalanXMLSerializerBase::UTF16,
- XalanXMLSerializerBase::AttributeFunctor1_1,
- XalanXMLSerializerBase::ContentFunctor1_1,
- XalanXMLSerializerBase::RangeFunctor,
- IdentWriter,
+ XalanXMLSerializerBase::CharFunctor1_1,
+ IndentWriter,
FormatterListener::XML_VERSION_1_1> Type;
theFormatter =
@@ -329,15 +311,13 @@
}
else
{
- typedef XalanDummyIndentWriter<WriterType> IdentWriter;
+ typedef XalanDummyIndentWriter<WriterType> IndentWriter;
typedef FormatterToXMLUnicode<
WriterType,
XalanXMLSerializerBase::UTF16,
- XalanXMLSerializerBase::AttributeFunctor1_1,
- XalanXMLSerializerBase::ContentFunctor1_1,
- XalanXMLSerializerBase::RangeFunctor,
- IdentWriter,
+ XalanXMLSerializerBase::CharFunctor1_1,
+ IndentWriter,
FormatterListener::XML_VERSION_1_1> Type;
theFormatter =
@@ -360,15 +340,13 @@
typedef XalanFormatterWriter::NewLineWriterFunctor<WriterType> NewLineWriter;
typedef XalanFormatterWriter::WhiteSpaceWriterFunctor<WriterType> WhiteSpaceWriter;
- typedef XalanIndentWriter<WhiteSpaceWriter,NewLineWriter> IdentWriter;
+ typedef XalanIndentWriter<WhiteSpaceWriter,NewLineWriter> IndentWriter;
typedef FormatterToXMLUnicode<
WriterType,
XalanXMLSerializerBase::UTF16,
- XalanXMLSerializerBase::AttributeFunctor1_0,
- XalanXMLSerializerBase::ContentFunctor1_0,
- XalanXMLSerializerBase::RangeFunctor,
- IdentWriter,
+ XalanXMLSerializerBase::CharFunctor1_0,
+ IndentWriter,
FormatterListener::XML_VERSION_1_0> Type;
theFormatter =
@@ -384,15 +362,13 @@
}
else //doIndent == false
{
- typedef XalanDummyIndentWriter<WriterType> IdentWriter;
+ typedef XalanDummyIndentWriter<WriterType> IndentWriter;
typedef FormatterToXMLUnicode<
WriterType,
XalanXMLSerializerBase::UTF16,
- XalanXMLSerializerBase::AttributeFunctor1_0,
- XalanXMLSerializerBase::ContentFunctor1_0,
- XalanXMLSerializerBase::RangeFunctor,
- IdentWriter,
+ XalanXMLSerializerBase::CharFunctor1_0,
+ IndentWriter,
FormatterListener::XML_VERSION_1_0> Type;
theFormatter =
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org