[Libreoffice-commits] .: Branch 'libreoffice-3-4' - writerfilter/source

Noel Power noelp at kemper.freedesktop.org
Wed Apr 20 05:11:20 PDT 2011


 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   87 +++++++++++++---------
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |    3 
 2 files changed, 54 insertions(+), 36 deletions(-)

New commits:
commit de4c2c632909de7899431b8ee958d4e5dc128a28
Author: Noel Power <noel.power at novell.com>
Date:   Tue Apr 19 14:34:20 2011 +0100

    some docx field import/export tweaks
    
    import/export ( USERNAME / USERINITIALS ) - supported now and alligned with binary import
    import/export ( AUTHOR / DocumentProperty.Author ) - AUTHOR is now imported as DocumentInfo.Created, DocProperty.Author is imported as a custom property, DocumentInfo.Created is exported as AUTHOR
    fix docx export of COMMENTS
    fix docx import of CREATEDATE,
    fix docx import of DocProperty.CreateTime
    fix docx import of DocProperty.LastSavedTime
    fix docx import of DocProperty.TotalEditingTime ( format still not right )

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 5f1d6c3..5177dcb 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1642,15 +1642,16 @@ void DomainMapper_Impl::SetNumberFormat( const ::rtl::OUString& rCommand,
     lang::Locale aCurrentLocale = aUSLocale;
     GetCurrentLocale( aCurrentLocale );
     ::rtl::OUString sFormat = ConversionHelper::ConvertMSFormatStringToSO( sFormatString, aCurrentLocale, bHijri);
-
     //get the number formatter and convert the string to a format value
     try
     {
         uno::Reference< util::XNumberFormatsSupplier > xNumberSupplier( m_xTextDocument, uno::UNO_QUERY_THROW );
-        long nKey = xNumberSupplier->getNumberFormats()->addNewConverted( sFormat, aUSLocale, aCurrentLocale );
+        sal_Int32 nKey = xNumberSupplier->getNumberFormats()->addNewConverted( sFormat, aUSLocale, aCurrentLocale );
         xPropertySet->setPropertyValue(
             PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_NUMBER_FORMAT),
             uno::makeAny( nKey ));
+        xPropertySet->getPropertyValue(
+            PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_NUMBER_FORMAT ) ) >>= nKey;
     }
     catch(const uno::Exception&)
     {
@@ -1844,7 +1845,7 @@ if(!bFilled)
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUM")),       "SetExpression",            "SetExpression", FIELD_AUTONUM   },
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMLGL")),     "SetExpression",            "SetExpression", FIELD_AUTONUMLGL },
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMOUT")),     "SetExpression",            "SetExpression", FIELD_AUTONUMOUT },
-            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTHOR")),        "Author",                   "", FIELD_AUTHOR       },
+            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTHOR")),        "DocInfo.CreateAuthor",                   "", FIELD_AUTHOR       },
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATE")),          "DateTime",                 "", FIELD_DATE         },
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("COMMENTS")),      "DocInfo.Description",      "", FIELD_COMMENTS     },
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CREATEDATE")),    "DocInfo.CreateDateTime",   "", FIELD_CREATEDATE   },
@@ -1886,9 +1887,11 @@ if(!bFilled)
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TEMPLATE")),      "TemplateName",             "", FIELD_TEMPLATE},
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TIME")),          "DateTime",                 "", FIELD_TIME         },
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TITLE")),         "DocInfo.Title",            "", FIELD_TITLE        },
-            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERINITIALS")),  "ExtendedUser",              "", FIELD_USERINITIALS},
+            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERINITIALS")),  "Author",                   "", FIELD_USERINITIALS       },
 //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERADDRESS")),   "",                         "", FIELD_USERADDRESS  },
