[Libreoffice-commits] core.git: sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Wed Jul 24 06:38:21 UTC 2019


 sw/source/core/unocore/unofield.cxx | 1192 ++++++++++++++++++------------------
 1 file changed, 596 insertions(+), 596 deletions(-)

New commits:
commit f0b934f39c8a61dd0f0cbdabe9d54db52696cc6c
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Tue Jul 23 22:46:43 2019 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Wed Jul 24 08:37:18 2019 +0200

    sw: fix indentation in SwXTextField::attach()
    
    The misleading indentation made me waste some time till I realized that
    the affected lines are not executed unconditionally inside the function.
    
    Change-Id: Ie6ffd1866ca2e1b6fd49814f703960c2d6641395
    Reviewed-on: https://gerrit.libreoffice.org/76208
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>

diff --git a/sw/source/core/unocore/unofield.cxx b/sw/source/core/unocore/unofield.cxx
index 3afe7a95ca88..8764eccdfdee 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -1396,657 +1396,657 @@ void SAL_CALL SwXTextField::attach(
     SolarMutexGuard aGuard;
     if (m_pImpl->IsDescriptor())
     {
-    uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY);
-    SwXTextRange* pRange = nullptr;
-    OTextCursorHelper* pCursor = nullptr;
-    if(xRangeTunnel.is())
-    {
-        pRange  = reinterpret_cast< SwXTextRange * >(
-                sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( SwXTextRange::getUnoTunnelId()) ));
-        pCursor = reinterpret_cast< OTextCursorHelper * >(
-                sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( OTextCursorHelper::getUnoTunnelId()) ));
-    }
+        uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY);
+        SwXTextRange* pRange = nullptr;
+        OTextCursorHelper* pCursor = nullptr;
+        if(xRangeTunnel.is())
+        {
+            pRange  = reinterpret_cast< SwXTextRange * >(
+                    sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( SwXTextRange::getUnoTunnelId()) ));
+            pCursor = reinterpret_cast< OTextCursorHelper * >(
+                    sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( OTextCursorHelper::getUnoTunnelId()) ));
+        }
 
-    SwDoc* pDoc = pRange ? &pRange->GetDoc() : pCursor ? pCursor->GetDoc() : nullptr;
-    // if a FieldMaster was attached, then the document is already fixed!
-    // NOTE: sw.SwXAutoTextEntry unoapi test depends on m_pDoc = 0 being valid
-    if (!pDoc || (m_pImpl->m_pDoc && m_pImpl->m_pDoc != pDoc))
-        throw lang::IllegalArgumentException();
+        SwDoc* pDoc = pRange ? &pRange->GetDoc() : pCursor ? pCursor->GetDoc() : nullptr;
+        // if a FieldMaster was attached, then the document is already fixed!
+        // NOTE: sw.SwXAutoTextEntry unoapi test depends on m_pDoc = 0 being valid
+        if (!pDoc || (m_pImpl->m_pDoc && m_pImpl->m_pDoc != pDoc))
+            throw lang::IllegalArgumentException();
 
-    SwUnoInternalPaM aPam(*pDoc);
-    // this now needs to return TRUE
-    ::sw::XTextRangeToSwPaM(aPam, xTextRange);
-    std::unique_ptr<SwField> xField;
-    switch (m_pImpl->m_nServiceId)
-    {
-        case SwServiceType::FieldTypeAnnotation:
-            {
-                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Postit);
+        SwUnoInternalPaM aPam(*pDoc);
+        // this now needs to return TRUE
+        ::sw::XTextRangeToSwPaM(aPam, xTextRange);
+        std::unique_ptr<SwField> xField;
+        switch (m_pImpl->m_nServiceId)
+        {
+            case SwServiceType::FieldTypeAnnotation:
+                {
+                    SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Postit);
 
-                DateTime aDateTime( DateTime::EMPTY );
-                if (m_pImpl->m_pProps->pDateTime)
+                    DateTime aDateTime( DateTime::EMPTY );
+                    if (m_pImpl->m_pProps->pDateTime)
+                    {
+                        aDateTime = *(m_pImpl->m_pProps->pDateTime);
+                    }
+                    SwPostItField* pPostItField = new SwPostItField(
+                        static_cast<SwPostItFieldType*>(pFieldType),
+                        m_pImpl->m_pProps->sPar1, // author
+                        m_pImpl->m_pProps->sPar2, // content
+                        m_pImpl->m_pProps->sPar3, // author's initials
+                        m_pImpl->m_pProps->sPar4, // name
+                        aDateTime );
+                    if ( m_pImpl->m_xTextObject.is() )
+                    {
+                        pPostItField->SetTextObject( m_pImpl->m_xTextObject->CreateText() );
+                        pPostItField->SetPar2(m_pImpl->m_xTextObject->GetText());
+                    }
+                    xField.reset(pPostItField);
+                }
+                break;
+            case SwServiceType::FieldTypeScript:
+            {
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Script);
+                xField.reset(new SwScriptField(static_cast<SwScriptFieldType*>(pFieldType),
+                        m_pImpl->m_pProps->sPar1, m_pImpl->m_pProps->sPar2,
+                        m_pImpl->m_pProps->bBool1));
+            }
+            break;
+            case SwServiceType::FieldTypeDateTime:
+            {
+                sal_uInt16 nSub = 0;
+                if (m_pImpl->m_pProps->bBool1)
+                    nSub |= FIXEDFLD;
+                if (m_pImpl->m_pProps->bBool2)
+                    nSub |= DATEFLD;
+                else
+                    nSub |= TIMEFLD;
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DateTime);
+                SwDateTimeField *const pDTField = new SwDateTimeField(
+                        static_cast<SwDateTimeFieldType*>(pFieldType),
+                            nSub, m_pImpl->m_pProps->nFormat);
+                xField.reset(pDTField);
+                if (m_pImpl->m_pProps->fDouble > 0.)
                 {
-                    aDateTime = *(m_pImpl->m_pProps->pDateTime);
+                    pDTField->SetValue(m_pImpl->m_pProps->fDouble);
                 }
-                SwPostItField* pPostItField = new SwPostItField(
-                    static_cast<SwPostItFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->sPar1, // author
-                    m_pImpl->m_pProps->sPar2, // content
-                    m_pImpl->m_pProps->sPar3, // author's initials
-                    m_pImpl->m_pProps->sPar4, // name
-                    aDateTime );
-                if ( m_pImpl->m_xTextObject.is() )
+                if (m_pImpl->m_pProps->pDateTime)
                 {
-                    pPostItField->SetTextObject( m_pImpl->m_xTextObject->CreateText() );
-                    pPostItField->SetPar2(m_pImpl->m_xTextObject->GetText());
+                    uno::Any aVal; aVal <<= *m_pImpl->m_pProps->pDateTime;
+                    xField->PutValue( aVal, FIELD_PROP_DATE_TIME );
                 }
-                xField.reset(pPostItField);
+                pDTField->SetOffset(m_pImpl->m_pProps->nSubType);
             }
             break;
-        case SwServiceType::FieldTypeScript:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Script);
-            xField.reset(new SwScriptField(static_cast<SwScriptFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->sPar1, m_pImpl->m_pProps->sPar2,
-                    m_pImpl->m_pProps->bBool1));
-        }
-        break;
-        case SwServiceType::FieldTypeDateTime:
-        {
-            sal_uInt16 nSub = 0;
-            if (m_pImpl->m_pProps->bBool1)
-                nSub |= FIXEDFLD;
-            if (m_pImpl->m_pProps->bBool2)
-                nSub |= DATEFLD;
-            else
-                nSub |= TIMEFLD;
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DateTime);
-            SwDateTimeField *const pDTField = new SwDateTimeField(
-                    static_cast<SwDateTimeFieldType*>(pFieldType),
-                        nSub, m_pImpl->m_pProps->nFormat);
-            xField.reset(pDTField);
-            if (m_pImpl->m_pProps->fDouble > 0.)
+            case SwServiceType::FieldTypeFileName:
             {
-                pDTField->SetValue(m_pImpl->m_pProps->fDouble);
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Filename);
+                sal_Int32 nFormat = m_pImpl->m_pProps->nFormat;
+                if (m_pImpl->m_pProps->bBool2)
+                    nFormat |= FF_FIXED;
+                SwFileNameField *const pFNField = new SwFileNameField(
+                        static_cast<SwFileNameFieldType*>(pFieldType), nFormat);
+                xField.reset(pFNField);
+                if (!m_pImpl->m_pProps->sPar3.isEmpty())
+                    pFNField->SetExpansion(m_pImpl->m_pProps->sPar3);
+                uno::Any aFormat;
+                aFormat <<= m_pImpl->m_pProps->nFormat;
+                xField->PutValue( aFormat, FIELD_PROP_FORMAT );
             }
