From: Dom Lachowicz (doml@appligent.com)
Date: Tue Mar 19 2002 - 12:30:54 EST
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