-//            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERNAME")),      "ExtendedUser",             "", FIELD_USERNAME     }
+            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERNAME")), "Author",                   "", FIELD_USERNAME       },
+
+
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TOC")), "com.sun.star.text.ContentIndex", "", FIELD_TOC},
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TC")), "com.sun.star.text.ContentIndexMark", "", FIELD_TC},
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NUMCHARS")), "CharacterCount", "", FIELD_NUMCHARS},
@@ -2006,12 +2009,25 @@ void DomainMapper_Impl::handleAuthor
     (FieldContextPtr pContext,
     PropertyNameSupplier& rPropNameSupplier,
      uno::Reference< uno::XInterface > & /*xFieldInterface*/,
-     uno::Reference< beans::XPropertySet > xFieldProperties)
+     uno::Reference< beans::XPropertySet > xFieldProperties,
+     FieldId  eFieldId )
 {
-    xFieldProperties->setPropertyValue
-        ( rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
+    if ( eFieldId != FIELD_USERINITIALS )
+        xFieldProperties->setPropertyValue
+            ( rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
+
+    sal_Int32 nLen = sizeof( " AUTHOR" );
+    if ( eFieldId != FIELD_AUTHOR )
+    {
+        if (  eFieldId == FIELD_USERINITIALS )
+            nLen = sizeof( " USERINITIALS" );
+        else if (  eFieldId == FIELD_USERNAME )
+            nLen = sizeof( " USERNAME" );
+    }
+
     ::rtl::OUString sParam =
-        lcl_ExtractParameter(pContext->GetCommand(), sizeof(" AUTHOR") );
+        lcl_ExtractParameter(pContext->GetCommand(), nLen );
+
     if(sParam.getLength())
     {
         xFieldProperties->setPropertyValue(
@@ -2036,6 +2052,7 @@ void DomainMapper_Impl::handleAuthor
     {
         #define SET_ARABIC      0x01
         #define SET_FULL_NAME   0x02
+        #define SET_DATE        0x04
         struct DocPropertyMap
         {
             const sal_Char* pDocPropertyName;
@@ -2044,20 +2061,19 @@ void DomainMapper_Impl::handleAuthor
         };
         static const DocPropertyMap aDocProperties[] =
         {
-            {"Author",           "Author",                  SET_FULL_NAME},
-            {"CreateTime",       "DocInfo.CreateDateTime",  0},
+            {"CreateTime",       "DocInfo.CreateDateTime",  SET_DATE},
             {"Characters",       "CharacterCount",          SET_ARABIC},
             {"Comments",         "DocInfo.Description",     0},
             {"Keywords",         "DocInfo.KeyWords",        0},
             {"LastPrinted",      "DocInfo.PrintDateTime",   0},
             {"LastSavedBy",      "DocInfo.ChangeAuthor",    0},
-            {"LastSavedTime",    "DocInfo.ChangeDateTime",  0},
+            {"LastSavedTime",    "DocInfo.ChangeDateTime",  SET_DATE},
             {"Paragraphs",       "ParagraphCount",          SET_ARABIC},
             {"RevisionNumber",   "DocInfo.Revision",        0},
             {"Subject",          "DocInfo.Subject",         0},
             {"Template",         "TemplateName",            0},
             {"Title",            "DocInfo.Title",           0},
-            {"TotalEditingTime", "DocInfo.EditTime",        9},
+            {"TotalEditingTime", "DocInfo.EditTime",        0},
             {"Words",            "WordCount",               SET_ARABIC}
 
             //other available DocProperties:
@@ -2111,11 +2127,19 @@ void DomainMapper_Impl::handleAuthor
                 xFieldProperties->setPropertyValue(
                     rPropNameSupplier.GetName(PROP_FULL_NAME),
                         uno::makeAny( true ));
+            else if(0 != (aDocProperties[nMap].nFlags & SET_DATE))
+            {
+                xFieldProperties->setPropertyValue(
+                    rPropNameSupplier.GetName(PROP_IS_DATE),
+                        uno::makeAny( true ));
+                SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+            }
         }
     }
 
 #undef SET_ARABIC
 #undef SET_FULL_NAME
+#undef SET_DATE
 }
 
 void DomainMapper_Impl::handleToc
@@ -2432,7 +2456,9 @@ void DomainMapper_Impl::CloseFieldCommand()
                         handleAutoNum(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
                     break;
                     case FIELD_AUTHOR       :
-                        handleAuthor(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
+                    case FIELD_USERNAME     :
+                    case FIELD_USERINITIALS :
+                        handleAuthor(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties, aIt->second.eFieldId  );
                     break;
                     case FIELD_DATE:
                     {
@@ -2449,16 +2475,23 @@ void DomainMapper_Impl::CloseFieldCommand()
                     case FIELD_COMMENTS     :
                     {
                         ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" COMMENTS") );
-                        if(sParam.getLength())
-                        {
-                            xFieldProperties->setPropertyValue(
-                                    rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+                        // A parameter with COMMENTS shouldn't set fixed
+                        // ( or at least the binary filter doesn't )
+                        // If we set fixed then we wont export a field cmd.
+                        // Additionally the para in COMMENTS is more like an
+                        // instruction to set the document property comments
+                        // with the param ( e.g. each COMMENT with a param will
+                        // overwrite the Comments document property
+                        // #TODO implement the above too
+                        xFieldProperties->setPropertyValue(
+                            rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( false ));
                             //PROP_CURRENT_PRESENTATION is set later anyway
-                        }
                     }
                     break;
                     case FIELD_CREATEDATE  :
                     {
+                        xFieldProperties->setPropertyValue(
+                            rPropNameSupplier.GetName( PROP_IS_DATE ), uno::makeAny( true ));
                         SetNumberFormat( pContext->GetCommand(), xFieldProperties );
                     }
                     break;
@@ -2694,24 +2727,8 @@ void DomainMapper_Impl::CloseFieldCommand()
                         }
                     }
                     break;
-                    case FIELD_USERINITIALS:
-                    {
-                        xFieldProperties->setPropertyValue(
-                            rPropNameSupplier.GetName(PROP_USER_DATA_TYPE), uno::makeAny( text::UserDataPart::SHORTCUT ));
-                        //todo: if initials are provided - set them as fixed content
-                        ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" USERINITIALS") );
-                        if(sParam.getLength())
-                        {
-                            xFieldProperties->setPropertyValue(
-                                    rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
-                            //PROP_CURRENT_PRESENTATION is set later anyway
-                        }
-                    }
-                    break;
                     case FIELD_USERADDRESS  : //todo: user address collects street, city ...
                     break;
-                    case FIELD_USERNAME     : //todo: user name is firstname + lastname
-                    break;
                     case FIELD_TOC:
                         handleToc(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties,
                                   ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName));
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 30396fe..7a035c3 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -510,7 +510,8 @@ public:
         (FieldContextPtr pContext,
         PropertyNameSupplier& rPropNameSupplier,
         uno::Reference< uno::XInterface > & xFieldInterface,
-        uno::Reference< beans::XPropertySet > xFieldProperties);
+        uno::Reference< beans::XPropertySet > xFieldProperties,
+        FieldId eFieldId);
     void handleDocProperty
         (FieldContextPtr pContext,
         PropertyNameSupplier& rPropNameSupplier,


More information about the Libreoffice-commits mailing list