-            if (m_pImpl->m_pProps->pDateTime)
+            break;
+            case SwServiceType::FieldTypeTemplateName:
             {
-                uno::Any aVal; aVal <<= *m_pImpl->m_pProps->pDateTime;
-                xField->PutValue( aVal, FIELD_PROP_DATE_TIME );
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::TemplateName);
+                xField.reset(new SwTemplNameField(static_cast<SwTemplNameFieldType*>(pFieldType),
+                                            m_pImpl->m_pProps->nFormat));
+                uno::Any aFormat;
+                aFormat <<= m_pImpl->m_pProps->nFormat;
+                xField->PutValue(aFormat, FIELD_PROP_FORMAT);
             }
-            pDTField->SetOffset(m_pImpl->m_pProps->nSubType);
-        }
-        break;
-        case SwServiceType::FieldTypeFileName:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Filename);
-            sal_Int32 nFormat = m_pImpl->m_pProps->nFormat;
-            if (m_pImpl->m_pProps->bBool2)
-                nFormat |= FF_FIXED;
-            SwFileNameField *const pFNField = new SwFileNameField(
-                    static_cast<SwFileNameFieldType*>(pFieldType), nFormat);
-            xField.reset(pFNField);
-            if (!m_pImpl->m_pProps->sPar3.isEmpty())
-                pFNField->SetExpansion(m_pImpl->m_pProps->sPar3);
-            uno::Any aFormat;
-            aFormat <<= m_pImpl->m_pProps->nFormat;
-            xField->PutValue( aFormat, FIELD_PROP_FORMAT );
-        }
-        break;
-        case SwServiceType::FieldTypeTemplateName:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::TemplateName);
-            xField.reset(new SwTemplNameField(static_cast<SwTemplNameFieldType*>(pFieldType),
-                                        m_pImpl->m_pProps->nFormat));
-            uno::Any aFormat;
-            aFormat <<= m_pImpl->m_pProps->nFormat;
-            xField->PutValue(aFormat, FIELD_PROP_FORMAT);
-        }
-        break;
-        case SwServiceType::FieldTypeChapter:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Chapter);
-            SwChapterField *const pChapterField = new SwChapterField(
-                    static_cast<SwChapterFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->nUSHORT1);
-            xField.reset(pChapterField);
-            pChapterField->SetLevel(m_pImpl->m_pProps->nByte1);
-            uno::Any aVal;
-            aVal <<= static_cast<sal_Int16>(m_pImpl->m_pProps->nUSHORT1);
-            xField->PutValue(aVal, FIELD_PROP_USHORT1 );
-        }
-        break;
-        case SwServiceType::FieldTypeAuthor:
-        {
-            long nFormat = m_pImpl->m_pProps->bBool1 ? AF_NAME : AF_SHORTCUT;
-            if (m_pImpl->m_pProps->bBool2)
-                nFormat |= AF_FIXED;
-
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Author);
-            SwAuthorField *const pAuthorField = new SwAuthorField(
-                    static_cast<SwAuthorFieldType*>(pFieldType), nFormat);
-            xField.reset(pAuthorField);
-            pAuthorField->SetExpansion(m_pImpl->m_pProps->sPar1);
-        }
-        break;
-        case SwServiceType::FieldTypeConditionedText:
-        case SwServiceType::FieldTypeHiddenText:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::HiddenText);
-            SwHiddenTextField *const pHTField = new SwHiddenTextField(
-                    static_cast<SwHiddenTextFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->sPar1,
-                    m_pImpl->m_pProps->sPar2, m_pImpl->m_pProps->sPar3,
-                    static_cast<sal_uInt16>(SwServiceType::FieldTypeHiddenText == m_pImpl->m_nServiceId ?
-                         TYP_HIDDENTXTFLD : TYP_CONDTXTFLD));
-            xField.reset(pHTField);
-            pHTField->SetValue(m_pImpl->m_pProps->bBool1);
-            uno::Any aVal;
-            aVal <<= m_pImpl->m_pProps->sPar4;
-            xField->PutValue(aVal, FIELD_PROP_PAR4 );
-        }
-        break;
-        case SwServiceType::FieldTypeHiddenPara:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::HiddenPara);
-            SwHiddenParaField *const pHPField = new SwHiddenParaField(
-                    static_cast<SwHiddenParaFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->sPar1);
-            xField.reset(pHPField);
-            pHPField->SetHidden(m_pImpl->m_pProps->bBool1);
-        }
-        break;
-        case SwServiceType::FieldTypeGetReference:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::GetRef);
-            xField.reset(new SwGetRefField(static_cast<SwGetRefFieldType*>(pFieldType),
+            break;
+            case SwServiceType::FieldTypeChapter:
+            {
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Chapter);
+                SwChapterField *const pChapterField = new SwChapterField(
+                        static_cast<SwChapterFieldType*>(pFieldType),
+                        m_pImpl->m_pProps->nUSHORT1);
+                xField.reset(pChapterField);
+                pChapterField->SetLevel(m_pImpl->m_pProps->nByte1);
+                uno::Any aVal;
+                aVal <<= static_cast<sal_Int16>(m_pImpl->m_pProps->nUSHORT1);
+                xField->PutValue(aVal, FIELD_PROP_USHORT1 );
+            }
+            break;
+            case SwServiceType::FieldTypeAuthor:
+            {
+                long nFormat = m_pImpl->m_pProps->bBool1 ? AF_NAME : AF_SHORTCUT;
+                if (m_pImpl->m_pProps->bBool2)
+                    nFormat |= AF_FIXED;
+
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Author);
+                SwAuthorField *const pAuthorField = new SwAuthorField(
+                        static_cast<SwAuthorFieldType*>(pFieldType), nFormat);
+                xField.reset(pAuthorField);
+                pAuthorField->SetExpansion(m_pImpl->m_pProps->sPar1);
+            }
+            break;
+            case SwServiceType::FieldTypeConditionedText:
+            case SwServiceType::FieldTypeHiddenText:
+            {
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::HiddenText);
+                SwHiddenTextField *const pHTField = new SwHiddenTextField(
+                        static_cast<SwHiddenTextFieldType*>(pFieldType),
                         m_pImpl->m_pProps->sPar1,
-                        m_pImpl->m_pProps->sPar4,
-                        0,
-                        0,
-                        0));
-            if (!m_pImpl->m_pProps->sPar3.isEmpty())
-                static_cast<SwGetRefField*>(xField.get())->SetExpand(m_pImpl->m_pProps->sPar3);
-            uno::Any aVal;
-            aVal <<= static_cast<sal_Int16>(m_pImpl->m_pProps->nUSHORT1);
-            xField->PutValue(aVal, FIELD_PROP_USHORT1 );
-            aVal <<= static_cast<sal_Int16>(m_pImpl->m_pProps->nUSHORT2);
-            xField->PutValue(aVal, FIELD_PROP_USHORT2 );
-            aVal <<= m_pImpl->m_pProps->nSHORT1;
-            xField->PutValue(aVal, FIELD_PROP_SHORT1 );
-        }
-        break;
-        case SwServiceType::FieldTypeJumpEdit:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::JumpEdit);
-            xField.reset(new SwJumpEditField(static_cast<SwJumpEditFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->nUSHORT1, m_pImpl->m_pProps->sPar2,
-                    m_pImpl->m_pProps->sPar1));
-        }
-        break;
-        case SwServiceType::FieldTypeDocInfoChangeAuthor:
-        case SwServiceType::FieldTypeDocInfoChangeDateTime:
-        case SwServiceType::FieldTypeDocInfoEditTime:
-        case SwServiceType::FieldTypeDocInfoDescription:
-        case SwServiceType::FieldTypeDocInfoCreateAuthor:
-        case SwServiceType::FieldTypeDocInfoCreateDateTime:
-        case SwServiceType::FieldTypeDocInfoCustom:
-        case SwServiceType::FieldTypeDocInfoPrintAuthor:
-        case SwServiceType::FieldTypeDocInfoPrintDateTime:
-        case SwServiceType::FieldTypeDocInfoKeywords:
-        case SwServiceType::FieldTypeDocInfoSubject:
-        case SwServiceType::FieldTypeDocInfoTitle:
-        case SwServiceType::FieldTypeDocInfoRevision:
-        case SwServiceType::FieldTypeDocInfo:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DocInfo);
-            sal_uInt16 nSubType = aDocInfoSubTypeFromService[
-                    static_cast<sal_uInt16>(m_pImpl->m_nServiceId) - sal_uInt16(SwServiceType::FieldTypeDocInfoChangeAuthor)];
-            if (SwServiceType::FieldTypeDocInfoChangeDateTime == m_pImpl->m_nServiceId ||
-                SwServiceType::FieldTypeDocInfoCreateDateTime == m_pImpl->m_nServiceId ||
-                SwServiceType::FieldTypeDocInfoPrintDateTime == m_pImpl->m_nServiceId ||
-                SwServiceType::FieldTypeDocInfoEditTime == m_pImpl->m_nServiceId)
+                        m_pImpl->m_pProps->sPar2, m_pImpl->m_pProps->sPar3,
+                        static_cast<sal_uInt16>(SwServiceType::FieldTypeHiddenText == m_pImpl->m_nServiceId ?
+                             TYP_HIDDENTXTFLD : TYP_CONDTXTFLD));
+                xField.reset(pHTField);
+                pHTField->SetValue(m_pImpl->m_pProps->bBool1);
+                uno::Any aVal;
+                aVal <<= m_pImpl->m_pProps->sPar4;
+                xField->PutValue(aVal, FIELD_PROP_PAR4 );
+            }
+            break;
+            case SwServiceType::FieldTypeHiddenPara:
+            {
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::HiddenPara);
+                SwHiddenParaField *const pHPField = new SwHiddenParaField(
+                        static_cast<SwHiddenParaFieldType*>(pFieldType),
+                        m_pImpl->m_pProps->sPar1);
+                xField.reset(pHPField);
+                pHPField->SetHidden(m_pImpl->m_pProps->bBool1);
+            }
+            break;
+            case SwServiceType::FieldTypeGetReference:
+            {
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::GetRef);
+                xField.reset(new SwGetRefField(static_cast<SwGetRefFieldType*>(pFieldType),
+                            m_pImpl->m_pProps->sPar1,
+                            m_pImpl->m_pProps->sPar4,
+                            0,
+                            0,
+                            0));
+                if (!m_pImpl->m_pProps->sPar3.isEmpty())
+                    static_cast<SwGetRefField*>(xField.get())->SetExpand(m_pImpl->m_pProps->sPar3);
+                uno::Any aVal;
+                aVal <<= static_cast<sal_Int16>(m_pImpl->m_pProps->nUSHORT1);
+                xField->PutValue(aVal, FIELD_PROP_USHORT1 );
+                aVal <<= static_cast<sal_Int16>(m_pImpl->m_pProps->nUSHORT2);
+                xField->PutValue(aVal, FIELD_PROP_USHORT2 );
+                aVal <<= m_pImpl->m_pProps->nSHORT1;
+                xField->PutValue(aVal, FIELD_PROP_SHORT1 );
+            }
+            break;
+            case SwServiceType::FieldTypeJumpEdit:
+            {
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::JumpEdit);
+                xField.reset(new SwJumpEditField(static_cast<SwJumpEditFieldType*>(pFieldType),
+                        m_pImpl->m_pProps->nUSHORT1, m_pImpl->m_pProps->sPar2,
+                        m_pImpl->m_pProps->sPar1));
+            }
+            break;
+            case SwServiceType::FieldTypeDocInfoChangeAuthor:
+            case SwServiceType::FieldTypeDocInfoChangeDateTime:
+            case SwServiceType::FieldTypeDocInfoEditTime:
+            case SwServiceType::FieldTypeDocInfoDescription:
+            case SwServiceType::FieldTypeDocInfoCreateAuthor:
+            case SwServiceType::FieldTypeDocInfoCreateDateTime:
+            case SwServiceType::FieldTypeDocInfoCustom:
+            case SwServiceType::FieldTypeDocInfoPrintAuthor:
+            case SwServiceType::FieldTypeDocInfoPrintDateTime:
+            case SwServiceType::FieldTypeDocInfoKeywords:
+            case SwServiceType::FieldTypeDocInfoSubject:
+            case SwServiceType::FieldTypeDocInfoTitle:
+            case SwServiceType::FieldTypeDocInfoRevision:
+            case SwServiceType::FieldTypeDocInfo:
             {
-                if (m_pImpl->m_pProps->bBool2) //IsDate
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DocInfo);
+                sal_uInt16 nSubType = aDocInfoSubTypeFromService[
+                        static_cast<sal_uInt16>(m_pImpl->m_nServiceId) - sal_uInt16(SwServiceType::FieldTypeDocInfoChangeAuthor)];
+                if (SwServiceType::FieldTypeDocInfoChangeDateTime == m_pImpl->m_nServiceId ||
+                    SwServiceType::FieldTypeDocInfoCreateDateTime == m_pImpl->m_nServiceId ||
+                    SwServiceType::FieldTypeDocInfoPrintDateTime == m_pImpl->m_nServiceId ||
+                    SwServiceType::FieldTypeDocInfoEditTime == m_pImpl->m_nServiceId)
                 {
-                    nSubType &= 0xf0ff;
-                    nSubType |= DI_SUB_DATE;
+                    if (m_pImpl->m_pProps->bBool2) //IsDate
+                    {
+                        nSubType &= 0xf0ff;
+                        nSubType |= DI_SUB_DATE;
+                    }
+                    else
+                    {
+                        nSubType &= 0xf0ff;
+                        nSubType |= DI_SUB_TIME;
+                    }
                 }
