[Libreoffice-commits] core.git: Branch 'private/jmux/fix-input-fields' - 60 commits - bean/com bean/qa bridges/test canvas/Library_oglcanvas.mk canvas/Module_canvas.mk canvas/opengl canvas/Package_opengl.mk canvas/source chart2/qa cli_ure/qa cli_ure/source configure.ac connectivity/com connectivity/qa cppcanvas/CppunitTest_cppcanvas_emfplus.mk cppuhelper/source dbaccess/qa dbaccess/source desktop/test extensions/qa extensions/test external/nss filter/source forms/qa framework/qa helpcontent2 include/comphelper include/cppuhelper include/osl include/vcl javaunohelper/com javaunohelper/test jurt/com jurt/test linguistic/qa nlpsolver/ThirdParty odk/docs odk/examples odk/Package_odk_headers.mk oox/source qadevOOo/runner qadevOOo/tests reportbuilder/java reportdesign/qa ridljar/com sal/osl sc/inc sc/qa scripting/java scripting/workben sc/source sd/source sfx2/source shell/inc smoketest/com smoketest/org solenv/gbuild stoc/test svx/source swext/mediawiki sw/qa sw/source testtools/com testtools/qa toolk it/test ucb/qa unotest/source unotools/qa vcl/source wizards/com writerfilter/inc writerfilter/source xmerge/source xmlsecurity/test_docs

Jan-Marek Glogowski glogow at fbihome.de
Fri Aug 8 12:12:56 PDT 2014


Rebased ref, commits from common ancestor:
commit 656fcbf8c72839a76d184b9f5e0b661360090942
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date:   Fri Aug 8 11:21:14 2014 +0200

    Fix input field tab handling
    
    When searching for the current field in the field list to find the
    previous or next one, we check the field start and compare it with
    the cursor position.
    But with the new input fields, the cursor can actually be anywhere
    in the field, so we actually have to search for the start position
    of the input field at the cursor position.
    
    Change-Id: I26526524eccfdbea41c6bf69a460fa64248f50ca

diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index 7d0dfdc..50c7f7a 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -670,6 +670,8 @@ bool SwCrsrShell::MoveFldType(
 
         SwTxtFld * pTxtFld = pTNd->GetFldTxtAttrAt( rPos.nContent.GetIndex(), true );
         const bool bDelFld = ( pTxtFld == NULL );
+        sal_Int32 nContentOffset = -1;
+
         if( bDelFld )
         {
             // create dummy for the search
@@ -680,23 +682,47 @@ bool SwCrsrShell::MoveFldType(
                         mpDoc->IsClipBoard() );
             pTxtFld->ChgTxtNode( pTNd );
         }
+        else
+        {
+            // the cursor might be anywhere inside the input field,
+            // but we will be searching for the field start
+            if (pTxtFld->Which() == RES_TXTATR_INPUTFIELD
+                    && rPos.nContent.GetIndex() != pTxtFld->GetStart())
+                nContentOffset = pTxtFld->GetStart();
+        }
+
+        _SetGetExpFld *pSrch = NULL;
+        SwIndex *pIndex = NULL;
+        if( -1 == nContentOffset )
+        {
+            pSrch = new _SetGetExpFld( rPos.nNode, pTxtFld, &rPos.nContent );
+        }
+        else
+        {
+            pIndex = new SwIndex( rPos.nNode.GetNode().GetCntntNode(), nContentOffset );
+            pSrch = new _SetGetExpFld( rPos.nNode, pTxtFld, pIndex );
+        }
 
-        _SetGetExpFld aSrch( rPos.nNode, pTxtFld, &rPos.nContent );
         if( rPos.nNode.GetIndex() < mpDoc->GetNodes().GetEndOfExtras().GetIndex() )
         {
             // also at collection use only the first frame
             Point aPt;
-            aSrch.SetBodyPos( *pTNd->getLayoutFrm( GetLayout(), &aPt, &rPos, false ) );
+            pSrch->SetBodyPos( *pTNd->getLayoutFrm( GetLayout(), &aPt, &rPos, false ) );
         }
 
-        it = aSrtLst.lower_bound( &aSrch );
+        it = aSrtLst.lower_bound( pSrch );
+
+        bool isSrch = (**it == *pSrch);
+        delete pIndex;
+        delete pSrch;
+
         if( bDelFld )
         {
             delete (SwFmtFld*)&pTxtFld->GetAttr();
             delete pTxtFld;
         }
 
-        if( it != aSrtLst.end() && **it == aSrch ) // found
+        if( it != aSrtLst.end() && isSrch ) // found
         {
             if( bNext )
             {
commit 567d9f6158c75681d7cea38e19fa512db61e3db3
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date:   Thu Aug 7 17:35:14 2014 +0200

    Change inline-edit mouse input handling
    
    This changes the mouse click handler for input fields to the
    following logic:
    
    * If the cursor isn't already in the input field:
      * On mouse over displays the POINTER_REFHAND
      * A left click selects the whole text of the field and therefore
        moves the cursor to the end of the field
      * Same for the right click. Additionally it opens the popup menu
    
    * If the cursor is already in the input field:
      * As for normal text, the left click removes the selection and
        moves the cursor to the click location.
      * Right click keeps any selection and opens the popup
    
    In contrast to normal text editing, a double click still opens
    "Edit fields" dialog, instead of the word selection.
    
    Change-Id: Ie7a50b34fe625358426d18eaec2e833f36702528

diff --git a/helpcontent2 b/helpcontent2
index 577577f..400d593 160000
--- a/helpcontent2
+++ b/helpcontent2
@@ -1 +1 @@
-Subproject commit 577577fd7006327a85f420360c769ca70e96b50c
+Subproject commit 400d593bd7f28ed51f0f3e0d0c9a381436e1ca27
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 347f788..ab47d71 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -134,6 +134,8 @@
 #include <docstat.hxx>
 #include <wordcountdialog.hxx>
 #include <swwait.hxx>
+#include <txtfld.hxx>
+#include <fmtfld.hxx>
 
 #include <IMark.hxx>
 #include <doc.hxx>
@@ -548,19 +550,33 @@ void SwEditWin::UpdatePointer(const Point &rLPt, sal_uInt16 nModifier )
             if (bCntAtPos || rSh.GetContentAtPos(rLPt, aUrlPos))
             {
                 SwContentAtPos aSwContentAtPos(
-                    SwContentAtPos::SW_CLICKFIELD|
-                    SwContentAtPos::SW_INETATTR|
+                    SwContentAtPos::SW_FIELD |
+                    SwContentAtPos::SW_CLICKFIELD |
+                    SwContentAtPos::SW_INETATTR |
                     SwContentAtPos::SW_FTN |
                     SwContentAtPos::SW_SMARTTAG );
                 if( rSh.GetContentAtPos( rLPt, aSwContentAtPos) )
                 {
-                    const bool bClickToFollow = SwContentAtPos::SW_INETATTR == aSwContentAtPos.eCntntAtPos ||
-                                                SwContentAtPos::SW_SMARTTAG == aSwContentAtPos.eCntntAtPos;
-
-                     if( !bClickToFollow ||
-                         (SwContentAtPos::SW_INETATTR == aSwContentAtPos.eCntntAtPos && bExecHyperlinks) ||
-                         (SwContentAtPos::SW_SMARTTAG == aSwContentAtPos.eCntntAtPos && bExecSmarttags) )
-                        eStyle = POINTER_REFHAND;
+                    // Is edit inline input field
+                    if (SwContentAtPos::SW_FIELD == aSwContentAtPos.eCntntAtPos)
+                    {
+                        if ( aSwContentAtPos.pFndTxtAttr != NULL
+                            && aSwContentAtPos.pFndTxtAttr->Which() == RES_TXTATR_INPUTFIELD)
+                        {
+                            const SwField *pCrsrField = rSh.CrsrInsideInputFld() ? rSh.GetCurFld( true ) : NULL;
+                            if (!(pCrsrField && pCrsrField == aSwContentAtPos.pFndTxtAttr->GetFmtFld().GetField()))
+                                eStyle = POINTER_REFHAND;
+                        }
+                    }
+                    else
+                    {
+                        const bool bClickToFollow = SwContentAtPos::SW_INETATTR == aSwContentAtPos.eCntntAtPos ||
+                                                    SwContentAtPos::SW_SMARTTAG == aSwContentAtPos.eCntntAtPos;
+                        if( !bClickToFollow ||
+                            (SwContentAtPos::SW_INETATTR == aSwContentAtPos.eCntntAtPos && bExecHyperlinks) ||
+                            (SwContentAtPos::SW_SMARTTAG == aSwContentAtPos.eCntntAtPos && bExecSmarttags) )
+                            eStyle = POINTER_REFHAND;
+                    }
                 }
             }
         }
@@ -2766,9 +2782,41 @@ void touch_lo_selection_end_move_impl(const void *documentHandle,
 
 #endif
 
+void SwEditWin::MoveCursor( SwWrtShell &rSh, const Point aDocPos,
+                            const bool bOnlyText, bool bLockView )
+{
+    const bool bTmpNoInterrupt = bNoInterrupt;
+    bNoInterrupt = false;
+
+    int nTmpSetCrsr = 0;
+
+    if( !rSh.IsViewLocked() && bLockView )
+        rSh.LockView( true );
+    else
+        bLockView = false;
+
+    {
+        // only temporary generate move context because otherwise
+        // the query to the content form doesn't work!!!
+        SwMvContext aMvContext( &rSh );
+        nTmpSetCrsr = rSh.SetCursor(&aDocPos, bOnlyText);
+        bValidCrsrPos = !(CRSR_POSCHG & nTmpSetCrsr);
+    }
+
+    // notify the edit window that from now on we do not use the input language
+    if ( !(CRSR_POSOLD & nTmpSetCrsr) )
+        SetUseInputLanguage( false );
+
+    if( bLockView )
+        rSh.LockView( false );
+
+    bNoInterrupt = bTmpNoInterrupt;
+}
+
 void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
 {
     SwWrtShell &rSh = m_rView.GetWrtShell();
+    const SwField *pCrsrFld = rSh.CrsrInsideInputFld() ? rSh.GetCurFld( true ) : NULL;
 
     // We have to check if a context menu is shown and we have an UI
     // active inplace client. In that case we have to ignore the mouse
@@ -3595,6 +3643,7 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
                 }
 
                 SwContentAtPos aFieldAtPos(SwContentAtPos::SW_FIELD);
+                bool bEditableFieldClicked = false;
 
                 // Are we clicking on a field?
                 if (rSh.GetContentAtPos(aDocPos, aFieldAtPos))
@@ -3620,6 +3669,10 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
                         // the cursor
                         break;
                     }
+                    else
+                    {
+                        bEditableFieldClicked = true;
+                    }
                 }
 
                 bool bOverSelect = rSh.ChgCurrPam( aDocPos ), bOverURLGrf = false;
@@ -3628,32 +3681,8 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
 
                 if ( !bOverSelect )
                 {
-                    const bool bTmpNoInterrupt = bNoInterrupt;
-                    bNoInterrupt = false;
-
-                    if( !rSh.IsViewLocked() && bLockView )
-                        rSh.LockView( true );
-                    else
-                        bLockView = false;
-
-                    int nTmpSetCrsr = 0;
-
-                    {   // only temporary generate Move-Kontext because otherwise
-                        // the query to the content form doesn't work!!!
-                        SwMvContext aMvContext( &rSh );
-                        nTmpSetCrsr = rSh.SetCursor(&aDocPos, bOnlyText);
-                        bValidCrsrPos = !(CRSR_POSCHG & nTmpSetCrsr);
-                        bCallBase = false;
-                    }
-
-                    // notify the edit window that from now on we do not use the input language
-                    if ( !(CRSR_POSOLD & nTmpSetCrsr) )
-                        SetUseInputLanguage( false );
-
-                    if( bLockView )
-                        rSh.LockView( false );
-
-                    bNoInterrupt = bTmpNoInterrupt;
+                    MoveCursor( rSh, aDocPos, bOnlyText, bLockView );
+                    bCallBase = false;
                 }
                 if ( !bOverURLGrf && !bOnlyText )
                 {
@@ -3671,6 +3700,15 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
                         bCallBase = false;
                     }
                 }
