This patch adds support for the <PRE> HTML tag.
Please check that I haven't made incorrect assumptions
about the XHTML or XML importers.
If the patch is ok it fixes Bug 1459.
Andrew Dunbar.
--
http://linguaphile.sourceforge.net
Index: src/wp/impexp/xp/ie_imp_XHTML.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/impexp/xp/ie_imp_XHTML.cpp,v
retrieving revision 1.17
diff -u -r1.17 ie_imp_XHTML.cpp
--- src/wp/impexp/xp/ie_imp_XHTML.cpp 2001/05/19 16:31:51 1.17
+++ src/wp/impexp/xp/ie_imp_XHTML.cpp 2001/05/20 15:23:56
@@ -283,6 +283,8 @@
#define TT_TITLE 38 // title tag
#define TT_STYLE 39 // style tag
+#define TT_PRE 40 //
+preformatted tag
+
// This certainly leaves off lots of tags, but with HTML, this is inevitable - samth
static struct xmlToIdMapping s_Tokens[] =
@@ -312,6 +314,7 @@
{ "meta", TT_META },
{ "ol", TT_OL },
{ "p", TT_P },
+ { "pre", TT_PRE
+ },
{ "q", TT_Q },
{ "s", TT_S },
{ "samp", TT_SAMP },
@@ -826,6 +829,11 @@
// these tags are ignored for the time being
return;
+ case TT_PRE:
+ X_VerifyParseState(_PS_Block);
+ m_bWhiteSignificant = true;
+ return;
+
case TT_OTHER:
default:
UT_DEBUGMSG(("Unknown tag [%s]\n",name));
@@ -935,6 +943,13 @@
case TT_META:
case TT_STYLE:
return;
+
+ case TT_PRE:
+ UT_ASSERT(m_lenCharDataSeen==0);
+ X_VerifyParseState(_PS_Block);
+ X_CheckDocument(_getInlineDepth()==0);
+ m_bWhiteSignificant = false;
+ return;
case TT_OTHER:
default:
Index: src/wp/impexp/xp/ie_imp_XML.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/impexp/xp/ie_imp_XML.cpp,v
retrieving revision 1.17
diff -u -r1.17 ie_imp_XML.cpp
--- src/wp/impexp/xp/ie_imp_XML.cpp 2001/05/16 20:31:01 1.17
+++ src/wp/impexp/xp/ie_imp_XML.cpp 2001/05/20 15:24:00
@@ -244,6 +244,7 @@
// TODO XML_Char is defined in the xml parser
// TODO as a 'char' not as a 'unsigned char'.
// TODO does this cause any problems ??
+ // TODO Needs to handle preformatted text
X_EatIfAlreadyError(); // xml parser keeps running until buffer consumed
@@ -313,9 +314,13 @@
X_CheckError(0);
}
+ // TODO Needs to handle preformatted text
if (currentChar == UCS_CR)
{
- buf[bufLen++] = UCS_SPACE; // substitute
a SPACE
+ if (!m_bWhiteSignificant)
+ buf[bufLen++] = UCS_SPACE; //
+substitute a SPACE
+ else
+ buf[bufLen++] = UCS_LF;
m_bSeenCR = true;
continue;
}
@@ -326,6 +331,7 @@
// (ABW)
if (!m_bWhiteSignificant)
{
+ // TODO Needs to handle preformatted text
if(UT_UCS_isspace(currentChar))
{
if(!m_bWasSpace)
@@ -341,10 +347,14 @@
}
}
+ // TODO Needs to handle preformatted text
if (currentChar == UCS_LF) // LF
{
if (!m_bSeenCR) // if not immediately after a
CR,
- buf[bufLen++] = UCS_SPACE; // substitute
a SPACE. otherwise, eat.
+ if (!m_bWhiteSignificant)
+ buf[bufLen++] = UCS_SPACE; //
+substitute a SPACE. otherwise, eat.
+ else
+ buf[bufLen++] = UCS_LF;
m_bSeenCR = false;
continue;
}