-                else
+                if (m_pImpl->m_pProps->bBool1)
+                    nSubType |= DI_SUB_FIXED;
+                xField.reset(new SwDocInfoField(
+                        static_cast<SwDocInfoFieldType*>(pFieldType), nSubType,
+                        m_pImpl->m_pProps->sPar4, m_pImpl->m_pProps->nFormat));
+                if (!m_pImpl->m_pProps->sPar3.isEmpty())
+                    static_cast<SwDocInfoField*>(xField.get())->SetExpansion(m_pImpl->m_pProps->sPar3);
+            }
+            break;
+            case SwServiceType::FieldTypeUserExt:
+            {
+                sal_Int32 nFormat = 0;
+                if (m_pImpl->m_pProps->bBool1)
+                    nFormat = AF_FIXED;
+
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::ExtUser);
+                SwExtUserField *const pEUField = new SwExtUserField(
+                    static_cast<SwExtUserFieldType*>(pFieldType),
+                    m_pImpl->m_pProps->nUSHORT1, nFormat);
+                xField.reset(pEUField);
+                pEUField->SetExpansion(m_pImpl->m_pProps->sPar1);
+            }
+            break;
+            case SwServiceType::FieldTypeUser:
+            {
+                SwFieldType* pFieldType =
+                    pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::User, m_pImpl->m_sTypeName, true);
+                if (!pFieldType)
+                    throw uno::RuntimeException();
+                sal_uInt16 nUserSubType = (m_pImpl->m_pProps->bBool1)
+                    ? nsSwExtendedSubType::SUB_INVISIBLE : 0;
+                if (m_pImpl->m_pProps->bBool2)
+                    nUserSubType |= nsSwExtendedSubType::SUB_CMD;
+                if (m_pImpl->m_pProps->bFormatIsDefault &&
+                    nsSwGetSetExpType::GSE_STRING == static_cast<SwUserFieldType*>(pFieldType)->GetType())
                 {
-                    nSubType &= 0xf0ff;
-                    nSubType |= DI_SUB_TIME;
+                    m_pImpl->m_pProps->nFormat = -1;
                 }
