Re: PATCH: WP again

From: Dom Lachowicz (doml@appligent.com)
Date: Tue Mar 19 2002 - 12:30:54 EST

  • Next message: Calvin Arndt: "Build system quirks"

    Committed blindly.

    Dom

    On Tue, 2002-03-19 at 12:29, j.m.maurer wrote:
    > Lot's of small bugfixes concerning paragraph handling, some code cleanup
    > and added WP9 as a supported filetype...
    >
    > Marc
    >
    > ----
    >

    > Index: abi/src/wp/impexp/xp/ie_imp_WordPerfect.cpp
    > ===================================================================
    > RCS file: /cvsroot/abi/src/wp/impexp/xp/ie_imp_WordPerfect.cpp,v
    > retrieving revision 1.24
    > diff -u -r1.24 ie_imp_WordPerfect.cpp
    > --- abi/src/wp/impexp/xp/ie_imp_WordPerfect.cpp 13 Mar 2002 09:39:23 -0000 1.24
    > +++ abi/src/wp/impexp/xp/ie_imp_WordPerfect.cpp 19 Mar 2002 17:24:34 -0000
    > @@ -159,8 +159,8 @@
    >
    > UT_ASSERT (m_sniffer);
    >
    > - mi->name = "WordPerfect 6/7/8 (tm) Importer";
    > - mi->desc = "WordPerfect 6/7/8 (tm) Documents";
    > + mi->name = "WordPerfect 6/7/8/9 (tm) Importer";
    > + mi->desc = "WordPerfect 6/7/8/9 (tm) Documents";
    > mi->version = ABI_VERSION_STRING;
    > mi->author = "Abi the Ant";
    > mi->usage = "No Usage";
    > @@ -220,8 +220,8 @@
    > int majorVersion = (int) *(szBuf + WP_HEADER_MAJOR_VERSION_OFFSET);
    > int minorVersion = (int) *(szBuf + WP_HEADER_MINOR_VERSION_OFFSET);
    > UT_DEBUGMSG(("product type: %i, file type: %i, major version: %i, minor version: %i\n", productType, fileType, majorVersion, minorVersion ));
    > - // we only want to try parsing wordperfect 6/7/8 documents for now
    > - if ((majorVersion != WP_WORDPERFECT678_EXPECTED_MAJOR_VERSION) || (fileType != WP_WORDPERFECT_DOCUMENT_FILE_TYPE))
    > + // we only want to try parsing wordperfect 6/7/8/9 documents for now
    > + if ((majorVersion != WP_WORDPERFECT6789_EXPECTED_MAJOR_VERSION) || (fileType != WP_WORDPERFECT_DOCUMENT_FILE_TYPE))
    > return UT_CONFIDENCE_POOR;
    >
    > return UT_CONFIDENCE_PERFECT;
    > @@ -253,7 +253,7 @@
    > const char ** pszSuffixList,
    > IEFileType * ft)
    > {
    > - *pszDesc = "WordPerfect 6/7/8 (.wpd)";
    > + *pszDesc = "WordPerfect 6/7/8/9 (.wpd)";
    > *pszSuffixList = "*.wpd";
    > *ft = getFileType();
    > return true;
    > @@ -267,10 +267,12 @@
    > #define DOC_PROPBUFFER_SIZE 1024
    >
    > IE_Imp_WordPerfect::IE_Imp_WordPerfect(PD_Document * pDocument)
    > - : IE_Imp (pDocument), m_bInSection(false)
    > + : IE_Imp (pDocument)
    > {
    > m_undoOn = false;
    > - m_bParagraphChanged = true;
    > + m_bParagraphChanged = false;
    > + m_bParagraphExists = false;
    > + m_bInSection = false;
    >
    > m_wordPerfectDispatchBytes.addItem(new WordPerfectByteTag(WP_TOP_SOFT_EOL, &IE_Imp_WordPerfect::_insertSpace));
    > m_wordPerfectDispatchBytes.addItem(new WordPerfectByteTag(WP_TOP_SOFT_SPACE, &IE_Imp_WordPerfect::_insertSpace));
    > @@ -718,7 +720,6 @@
    > case 28: // deletable hard EOP
    > {
    > X_CheckWordPerfectError(_flushText());
    > - _appendCurrentParagraphProperties();
    > UT_UCSChar ucs = UCS_FF;
    > X_CheckDocumentError(getDoc()->appendSpan(&ucs,1));
    > }
    > @@ -750,7 +751,7 @@
    > }
    >
    > // handles a column group
    > -// (TODO: partially implemented, only basic column import is done, see bug 2756, 1270 and bug 515)
    > +// (TODO: partially implemented
    > UT_Error IE_Imp_WordPerfect::_handleColumnGroup()
    > {
    > UT_DEBUGMSG(("WordPerfect: Handling a column group\n"));
    > @@ -775,26 +776,19 @@
    > break;
    > case 2: // TODO: Define Text Columns, Partially implemented
    > unsigned char colType;
    > - unsigned char rowSpacing[5]; // a WPSP type var., which seems to be 5 bytes, but I don't what it is.
    > + unsigned char rowSpacing[4]; // a WP SPacing type variable, which is 4 bytes
    > + unsigned char unknown;
    > unsigned char numCols;
    >
    > X_CheckFileReadElementError(fread(&colType, sizeof(unsigned char), 1, m_importFile));
    > -
    > - // WTF doesn't this line work? 5 bytes isn't asked too much, isn't it?
    > - // X_CheckFileReadElementError(fread(&rowSpacing[0], sizeof(unsigned char), 5, m_importFile));
    > -
    > - // instead, read 5 charachters 1 by 1
    > - X_CheckFileReadElementError(fread(&rowSpacing[0], sizeof(unsigned char), 1, m_importFile));
    > - X_CheckFileReadElementError(fread(&rowSpacing[1], sizeof(unsigned char), 1, m_importFile));
    > - X_CheckFileReadElementError(fread(&rowSpacing[2], sizeof(unsigned char), 1, m_importFile));
    > - X_CheckFileReadElementError(fread(&rowSpacing[3], sizeof(unsigned char), 1, m_importFile));
    > - X_CheckFileReadElementError(fread(&rowSpacing[4], sizeof(unsigned char), 1, m_importFile));
    > -
    > + if (fread(&rowSpacing[0], sizeof(unsigned char), 4, m_importFile) != 4*sizeof(unsigned char))
    > + return UT_IE_IMPORTERROR;
    > + // I don't have a clue what this lonely byte does...
    > + X_CheckFileReadElementError(fread(&unknown, sizeof(unsigned char), 1, m_importFile));
    > X_CheckFileReadElementError(fread(&numCols, sizeof(unsigned char), 1, m_importFile));
    >
    > UT_DEBUGMSG(("WordPerfect: Column type: %d\n", colType & 0x03));
    > - UT_DEBUGMSG(("WordPerfect: # columns: %d\n", numCols));
    > -
    > +
    > // number of columns = {0,1} means columns off
    > if ((numCols==0) || (numCols==1))
    > {
    > @@ -823,7 +817,16 @@
    > propsArray[0] = "props";
    > propsArray[1] = propBuffer.c_str();
    > propsArray[2] = NULL;
    > - X_CheckWordPerfectError(_flushText());
    > +
    > + // this is a realy obscure statement, which has to be cleaned up sometime
    > + if (
    > + ((!m_bParagraphExists) && (m_textBuf.getLength() > 0)) ||
    > + (m_bParagraphExists && m_bParagraphChanged) ||
    > + (m_textBuf.getLength() > 0)
    > + )
    > + {
    > + X_CheckWordPerfectError(_flushText());
    > + }
    > X_CheckDocumentError(_appendSection(propsArray));
    > // set m_bParagraphChanged to true so the paragraph properties will
    > // unconditionally be added in this new section
    > @@ -864,13 +867,15 @@
    > // dispatch to subgroup to handle the rest of the relevant properties within the
    > // group (and thus, read more of the file-- so we keep this even if undo is 'on')
    > switch (subGroup)
    > - {
    > + {
    > case WP_PARAGRAPH_GROUP_JUSTIFICATION:
    > - X_CheckWordPerfectError(_handleParagraphGroupJustification());
    > - break;
    > - }
    > - m_bParagraphChanged = true;
    > -
    > + {
    > + X_CheckWordPerfectError(_handleParagraphGroupJustification());
    > + m_bParagraphChanged = true;
    > + break;
    > + }
    > + }
    > +
    > X_CheckWordPerfectError(_skipGroup(startPosition, size));
    >
    > return UT_OK;
    > @@ -1458,9 +1463,9 @@
    > {
    > UT_DEBUGMSG(("WordPerfect: Flushing Text\n"));
    >
    > - // append the current paragraph properties if they are changed; m_bParagraphChanged is initialized with true, so the first time
    > - // we will have a structure to insert into
    > - if(m_bParagraphChanged)
    > + // append the current paragraph properties, but only when the paragraph properties
    > + // have changed or there is no paragraph at all
    > + if(m_bParagraphChanged || (!m_bParagraphExists))
    > {
    > _appendCurrentParagraphProperties();
    > }
    > @@ -1562,6 +1567,8 @@
    > propsArray[1] = propBuffer.c_str();
    > propsArray[2] = NULL;
    > m_bParagraphChanged = false;
    > + // _never_ set m_bParagraphExists to false again!
    > + m_bParagraphExists = true;
    >
    > if ( !m_bInSection )
    > {
    > Index: abi/src/wp/impexp/xp/ie_imp_WordPerfect.h
    > ===================================================================
    > RCS file: /cvsroot/abi/src/wp/impexp/xp/ie_imp_WordPerfect.h,v
    > retrieving revision 1.13
    > diff -u -r1.13 ie_imp_WordPerfect.h
    > --- abi/src/wp/impexp/xp/ie_imp_WordPerfect.h 13 Mar 2002 09:39:23 -0000 1.13
    > +++ abi/src/wp/impexp/xp/ie_imp_WordPerfect.h 19 Mar 2002 17:24:34 -0000
    > @@ -34,7 +34,7 @@
    >
    > // The importer/reader for WordPerfect 6 documents.
    >
    > -#define WP_WORDPERFECT678_EXPECTED_MAJOR_VERSION 2
    > +#define WP_WORDPERFECT6789_EXPECTED_MAJOR_VERSION 2
    > #define WP_WORDPERFECT_DOCUMENT_FILE_TYPE 10
    > #define WP_FONT_TABLE_SIZE_GUESS 10
    >
    > @@ -279,6 +279,7 @@
    > UT_uint16 m_indexPointer;
    > bool m_undoOn;
    > bool m_bParagraphChanged;
    > + bool m_bParagraphExists;
    > bool m_bInSection;
    > UT_Mbtowc m_Mbtowc;
    > UT_GrowBuf m_textBuf;





    This archive was generated by hypermail 2.1.4 : Tue Mar 19 2002 - 12:31:55 EST