+                if ( !bOverSelect && bEditableFieldClicked && (!pCrsrFld ||
+                     pCrsrFld != aFieldAtPos.pFndTxtAttr->GetFmtFld().GetField()))
+                {
+                    // select content of Input Field, but exclude CH_TXT_ATR_INPUTFIELDSTART
+                    // and CH_TXT_ATR_INPUTFIELDEND
+                    rSh.SttSelect();
+                    rSh.SelectTxt( aFieldAtPos.pFndTxtAttr->GetStart() + 1,
+                                 *(aFieldAtPos.pFndTxtAttr->End()) - 1 );
+                }
                 // don't reset here any longer so that, in case through MouseMove
                 // with pressed Ctrl key a multiple-selection should happen,
                 // the previous selection is not released in Drag.
@@ -3678,6 +3716,31 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
             }
         }
     }
+    else if ( MOUSE_RIGHT == rMEvt.GetButtons() && !rMEvt.GetModifier()
+        && static_cast< sal_uInt8 >(rMEvt.GetClicks() % 4) == 1
+        && !rSh.ChgCurrPam( aDocPos ) )
+    {
+        SwContentAtPos aFieldAtPos(SwContentAtPos::SW_FIELD);
+
+        // Are we clicking on a field?
+        if (bValidCrsrPos
+            && rSh.GetContentAtPos(aDocPos, aFieldAtPos)
+            && aFieldAtPos.pFndTxtAttr != NULL
+            && aFieldAtPos.pFndTxtAttr->Which() == RES_TXTATR_INPUTFIELD
+            && (!pCrsrFld || pCrsrFld != aFieldAtPos.pFndTxtAttr->GetFmtFld().GetField()))
+        {
+            // Move the cursor
+            MoveCursor( rSh, aDocPos, rSh.IsObjSelectable( aDocPos ), m_bWasShdwCrsr );
+            bCallBase = false;
+
+            // select content of Input Field, but exclude CH_TXT_ATR_INPUTFIELDSTART
+            // and CH_TXT_ATR_INPUTFIELDEND
+            rSh.SttSelect();
+            rSh.SelectTxt( aFieldAtPos.pFndTxtAttr->GetStart() + 1,
+                         *(aFieldAtPos.pFndTxtAttr->End()) - 1 );
+        }
+    }
+
     if (bCallBase)
         Window::MouseButtonDown(rMEvt);
 }
@@ -4518,20 +4581,27 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt)
                                 if ( aCntntAtPos.pFndTxtAttr != NULL
                                      && aCntntAtPos.pFndTxtAttr->Which() == RES_TXTATR_INPUTFIELD )
                                 {
-                                    // select content of Input Field, but exclude CH_TXT_ATR_INPUTFIELDSTART
-                                    // and CH_TXT_ATR_INPUTFIELDEND
-                                    rSh.SttSelect();
-                                    rSh.SelectTxt( aCntntAtPos.pFndTxtAttr->GetStart() + 1,
-                                                   *(aCntntAtPos.pFndTxtAttr->End()) - 1 );
+                                    if (!rSh.IsInSelect())
+                                    {
+                                        // create only temporary move context because otherwise
+                                        // the query to the content form doesn't work!!!
+                                        SwMvContext aMvContext( &rSh );
+                                        const Point aDocPos( PixelToLogic( m_aStartPos ) );
+                                        bValidCrsrPos = !(CRSR_POSCHG & rSh.SetCursor(&aDocPos, false));
+                                    }
+                                    else
+                                    {
+                                        bValidCrsrPos = true;
+                                    }
                                 }
                                 else
                                 {
                                     rSh.ClickToField( *aCntntAtPos.aFnd.pFld );
+                                    // a bit of a mystery what this is good for?
+                                    // in this case we assume it's valid since we
+                                    // just selected a field
+                                    bValidCrsrPos = true;
                                 }