+                xField.reset(new SwUserField(static_cast<SwUserFieldType*>(pFieldType),
+                                    nUserSubType,
+                                    m_pImpl->m_pProps->nFormat));
             }
-            if (m_pImpl->m_pProps->bBool1)
-                nSubType |= DI_SUB_FIXED;
-            xField.reset(new SwDocInfoField(
-                    static_cast<SwDocInfoFieldType*>(pFieldType), nSubType,
-                    m_pImpl->m_pProps->sPar4, m_pImpl->m_pProps->nFormat));
-            if (!m_pImpl->m_pProps->sPar3.isEmpty())
-                static_cast<SwDocInfoField*>(xField.get())->SetExpansion(m_pImpl->m_pProps->sPar3);
-        }
-        break;
-        case SwServiceType::FieldTypeUserExt:
-        {
-            sal_Int32 nFormat = 0;
-            if (m_pImpl->m_pProps->bBool1)
-                nFormat = AF_FIXED;
-
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::ExtUser);
-            SwExtUserField *const pEUField = new SwExtUserField(
-                static_cast<SwExtUserFieldType*>(pFieldType),
-                m_pImpl->m_pProps->nUSHORT1, nFormat);
-            xField.reset(pEUField);
-            pEUField->SetExpansion(m_pImpl->m_pProps->sPar1);
-        }
-        break;
-        case SwServiceType::FieldTypeUser:
-        {
-            SwFieldType* pFieldType =
-                pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::User, m_pImpl->m_sTypeName, true);
-            if (!pFieldType)
-                throw uno::RuntimeException();
-            sal_uInt16 nUserSubType = (m_pImpl->m_pProps->bBool1)
-                ? nsSwExtendedSubType::SUB_INVISIBLE : 0;
-            if (m_pImpl->m_pProps->bBool2)
-                nUserSubType |= nsSwExtendedSubType::SUB_CMD;
-            if (m_pImpl->m_pProps->bFormatIsDefault &&
-                nsSwGetSetExpType::GSE_STRING == static_cast<SwUserFieldType*>(pFieldType)->GetType())
+            break;
+            case SwServiceType::FieldTypeRefPageSet:
             {
-                m_pImpl->m_pProps->nFormat = -1;
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::RefPageSet);
+                xField.reset(new SwRefPageSetField( static_cast<SwRefPageSetFieldType*>(pFieldType),
+                                    m_pImpl->m_pProps->nUSHORT1,
+                                    m_pImpl->m_pProps->bBool1 ));
             }
-            xField.reset(new SwUserField(static_cast<SwUserFieldType*>(pFieldType),
-                                nUserSubType,
-                                m_pImpl->m_pProps->nFormat));
-        }
-        break;
-        case SwServiceType::FieldTypeRefPageSet:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::RefPageSet);
-            xField.reset(new SwRefPageSetField( static_cast<SwRefPageSetFieldType*>(pFieldType),
-                                m_pImpl->m_pProps->nUSHORT1,
-                                m_pImpl->m_pProps->bBool1 ));
-        }
-        break;
-        case SwServiceType::FieldTypeRefPageGet:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::RefPageGet);
-            SwRefPageGetField *const pRGField = new SwRefPageGetField(
-                    static_cast<SwRefPageGetFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->nUSHORT1 );
-            xField.reset(pRGField);
-            pRGField->SetText(m_pImpl->m_pProps->sPar1, nullptr);
-        }
-        break;
-        case SwServiceType::FieldTypePageNum:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::PageNumber);
-            SwPageNumberField *const pPNField = new SwPageNumberField(
-                static_cast<SwPageNumberFieldType*>(pFieldType), PG_RANDOM,
-                m_pImpl->m_pProps->nFormat,
-                m_pImpl->m_pProps->nUSHORT1);
-            xField.reset(pPNField);
-            pPNField->SetUserString(m_pImpl->m_pProps->sPar1);
-            uno::Any aVal;
-            aVal <<= m_pImpl->m_pProps->nSubType;
-            xField->PutValue( aVal, FIELD_PROP_SUBTYPE );
-        }
-        break;
-        case SwServiceType::FieldTypeDDE:
-        {
-            SwFieldType* pFieldType =
-                pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::Dde, m_pImpl->m_sTypeName, true);
-            if (!pFieldType)
-                throw uno::RuntimeException();
-            xField.reset(new SwDDEField( static_cast<SwDDEFieldType*>(pFieldType) ));
-        }
-        break;
-        case SwServiceType::FieldTypeDatabaseName:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DatabaseName);
-            SwDBData aData;
-            aData.sDataSource = m_pImpl->m_pProps->sPar1;
-            aData.sCommand = m_pImpl->m_pProps->sPar2;
-            aData.nCommandType = m_pImpl->m_pProps->nSHORT1;
-            xField.reset(new SwDBNameField(static_cast<SwDBNameFieldType*>(pFieldType), aData));
-            sal_uInt16  nSubType = xField->GetSubType();
-            if (m_pImpl->m_pProps->bBool2)
-                nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
-            else
-                nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
-            xField->SetSubType(nSubType);
-        }
-        break;
-        case SwServiceType::FieldTypeDatabaseNextSet:
-        {
-            SwDBData aData;
-            aData.sDataSource = m_pImpl->m_pProps->sPar1;
-            aData.sCommand = m_pImpl->m_pProps->sPar2;
-            aData.nCommandType = m_pImpl->m_pProps->nSHORT1;
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DbNextSet);
-            xField.reset(new SwDBNextSetField(static_cast<SwDBNextSetFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->sPar3, aData));
-        }
-        break;
-        case SwServiceType::FieldTypeDatabaseNumSet:
-        {
-            SwDBData aData;
-            aData.sDataSource = m_pImpl->m_pProps->sPar1;
-            aData.sCommand = m_pImpl->m_pProps->sPar2;
-            aData.nCommandType = m_pImpl->m_pProps->nSHORT1;
-            xField.reset(new SwDBNumSetField( static_cast<SwDBNumSetFieldType*>(
-                pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DbNumSet)),
-                m_pImpl->m_pProps->sPar3,
-                OUString::number(m_pImpl->m_pProps->nFormat),
-                aData ));
-        }
-        break;
-        case SwServiceType::FieldTypeDatabaseSetNum:
-        {
-            SwDBData aData;
-            aData.sDataSource = m_pImpl->m_pProps->sPar1;
-            aData.sCommand = m_pImpl->m_pProps->sPar2;
-            aData.nCommandType = m_pImpl->m_pProps->nSHORT1;
-            SwDBSetNumberField *const pDBSNField =
-                new SwDBSetNumberField(static_cast<SwDBSetNumberFieldType*>(
-                        pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DbSetNumber)), aData,
+            break;
+            case SwServiceType::FieldTypeRefPageGet:
+            {
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::RefPageGet);
+                SwRefPageGetField *const pRGField = new SwRefPageGetField(
+                        static_cast<SwRefPageGetFieldType*>(pFieldType),
+                        m_pImpl->m_pProps->nUSHORT1 );
+                xField.reset(pRGField);
+                pRGField->SetText(m_pImpl->m_pProps->sPar1, nullptr);
+            }
+            break;
+            case SwServiceType::FieldTypePageNum:
+            {
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::PageNumber);
+                SwPageNumberField *const pPNField = new SwPageNumberField(
+                    static_cast<SwPageNumberFieldType*>(pFieldType), PG_RANDOM,
+                    m_pImpl->m_pProps->nFormat,
                     m_pImpl->m_pProps->nUSHORT1);
