This patch does the following things:

- import the characters ï and Ï
- in some cases too many/too little paragraph styles were added, fixed
- greatly improved the columns import, closing bug 2756
- added myself in a copyright notice

Bye!
  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.23
diff -u -r1.23 ie_imp_WordPerfect.cpp
--- abi/src/wp/impexp/xp/ie_imp_WordPerfect.cpp	12 Mar 2002 16:40:05 -0000	1.23
+++ abi/src/wp/impexp/xp/ie_imp_WordPerfect.cpp	13 Mar 2002 08:36:48 -0000
@@ -1,6 +1,7 @@
 /* AbiWord
  * Copyright (C) 2001 AbiSource, Inc.
  * Copyright (C) 2001 William Lachance ([EMAIL PROTECTED])
+ * Copyright (C) 2002 Marc Maurer ([EMAIL PROTECTED])
  * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -269,8 +270,7 @@
   : IE_Imp (pDocument), m_bInSection(false)
 {
    m_undoOn = false;
-   m_paragraphChanged = true;
-   m_hasColumns = false;
+   m_bParagraphChanged = true;
 
    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));
@@ -653,10 +653,17 @@
    // (TODO: eliminate a prev space if it's just before this)
    UT_DEBUGMSG(("WordPerfect: Handling a hard EOL \n"));
    if(!m_undoOn)
-     {
-	X_CheckWordPerfectError(_flushText());
-	_appendCurrentParagraphProperties();		
-     }
+   {
+        if (!m_bParagraphChanged)
+        {
+            X_CheckWordPerfectError(_flushText());
+            _appendCurrentParagraphProperties();
+        }
+        else
+        {
+            X_CheckWordPerfectError(_flushText());
+        }
+   }
    
    return UT_OK;
 }
@@ -700,6 +707,13 @@
 	   case 25: // 0x19 (deletable hard EOL at EOP)	
 	     X_CheckWordPerfectError(_handleHardEndOfLine());
 	     break;
+      case 7: // 0x07 (hard end of column)
+        {
+           X_CheckWordPerfectError(_flushText());
+           UT_UCSChar ucs = UCS_VTAB;
+	        X_CheckDocumentError(getDoc()->appendSpan(&ucs,1));
+        }
+        break;
 	   case 9: // hard EOP
 	   case 28: // deletable hard EOP
 	     { 
@@ -764,14 +778,9 @@
                   unsigned char rowSpacing[5]; // a WPSP type var., which seems to be 5 bytes, but I don't what it is.
                   unsigned char numCols;
           
-                  // skip this section if there are already columns defined, 
-                  // since abiword only supports 1 single column definition per document right now
-                  if (m_hasColumns)
-                     break;
-          
                   X_CheckFileReadElementError(fread(&colType, sizeof(unsigned char), 1, m_importFile));
                   
-                  // WTF doesn't this line work? 5 bytes isn't asked to much, isn't it?
+                  // 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
@@ -785,29 +794,45 @@
           
                   UT_DEBUGMSG(("WordPerfect: Column type: %d\n", colType & 0x03));
                   UT_DEBUGMSG(("WordPerfect: # columns: %d\n", numCols));
-                  switch (colType & 0x03)
+                  
+                  // number of columns = {0,1} means columns off
+                  if ((numCols==0) || (numCols==1))
                   {
-                     // TODO: implement the seperate cases
-                     case 0: // newspaper
-                     case 1: // newspaper with vertical balance
-                     case 2: // parallel
-                     case 3: // parallel with protect [what does this mean? for now, handle the same as parallel]
-                             {
-                                UT_String propBuffer;
-                                UT_String_sprintf(propBuffer, "columns:%d", numCols);
-                                
-                                UT_DEBUGMSG(("Appending column definition: %s\n", propBuffer.c_str()));
-                                const XML_Char* propsArray[3];
-                                propsArray[0] = "props";
-                                propsArray[1] = propBuffer.c_str();
-                                propsArray[2] = NULL;
-                                // change the first Section which is inserted in the beginning of _parseDocument
-                                X_CheckDocumentError(_appendSection(propsArray));
-                                m_hasColumns = true;
-                             }
-                             break;
-                     default: // something else we don't support, since it isn't in the docs
-                              break;
+                     UT_DEBUGMSG(("End of column definition, # columns: %d\n", numCols));
+                     X_CheckWordPerfectError(_flushText());
+                     X_CheckDocumentError(_appendSection());
+                     // set m_bParagraphChanged to true so the paragraph properties will 
+                     // unconditionally be added in this new section
+                     m_bParagraphChanged = true;
+                  } 
+                  else
+                  {
+                     switch (colType & 0x03)
+                     {
+                        // TODO: implement the seperate cases
+                        case 0: // newspaper
+                        case 1: // newspaper with vertical balance
+                        case 2: // parallel
+                        case 3: // parallel with protect [what does this mean? for now, handle the same as parallel]
+                                {
+                                   UT_String propBuffer;
+                                   UT_String_sprintf(propBuffer, "columns:%d", numCols);
+                             
+                                   UT_DEBUGMSG(("Appending column definition: %s\n", propBuffer.c_str()));
+                                   const XML_Char* propsArray[3];
+                                   propsArray[0] = "props";
+                                   propsArray[1] = propBuffer.c_str();
+                                   propsArray[2] = NULL;
+                                   X_CheckWordPerfectError(_flushText());
+                                   X_CheckDocumentError(_appendSection(propsArray));
+                                   // set m_bParagraphChanged to true so the paragraph properties will 
+                                   // unconditionally be added in this new section
+                                   m_bParagraphChanged = true;
+                                }
+                                break;
+                        default: // something else we don't support, since it isn't in the docs
+                                 break;
+                     }
                   }
                   break;
           case 3: // TODO: Column Border
@@ -844,7 +869,7 @@
 	X_CheckWordPerfectError(_handleParagraphGroupJustification());
 	break;
      }
-   m_paragraphChanged = true;
+   m_bParagraphChanged = true;
 	 
    X_CheckWordPerfectError(_skipGroup(startPosition, size));
    
@@ -1261,7 +1286,15 @@
 	else if((character == 31 || character == 32) && characterSet == 4)
 	  {
 	     wc = 34; // character: "
-	  }	
+	  }
+	else if(character == 0x34 && characterSet == 0x01)
+	  {
+	     wc = 0xCF; // character: Ï
+	  }
+	else if(character == 0x35 && characterSet == 0x01)
+	  {
+	     wc = 0xEF; // character: ï
+	  }
 	else
 	  wc = 0; // whitespace
    
@@ -1425,9 +1458,9 @@
 {
    UT_DEBUGMSG(("WordPerfect: Flushing Text\n"));
    	
-   // append the current paragraph properties if they are changed; m_paragraphChanged is initialized with true, so the first time
+   // 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_paragraphChanged)
+   if(m_bParagraphChanged)
      {	
 	_appendCurrentParagraphProperties();
      }
@@ -1528,7 +1561,7 @@
    propsArray[0] = pProps;
    propsArray[1] = propBuffer.c_str();
    propsArray[2] = NULL;
-   m_paragraphChanged = false;
+   m_bParagraphChanged = false;
    
    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.12
diff -u -r1.12 ie_imp_WordPerfect.h
--- abi/src/wp/impexp/xp/ie_imp_WordPerfect.h	12 Mar 2002 16:33:04 -0000	1.12
+++ abi/src/wp/impexp/xp/ie_imp_WordPerfect.h	13 Mar 2002 08:36:49 -0000
@@ -278,8 +278,7 @@
    UT_uint32 m_documentPointer;
    UT_uint16 m_indexPointer;
    bool m_undoOn;
-   bool m_paragraphChanged;
-   bool m_hasColumns;
+   bool m_bParagraphChanged;
    bool m_bInSection;
    UT_Mbtowc m_Mbtowc;
    UT_GrowBuf m_textBuf;

Reply via email to