-                                // a bit of a mystery what this is good for?
-                                // in this case we assume it's valid since we
-                                // just selected a field
-                                bValidCrsrPos = true;
                                 if (bAddMode)
                                 {
                                     rSh.LeaveAddMode();
diff --git a/sw/source/uibase/inc/edtwin.hxx b/sw/source/uibase/inc/edtwin.hxx
index bfe89ad..ae65ed7 100644
--- a/sw/source/uibase/inc/edtwin.hxx
+++ b/sw/source/uibase/inc/edtwin.hxx
@@ -180,6 +180,9 @@ friend void     PageNumNotify(  SwViewShell* pVwSh,
 
     using OutputDevice::GetTextColor;
 
+    void            MoveCursor( SwWrtShell &rSh, const Point aDocPos,
+                                const bool bOnlyText, bool bLockView );
+
 protected:
 
     virtual void    DataChanged( const DataChangedEvent& ) SAL_OVERRIDE;
commit 1638d5db018eb8837a5caf83e60388690e728b07
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date:   Thu Aug 7 15:18:19 2014 +0200

    fdo#76565 Allow pasting into input fields
    
    Change-Id: If996284aeea4b430cceaaf264035aa9e4ec0f2f0

diff --git a/sw/source/uibase/shells/basesh.cxx b/sw/source/uibase/shells/basesh.cxx
index 05d2a75..49869f4 100644
--- a/sw/source/uibase/shells/basesh.cxx
+++ b/sw/source/uibase/shells/basesh.cxx
@@ -268,8 +268,7 @@ void SwBaseShell::ExecClpbrd(SfxRequest &rReq)
                 TransferableDataHelper aDataHelper(
                     TransferableDataHelper::CreateFromSystemClipboard( &rSh.GetView().GetEditWin() ) );
                 if( aDataHelper.GetXTransferable().is()
-                    && SwTransferable::IsPaste( rSh, aDataHelper )
-                    && !rSh.CrsrInsideInputFld() )
+                    && SwTransferable::IsPaste( rSh, aDataHelper ) )
                 {
                     // Temporary variables, because the shell could already be
                     // destroyed after the paste.
@@ -417,8 +416,7 @@ void SwBaseShell::StateClpbrd(SfxItemSet &rSet)
             break;
 
         case SID_PASTE:
-            if( !GetView().IsPasteAllowed()
-                || rSh.CrsrInsideInputFld() )
+            if( !GetView().IsPasteAllowed() )
             {
                 rSet.DisableItem( nWhich );
             }
commit cabe6960b18f8185caf206faf4af47256dff0000
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date:   Thu Aug 7 14:49:36 2014 +0200

    fdo#81750 MM: correctly convert inline-edit fields
    
    The new inline-editable input fields contain real content in the
    node, therefore a single SwPaM::Move isn't sufficient to select
    the field or move after the field.
    For the input fields we can directly go to the end of the field.
    
    Change-Id: Ic1bce415ce45e49456121b6db003ded0733e195c

diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx
index c6d3fcd..f476836 100644
--- a/sw/source/core/doc/doc.cxx
+++ b/sw/source/core/doc/doc.cxx
@@ -119,6 +119,7 @@
 
 #include <wdocsh.hxx>
 #include <prtopt.hxx>
+#include <wrtsh.hxx>
 
 #include <vector>
 #include <map>
@@ -1701,21 +1702,47 @@ bool SwDoc::ConvertFieldsToText()
                         nWhich != RES_REFPAGESETFLD))
                 {
                     OUString sText = pField->ExpandField(true);
-                    //database fields should not convert their command into text
+
+                    // database fields should not convert their command into text
                     if( RES_DBFLD == pCurType->Which() && !static_cast<const SwDBField*>(pField)->IsInitialized())
                         sText = "";
 
-                    //now remove the field and insert the string
-                    SwPaM aPam1(*pTxtFld->GetpTxtNode(), pTxtFld->GetStart());
-                    aPam1.Move();
-                    //insert first to keep the field's attributes
+                    SwPaM aInsertPam(*pTxtFld->GetpTxtNode(), pTxtFld->GetStart());
+                    aInsertPam.SetMark();
+
+                    // go to the end of the field
+                    const SwTxtFld *pTxtField = GetTxtFldAtPos( *aInsertPam.End() );
+                    if (pTxtField && pTxtField->Which() == RES_TXTATR_INPUTFIELD)
+                    {
+                        SwPosition &rEndPos = *aInsertPam.GetPoint();
+                        rEndPos.nContent = GetDocShell()->GetWrtShell()->EndOfInputFldAtPos( *aInsertPam.End() );
+                    }
+                    else
+                    {
+                        aInsertPam.Move();
+                    }
+
+                    // first insert the text after field to keep the field's attributes,
+                    // then delete the field
                     if (!sText.isEmpty())
-                        getIDocumentContentOperations().InsertString( aPam1, sText );
-                    SwPaM aPam2(*pTxtFld->GetpTxtNode(), pTxtFld->GetStart());
-                    aPam2.SetMark();
-                    aPam2.Move();
-                    getIDocumentContentOperations().DeleteAndJoin(aPam2);//remove the field
-                    bRet=true;
+                    {
+                        // to keep the position after insert
+                        SwPaM aDelPam( *aInsertPam.GetMark(), *aInsertPam.GetPoint() );
+                        aDelPam.Move( fnMoveBackward );
+                        aInsertPam.DeleteMark();
+
+                        getIDocumentContentOperations().InsertString( aInsertPam, sText );
+
+                        aDelPam.Move();
+                        // finally remove the field
+                        getIDocumentContentOperations().DeleteAndJoin( aDelPam );
+                    }
+                    else
+                    {
+                        getIDocumentContentOperations().DeleteAndJoin( aInsertPam );
+                    }
+
+                    bRet = true;
                 }
             }
             ++aBegin;
commit 4d3834ab6635eaa0badbaacf8e39e54a9d48bf4d
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date:   Wed Aug 6 17:44:56 2014 +0200

    Input fields are always editable...
    
    if the document isn't read-only. So backspace should always work in
    input fields.
    
    Regression from 961315f0838197e71e9bd49169afe673466e5eb8.
    
    Change-Id: I06648ab075b198ee7914e7ae60bef87e7ff94f0a

diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 6887cd0..347f788 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -1892,8 +1892,7 @@ KEYINPUT_CHECKTABLE_INSDEL:
                 break;
                 case KEY_BACKSPACE:
                 case KEY_BACKSPACE | KEY_SHIFT:
-                    if ( !rSh.HasReadonlySel()
-                         && !rSh.CrsrInsideInputFld() )
+                    if ( !rSh.HasReadonlySel() )
                     {
                         bool bDone = false;
                         // try to add comment for code snip:
commit 4d635dcae4d7275d04a17a0efc11b0531d5d0a82
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Aug 8 18:46:56 2014 +0200

    vcl: don't throw misleading exceptions on every failed access
    
    During the build different instances of gengal will create a temp file
    called "instdir/share/config/cdefghij.klm", and enumerate the
    directories in instdir/share/config; it may happen that the enumeration
    sees the temp file, and it is removed before fetchFileStatus is called,
    resulting in E_NOENT rc and the exception.
    
    The FileIsValidIconTheme() should be able to handle most errors here.
    
    (regression from 60954a8a96a66ff11e06b850838f3d16e8e1625f)
    
    Change-Id: Id9361a37b8569d01509efcc8cda2bc17e9eabcd8

diff --git a/vcl/source/app/IconThemeScanner.cxx b/vcl/source/app/IconThemeScanner.cxx
index 4599260..8cb58fe 100644
--- a/vcl/source/app/IconThemeScanner.cxx
+++ b/vcl/source/app/IconThemeScanner.cxx
@@ -44,7 +44,10 @@ OUString convert_to_absolute_path(const OUString& path)
     osl::FileBase::RC rc = resolver.fetchFileStatus(path);
     if (rc != osl::FileBase::E_None) {
         SAL_WARN("vcl.app", "Could not resolve path '" << path << "' to search for icon themes.");
-        throw std::runtime_error("Provided a recursive symlink to a icon theme directory that could not be resolved.");
+        if (rc == osl::FileBase::E_MULTIHOP)
+        {
+            throw std::runtime_error("Provided a recursive symlink to a icon theme directory that could not be resolved.");
+        }
     }
     return resolver.m_aStatus.getFileURL();
 }
commit ea258e380eb87db2eb468ba5354df9f957b7660f
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Aug 8 18:17:43 2014 +0200

    DOCX export: handle date SDT on paragraphs
    
    Date SDT's are normally imported as form controls, while most other SDT
    types are just custom properties on regular text portions or paragraphs.
    
    However, given that form controls are not supported in headers/footers,
    in that case even date SDT's are just custom properties. So support such
    properties on paragraphs in the exporter to properly roundtrip date
    SDT's in headers/footers.
    
    Change-Id: I19eb73a3673e387a7b8780756ce7426a1851e796

diff --git a/sw/qa/extras/ooxmlexport/data/sdt-header.docx b/sw/qa/extras/ooxmlexport/data/sdt-header.docx
new file mode 100644
index 0000000..6a4bdfb2
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-header.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
index 4c44216..be347b5 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
@@ -600,6 +600,14 @@ DECLARE_OOXMLEXPORT_TEST(testfdo81946, "fdo81946.docx")
     assertXPath(pXmlDoc, "/w:hdr[1]/w:p[1]/w:sdt[1]/w:sdtContent[1]/w:r[2]/mc:AlternateContent[1]",0);
 }
 