-            xField.reset(pDBSNField);
-            pDBSNField->SetSetNumber(m_pImpl->m_pProps->nFormat);
-            sal_uInt16 nSubType = xField->GetSubType();
-            if (m_pImpl->m_pProps->bBool2)
-                nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
-            else
-                nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
-            xField->SetSubType(nSubType);
-        }
-        break;
-        case SwServiceType::FieldTypeDatabase:
-        {
-            SwFieldType* pFieldType =
-                pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::Database, m_pImpl->m_sTypeName, false);
-            if (!pFieldType)
-                throw uno::RuntimeException();
-            xField.reset(new SwDBField(static_cast<SwDBFieldType*>(pFieldType),
-                    m_pImpl->m_pProps->nFormat));
-            static_cast<SwDBField*>(xField.get())->InitContent(m_pImpl->m_pProps->sPar1);
-            sal_uInt16  nSubType = xField->GetSubType();
-            if (m_pImpl->m_pProps->bBool2)
-                nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
-            else
-                nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
-            xField->SetSubType(nSubType);
-        }
-        break;
-        case SwServiceType::FieldTypeSetExp:
-        {
-            SwFieldType* pFieldType =
-                pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::SetExp, m_pImpl->m_sTypeName, true);
-            if (!pFieldType)
-                throw uno::RuntimeException();
-            // detect the field type's sub type and set an appropriate number format
-            if (m_pImpl->m_pProps->bFormatIsDefault &&
-                nsSwGetSetExpType::GSE_STRING == static_cast<SwSetExpFieldType*>(pFieldType)->GetType())
+                xField.reset(pPNField);
+                pPNField->SetUserString(m_pImpl->m_pProps->sPar1);
+                uno::Any aVal;
+                aVal <<= m_pImpl->m_pProps->nSubType;
+                xField->PutValue( aVal, FIELD_PROP_SUBTYPE );
+            }
+            break;
+            case SwServiceType::FieldTypeDDE:
             {
-                m_pImpl->m_pProps->nFormat = -1;
+                SwFieldType* pFieldType =
+                    pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::Dde, m_pImpl->m_sTypeName, true);
+                if (!pFieldType)
+                    throw uno::RuntimeException();
+                xField.reset(new SwDDEField( static_cast<SwDDEFieldType*>(pFieldType) ));
             }
-            SwSetExpField *const pSEField = new SwSetExpField(
-                static_cast<SwSetExpFieldType*>(pFieldType),
-                m_pImpl->m_pProps->sPar2,
-                m_pImpl->m_pProps->nUSHORT2 != USHRT_MAX ?  //#i79471# the field can have a number format or a number_ing_ format
-                m_pImpl->m_pProps->nUSHORT2 : m_pImpl->m_pProps->nFormat);
-            xField.reset(pSEField);
-
-            sal_uInt16  nSubType = xField->GetSubType();
-            if (m_pImpl->m_pProps->bBool2)
-                nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
-            else
-                nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
-            if (m_pImpl->m_pProps->bBool3)
-                nSubType |= nsSwExtendedSubType::SUB_CMD;
-            else
-                nSubType &= ~nsSwExtendedSubType::SUB_CMD;
-            xField->SetSubType(nSubType);
-            pSEField->SetSeqNumber(m_pImpl->m_pProps->nUSHORT1);
-            pSEField->SetInputFlag(m_pImpl->m_pProps->bBool1);
-            pSEField->SetPromptText(m_pImpl->m_pProps->sPar3);
-            if (!m_pImpl->m_pProps->sPar4.isEmpty())
-                pSEField->ChgExpStr(m_pImpl->m_pProps->sPar4, nullptr);
-
-        }
-        break;
-        case SwServiceType::FieldTypeGetExp:
-        {
-            sal_uInt16 nSubType;
-            switch (m_pImpl->m_pProps->nSubType)
+            break;
+            case SwServiceType::FieldTypeDatabaseName:
             {
-                case text::SetVariableType::STRING: nSubType = nsSwGetSetExpType::GSE_STRING;   break;
-                case text::SetVariableType::VAR:        nSubType = nsSwGetSetExpType::GSE_EXPR;  break;
-                //case text::SetVariableType::SEQUENCE:   nSubType = nsSwGetSetExpType::GSE_SEQ;  break;
-                case text::SetVariableType::FORMULA:    nSubType = nsSwGetSetExpType::GSE_FORMULA; break;
-                default:
-                    OSL_FAIL("wrong value");
-                    nSubType = nsSwGetSetExpType::GSE_EXPR;
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DatabaseName);
+                SwDBData aData;
+                aData.sDataSource = m_pImpl->m_pProps->sPar1;
+                aData.sCommand = m_pImpl->m_pProps->sPar2;
+                aData.nCommandType = m_pImpl->m_pProps->nSHORT1;
+                xField.reset(new SwDBNameField(static_cast<SwDBNameFieldType*>(pFieldType), aData));
+                sal_uInt16  nSubType = xField->GetSubType();
+                if (m_pImpl->m_pProps->bBool2)
+                    nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
+                else
+                    nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
+                xField->SetSubType(nSubType);
             }
-            //make sure the SubType matches the field type
-            SwFieldType* pSetExpField = pDoc->getIDocumentFieldsAccess().GetFieldType(
-                    SwFieldIds::SetExp, m_pImpl->m_pProps->sPar1, false);
-            bool bSetGetExpFieldUninitialized = false;
-            if (pSetExpField)
+            break;
+            case SwServiceType::FieldTypeDatabaseNextSet:
             {
-                if (nSubType != nsSwGetSetExpType::GSE_STRING &&
-                    static_cast< SwSetExpFieldType* >(pSetExpField)->GetType() == nsSwGetSetExpType::GSE_STRING)
-                nSubType = nsSwGetSetExpType::GSE_STRING;
+                SwDBData aData;
+                aData.sDataSource = m_pImpl->m_pProps->sPar1;
+                aData.sCommand = m_pImpl->m_pProps->sPar2;
+                aData.nCommandType = m_pImpl->m_pProps->nSHORT1;
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DbNextSet);
+                xField.reset(new SwDBNextSetField(static_cast<SwDBNextSetFieldType*>(pFieldType),
+                        m_pImpl->m_pProps->sPar3, aData));
             }
-            else
-                bSetGetExpFieldUninitialized = true; // #i82544#
+            break;
+            case SwServiceType::FieldTypeDatabaseNumSet:
+            {
+                SwDBData aData;
+                aData.sDataSource = m_pImpl->m_pProps->sPar1;
+                aData.sCommand = m_pImpl->m_pProps->sPar2;
+                aData.nCommandType = m_pImpl->m_pProps->nSHORT1;
+                xField.reset(new SwDBNumSetField( static_cast<SwDBNumSetFieldType*>(
+                    pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DbNumSet)),
+                    m_pImpl->m_pProps->sPar3,
+                    OUString::number(m_pImpl->m_pProps->nFormat),
+                    aData ));
+            }
+            break;
+            case SwServiceType::FieldTypeDatabaseSetNum:
+            {
+                SwDBData aData;
+                aData.sDataSource = m_pImpl->m_pProps->sPar1;
+                aData.sCommand = m_pImpl->m_pProps->sPar2;
+                aData.nCommandType = m_pImpl->m_pProps->nSHORT1;
+                SwDBSetNumberField *const pDBSNField =
+                    new SwDBSetNumberField(static_cast<SwDBSetNumberFieldType*>(
+                            pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DbSetNumber)), aData,
+                        m_pImpl->m_pProps->nUSHORT1);
+                xField.reset(pDBSNField);
+                pDBSNField->SetSetNumber(m_pImpl->m_pProps->nFormat);
+                sal_uInt16 nSubType = xField->GetSubType();
+                if (m_pImpl->m_pProps->bBool2)
+                    nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
+                else
+                    nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
+                xField->SetSubType(nSubType);
+            }
+            break;
+            case SwServiceType::FieldTypeDatabase:
+            {
+                SwFieldType* pFieldType =
+                    pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::Database, m_pImpl->m_sTypeName, false);
+                if (!pFieldType)
+                    throw uno::RuntimeException();
+                xField.reset(new SwDBField(static_cast<SwDBFieldType*>(pFieldType),
+                        m_pImpl->m_pProps->nFormat));
+                static_cast<SwDBField*>(xField.get())->InitContent(m_pImpl->m_pProps->sPar1);
+                sal_uInt16  nSubType = xField->GetSubType();
+                if (m_pImpl->m_pProps->bBool2)
+                    nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
+                else
+                    nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
+                xField->SetSubType(nSubType);
+            }
+            break;
+            case SwServiceType::FieldTypeSetExp:
+            {
+                SwFieldType* pFieldType =
+                    pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::SetExp, m_pImpl->m_sTypeName, true);
+                if (!pFieldType)
+                    throw uno::RuntimeException();
+                // detect the field type's sub type and set an appropriate number format
+                if (m_pImpl->m_pProps->bFormatIsDefault &&
+                    nsSwGetSetExpType::GSE_STRING == static_cast<SwSetExpFieldType*>(pFieldType)->GetType())
+                {
+                    m_pImpl->m_pProps->nFormat = -1;
+                }
+                SwSetExpField *const pSEField = new SwSetExpField(
+                    static_cast<SwSetExpFieldType*>(pFieldType),
+                    m_pImpl->m_pProps->sPar2,
+                    m_pImpl->m_pProps->nUSHORT2 != USHRT_MAX ?  //#i79471# the field can have a number format or a number_ing_ format
+                    m_pImpl->m_pProps->nUSHORT2 : m_pImpl->m_pProps->nFormat);
+                xField.reset(pSEField);
+
+                sal_uInt16  nSubType = xField->GetSubType();
+                if (m_pImpl->m_pProps->bBool2)
+                    nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
+                else
+                    nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
+                if (m_pImpl->m_pProps->bBool3)
+                    nSubType |= nsSwExtendedSubType::SUB_CMD;
+                else
+                    nSubType &= ~nsSwExtendedSubType::SUB_CMD;
+                xField->SetSubType(nSubType);
+                pSEField->SetSeqNumber(m_pImpl->m_pProps->nUSHORT1);
+                pSEField->SetInputFlag(m_pImpl->m_pProps->bBool1);
+                pSEField->SetPromptText(m_pImpl->m_pProps->sPar3);
+                if (!m_pImpl->m_pProps->sPar4.isEmpty())
+                    pSEField->ChgExpStr(m_pImpl->m_pProps->sPar4, nullptr);
 
-            if (m_pImpl->m_pProps->bBool2)
-                nSubType |= nsSwExtendedSubType::SUB_CMD;
-            else
-                nSubType &= ~nsSwExtendedSubType::SUB_CMD;
-            SwGetExpField *const pGEField = new SwGetExpField(
-                    static_cast<SwGetExpFieldType*>(
-                        pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::GetExp)),
-                    m_pImpl->m_pProps->sPar1, nSubType,
-                    m_pImpl->m_pProps->nFormat);
-            xField.reset(pGEField);
-            //TODO: evaluate SubType!
-            if (!m_pImpl->m_pProps->sPar4.isEmpty())
-                pGEField->ChgExpStr(m_pImpl->m_pProps->sPar4, nullptr);
-            // #i82544#
-            if (bSetGetExpFieldUninitialized)
-                pGEField->SetLateInitialization();
-        }
-        break;
-        case SwServiceType::FieldTypeInputUser:
-        case SwServiceType::FieldTypeInput:
-        {
-            SwFieldType* pFieldType =
-                pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::Input, m_pImpl->m_sTypeName, true);
-            if (!pFieldType)
-                throw uno::RuntimeException();
-            sal_uInt16 nInpSubType =
-                sal::static_int_cast<sal_uInt16>(
-                    SwServiceType::FieldTypeInputUser == m_pImpl->m_nServiceId
-                        ? INP_USR : INP_TXT);
-            SwInputField * pTextField =
-                new SwInputField(static_cast<SwInputFieldType*>(pFieldType),
-                                 m_pImpl->m_pProps->sPar1,
-                                 m_pImpl->m_pProps->sPar2,
-                                 nInpSubType);
-            pTextField->SetHelp(m_pImpl->m_pProps->sPar3);
-            pTextField->SetToolTip(m_pImpl->m_pProps->sPar4);
-
-            xField.reset(pTextField);
-        }
-        break;
-        case SwServiceType::FieldTypeMacro:
-        {
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Macro);
-            OUString aName;
+            }
+            break;
+            case SwServiceType::FieldTypeGetExp:
+            {
+                sal_uInt16 nSubType;
+                switch (m_pImpl->m_pProps->nSubType)
+                {
+                    case text::SetVariableType::STRING: nSubType = nsSwGetSetExpType::GSE_STRING;   break;
+                    case text::SetVariableType::VAR:        nSubType = nsSwGetSetExpType::GSE_EXPR;  break;
+                    //case text::SetVariableType::SEQUENCE:   nSubType = nsSwGetSetExpType::GSE_SEQ;  break;
+                    case text::SetVariableType::FORMULA:    nSubType = nsSwGetSetExpType::GSE_FORMULA; break;
+                    default:
+                        OSL_FAIL("wrong value");
+                        nSubType = nsSwGetSetExpType::GSE_EXPR;
+                }
+                //make sure the SubType matches the field type
+                SwFieldType* pSetExpField = pDoc->getIDocumentFieldsAccess().GetFieldType(
+                        SwFieldIds::SetExp, m_pImpl->m_pProps->sPar1, false);
+                bool bSetGetExpFieldUninitialized = false;
+                if (pSetExpField)
+                {
+                    if (nSubType != nsSwGetSetExpType::GSE_STRING &&
+                        static_cast< SwSetExpFieldType* >(pSetExpField)->GetType() == nsSwGetSetExpType::GSE_STRING)
+                    nSubType = nsSwGetSetExpType::GSE_STRING;
+                }
+                else
+                    bSetGetExpFieldUninitialized = true; // #i82544#
 
-            // support for Scripting Framework macros
-            if (!m_pImpl->m_pProps->sPar4.isEmpty())
+                if (m_pImpl->m_pProps->bBool2)
+                    nSubType |= nsSwExtendedSubType::SUB_CMD;
+                else
+                    nSubType &= ~nsSwExtendedSubType::SUB_CMD;
+                SwGetExpField *const pGEField = new SwGetExpField(
+                        static_cast<SwGetExpFieldType*>(
+                            pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::GetExp)),
+                        m_pImpl->m_pProps->sPar1, nSubType,
+                        m_pImpl->m_pProps->nFormat);
+                xField.reset(pGEField);
+                //TODO: evaluate SubType!
+                if (!m_pImpl->m_pProps->sPar4.isEmpty())
+                    pGEField->ChgExpStr(m_pImpl->m_pProps->sPar4, nullptr);
+                // #i82544#
+                if (bSetGetExpFieldUninitialized)
+                    pGEField->SetLateInitialization();
+            }
+            break;
+            case SwServiceType::FieldTypeInputUser:
+            case SwServiceType::FieldTypeInput:
             {
-                aName = m_pImpl->m_pProps->sPar4;
+                SwFieldType* pFieldType =
+                    pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::Input, m_pImpl->m_sTypeName, true);
+                if (!pFieldType)
+                    throw uno::RuntimeException();
+                sal_uInt16 nInpSubType =
+                    sal::static_int_cast<sal_uInt16>(
+                        SwServiceType::FieldTypeInputUser == m_pImpl->m_nServiceId
+                            ? INP_USR : INP_TXT);
+                SwInputField * pTextField =
+                    new SwInputField(static_cast<SwInputFieldType*>(pFieldType),
+                                     m_pImpl->m_pProps->sPar1,
+                                     m_pImpl->m_pProps->sPar2,
+                                     nInpSubType);
+                pTextField->SetHelp(m_pImpl->m_pProps->sPar3);
+                pTextField->SetToolTip(m_pImpl->m_pProps->sPar4);
+
+                xField.reset(pTextField);
             }