+DECLARE_OOXMLEXPORT_TEST(testSdtHeader, "sdt-header.docx")
+{
+    // Problem was that w:sdt elements in headers were lost on import.
+    if (xmlDocPtr pXmlDoc = parseExport("word/header1.xml"))
+        // This was 0, w:sdt (and then w:date) was missing.
+        assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:date", 1);
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index a8bcc89..b0447cf 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -549,7 +549,7 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT
     m_pSerializer->endElementNS( XML_w, XML_p );
     // on export sdt blocks are never nested ATM
     if( !m_bAnchorLinkedToNode && !m_bStartedParaSdt )
-        WriteSdtBlock( m_nParagraphSdtPrToken, m_pParagraphSdtPrTokenChildren, m_pParagraphSdtPrDataBindingAttrs, m_aParagraphSdtPrAlias, /*bPara=*/true );
+        WriteSdtBlock( m_nParagraphSdtPrToken, m_pParagraphSdtPrTokenChildren, m_pParagraphSdtPrTokenAttributes, m_pParagraphSdtPrDataBindingAttrs, m_aParagraphSdtPrAlias, /*bPara=*/true );
     else
     {
         //These should be written out to the actual Node and not to the anchor.
@@ -591,6 +591,7 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT
 
 void DocxAttributeOutput::WriteSdtBlock( sal_Int32& nSdtPrToken,
                                          ::sax_fastparser::FastAttributeList*& pSdtPrTokenChildren,
+                                         ::sax_fastparser::FastAttributeList*& pSdtPrTokenAttributes,
                                          ::sax_fastparser::FastAttributeList*& pSdtPrDataBindingAttrs,
                                          OUString& rSdtPrAlias,
                                          bool bPara )
@@ -607,7 +608,14 @@ void DocxAttributeOutput::WriteSdtBlock( sal_Int32& nSdtPrToken,
 
         if( nSdtPrToken > 0 && pSdtPrTokenChildren )
         {
-            m_pSerializer->startElement( nSdtPrToken, FSEND );
+            if (!pSdtPrTokenAttributes)
+                m_pSerializer->startElement( nSdtPrToken, FSEND );
+            else
+            {
+                XFastAttributeListRef xAttrList(pSdtPrTokenAttributes);
+                m_pSerializer->startElement(nSdtPrToken, xAttrList);
+                pSdtPrTokenAttributes = 0;
+            }
 
             uno::Sequence<xml::FastAttribute> aChildren = pSdtPrTokenChildren->getFastAttributes();
             for( sal_Int32 i=0; i < aChildren.getLength(); ++i )
@@ -619,7 +627,16 @@ void DocxAttributeOutput::WriteSdtBlock( sal_Int32& nSdtPrToken,
             m_pSerializer->endElement( nSdtPrToken );
         }
         else if( (nSdtPrToken > 0) && nSdtPrToken != FSNS( XML_w, XML_id ) && !(m_bRunTextIsOn && m_rExport.SdrExporter().IsParagraphHasDrawing()))
-            m_pSerializer->singleElement( nSdtPrToken, FSEND );
+        {
+            if (!pSdtPrTokenAttributes)
+                m_pSerializer->singleElement( nSdtPrToken, FSEND );
+            else
+            {
+                XFastAttributeListRef xAttrList(pSdtPrTokenAttributes);
+                m_pSerializer->singleElement(nSdtPrToken, xAttrList);
+                pSdtPrTokenAttributes = 0;
+            }
+        }
 
         if( nSdtPrToken == FSNS( XML_w, XML_id ) || ( bPara && m_bParagraphSdtHasId ) )
             //Word won't open a document with an empty id tag, we fill it with a random number
@@ -1136,7 +1153,10 @@ void DocxAttributeOutput::EndRun()
     // enclose in a sdt block, if necessary: if one is already started, then don't do it for now
     // (so on export sdt blocks are never nested ATM)
     if ( !m_bAnchorLinkedToNode && !m_bStartedCharSdt )
-        WriteSdtBlock( m_nRunSdtPrToken, m_pRunSdtPrTokenChildren, m_pRunSdtPrDataBindingAttrs, m_aRunSdtPrAlias, /*bPara=*/false );
+    {
+        ::sax_fastparser::FastAttributeList* pRunSdtPrTokenAttributes = 0;
+        WriteSdtBlock( m_nRunSdtPrToken, m_pRunSdtPrTokenChildren, pRunSdtPrTokenAttributes, m_pRunSdtPrDataBindingAttrs, m_aRunSdtPrAlias, /*bPara=*/false );
+    }
     else
     {
         //These should be written out to the actual Node and not to the anchor.
@@ -7854,8 +7874,30 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem)
                 }
                 else if (aPropertyValue.Name == "ooxml:CT_SdtPr_id")
                     m_bParagraphSdtHasId = true;
+                else if (aPropertyValue.Name == "ooxml:CT_SdtPr_date")
+                {
+                    m_nParagraphSdtPrToken = FSNS(XML_w, XML_date);
+                    uno::Sequence<beans::PropertyValue> aGrabBag = aPropertyValue.Value.get< uno::Sequence<beans::PropertyValue> >();
+                    for (sal_Int32 j=0; j < aGrabBag.getLength(); ++j)
+                    {
+                        OString sValue = OUStringToOString(aGrabBag[j].Value.get<OUString>(), RTL_TEXTENCODING_UTF8);
+
+                        if (aGrabBag[j].Name == "ooxml:CT_SdtDate_fullDate")
+                            AddToAttrList(m_pParagraphSdtPrTokenAttributes, FSNS(XML_w, XML_fullDate), sValue.getStr());
+                        else if (aGrabBag[j].Name == "ooxml:CT_SdtDate_dateFormat")
+                            AddToAttrList(m_pParagraphSdtPrTokenChildren, FSNS(XML_w, XML_dateFormat), sValue.getStr());
+                        else if (aGrabBag[j].Name == "ooxml:CT_SdtDate_lid")
+                            AddToAttrList(m_pParagraphSdtPrTokenChildren, FSNS(XML_w, XML_lid), sValue.getStr());
+                        else if (aGrabBag[j].Name == "ooxml:CT_SdtDate_storeMappedDataAs")
+                            AddToAttrList(m_pParagraphSdtPrTokenChildren, FSNS(XML_w, XML_storeMappedDataAs), sValue.getStr());
+                        else if (aGrabBag[j].Name == "ooxml:CT_SdtDate_calendar")
+                            AddToAttrList(m_pParagraphSdtPrTokenChildren, FSNS(XML_w, XML_calendar), sValue.getStr());
+                        else
+                            SAL_WARN("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled SdtPr / ooxml:CT_SdtPr_date grab bag property " << aGrabBag[j].Name);
+                    }
+                }
                 else
-                    SAL_INFO("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled SdtPr grab bag property " << aPropertyValue.Name);
+                    SAL_WARN("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled SdtPr grab bag property " << aPropertyValue.Name);
             }
         }
         else if (i->first == "ParaCnfStyle")
@@ -8122,6 +8164,7 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, FSHelperPtr pSeri
       m_setFootnote(false)
     , m_nParagraphSdtPrToken(0)
     , m_pParagraphSdtPrTokenChildren(NULL)
+    , m_pParagraphSdtPrTokenAttributes(NULL)
     , m_pParagraphSdtPrDataBindingAttrs(NULL)
     , m_nRunSdtPrToken(0)
     , m_pRunSdtPrTokenChildren(NULL)
@@ -8146,6 +8189,7 @@ DocxAttributeOutput::~DocxAttributeOutput()
 
     delete m_pTableWrt, m_pTableWrt = NULL;
     delete m_pParagraphSdtPrTokenChildren; m_pParagraphSdtPrTokenChildren = NULL;
+    delete m_pParagraphSdtPrTokenAttributes; m_pParagraphSdtPrTokenAttributes = NULL;
     delete m_pParagraphSdtPrDataBindingAttrs; m_pParagraphSdtPrDataBindingAttrs = NULL;
     delete m_pRunSdtPrTokenChildren; m_pRunSdtPrTokenChildren = NULL;
     delete m_pRunSdtPrDataBindingAttrs; m_pRunSdtPrDataBindingAttrs = NULL;
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 6ba3b48..90a31d8 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -700,6 +700,7 @@ private:
 
     void WriteSdtBlock(sal_Int32& nSdtPrToken,
                        ::sax_fastparser::FastAttributeList*& pSdtPrTokenChildren,
+                       ::sax_fastparser::FastAttributeList*& pSdtPrTokenAttributes,
                        ::sax_fastparser::FastAttributeList*& pSdtPrDataBindingAttrs,
                        OUString& rSdtPrAlias,
                        bool bPara);
@@ -900,6 +901,7 @@ private:
     /// members to control the existence of grabbagged SDT properties in the paragraph
     sal_Int32 m_nParagraphSdtPrToken;
     ::sax_fastparser::FastAttributeList *m_pParagraphSdtPrTokenChildren;
+    ::sax_fastparser::FastAttributeList *m_pParagraphSdtPrTokenAttributes;
     ::sax_fastparser::FastAttributeList *m_pParagraphSdtPrDataBindingAttrs;
     /// members to control the existence of grabbagged SDT properties in the text run
     sal_Int32 m_nRunSdtPrToken;
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 0da5178..bd2c226 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2358,7 +2358,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext )
             resourcemodel::resolveSprmProps(*this, rSprm);
         else
         {
-            OUString sName = "ooxml::CT_SdtPr_date";
+            OUString sName = "ooxml:CT_SdtPr_date";
             enableInteropGrabBag(sName);
             resourcemodel::resolveSprmProps(*this, rSprm);
             m_pImpl->m_pSdtHelper->appendToInteropGrabBag(getInteropGrabBag());
commit 3f02b29b6573a637592f096c2d2659534b1683ab
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Aug 8 16:40:33 2014 +0200

    Unused optional elements
    
    The scripts parsing this file don't care if an element is optional or
    not, so why bother.
    
    Change-Id: I0860c9209347d6fab83e1faf2867db4de94216ac

diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 9083de0..c3600f5 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -87,11 +87,9 @@
         <empty/>
       </define>
       <define name="CT_ColorMapping">
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
         <attribute name="bg1">
           <ref name="ST_ColorSchemeIndex"/>
         </attribute>
@@ -143,11 +141,9 @@
         <element name="clrScheme">
           <ref name="CT_ColorScheme"/>
         </element>
-        <optional>
           <element name="clrMap">
             <ref name="CT_ColorMapping"/>
           </element>
-        </optional>
       </define>
       <define name="CT_ColorSchemeList">
         <zeroOrMore>
@@ -161,49 +157,33 @@
           <element name="themeElements">
             <ref name="CT_BaseStyles"/>
           </element>
-          <optional>
             <element name="objectDefaults">
               <ref name="CT_ObjectStyleDefaults"/>
             </element>
-          </optional>
-          <optional>
             <element name="extraClrSchemeLst">
               <ref name="CT_ColorSchemeList"/>
             </element>
-          </optional>
-          <optional>
             <element name="custClrLst">
               <ref name="CT_CustomColorList"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="name">
             <data type="string"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_BaseStylesOverride">
-        <optional>
           <element name="clrScheme">
             <ref name="CT_ColorScheme"/>
           </element>
-        </optional>
-        <optional>
           <element name="fontScheme">
             <ref name="CT_FontScheme"/>
           </element>
-        </optional>
-        <optional>
           <element name="fmtScheme">
             <ref name="CT_StyleMatrix"/>
           </element>
-        </optional>
       </define>
       <define name="CT_ClipboardStyleSheet">
         <element name="themeElements">
@@ -214,11 +194,9 @@
         </element>
       </define>
       <define name="CT_Hyperlink">
-        <optional>
           <attribute name="r:id">
             <text/>
           </attribute>
-        </optional>
       </define>
       <define name="theme">
         <element name="theme">
@@ -262,33 +240,23 @@
         <element name="spPr">
           <ref name="CT_ShapeProperties"/>
         </element>
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
       </define>
       <define name="CT_ObjectStyleDefaults">
-        <optional>
           <element name="spDef">
             <ref name="CT_DefaultShapeDefinition"/>
           </element>
-        </optional>
-        <optional>
           <element name="lnDef">
             <ref name="CT_DefaultShapeDefinition"/>
           </element>
-        </optional>
-        <optional>
           <element name="txDef">
             <ref name="CT_DefaultShapeDefinition"/>
           </element>
-        </optional>
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
       </define>
     </grammar>
   </namespace>
@@ -373,11 +341,9 @@
           </choice>
       </define>
       <define name="CT_LightRig">
-        <optional>
           <element name="rot">
             <ref name="CT_SphereCoords"/>
           </element>
-        </optional>
         <attribute name="rig">
           <ref name="ST_LightRigType"/>
         </attribute>
@@ -438,11 +404,9 @@
         <element name="lightRig">
           <ref name="CT_LightRig"/>
         </element>
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
       </define>
     </grammar>
   </namespace>
@@ -479,21 +443,15 @@
           </choice>
       </define>
       <define name="CT_Bevel">
-        <optional>
           <attribute name="w">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="h">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="prst">
             <ref name="ST_BevelPresetType"/>
           </attribute>
-        </optional>
       </define>
       <define name="ST_PresetMaterialType">
           <choice>
@@ -531,59 +489,39 @@
       </define>
       <define name="CT_Shape3D">
         <group>
-          <optional>
             <element name="bevelT">
               <ref name="CT_Bevel"/>
             </element>
-          </optional>
-          <optional>
             <element name="bevelB">
               <ref name="CT_Bevel"/>
             </element>
-          </optional>
-          <optional>
             <element name="extrusionClr">
               <ref name="CT_Color"/>
             </element>
-          </optional>
-          <optional>
             <element name="contourClr">
               <ref name="CT_Color"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="z">
             <ref name="ST_Coordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="extrusionH">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="contourW">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="prstMaterial">
             <ref name="ST_PresetMaterialType"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_FlatText">
-        <optional>
           <attribute name="z">
             <ref name="ST_Coordinate"/>
           </attribute>
-        </optional>
       </define>
       <define name="EG_Text3D">
         <choice>
@@ -762,24 +700,18 @@
         <empty/>
       </define>
       <define name="CT_Camera">
-        <optional>
           <element name="rot">
             <ref name="CT_SphereCoords"/>
           </element>
-        </optional>
         <attribute name="prst">
           <ref name="ST_PresetCameraType"/>
         </attribute>
-        <optional>
           <attribute name="fov">
             <ref name="ST_FOVAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="zoom">
             <ref name="ST_PositivePercentage"/>
           </attribute>
-        </optional>
       </define>
     </grammar>
     <resource name="ST_PresetCameraType" resource="List">
@@ -930,11 +862,9 @@
           <element name="folHlink">
             <ref name="CT_Color"/>
           </element>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
         <attribute name="name">
           <data type="string">
@@ -943,12 +873,10 @@
       </define>
       <define name="CT_CustomColor">
         <ref name="EG_ColorChoice"/>
-        <optional>
           <attribute name="name">
             <data type="string">
             </data>
           </attribute>
-        </optional>
       </define>
       <define name="CT_SupplementalFont">
         <attribute name="script">
@@ -983,24 +911,18 @@
             <ref name="CT_SupplementalFont"/>
           </element>
         </zeroOrMore>
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
       </define>
       <define name="CT_EffectStyleItem">
         <ref name="EG_EffectProperties"/>
-        <optional>
           <element name="scene3d">
             <ref name="CT_Scene3D"/>
           </element>
-        </optional>
-        <optional>
           <element name="sp3d">
             <ref name="CT_Shape3D"/>
           </element>
-        </optional>
       </define>
       <define name="CT_FontScheme">
         <group>
@@ -1010,11 +932,9 @@
           <element name="minorFont">
             <ref name="CT_FontCollection"/>
           </element>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
         <attribute name="name">
           <data type="string"/>
@@ -1059,11 +979,9 @@
             <ref name="CT_BackgroundFillStyleList"/>
           </element>
         </group>
-        <optional>
           <attribute name="name">
             <data type="string"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_BaseStyles">
         <element name="clrScheme">
@@ -1075,11 +993,9 @@
         <element name="fmtScheme">
           <ref name="CT_StyleMatrix"/>
         </element>
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
       </define>
     </grammar>
     <resource name="ST_StyleMatrixColumnIndex" resource="Integer"/>
@@ -1181,21 +1097,15 @@
         <attribute name="typeface">
           <ref name="ST_TextTypeface"/>
         </attribute>
-        <optional>
           <attribute name="panose">
             <ref name="ST_Panose"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="pitchFamily">
             <data type="byte"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="charset">
             <data type="byte"/>
           </attribute>
-        </optional>
       </define>
       <define name="ST_TextLanguageID">
         <data type="string"/>
@@ -1254,11 +1164,9 @@
           <element name="uLnTx">
             <ref name="CT_TextUnderlineLineFollowText"/>
           </element>
-          <optional>
             <element name="uLn">
               <ref name="CT_LineProperties"/>
             </element>
-          </optional>
         </choice>
       </define>
       <define name="EG_TextUnderlineFill">
@@ -1293,159 +1201,95 @@
       </define>
       <define name="CT_TextCharacterProperties">
         <group>
-          <optional>
             <element name="ln">
               <ref name="CT_LineProperties"/>
             </element>
-          </optional>
-          <optional>
             <ref name="EG_FillProperties"/>
-          </optional>
-          <optional>
             <ref name="EG_EffectProperties"/>
-          </optional>
-          <optional>
             <element name="highlight">
               <ref name="CT_Color"/>
             </element>
-          </optional>
-          <optional>
             <ref name="EG_TextUnderlineLine"/>
-          </optional>
-          <optional>
             <ref name="EG_TextUnderlineFill"/>
-          </optional>
-          <optional>
             <element name="latin">
               <ref name="CT_TextFont"/>
             </element>
-          </optional>
-          <optional>
             <element name="ea">
               <ref name="CT_TextFont"/>
             </element>
-          </optional>
-          <optional>
             <element name="cs">
               <ref name="CT_TextFont"/>
             </element>
-          </optional>
-          <optional>
             <element name="sym">
               <ref name="CT_TextFont"/>
             </element>
-          </optional>
-          <optional>
             <element name="hlinkClick">
               <ref name="CT_Hyperlink"/>
             </element>
-          </optional>
-          <optional>
             <element name="hlinkMouseOver">
               <ref name="CT_Hyperlink"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="kumimoji">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="lang">
             <ref name="ST_TextLanguageID"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="altLang">
             <ref name="ST_TextLanguageID"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sz">
             <ref name="ST_TextFontSize"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="b">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="i">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="u">
             <ref name="ST_TextUnderlineType"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="strike">
             <ref name="ST_TextStrikeType"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="kern">
             <ref name="ST_TextNonNegativePoint"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="cap">
             <ref name="ST_TextCapsType"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="spc">
             <ref name="ST_TextPoint"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="normalizeH">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="baseline">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noProof">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dirty">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="err">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="smtClean">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="smtId">
             <data type="unsignedInt"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="bmk">
             <data type="string"/>
           </attribute>
-        </optional>
       </define>
     </grammar>
     <resource name="ST_TextPoint" resource="Integer"/>
@@ -1506,23 +1350,17 @@
         <empty/>
       </define>
       <define name="CT_AlphaInverseEffect">
-        <optional>
           <ref name="EG_ColorChoice"/>
-        </optional>
       </define>
       <define name="CT_AlphaModulateFixedEffect">
-        <optional>
           <attribute name="amt">
             <ref name="ST_PositivePercentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_AlphaOutsetEffect">
-        <optional>
           <attribute name="rad">
             <ref name="ST_Coordinate"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_AlphaReplaceEffect">
         <attribute name="a">
@@ -1535,16 +1373,12 @@
         </attribute>
       </define>
       <define name="CT_BlurEffect">
-        <optional>
           <attribute name="rad">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="grow">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_ColorChangeEffect">
         <group>
@@ -1555,11 +1389,9 @@
             <ref name="CT_Color"/>
           </element>
         </group>
-        <optional>
           <attribute name="useA">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_ColorReplaceEffect">
         <ref name="EG_ColorChoice"/>
@@ -1571,109 +1403,73 @@
       </define>
       <define name="CT_GlowEffect">
         <ref name="EG_ColorChoice"/>
-        <optional>
           <attribute name="rad">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_GrayscaleEffect">
         <empty/>
       </define>
       <define name="CT_HSLEffect">
-        <optional>
           <attribute name="hue">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sat">
             <ref name="ST_FixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="lum">
             <ref name="ST_FixedPercentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_InnerShadowEffect">
         <ref name="EG_ColorChoice"/>
-        <optional>
           <attribute name="blurRad">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dist">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dir">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_LuminanceEffect">
-        <optional>
           <attribute name="bright">
             <ref name="ST_FixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="contrast">
             <ref name="ST_FixedPercentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_OuterShadowEffect">
         <ref name="EG_ColorChoice"/>
-        <optional>
           <attribute name="blurRad">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dist">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dir">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sx">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sy">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="kx">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="ky">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="algn">
             <ref name="ST_RectAlignment"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="rotWithShape">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="ST_PresetShadowVal">
           <choice>
@@ -1724,100 +1520,64 @@
         <attribute name="prst">
           <ref name="ST_PresetShadowVal"/>
         </attribute>
-        <optional>
           <attribute name="dist">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dir">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_ReflectionEffect">
-        <optional>
           <attribute name="blurRad">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="stA">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="stPos">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="endA">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="endPos">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dist">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dir">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="fadeDir">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sx">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sy">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="kx">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="ky">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="algn">
             <ref name="ST_RectAlignment"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="rotWithShape">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_RelativeOffsetEffect">
-        <optional>
           <attribute name="tx">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="ty">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_SoftEdgesEffect">
         <attribute name="rad">
@@ -1825,68 +1585,46 @@
         </attribute>
       </define>
       <define name="CT_TintEffect">
-        <optional>
           <attribute name="hue">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="amt">
             <ref name="ST_FixedPercentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_TransformEffect">
-        <optional>
           <attribute name="sx">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sy">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="kx">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="ky">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="tx">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="ty">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_NoFillProperties">
         <empty/>
       </define>
       <define name="CT_SolidColorFillProperties">
-        <optional>
           <ref name="EG_ColorChoice"/>
-        </optional>
       </define>
       <define name="CT_LinearShadeProperties">
-        <optional>
           <attribute name="ang">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="scaled">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="ST_PathShadeType">
           <choice>
@@ -1899,16 +1637,12 @@
           </choice>
       </define>
       <define name="CT_PathShadeProperties">
-        <optional>
           <element name="fillToRect">
             <ref name="CT_RelativeRect"/>
           </element>
-        </optional>
-        <optional>
           <attribute name="path">
             <ref name="ST_PathShadeType"/>
           </attribute>
-        </optional>
       </define>
       <define name="EG_ShadeProperties">
         <choice>
@@ -1947,69 +1681,45 @@
       </define>
       <define name="CT_GradientFillProperties">
         <group>
-          <optional>
             <element name="gsLst">
               <ref name="CT_GradientStopList"/>
             </element>
-          </optional>
-          <optional>
             <ref name="EG_ShadeProperties"/>
-          </optional>
-          <optional>
             <element name="tileRect">
               <ref name="CT_RelativeRect"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="flip">
             <ref name="ST_TileFlipMode"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="rotWithShape">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_TileInfoProperties">
-        <optional>
           <attribute name="tx">
             <ref name="ST_Coordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="ty">
             <ref name="ST_Coordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sx">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sy">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="flip">
             <ref name="ST_TileFlipMode"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="algn">
             <ref name="ST_RectAlignment"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_StretchInfoProperties">
-        <optional>
           <element name="fillRect">
             <ref name="CT_RelativeRect"/>
           </element>
-        </optional>
       </define>
       <define name="EG_FillModeProperties">
         <choice>
@@ -2092,45 +1802,31 @@
               </element>
             </choice>
           </zeroOrMore>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
         <ref name="AG_Blob"/>
-        <optional>
           <attribute name="cstate">
             <ref name="ST_BlipCompression"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_BlipFillProperties">
         <group>
-          <optional>
             <element name="blip">
               <ref name="CT_Blip"/>
             </element>
-          </optional>
-          <optional>
             <element name="srcRect">
               <ref name="CT_RelativeRect"/>
             </element>
-          </optional>
-          <optional>
             <ref name="EG_FillModeProperties"/>
-          </optional>
         </group>
-        <optional>
           <attribute name="dpi">
             <data type="unsignedInt"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="rotWithShape">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="ST_PresetPatternVal">
           <choice>
@@ -2246,22 +1942,16 @@
       </define>
       <define name="CT_PatternFillProperties">
         <group>
-          <optional>
             <element name="fgClr">
               <ref name="CT_Color"/>
             </element>
-          </optional>
-          <optional>
             <element name="bgClr">
               <ref name="CT_Color"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="prst">
             <ref name="ST_PresetPatternVal"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_GroupFillProperties">
         <empty/>
@@ -2425,16 +2115,12 @@
         <zeroOrMore>
           <ref name="EG_Effect"/>
         </zeroOrMore>
-        <optional>
           <attribute name="type">
             <ref name="ST_EffectContainerType"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="name">
             <data type="token"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_AlphaModulateEffect">
         <element name="cont">
@@ -2450,46 +2136,30 @@
         </attribute>
       </define>
       <define name="CT_EffectList">
-        <optional>
           <element name="blur">
             <ref name="CT_BlurEffect"/>
           </element>
-        </optional>
-        <optional>
           <element name="fillOverlay">
             <ref name="CT_FillOverlayEffect"/>
           </element>
-        </optional>
-        <optional>
           <element name="glow">
             <ref name="CT_GlowEffect"/>
           </element>
-        </optional>
-        <optional>
           <element name="innerShdw">
             <ref name="CT_InnerShadowEffect"/>
           </element>
-        </optional>
-        <optional>
           <element name="outerShdw">
             <ref name="CT_OuterShadowEffect"/>
           </element>
-        </optional>
-        <optional>
           <element name="prstShdw">
             <ref name="CT_PresetShadowEffect"/>
           </element>
-        </optional>
-        <optional>
           <element name="reflection">
             <ref name="CT_ReflectionEffect"/>
           </element>
-        </optional>
-        <optional>
           <element name="softEdge">
             <ref name="CT_SoftEdgesEffect"/>
           </element>
-        </optional>
       </define>
       <define name="EG_EffectProperties">
         <choice>
@@ -2741,21 +2411,15 @@
           </choice>
       </define>
       <define name="CT_LineEndProperties">
-        <optional>
           <attribute name="type">
             <ref name="ST_LineEndType"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="w">
             <ref name="ST_LineEndWidth"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="len">
             <ref name="ST_LineEndLength"/>
           </attribute>
-        </optional>
       </define>
       <define name="EG_LineFillProperties">
         <choice>
@@ -2780,11 +2444,9 @@
         <empty/>
       </define>
       <define name="CT_LineJoinMiterProperties">
-        <optional>
           <attribute name="lim">
             <ref name="ST_PositivePercentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="EG_LineJoinProperties">
         <choice>
@@ -2826,11 +2488,9 @@
           </choice>
       </define>
       <define name="CT_PresetLineDashProperties">
-        <optional>
           <attribute name="val">
             <ref name="ST_PresetLineDashVal"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_DashStop">
         <attribute name="d">
@@ -2894,51 +2554,31 @@
       </define>
       <define name="CT_LineProperties">
         <group>
-          <optional>
             <ref name="EG_LineFillProperties"/>
-          </optional>
-          <optional>
             <ref name="EG_LineDashProperties"/>
-          </optional>
-          <optional>
             <ref name="EG_LineJoinProperties"/>
-          </optional>
-          <optional>
             <element name="headEnd">
               <ref name="CT_LineEndProperties"/>
             </element>
-          </optional>
-          <optional>
             <element name="tailEnd">
               <ref name="CT_LineEndProperties"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="w">
             <ref name="ST_LineWidth"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="cap">
             <ref name="ST_LineCap"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="cmpd">
             <ref name="ST_CompoundLine"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="algn">
             <ref name="ST_PenAlignment"/>
           </attribute>
-        </optional>
       </define>
     </grammar>
     <resource name="ST_LineEndType" resource="List">
@@ -3019,76 +2659,46 @@
       <include href="dml-shapeLineProperties.rng"/>
       <define name="CT_ShapeProperties">
         <group>
-          <optional>
             <element name="xfrm">
               <ref name="CT_Transform2D"/>
             </element>
-          </optional>
-          <optional>
             <ref name="EG_Geometry"/>
-          </optional>
-          <optional>
             <ref name="EG_FillProperties"/>
-          </optional>
-          <optional>
             <element name="ln">
               <ref name="CT_LineProperties"/>
             </element>
-          </optional>
-          <optional>
             <ref name="EG_EffectProperties"/>
-          </optional>
-          <optional>
             <element name="scene3d">
               <ref name="CT_Scene3D"/>
             </element>
-          </optional>
-          <optional>
             <element name="sp3d">
               <ref name="CT_Shape3D"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="bwMode">
             <ref name="ST_BlackWhiteMode"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_GroupShapeProperties">
         <group>
-          <optional>
             <element name="xfrm">
               <ref name="CT_GroupTransform2D"/>
             </element>
-          </optional>
-          <optional>
             <ref name="EG_FillProperties"/>
-          </optional>
-          <optional>
             <ref name="EG_EffectProperties"/>
-          </optional>
-          <optional>
             <element name="scene3d">
               <ref name="CT_Scene3D"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="bwMode">
             <ref name="ST_BlackWhiteMode"/>
           </attribute>
-        </optional>
       </define>
     </grammar>
     <resource name="CT_ShapeProperties" resource="Properties">
@@ -3413,11 +3023,9 @@
         <attribute name="val">
           <ref name="ST_SystemColorVal"/>
         </attribute>
-        <optional>
           <attribute name="lastClr">
             <ref name="ST_HexBinary3"/>
           </attribute>
-        </optional>
       </define>
       <define name="ST_SchemeColorVal">
           <choice>
@@ -3777,71 +3385,47 @@
       </define>
       <define name="CT_Transform2D">
         <group>
-          <optional>
             <element name="off">
               <ref name="CT_Point2D"/>
             </element>
-          </optional>
-          <optional>
             <element name="ext">
               <ref name="CT_PositiveSize2D"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="rot">
             <ref name="ST_Angle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="flipH">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="flipV">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_GroupTransform2D">
         <group>
-          <optional>
             <element name="off">
               <ref name="CT_Point2D"/>
             </element>
-          </optional>
-          <optional>
             <element name="ext">
               <ref name="CT_PositiveSize2D"/>
             </element>
-          </optional>
-          <optional>
             <element name="chOff">
               <ref name="CT_Point2D"/>
             </element>
-          </optional>
-          <optional>
             <element name="chExt">
               <ref name="CT_PositiveSize2D"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="rot">
             <ref name="ST_Angle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="flipH">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="flipV">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_Point3D">
         <attribute name="x">
@@ -3877,26 +3461,18 @@
         </attribute>
       </define>
       <define name="CT_RelativeRect">
-        <optional>
           <attribute name="l">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="t">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="r">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="b">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="ST_RectAlignment">
           <choice>
@@ -3980,81 +3556,53 @@
           </choice>
       </define>
       <define name="AG_Blob">
-        <optional>
           <attribute name="r:embed">
             <text/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="r:link">
             <text/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_EmbeddedWAVAudioFile">
         <attribute name="r:embed"/>
-        <optional>
           <attribute name="name">
             <data type="string"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="builtIn">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_Hyperlink">
         <group>
-          <optional>
             <element name="snd">
               <ref name="CT_EmbeddedWAVAudioFile"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="r:id"/>
-        </optional>
-        <optional>
           <attribute name="invalidUrl">
             <data type="string"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="action">
             <data type="string"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="tgtFrame">
             <data type="string"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="tooltip">
             <data type="string"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="history">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="highlightClick">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="endSnd">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="ST_DrawingElementId">
         <data type="unsignedInt"/>
@@ -4366,187 +3914,121 @@
       <!-- ISO RELAX NG Schema -->
       <include href="dml-shapeGeometry.rng"/>
       <define name="AG_Locking">
-        <optional>
           <attribute name="noGrp">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noSelect">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noRot">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noChangeAspect">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noMove">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noResize">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noEditPoints">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noAdjustHandles">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noChangeArrowheads">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noChangeShapeType">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_ConnectorLocking">
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
         <ref name="AG_Locking"/>
       </define>
       <define name="CT_ShapeLocking">
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
         <ref name="AG_Locking"/>
-        <optional>
           <attribute name="noTextEdit">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_PictureLocking">
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
         <ref name="AG_Locking"/>
-        <optional>
           <attribute name="noCrop">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_GroupLocking">
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
-        <optional>
           <attribute name="noGrp">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noUngrp">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noSelect">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noRot">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noChangeAspect">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noMove">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noResize">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_GraphicalObjectFrameLocking">
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
-        <optional>
           <attribute name="noGrp">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noDrilldown">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noSelect">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noChangeAspect">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noMove">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="noResize">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_NonVisualDrawingProps">
         <group>
-          <optional>
             <element name="a:hlinkClick">
               <ref name="BUILT_IN_ANY_TYPE"/>
             </element>
-          </optional>
-          <optional>
             <element name="hlinkHover">
               <ref name="CT_Hyperlink"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
         <attribute name="id">
           <ref name="ST_DrawingElementId"/>
@@ -4554,105 +4036,71 @@
         <attribute name="name">
           <data type="string"/>
         </attribute>
-        <optional>
           <attribute name="descr">
             <data type="string"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="hidden">
             <data type="boolean"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="title">
             <data type="string"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_NonVisualDrawingShapeProps">
         <group>
-          <optional>
             <element name="spLocks">
               <ref name="CT_ShapeLocking"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="txBox">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_NonVisualConnectorProperties">
-        <optional>
           <element name="cxnSpLocks">
             <ref name="CT_ConnectorLocking"/>
           </element>
-        </optional>
-        <optional>
           <element name="stCxn">
             <ref name="CT_Connection"/>
           </element>
-        </optional>
-        <optional>
           <element name="endCxn">
             <ref name="CT_Connection"/>
           </element>
-        </optional>
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
       </define>
       <define name="CT_NonVisualPictureProperties">
         <group>
-          <optional>
             <element name="picLocks">
               <ref name="CT_PictureLocking"/>
             </element>
-          </optional>
-          <optional>
             <element name="extLst">
               <ref name="CT_OfficeArtExtensionList"/>
             </element>
-          </optional>
         </group>
-        <optional>
           <attribute name="preferRelativeResize">
             <data type="boolean"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_NonVisualGroupDrawingShapeProps">
-        <optional>
           <element name="grpSpLocks">
             <ref name="CT_GroupLocking"/>
           </element>
-        </optional>
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
       </define>
       <define name="CT_NonVisualGraphicFrameProperties">
-        <optional>
           <element name="graphicFrameLocks">
             <ref name="CT_GraphicalObjectFrameLocking"/>
           </element>
-        </optional>
-        <optional>
           <element name="extLst">
             <ref name="CT_OfficeArtExtensionList"/>
           </element>
-        </optional>
       </define>
     </grammar>
     <resource name="CT_GraphicalObjectFrameLocking" resource="Properties">
@@ -5126,131 +4574,89 @@
 
       <define name="EG_ColorChoice">
         <choice>
-           <optional>
             <element name="srgbClr">
               <ref name="CT_SRgbColor"/>
             </element>
-          </optional>
-          <optional>
             <element name="schemeClr">
               <ref name="CT_SchemeColor"/>
             </element>
-          </optional>
         </choice>
       </define>
       <define name="EG_ColorTransform">
         <choice>
-          <optional>
             <element name="tint">
               <ref name="CT_PositiveFixedPercentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="shade">
               <ref name="CT_PositiveFixedPercentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="alpha">
               <ref name="CT_PositiveFixedPercentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="hueMod">
               <ref name="CT_PositivePercentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="sat">
               <ref name="CT_Percentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="satOff">
               <ref name="CT_Percentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="satMod">
               <ref name="CT_Percentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="lum">
               <ref name="CT_Percentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="lumOff">
               <ref name="CT_Percentage"/>
             </element>
-          </optional>
-          <optional>
             <element name="lumMod">
               <ref name="CT_Percentage"/>
             </element>
-          </optional>
         </choice>
       </define>
       <define name="EG_FillProperties">
         <choice>
-          <optional>
             <element name="noFill">
               <ref name="CT_Empty"/>
             </element>
-          </optional>
-          <optional>
             <element name="solidFill">
               <ref name="CT_SolidColorFillProperties"/>
             </element>
-          </optional>
-          <optional>
             <element name="gradFill">
               <ref name="CT_GradientFillProperties"/>
             </element>
-          </optional>
         </choice>
       </define>
       <define name="EG_ShadeProperties">
         <choice>
-          <optional>
             <element name="lin">
               <ref name="CT_LinearShadeProperties"/>
             </element>
-          </optional>
-          <optional>
             <element name="path">
               <ref name="CT_PathShadeProperties"/>
             </element>
-          </optional>
         </choice>
       </define>
       <define name="EG_LineDashProperties">
         <choice>
-          <optional>
             <element name="prstDash">
               <ref name="CT_PresetLineDashProperties"/>
             </element>
-          </optional>
         </choice>
       </define>
       <define name="EG_LineJoinProperties">
         <choice>
-          <optional>
             <element name="round">
               <ref name="CT_Empty"/>
             </element>
-          </optional>
-          <optional>
             <element name="bevel">
               <ref name="CT_Empty"/>
             </element>
-          </optional>
-          <optional>
             <element name="miter">
               <ref name="CT_LineJoinMiterProperties"/>
             </element>
-          </optional>
         </choice>
       </define>
 
@@ -5288,38 +4694,26 @@
         <ref name="EG_ColorChoice"/>
       </define>
       <define name="CT_GradientFillProperties">
-        <optional>
           <element name="gsLst">
             <ref name="CT_GradientStopList"/>
           </element>
-        </optional>
-        <optional>
           <ref name="EG_ShadeProperties"/>
-        </optional>
       </define>
       <define name="CT_LinearShadeProperties">
-        <optional>
           <attribute name="ang">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="scaled">
             <ref name="ST_OnOff"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_PathShadeProperties">
-        <optional>
           <element name="fillToRect">
             <ref name="CT_RelativeRect"/>
           </element>
-        </optional>
-        <optional>
           <attribute name="path">
             <ref name="ST_PathShadeType"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_GradientStopList">
         <oneOrMore>
@@ -5335,47 +4729,33 @@
         </attribute>
       </define>
       <define name="CT_RelativeRect">
-        <optional>
           <attribute name="l">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="t">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="r">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="b">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_PresetLineDashProperties">
-        <optional>
           <attribute name="val">
             <ref name="ST_PresetLineDashVal"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_LineJoinMiterProperties">
-        <optional>
           <attribute name="lim">
             <ref name="ST_PositivePercentage"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_Camera">
-        <optional>
           <attribute name="prst">
             <ref name="ST_PresetCameraType"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_LightRig">
         <element name="rot">
@@ -5400,21 +4780,15 @@
         </attribute>
       </define>
       <define name="CT_Bevel">
-        <optional>
           <attribute name="w">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="h">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="prst">
             <ref name="ST_BevelPresetType"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_Color">
         <ref name="EG_ColorChoice"/>
@@ -5423,177 +4797,111 @@
         <attribute name="id">
           <ref name="ST_UnsignedDecimalNumber"/>
         </attribute>
-        <optional>
           <attribute name="val">
             <ref name="ST_OnOff"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_OnOff">
-        <optional>
           <attribute name="val">
             <ref name="ST_OnOff"/>
           </attribute>
-        </optional>
       </define>
 
 
       <!-- Main Elements-->
       <define name="CT_Glow">
-        <optional>
             <ref name="EG_ColorChoice"/>
-        </optional>
         <attribute name="rad">
           <ref name="ST_PositiveCoordinate"/>
         </attribute>
       </define>
       <define name="CT_Shadow">
-        <optional>
             <ref name="EG_ColorChoice"/>
-        </optional>
-        <optional>
           <attribute name="blurRad">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dist">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dir">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sx">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sy">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="kx">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="ky">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="algn">
             <ref name="ST_RectAlignment"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_Reflection">
-        <optional>
           <attribute name="blurRad">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="stA">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="stPos">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="endA">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="endPos">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dist">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="dir">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="fadeDir">
             <ref name="ST_PositiveFixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sx">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="sy">
             <ref name="ST_Percentage"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="kx">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="ky">
             <ref name="ST_FixedAngle"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="algn">
             <ref name="ST_RectAlignment"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_TextOutlineEffect">
-        <optional>
             <ref name="EG_FillProperties"/>
-        </optional>
-        <optional>
             <ref name="EG_LineDashProperties"/>
-        </optional>
-        <optional>
             <ref name="EG_LineJoinProperties"/>
-        </optional>
-        <optional>
           <attribute name="w">
             <ref name="ST_LineWidth"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="cap">
             <ref name="ST_LineCap"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="cmpd">
             <ref name="ST_CompoundLine"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="algn">
             <ref name="ST_PenAlignment"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_FillTextEffect">
-        <optional>
             <ref name="EG_FillProperties"/>
-        </optional>
       </define>
       <define name="CT_Scene3D">
         <element name="camera">
@@ -5616,21 +4924,15 @@
         <element name="contourClr">
           <ref name="CT_Color"/>
         </element>
-        <optional>
           <attribute name="extrusionH">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="contourW">
             <ref name="ST_PositiveCoordinate"/>
           </attribute>
-        </optional>
-        <optional>
           <attribute name="prstMaterial">
             <ref name="ST_PresetMaterialType"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_Ligatures">
         <attribute name="val">
@@ -5725,21 +5027,15 @@
         </attribute>
       </define>
       <define name="CT_SdtCheckbox">
-        <optional>
           <element name="checked">
             <ref name="CT_String"/>
           </element>
-        </optional>
-        <optional>
           <element name="checkedState">
             <ref name="CT_String"/>
           </element>
-        </optional>
-        <optional>
           <element name="uncheckedState">
             <ref name="CT_String"/>
           </element>
-        </optional>
       </define>
     </grammar>
 
@@ -6233,252 +5529,200 @@
 
       <!-- Complex types for effects -->
       <define name="CT_PictureEffectBlur">
-        <optional>
           <attribute name="visible">
             <ref name="ST_ArtisticEffectParam100"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_PictureEffectCement">
-        <optional>
           <attribute name="trans">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
           <attribute name="crackSpacing">
             <ref name="ST_ArtisticEffectParam100"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_PictureEffectChalkSketch">
-        <optional>
           <attribute name="trans">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
           <attribute name="pressure">
             <ref name="ST_ArtisticEffectParam4"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_PictureEffectCrisscrossEtching">
-        <optional>
           <attribute name="trans">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
           <attribute name="pressure">
             <ref name="ST_ArtisticEffectParam4"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_PictureEffectCutout">
-        <optional>
           <attribute name="trans">
             <ref name="ST_PositiveFixedPercentage"/>
           </attribute>
           <attribute name="numberOfShades">
             <ref name="ST_ArtisticEffectParam6"/>
           </attribute>
-        </optional>
       </define>
       <define name="CT_PictureEffectFilmGrain">
-        <optional>
           <attribute name="trans">
             <ref name="ST_PositiveFixedPercentage"/>

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list