-            else
+            break;
+            case SwServiceType::FieldTypeMacro:
             {
-                SwMacroField::CreateMacroString(aName,
-                    m_pImpl->m_pProps->sPar1, m_pImpl->m_pProps->sPar3);
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Macro);
+                OUString aName;
+
+                // support for Scripting Framework macros
+                if (!m_pImpl->m_pProps->sPar4.isEmpty())
+                {
+                    aName = m_pImpl->m_pProps->sPar4;
+                }
+                else
+                {
+                    SwMacroField::CreateMacroString(aName,
+                        m_pImpl->m_pProps->sPar1, m_pImpl->m_pProps->sPar3);
+                }
+                xField.reset(new SwMacroField(static_cast<SwMacroFieldType*>(pFieldType), aName,
+                                        m_pImpl->m_pProps->sPar2));
             }
-            xField.reset(new SwMacroField(static_cast<SwMacroFieldType*>(pFieldType), aName,
-                                    m_pImpl->m_pProps->sPar2));
-        }
-        break;
-        case SwServiceType::FieldTypePageCount:
-        case SwServiceType::FieldTypeParagraphCount:
-        case SwServiceType::FieldTypeWordCount:
-        case SwServiceType::FieldTypeCharacterCount:
-        case SwServiceType::FieldTypeTableCount:
-        case SwServiceType::FieldTypeGraphicObjectCount:
-        case SwServiceType::FieldTypeEmbeddedObjectCount:
-        {
-            sal_uInt16 nSubType = DS_PAGE;
-            switch (m_pImpl->m_nServiceId)
+            break;
+            case SwServiceType::FieldTypePageCount:
+            case SwServiceType::FieldTypeParagraphCount:
+            case SwServiceType::FieldTypeWordCount:
+            case SwServiceType::FieldTypeCharacterCount:
+            case SwServiceType::FieldTypeTableCount:
+            case SwServiceType::FieldTypeGraphicObjectCount:
+            case SwServiceType::FieldTypeEmbeddedObjectCount:
             {
-                case SwServiceType::FieldTypeParagraphCount       : nSubType = DS_PARA; break;
-                case SwServiceType::FieldTypeWordCount            : nSubType = DS_WORD; break;
-                case SwServiceType::FieldTypeCharacterCount       : nSubType = DS_CHAR; break;
-                case SwServiceType::FieldTypeTableCount           : nSubType = DS_TBL;  break;
-                case SwServiceType::FieldTypeGraphicObjectCount  : nSubType = DS_GRF;  break;
-                case SwServiceType::FieldTypeEmbeddedObjectCount : nSubType = DS_OLE;  break;
-                default: break;
+                sal_uInt16 nSubType = DS_PAGE;
+                switch (m_pImpl->m_nServiceId)
+                {
+                    case SwServiceType::FieldTypeParagraphCount       : nSubType = DS_PARA; break;
+                    case SwServiceType::FieldTypeWordCount            : nSubType = DS_WORD; break;
+                    case SwServiceType::FieldTypeCharacterCount       : nSubType = DS_CHAR; break;
+                    case SwServiceType::FieldTypeTableCount           : nSubType = DS_TBL;  break;
+                    case SwServiceType::FieldTypeGraphicObjectCount  : nSubType = DS_GRF;  break;
+                    case SwServiceType::FieldTypeEmbeddedObjectCount : nSubType = DS_OLE;  break;
+                    default: break;
+                }
+                SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DocStat);
+                xField.reset(new SwDocStatField(
+                        static_cast<SwDocStatFieldType*>(pFieldType),
+                        nSubType, m_pImpl->m_pProps->nUSHORT2));
             }
-            SwFieldType* pFieldType = pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::DocStat);
-            xField.reset(new SwDocStatField(
-                    static_cast<SwDocStatFieldType*>(pFieldType),
-                    nSubType, m_pImpl->m_pProps->nUSHORT2));
-        }
-        break;
-        case SwServiceType::FieldTypeBibliography:
-        {
-            SwAuthorityFieldType const type(pDoc);
-            xField.reset(new SwAuthorityField(static_cast<SwAuthorityFieldType*>(
-                        pDoc->getIDocumentFieldsAccess().InsertFieldType(type)),
-                    OUString()));
-            if (m_pImpl->m_pProps->aPropSeq.hasElements())
+            break;
+            case SwServiceType::FieldTypeBibliography:
             {
-                uno::Any aVal;
-                aVal <<= m_pImpl->m_pProps->aPropSeq;
-                xField->PutValue( aVal, FIELD_PROP_PROP_SEQ );
+                SwAuthorityFieldType const type(pDoc);
+                xField.reset(new SwAuthorityField(static_cast<SwAuthorityFieldType*>(
+                            pDoc->getIDocumentFieldsAccess().InsertFieldType(type)),
+                        OUString()));
+                if (m_pImpl->m_pProps->aPropSeq.hasElements())
+                {
+                    uno::Any aVal;
+                    aVal <<= m_pImpl->m_pProps->aPropSeq;
+                    xField->PutValue( aVal, FIELD_PROP_PROP_SEQ );
+                }
+            }
+            break;
+            case SwServiceType::FieldTypeCombinedCharacters:
+                // create field
+                xField.reset(new SwCombinedCharField( static_cast<SwCombinedCharFieldType*>(
+                            pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::CombinedChars)),
+                            m_pImpl->m_pProps->sPar1));
+                break;
+            case SwServiceType::FieldTypeDropdown:
+            {
+                SwDropDownField *const pDDField = new SwDropDownField(
+                    static_cast<SwDropDownFieldType *>(
+                        pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Dropdown)));
+                xField.reset(pDDField);
+
+                pDDField->SetItems(m_pImpl->m_pProps->aStrings);
+                pDDField->SetSelectedItem(m_pImpl->m_pProps->sPar1);
+                pDDField->SetName(m_pImpl->m_pProps->sPar2);
+                pDDField->SetHelp(m_pImpl->m_pProps->sPar3);
+                pDDField->SetToolTip(m_pImpl->m_pProps->sPar4);
             }
-        }
-        break;
-        case SwServiceType::FieldTypeCombinedCharacters:
-            // create field
-            xField.reset(new SwCombinedCharField( static_cast<SwCombinedCharFieldType*>(
-                        pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::CombinedChars)),
-                        m_pImpl->m_pProps->sPar1));
             break;
-        case SwServiceType::FieldTypeDropdown:
-        {
-            SwDropDownField *const pDDField = new SwDropDownField(
-                static_cast<SwDropDownFieldType *>(
-                    pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Dropdown)));
-            xField.reset(pDDField);
-
-            pDDField->SetItems(m_pImpl->m_pProps->aStrings);
-            pDDField->SetSelectedItem(m_pImpl->m_pProps->sPar1);
-            pDDField->SetName(m_pImpl->m_pProps->sPar2);
-            pDDField->SetHelp(m_pImpl->m_pProps->sPar3);
-            pDDField->SetToolTip(m_pImpl->m_pProps->sPar4);
-        }
-        break;
 
-        case SwServiceType::FieldTypeTableFormula:
-        {
-            // create field
-            sal_uInt16 nType = nsSwGetSetExpType::GSE_FORMULA;
-            if (m_pImpl->m_pProps->bBool1)
+            case SwServiceType::FieldTypeTableFormula:
             {
-                nType |= nsSwExtendedSubType::SUB_CMD;
-                if (m_pImpl->m_pProps->bFormatIsDefault)
-                    m_pImpl->m_pProps->nFormat = -1;
+                // create field
+                sal_uInt16 nType = nsSwGetSetExpType::GSE_FORMULA;
+                if (m_pImpl->m_pProps->bBool1)
+                {
+                    nType |= nsSwExtendedSubType::SUB_CMD;
+                    if (m_pImpl->m_pProps->bFormatIsDefault)
+                        m_pImpl->m_pProps->nFormat = -1;
+                }
+                xField.reset(new SwTableField( static_cast<SwTableFieldType*>(
+                    pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Table)),
+                    m_pImpl->m_pProps->sPar2,
+                    nType,
+                    m_pImpl->m_pProps->nFormat));
+                static_cast<SwTableField*>(xField.get())->ChgExpStr(m_pImpl->m_pProps->sPar1);
             }
-            xField.reset(new SwTableField( static_cast<SwTableFieldType*>(
-                pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Table)),
-                m_pImpl->m_pProps->sPar2,
-                nType,
-                m_pImpl->m_pProps->nFormat));
-            static_cast<SwTableField*>(xField.get())->ChgExpStr(m_pImpl->m_pProps->sPar1);
+            break;
+            default: OSL_FAIL("What kind of type is that?");
         }
-        break;
-        default: OSL_FAIL("What kind of type is that?");
-    }
 
-    if (!xField)
-        throw uno::RuntimeException("no SwField created?");
+        if (!xField)
+            throw uno::RuntimeException("no SwField created?");
 
-    xField->SetAutomaticLanguage(!m_pImpl->m_pProps->bBool4);
-    SwFormatField aFormat(*xField);
+        xField->SetAutomaticLanguage(!m_pImpl->m_pProps->bBool4);
+        SwFormatField aFormat(*xField);
 
-    UnoActionContext aCont(pDoc);
-    if (aPam.HasMark() &&
-        m_pImpl->m_nServiceId != SwServiceType::FieldTypeAnnotation)
-    {
-        pDoc->getIDocumentContentOperations().DeleteAndJoin(aPam);
-    }
+        UnoActionContext aCont(pDoc);
+        if (aPam.HasMark() &&
+            m_pImpl->m_nServiceId != SwServiceType::FieldTypeAnnotation)
+        {
+            pDoc->getIDocumentContentOperations().DeleteAndJoin(aPam);
+        }
 
-    SwXTextCursor const*const pTextCursor(dynamic_cast<SwXTextCursor*>(pCursor));
-    const bool bForceExpandHints(
-        pTextCursor
-        && pTextCursor->IsAtEndOfMeta() );
-    const SetAttrMode nInsertFlags =
-        bForceExpandHints
-        ? SetAttrMode::FORCEHINTEXPAND
-        : SetAttrMode::DEFAULT;
-
-    if (*aPam.GetPoint() != *aPam.GetMark() &&
-        m_pImpl->m_nServiceId == SwServiceType::FieldTypeAnnotation)
-    {
-        // Make sure we always insert the field at the end
-        SwPaM aEnd(*aPam.End(), *aPam.End());
-        pDoc->getIDocumentContentOperations().InsertPoolItem(aEnd, aFormat, nInsertFlags);
-    }
-    else
-        pDoc->getIDocumentContentOperations().InsertPoolItem(aPam, aFormat, nInsertFlags);
+        SwXTextCursor const*const pTextCursor(dynamic_cast<SwXTextCursor*>(pCursor));
+        const bool bForceExpandHints(
+            pTextCursor
+            && pTextCursor->IsAtEndOfMeta() );
+        const SetAttrMode nInsertFlags =
+            bForceExpandHints
+            ? SetAttrMode::FORCEHINTEXPAND
+            : SetAttrMode::DEFAULT;
 
-    SwTextAttr* pTextAttr = aPam.GetNode().GetTextNode()->GetFieldTextAttrAt( aPam.GetPoint()->nContent.GetIndex()-1, true );
+        if (*aPam.GetPoint() != *aPam.GetMark() &&
+            m_pImpl->m_nServiceId == SwServiceType::FieldTypeAnnotation)
+        {
+            // Make sure we always insert the field at the end
+            SwPaM aEnd(*aPam.End(), *aPam.End());
+            pDoc->getIDocumentContentOperations().InsertPoolItem(aEnd, aFormat, nInsertFlags);
+        }
+        else
+            pDoc->getIDocumentContentOperations().InsertPoolItem(aPam, aFormat, nInsertFlags);
 
-    // What about updating the fields? (see fldmgr.cxx)
-    if (!pTextAttr)
-        throw uno::RuntimeException("no SwTextAttr inserted?");  // could theoretically happen, if paragraph is full
+        SwTextAttr* pTextAttr = aPam.GetNode().GetTextNode()->GetFieldTextAttrAt( aPam.GetPoint()->nContent.GetIndex()-1, true );
 
-    const SwFormatField& rField = pTextAttr->GetFormatField();
-    m_pImpl->SetFormatField(const_cast<SwFormatField*>(&rField), pDoc);
+        // What about updating the fields? (see fldmgr.cxx)
+        if (!pTextAttr)
+            throw uno::RuntimeException("no SwTextAttr inserted?");  // could theoretically happen, if paragraph is full
 
-    if ( pTextAttr->Which() == RES_TXTATR_ANNOTATION
-         && *aPam.GetPoint() != *aPam.GetMark() )
-    {
-        // create annotation mark
-        const SwPostItField* pPostItField = dynamic_cast< const SwPostItField* >(pTextAttr->GetFormatField().GetField());
-        OSL_ENSURE( pPostItField != nullptr, "<SwXTextField::attachToRange(..)> - annotation field missing!" );
-        if ( pPostItField != nullptr )
+        const SwFormatField& rField = pTextAttr->GetFormatField();
+        m_pImpl->SetFormatField(const_cast<SwFormatField*>(&rField), pDoc);
+
+        if ( pTextAttr->Which() == RES_TXTATR_ANNOTATION
+             && *aPam.GetPoint() != *aPam.GetMark() )
         {
-            IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
-            pMarksAccess->makeAnnotationMark( aPam, pPostItField->GetName() );
+            // create annotation mark
+            const SwPostItField* pPostItField = dynamic_cast< const SwPostItField* >(pTextAttr->GetFormatField().GetField());
+            OSL_ENSURE( pPostItField != nullptr, "<SwXTextField::attachToRange(..)> - annotation field missing!" );
+            if ( pPostItField != nullptr )
+            {
+                IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
+                pMarksAccess->makeAnnotationMark( aPam, pPostItField->GetName() );
+            }
         }
-    }
 
-    xField.reset();
-
-    assert(m_pImpl->GetFormatField());
-    m_pImpl->m_pDoc = pDoc;
-    m_pImpl->GetFormatField()->SetXTextField(this);
-    m_pImpl->m_wThis = *this;
-    m_pImpl->m_bIsDescriptor = false;
-    m_pImpl->ClearFieldType();
-    m_pImpl->m_pProps.reset();
-    if (m_pImpl->m_bCallUpdate)
-        update();
+        xField.reset();
+
+        assert(m_pImpl->GetFormatField());
+        m_pImpl->m_pDoc = pDoc;
+        m_pImpl->GetFormatField()->SetXTextField(this);
+        m_pImpl->m_wThis = *this;
+        m_pImpl->m_bIsDescriptor = false;
+        m_pImpl->ClearFieldType();
+        m_pImpl->m_pProps.reset();
+        if (m_pImpl->m_bCallUpdate)
+            update();
     }
     else if ( !m_pImpl->IsDescriptor()
               && m_pImpl->m_pDoc != nullptr


More information about the Libreoffice-commits mailing list