[Libreoffice-commits] core.git: Branch 'feature/fastparser' - 20 commits - include/xmloff sw/source xmloff/inc xmloff/source

Daniel Sikeler d.sikeler94 at gmail.com
Mon Feb 23 23:50:38 PST 2015


 include/xmloff/DocumentSettingsContext.hxx              |    8 
 include/xmloff/XMLTextTableContext.hxx                  |    1 
 include/xmloff/txtimp.hxx                               |   10 
 sw/source/filter/xml/xmltbli.cxx                        |  721 ++++++++++++++++
 sw/source/filter/xml/xmltbli.hxx                        |    9 
 xmloff/inc/txtfldi.hxx                                  |   13 
 xmloff/source/core/DocumentSettingsContext.cxx          |  276 ++++++
 xmloff/source/text/XMLFootnoteImportContext.cxx         |   10 
 xmloff/source/text/XMLSectionImportContext.cxx          |   31 
 xmloff/source/text/XMLSectionSourceDDEImportContext.cxx |   16 
 xmloff/source/text/XMLSectionSourceImportContext.cxx    |   13 
 xmloff/source/text/XMLTextColumnsContext.cxx            |   32 
 xmloff/source/text/XMLTextFrameContext.cxx              |   39 
 xmloff/source/text/XMLTextFrameContext.hxx              |   10 
 xmloff/source/text/XMLTextFrameHyperlinkContext.cxx     |   85 +
 xmloff/source/text/XMLTextFrameHyperlinkContext.hxx     |    9 
 xmloff/source/text/XMLTextTableContext.cxx              |    6 
 xmloff/source/text/txtdropi.cxx                         |   16 
 xmloff/source/text/txtfldi.cxx                          |  182 +++-
 xmloff/source/text/txtimp.cxx                           |   17 
 20 files changed, 1457 insertions(+), 47 deletions(-)

New commits:
commit daeb13960552847385d5160881ae818bfd4bf096
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Tue Feb 24 08:39:45 2015 +0100

    fix warning "unused parameter"
    
    Change-Id: Id29b2cb5a03bb5f69a6a7bbb3d13d0cf6188e9e2

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index 5653bb2..b4dbdde 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -601,7 +601,7 @@ SwXMLTableCellContext_Impl::SwXMLTableCellContext_Impl(
 }
 
 SwXMLTableCellContext_Impl::SwXMLTableCellContext_Impl(
-    SwXMLImport& rImport, sal_Int32 Element,
+    SwXMLImport& rImport, sal_Int32 /*Element*/,
     const Reference< xml::sax::XFastAttributeList > & xAttrList,
     SwXMLTableContext *pTable )
 :   SvXMLImportContext( rImport ),
@@ -1095,7 +1095,7 @@ SwXMLTableColContext_Impl::SwXMLTableColContext_Impl(
 }
 
 SwXMLTableColContext_Impl::SwXMLTableColContext_Impl(
-    SwXMLImport& rImport, sal_Int32 Element,
+    SwXMLImport& rImport, sal_Int32 /*Element*/,
     const Reference< xml::sax::XFastAttributeList >& xAttrList,
     SwXMLTableContext *pTable )
 :   SvXMLImportContext( rImport ),
commit d5a19e12e5a466b7484aaeb9cd385183802a79d8
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Tue Feb 24 08:27:23 2015 +0100

    XMLDdeFiledDeclsImportContext impl fastparser
    
    interface
    
    Change-Id: I5833e52fe90d5fdb1a2457338ad4d474772526d9

diff --git a/xmloff/inc/txtfldi.hxx b/xmloff/inc/txtfldi.hxx
index 85ce21d..6539813 100644
--- a/xmloff/inc/txtfldi.hxx
+++ b/xmloff/inc/txtfldi.hxx
@@ -1048,12 +1048,17 @@ public:
     XMLDdeFieldDeclsImportContext(SvXMLImport& rImport,
                                   sal_uInt16 nPrfx,
                                   const OUString& sLocalName);
+    XMLDdeFieldDeclsImportContext(SvXMLImport& rImport, sal_Int32 Element);
 
     virtual SvXMLImportContext *CreateChildContext(
         sal_uInt16 nPrefix,
         const OUString& rLocalName,
         const ::com::sun::star::uno::Reference<
         ::com::sun::star::xml::sax::XAttributeList> & xAttrList ) SAL_OVERRIDE;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
+        createFastChildContext( sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
+        throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 };
 
 /** import dde field declaration (<text:dde-connection-decl>) */
diff --git a/xmloff/source/text/txtfldi.cxx b/xmloff/source/text/txtfldi.cxx
index cf4cebc..2eddc83 100644
--- a/xmloff/source/text/txtfldi.cxx
+++ b/xmloff/source/text/txtfldi.cxx
@@ -3000,6 +3000,13 @@ XMLDdeFieldDeclsImportContext::XMLDdeFieldDeclsImportContext(
 {
 }
 
+XMLDdeFieldDeclsImportContext::XMLDdeFieldDeclsImportContext(
+    SvXMLImport& rImport, sal_Int32 /*Element*/ )
+:   SvXMLImportContext( rImport ),
+    aTokenMap(aDdeDeclAttrTokenMap)
+{
+}
+
 SvXMLImportContext * XMLDdeFieldDeclsImportContext::CreateChildContext(
     sal_uInt16 nPrefix,
     const OUString& rLocalName,
@@ -3019,7 +3026,21 @@ SvXMLImportContext * XMLDdeFieldDeclsImportContext::CreateChildContext(
     }
 }
 
-
+Reference< XFastContextHandler > SAL_CALL
+    XMLDdeFieldDeclsImportContext::createFastChildContext(
+    sal_Int32 Element, const Reference< XFastAttributeList >& xAttrList )
+    throw(RuntimeException, SAXException, std::exception)
+{
+    if( Element == (NAMESPACE | XML_NAMESPACE_TEXT | XML_dde_connection_decl) )
+    {
+        return new XMLDdeFieldDeclImportContext( GetImport(), Element,
+                            aTokenMap );
+    }
+    else
+    {
+        return SvXMLImportContext::createFastChildContext( Element, xAttrList );
+    }
+}
 
 
 // import dde field declaration
commit 372ee91eebfb0fc7efc125ea56f3fe6060f838a5
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Tue Feb 24 08:26:14 2015 +0100

    XMLDdeFiledDeclImportContext impl fastparser ...
    
    interface
    
    Change-Id: I121cbe4accab8b08801d6cd4be63389b10b41729

diff --git a/xmloff/inc/txtfldi.hxx b/xmloff/inc/txtfldi.hxx
index 4023aac..85ce21d 100644
--- a/xmloff/inc/txtfldi.hxx
+++ b/xmloff/inc/txtfldi.hxx
@@ -35,7 +35,8 @@
 #include <rtl/ustrbuf.hxx>
 
 namespace com { namespace sun { namespace star {
-    namespace xml { namespace sax { class XAttributeList; } }
+    namespace xml { namespace sax { class XAttributeList;
+                                    class XFastAttributeList;} }
     namespace text { class XTextField; }
     namespace beans { class XPropertySet; struct PropertyValue; }
 } } }
@@ -1073,11 +1074,16 @@ public:
                                  sal_uInt16 nPrfx,
                                  const OUString& sLocalName,
                                  const SvXMLTokenMap& rMap);
+    XMLDdeFieldDeclImportContext( SvXMLImport& rImport,
+        sal_Int32 Element, const SvXMLTokenMap& rMap );
 
     // create fieldmaster
     virtual void StartElement(
         const ::com::sun::star::uno::Reference<
         ::com::sun::star::xml::sax::XAttributeList> & xAttrList) SAL_OVERRIDE;
+    virtual void SAL_CALL startFastElement( sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
+        throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 };
 
 /** import dde fields (<text:dde-connection>) */
diff --git a/xmloff/source/text/txtfldi.cxx b/xmloff/source/text/txtfldi.cxx
index a9f367b..cf4cebc 100644
--- a/xmloff/source/text/txtfldi.cxx
+++ b/xmloff/source/text/txtfldi.cxx
@@ -3042,6 +3042,20 @@ XMLDdeFieldDeclImportContext::XMLDdeFieldDeclImportContext(
     DBG_ASSERT(IsXMLToken(sLocalName, XML_DDE_CONNECTION_DECL), "wrong name");
 }
 
+XMLDdeFieldDeclImportContext::XMLDdeFieldDeclImportContext(
+    SvXMLImport& rImport, sal_Int32 Element,
+    const SvXMLTokenMap& rMap )
+:   SvXMLImportContext( rImport ),
+    sPropertyIsAutomaticUpdate(sAPI_is_automatic_update),
+    sPropertyName(sAPI_name),
+    sPropertyDDECommandType(sAPI_dde_command_type),
+    sPropertyDDECommandFile(sAPI_dde_command_file),
+    sPropertyDDECommandElement(sAPI_dde_command_element),
+    rTokenMap(rMap)
+{
+    DBG_ASSERT( Element == (NAMESPACE | XML_NAMESPACE_TEXT | XML_dde_connection_decl), "wrong xml-tag");
+}
+
 void XMLDdeFieldDeclImportContext::StartElement(
     const Reference<XAttributeList> & xAttrList)
 {
@@ -3160,7 +3174,119 @@ void XMLDdeFieldDeclImportContext::StartElement(
     // else: ignore
 }
 
+void SAL_CALL XMLDdeFieldDeclImportContext::startFastElement(
+    sal_Int32 /*Element*/, const Reference< XFastAttributeList >& xAttrList )
+    throw(RuntimeException, SAXException, std::exception)
+{
+    OUString sName;
+    OUString sCommandApplication;
+    OUString sCommandTopic;
+    OUString sCommandItem;
 
+    sal_Bool bUpdate = sal_False;
+    bool bNameOK = false;
+    bool bCommandApplicationOK = false;
+    bool bCommandTopicOK = false;
+    bool bCommandItemOK = false;
+
+    // process attributes
+    Sequence< xml::FastAttribute > attributes = xAttrList->getFastAttributes();
+    for( xml::FastAttribute attribute : attributes )
+    {
+        switch (rTokenMap.Get(attribute.Token))
+        {
+            case XML_TOK_DDEFIELD_NAME:
+                sName = attribute.Value;
+                bNameOK = true;
+                break;
+            case XML_TOK_DDEFIELD_APPLICATION:
+                sCommandApplication = attribute.Value;
+                bCommandApplicationOK = true;
+                break;
+            case XML_TOK_DDEFIELD_TOPIC:
+                sCommandTopic = attribute.Value;
+                bCommandTopicOK = true;
+                break;
+            case XML_TOK_DDEFIELD_ITEM:
+                sCommandItem = attribute.Value;
+                bCommandItemOK = true;
+                break;
+            case XML_TOK_DDEFIELD_UPDATE:
+            {
+                bool bTmp(false);
+                if (::sax::Converter::convertBool(
+                    bTmp, attribute.Value) )
+                {
+                    bUpdate = bTmp;
+                }
+                break;
+            }
+        }
+    }
+
+    // valid data?
+    if (bNameOK && bCommandApplicationOK && bCommandTopicOK && bCommandItemOK)
+    {
+        // make service name
+        OUStringBuffer sBuf;
+        sBuf.appendAscii(sAPI_fieldmaster_prefix);
+        sBuf.appendAscii(sAPI_dde);
+
+        // create DDE TextFieldMaster
+        Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(),
+                                                 UNO_QUERY);
+        if( xFactory.is() )
+        {
+            /* #i6432# There might be multiple occurrences of one DDE
+               declaration if it is used in more than one of
+               header/footer/body. createInstance will throw an exception if we
+               try to create the second, third, etc. instance of such a
+               declaration. Thus we ignore the exception. Otherwise this will
+               lead to an unloadable document. */
+            try
+            {
+                Reference<XInterface> xIfc =
+                    xFactory->createInstance(sBuf.makeStringAndClear());
+                if( xIfc.is() )
+                {
+                    Reference<XPropertySet> xPropSet( xIfc, UNO_QUERY );
+                    if (xPropSet.is() &&
+                        xPropSet->getPropertySetInfo()->hasPropertyByName(
+                                                                          sPropertyDDECommandType))
+                    {
+                        Any aAny;
+
+                        aAny <<= sName;
+                        xPropSet->setPropertyValue(sPropertyName, aAny);
+
+                        aAny <<= sCommandApplication;
+                        xPropSet->setPropertyValue(sPropertyDDECommandType, aAny);
+
+                        aAny <<= sCommandTopic;
+                        xPropSet->setPropertyValue(sPropertyDDECommandFile, aAny);
+
+                        aAny <<= sCommandItem;
+                        xPropSet->setPropertyValue(sPropertyDDECommandElement,
+                                                   aAny);
+
+                        aAny.setValue(&bUpdate, ::getBooleanCppuType());
+                        xPropSet->setPropertyValue(sPropertyIsAutomaticUpdate,
+                                                   aAny);
+                    }
+                    // else: ignore (can't get XPropertySet, or DDE
+                    //               properties are not supported)
+                }
+                // else: ignore
+            }
+            catch (const Exception&)
+            {
+                //ignore
+            }
+        }
+        // else: ignore
+    }
+    // else: ignore
+}
 
 
 // DDE field import
commit aecc80b48bce8cec371b8a7482d2d83385600267
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 15:55:55 2015 +0100

    SwXMLTableContext method implementation
    
    all methods needed by the fastparser interface are implemented
    
    Change-Id: Ia2c4a4c91bd6fcc5606a1cc021c8f112f78207fc

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index 97b4d7a..5653bb2 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -1977,6 +1977,107 @@ SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport,
     nCurCol( 0UL ),
     nWidth( 0UL )
 {
+    OUString aName;
+    OUString sXmlId;
+
+    // this method will modify the document directly -> lock SolarMutex
+    SolarMutexGuard aGuard;
+
+    if( xAttrList.is() )
+    {
+        if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_style_name ) )
+            aStyleName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_style_name );
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_name ) )
+            aName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_name );
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_default_cell_style_name ) )
+            aDfltCellStyleName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_default_cell_style_name );
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_XML | XML_id ) )
+            sXmlId = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_XML | XML_id );
+    }
+
+    SwDoc *pDoc = SwImport::GetDocFromXMLImport( GetSwImport() );
+
+    OUString sTblName;
+    if( !aName.isEmpty() )
+    {
+        const SwTableFmt *pTblFmt = pDoc->FindTblFmtByName( aName );
+        if( !pTblFmt )
+            sTblName = aName;
+    }
+    if( sTblName.isEmpty() )
+    {
+        sTblName = pDoc->GetUniqueTblName();
+        GetImport().GetTextImport()
+            ->GetRenameMap().Add( XML_TEXT_RENAME_TYPE_TABLE, aName, sTblName );
+    }
+
+    Reference< XTextTable > xTable;
+    const SwXTextTable *pXTable = 0;
+    Reference<XMultiServiceFactory> xFactory( GetImport().GetModel(),
+                                              UNO_QUERY );
+    OSL_ENSURE( xFactory.is(), "factory missing" );
+    if( xFactory.is() )
+    {
+        Reference<XInterface> xIfc = xFactory->createInstance( "com.sun.star.text.TextTable" );
+        OSL_ENSURE( xIfc.is(), "Couldn't create a table" );
+
+        if( xIfc.is() )
+            xTable = Reference< XTextTable > ( xIfc, UNO_QUERY );
+    }
+
+    if( xTable.is() )
+    {
+        xTable->initialize( 1, 1 );
+
+        try
+        {
+            xTextContent = xTable;
+            GetImport().GetTextImport()->InsertTextContent( xTextContent );
+        }
+        catch( IllegalArgumentException& )
+        {
+            xTable = 0;
+        }
+    }
+
+    if( xTable.is() )
+    {
+        //FIXME
+        // xml:id for RDF metadata
+        GetImport().SetXmlId(xTable, sXmlId);
+
+        Reference<XUnoTunnel> xTableTunnel( xTable, UNO_QUERY);
+        if( xTableTunnel.is() )
+        {
+            pXTable = reinterpret_cast< SwXTextTable * >(
+                    sal::static_int_cast< sal_IntPtr >( xTableTunnel->getSomething( SwXTextTable::getUnoTunnelId() )));
+            OSL_ENSURE( pXTable, "SwXTextTable missing" );
+        }
+
+        Reference < XCellRange > xCellRange( xTable, UNO_QUERY );
+        Reference < XCell > xCell = xCellRange->getCellByPosition( 0, 0 );
+        Reference < XText> xText( xCell, UNO_QUERY );
+        xOldCursor = GetImport().GetTextImport()->GetCursor();
+        GetImport().GetTextImport()->SetCursor( xText->createTextCursor() );
+
+        // take care of open redlines for tables
+        GetImport().GetTextImport()->RedlineAdjustStartNodeCursor(true);
+    }
+    if( pXTable )
+    {
+        SwFrmFmt *pTblFrmFmt = pXTable->GetFrmFmt();
+        OSL_ENSURE( pTblFrmFmt, "table format missing" );
+        SwTable *pTbl = SwTable::FindTable( pTblFrmFmt );
+        OSL_ENSURE( pTbl, "table missing" );
+        pTableNode = pTbl->GetTableNode();
+        OSL_ENSURE( pTableNode, "table node missing" );
+
+        pTblFrmFmt->SetName( sTblName );
+
+        SwTableLine *pLine1 = pTableNode->GetTable().GetTabLines()[0U];
+        pBox1 = pLine1->GetTabBoxes()[0U];
+        pSttNd1 = pBox1->GetSttNd();
+    }
 }
 
 SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport,
@@ -2105,6 +2206,48 @@ Reference< xml::sax::XFastContextHandler > SAL_CALL
 {
     Reference< xml::sax::XFastContextHandler > pContext = 0;
 
+    const SvXMLTokenMap& rTokenMap = GetSwImport().GetTableElemTokenMap();
+    bool bHeader = false;
+    switch( rTokenMap.Get( Element ) )
+    {
+    case XML_TOK_TABLE_HEADER_COLS:
+    case XML_TOK_TABLE_COLS:
+        if( IsValid() )
+            pContext = new SwXMLTableColsContext_Impl( GetSwImport(),
+                    Element, xAttrList, this );
+        break;
+    case XML_TOK_TABLE_COL:
+        if( IsValid() && IsInsertColPossible() )
+            pContext = new SwXMLTableColContext_Impl( GetSwImport(),
+                    Element, xAttrList, this );
+        break;
+    case XML_TOK_TABLE_HEADER_ROWS:
+        bHeader = true;
+        //fall-through
+    case XML_TOK_TABLE_ROWS:
+            pContext = new SwXMLTableRowsContext_Impl( GetSwImport(),
+                    Element, xAttrList, this, bHeader );
+        break;
+    case XML_TOK_TABLE_ROW:
+        if( IsInsertRowPossible() )
+            pContext = new SwXMLTableRowContext_Impl( GetSwImport(),
+                    Element, xAttrList, this );
+        break;
+    case XML_TOK_OFFICE_DDE_SOURCE:
+        // save context for later processing (discard old context, if approp.)
+        if( IsValid() )
+        {
+            if( pDDESource != NULL )
+            {
+                pDDESource->ReleaseRef();
+            }
+            pDDESource = new SwXMLDDETableContext_Impl( GetSwImport(), Element );
+            pDDESource->AddFirstRef();
+            pContext = pDDESource;
+        }
+        break;
+    }
+
     if( !pContext.is() )
         pContext = new SvXMLImportContext( GetImport() );
 
commit 4469d25259ca968f4ab9ad715645b9cb9cfbc3bf
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 15:43:56 2015 +0100

    SwXMLDDETableContext_Impl impl. fast interface
    
    all methods implemented
    
    Change-Id: I524b2a90ca051769431bc52b5e79311783608780

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index a2ffb97..97b4d7a 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -1555,11 +1555,15 @@ public:
 
     SwXMLDDETableContext_Impl(
         SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName);
+    SwXMLDDETableContext_Impl( SwXMLImport& rImport, sal_Int32 Element);
 
     virtual ~SwXMLDDETableContext_Impl();
 
     virtual void StartElement(
         const Reference<xml::sax::XAttributeList> & xAttrList) SAL_OVERRIDE;
+    virtual void SAL_CALL startFastElement( sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList)
+        throw(RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     OUString& GetConnectionName()   { return sConnectionName; }
     OUString& GetDDEApplication()   { return sDDEApplication; }
@@ -1581,6 +1585,17 @@ SwXMLDDETableContext_Impl::SwXMLDDETableContext_Impl(
 {
 }
 
+SwXMLDDETableContext_Impl::SwXMLDDETableContext_Impl(
+    SwXMLImport& rImport, sal_Int32 /*Element*/ )
+:   SvXMLImportContext(rImport),
+    sConnectionName(),
+    sDDEApplication(),
+    sDDEItem(),
+    sDDETopic(),
+    bIsAutomaticUpdate(false)
+{
+}
+
 SwXMLDDETableContext_Impl::~SwXMLDDETableContext_Impl()
 {
 }
@@ -1631,6 +1646,45 @@ void SwXMLDDETableContext_Impl::StartElement(
     }
 }
 
+void SAL_CALL SwXMLDDETableContext_Impl::startFastElement( sal_Int32 /*Element*/,
+    const Reference< xml::sax::XFastAttributeList >& xAttrList )
+    throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+    if( xAttrList.is() )
+    {
+        if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_application ) )
+        {
+            sDDEApplication = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_application );
+        }
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_topic ) )
+        {
+            sDDETopic = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_topic );
+        }
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_item ) )
+        {
+            sDDEItem = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_item );
+        }
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_name ) )
+        {
+            sConnectionName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_name );
+        }
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_application ) )
+        {
+            sDDEApplication = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_application );
+        }
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_automatic_update ) )
+        {
+            bool bTmp(false);
+            if( ::sax::Converter::convertBool(bTmp,
+                xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_OFFICE | XML_automatic_update )) )
+            {
+                bIsAutomaticUpdate = bTmp;
+            }
+        }
+        // else: unknown attibute
+    }
+}
+
 // generate a new name for DDE field type (called by lcl_GetDDEFieldType below)
 static OUString lcl_GenerateFldTypeName(const OUString& sPrefix, SwTableNode* pTableNode)
 {
commit 41734c22db82bc6b0d16533788059d5114efdc58
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 15:18:21 2015 +0100

    SwXMLTableRowsContext_Impl impl. fast interface
    
    all methods implemented
    
    Change-Id: Ife98952b9cad7d0f234538b57222df83c25e94f7

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index 45c0260..a2ffb97 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -1459,12 +1459,19 @@ public:
             const Reference< xml::sax::XAttributeList > & xAttrList,
             SwXMLTableContext *pTable,
             bool bHead );
+    SwXMLTableRowsContext_Impl( SwXMLImport& rImport, sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList,
+        SwXMLTableContext *pTable, bool bHead );
 
     virtual ~SwXMLTableRowsContext_Impl();
 
     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
             const OUString& rLocalName,
             const Reference< xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
+    virtual Reference< xml::sax::XFastContextHandler > SAL_CALL
+        createFastChildContext( sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList )
+        throw(RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     SwXMLImport& GetSwImport() { return static_cast<SwXMLImport&>(GetImport()); }
 };
@@ -1481,6 +1488,16 @@ SwXMLTableRowsContext_Impl::SwXMLTableRowsContext_Impl( SwXMLImport& rImport,
 {
 }
 
+SwXMLTableRowsContext_Impl::SwXMLTableRowsContext_Impl(
+    SwXMLImport& rImport, sal_Int32 /*Element*/,
+    const Reference< xml::sax::XFastAttributeList >&,
+    SwXMLTableContext *pTable, bool bHead )
+:   SvXMLImportContext( rImport ),
+    xMyTable( pTable ),
+    bHeader( bHead )
+{
+}
+
 SwXMLTableRowsContext_Impl::~SwXMLTableRowsContext_Impl()
 {
 }
@@ -1506,6 +1523,24 @@ SvXMLImportContext *SwXMLTableRowsContext_Impl::CreateChildContext(
     return pContext;
 }
 
+Reference< xml::sax::XFastContextHandler > SAL_CALL
+    SwXMLTableRowsContext_Impl::createFastChildContext( sal_Int32 Element,
+    const Reference< xml::sax::XFastAttributeList >& xAttrList )
+    throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+    Reference< xml::sax::XFastContextHandler > pContext = 0;
+
+    if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_table_row)
+        && GetTable()->IsInsertRowPossible() )
+        pContext = new SwXMLTableRowContext_Impl( GetSwImport(), Element,
+                xAttrList, GetTable(), bHeader );
+
+    if( !pContext.is() )
+        pContext = new SvXMLImportContext( GetImport() );
+
+    return pContext;
+}
+
 class SwXMLDDETableContext_Impl : public SvXMLImportContext
 {
     OUString sConnectionName;
commit a601c87903967be9412611dabc386858f1241fe7
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 15:04:37 2015 +0100

    SwXMLTableRowContext_Impl impl. fast interface
    
    all methods implemented
    
    Change-Id: Ic3cfce39d4fea388e5b2163e84f384f11cfc04cb

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index b79c8ea..45c0260 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -1254,14 +1254,23 @@ public:
             SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName,
             const Reference< xml::sax::XAttributeList > & xAttrList,
             SwXMLTableContext *pTable, bool bInHead=false );
+    SwXMLTableRowContext_Impl( SwXMLImport& rImport, sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList,
+        SwXMLTableContext *pTable, bool bInHead=false );
 
     virtual ~SwXMLTableRowContext_Impl();
 
     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
             const OUString& rLocalName,
             const Reference< xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
+    virtual Reference< xml::sax::XFastContextHandler > SAL_CALL
+        createFastChildContext( sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList )
+        throw(RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     virtual void EndElement() SAL_OVERRIDE;
+    virtual void SAL_CALL endFastElement( sal_Int32 Element )
+        throw(RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     SwXMLImport& GetSwImport() { return static_cast<SwXMLImport&>(GetImport()); }
 };
@@ -1317,6 +1326,44 @@ SwXMLTableRowContext_Impl::SwXMLTableRowContext_Impl( SwXMLImport& rImport,
                                sXmlId );
 }
 
+SwXMLTableRowContext_Impl::SwXMLTableRowContext_Impl(
+    SwXMLImport& rImport, sal_Int32 /*Element*/,
+    const Reference< xml::sax::XFastAttributeList >& xAttrList,
+    SwXMLTableContext *pTable, bool bInHead )
+:   SvXMLImportContext( rImport ),
+    xMyTable( pTable ),
+    nRowRepeat( 1 )
+{
+    OUString aStyleName, aDfltCellStyleName;
+    OUString sXmlId;
+
+    if( xAttrList.is() )
+    {
+        if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_style_name ) )
+        {
+            aStyleName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_style_name );
+        }
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_number_rows_repeated ) )
+        {
+            nRowRepeat = static_cast< sal_Int32 >( xAttrList->getValue(
+                FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_number_rows_repeated ).toInt32() );
+            if( nRowRepeat < 1UL )
+                nRowRepeat = 1UL;
+        }
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_default_cell_style_name ) )
+        {
+            aDfltCellStyleName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_default_cell_style_name );
+        }
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_XML | XML_id ) )
+        {
+            sXmlId = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_XML | XML_id );
+        }
+    }
+    if( GetTable()->IsValid() )
+        GetTable()->InsertRow( aStyleName, aDfltCellStyleName, bInHead,
+                               sXmlId );
+}
+
 void SwXMLTableRowContext_Impl::EndElement()
 {
     if( GetTable()->IsValid() )
@@ -1328,6 +1375,18 @@ void SwXMLTableRowContext_Impl::EndElement()
     }
 }
 
+void SAL_CALL SwXMLTableRowContext_Impl::endFastElement( sal_Int32 /*Element*/ )
+    throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+    if( GetTable()->IsValid() )
+    {
+        GetTable()->FinishRow();
+
+        if( nRowRepeat > 1UL )
+            GetTable()->InsertRepRows( nRowRepeat );
+    }
+}
+
 SwXMLTableRowContext_Impl::~SwXMLTableRowContext_Impl()
 {
 }
@@ -1360,6 +1419,31 @@ SvXMLImportContext *SwXMLTableRowContext_Impl::CreateChildContext(
     return pContext;
 }
 
+Reference< xml::sax::XFastContextHandler > SAL_CALL
+    SwXMLTableRowContext_Impl::createFastChildContext( sal_Int32 Element,
+    const Reference< xml::sax::XFastAttributeList >& xAttrList )
+    throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+    Reference< xml::sax::XFastContextHandler > pContext = 0;
+
+    if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_table_cell)
+     || Element == (FastToken::NAMESPACE | XML_NAMESPACE_LO_EXT | XML_table_cell) )
+    {
+        pContext = new SwXMLTableCellContext_Impl( GetSwImport(),
+                Element, xAttrList, GetTable() );
+    }
+    else if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_covered_table_cell)
+          || Element == (FastToken::NAMESPACE | XML_NAMESPACE_LO_EXT | XML_covered_table_cell) )
+    {
+        pContext = new SvXMLImportContext( GetImport() );
+    }
+
+    if( !pContext.is() )
+        pContext = new SvXMLImportContext( GetImport() );
+
+    return pContext;
+}
+
 class SwXMLTableRowsContext_Impl : public SvXMLImportContext
 {
     SvXMLImportContextRef   xMyTable;
commit ba540f330f64745058f31f7bc2060b5d86363911
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 14:37:39 2015 +0100

    SwXMLTableColsContext_Impl impl. fast interface
    
    Change-Id: I41bdb7bab872c790d04e4aea5127c6866ff48d50

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index 68f16c9..b79c8ea 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -1163,12 +1163,19 @@ public:
             const OUString& rLName,
             const Reference< xml::sax::XAttributeList > & xAttrList,
             SwXMLTableContext *pTable );
+    SwXMLTableColsContext_Impl( SwXMLImport& rImport, sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList,
+        SwXMLTableContext *pTable );
 
     virtual ~SwXMLTableColsContext_Impl();
 
     virtual SvXMLImportContext *CreateChildContext(
             sal_uInt16 nPrefix, const OUString& rLocalName,
             const Reference< xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
+    virtual Reference< xml::sax::XFastContextHandler > SAL_CALL
+        createFastChildContext( sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList )
+        throw(RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     SwXMLImport& GetSwImport() { return static_cast<SwXMLImport&>(GetImport()); }
 };
@@ -1182,6 +1189,15 @@ SwXMLTableColsContext_Impl::SwXMLTableColsContext_Impl(
 {
 }
 
+SwXMLTableColsContext_Impl::SwXMLTableColsContext_Impl(
+    SwXMLImport& rImport, sal_Int32 /*Element*/,
+    const Reference< xml::sax::XFastAttributeList >&,
+    SwXMLTableContext *pTable )
+:   SvXMLImportContext( rImport ),
+    xMyTable( pTable )
+{
+}
+
 SwXMLTableColsContext_Impl::~SwXMLTableColsContext_Impl()
 {
 }
@@ -1206,6 +1222,24 @@ SvXMLImportContext *SwXMLTableColsContext_Impl::CreateChildContext(
     return pContext;
 }
 
+Reference< xml::sax::XFastContextHandler > SAL_CALL
+    SwXMLTableColsContext_Impl::createFastChildContext( sal_Int32 Element,
+    const Reference< xml::sax::XFastAttributeList >& xAttrList )
+    throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+    Reference< xml::sax::XFastContextHandler > pContext = 0;
+
+    if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_table_column)
+        && GetTable()->IsInsertColPossible() )
+        pContext = new SwXMLTableColContext_Impl( GetSwImport(),
+                Element, xAttrList, GetTable() );
+
+    if( !pContext.is() )
+        pContext = new SvXMLImportContext( GetImport() );
+
+    return pContext;
+}
+
 class SwXMLTableRowContext_Impl : public SvXMLImportContext
 {
     SvXMLImportContextRef   xMyTable;
commit 439d683c1fa130eb3f58be79ddc19179005a1511
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 14:23:17 2015 +0100

    SwXMLTableColContext_Impl impl fast interfaces
    
    Change-Id: I4884e99956b850a950de68b799670c0a7acbb41d

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index 7e6b78a..68f16c9 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -1022,6 +1022,9 @@ public:
             SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName,
             const Reference< xml::sax::XAttributeList > & xAttrList,
             SwXMLTableContext *pTable );
+    SwXMLTableColContext_Impl( SwXMLImport& rImport, sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList,
+        SwXMLTableContext *pTable );
 
     virtual ~SwXMLTableColContext_Impl();
 
@@ -1091,6 +1094,58 @@ SwXMLTableColContext_Impl::SwXMLTableColContext_Impl(
     }
 }
 
+SwXMLTableColContext_Impl::SwXMLTableColContext_Impl(
+    SwXMLImport& rImport, sal_Int32 Element,
+    const Reference< xml::sax::XFastAttributeList >& xAttrList,
+    SwXMLTableContext *pTable )
+:   SvXMLImportContext( rImport ),
+    xMyTable( pTable )
+{
+    sal_uInt32 nColRep = 1UL;
+    OUString aStyleName, aDfltCellStyleName;
+
+    if( xAttrList.is() )
+    {
+        if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_style_name ) )
+            aStyleName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_style_name );
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_number_columns_repeated ) )
+            nColRep = static_cast< sal_uInt32 >(xAttrList->getValue(
+                FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_number_columns_repeated ).toInt32());
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_default_cell_style_name ) )
+            aDfltCellStyleName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_default_cell_style_name );
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_XML | XML_id ) )
+        {
+            ;
+        }
+            //FIXME where to put this??? columns do not actually exist in writer...
+    }
+
+    sal_Int32 nWidth = MINLAY;
+    bool bRelWidth = true;
+    if( !aStyleName.isEmpty() )
+    {
+        const SfxPoolItem *pItem;
+        const SfxItemSet *pAutoItemSet = 0;
+        if( GetSwImport().FindAutomaticStyle(
+                    XML_STYLE_FAMILY_TABLE_COLUMN,
+                                              aStyleName, &pAutoItemSet ) &&
+            pAutoItemSet &&
+            SfxItemState::SET == pAutoItemSet->GetItemState( RES_FRM_SIZE, false,
+                                                        &pItem ) )
+        {
+            const SwFmtFrmSize *pSize = static_cast<const SwFmtFrmSize *>(pItem);
+            nWidth = pSize->GetWidth();
+            bRelWidth = ATT_VAR_SIZE == pSize->GetHeightSizeType();
+        }
+    }
+
+    if( nWidth )
+    {
+        while( nColRep-- && GetTable()->IsInsertColPossible() )
+            GetTable()->InsertColumn( nWidth, bRelWidth, &aDfltCellStyleName );
+    }
+}
+
 SwXMLTableColContext_Impl::~SwXMLTableColContext_Impl()
 {
 }
commit 851788167c97d8bea8f32d756567e06ed26856f5
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 13:19:53 2015 +0100

    SwXMLTableCellContext_Impl impl. fast interface
    
    all necessary methods from fastparser interface implemented
    
    Change-Id: Ifc8bbec6f14d8b01d75b14bc8d840c1288866307

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index 9550f35..7e6b78a 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -446,13 +446,22 @@ public:
             SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName,
             const Reference< xml::sax::XAttributeList > & xAttrList,
             SwXMLTableContext *pTable );
+    SwXMLTableCellContext_Impl( SwXMLImport& rImport, sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList,
+        SwXMLTableContext *pTable );
 
     virtual ~SwXMLTableCellContext_Impl();
 
     virtual SvXMLImportContext *CreateChildContext(
             sal_uInt16 nPrefix, const OUString& rLocalName,
             const Reference< xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
+    virtual Reference< xml::sax::XFastContextHandler > SAL_CALL
+        createFastChildContext( sal_Int32 Element,
+        const Reference< xml::sax::XFastAttributeList >& xAttrList )
+        throw(RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
     virtual void EndElement() SAL_OVERRIDE;
+    virtual void SAL_CALL endFastElement( sal_Int32 Element )
+        throw(RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     SwXMLImport& GetSwImport() { return static_cast<SwXMLImport&>(GetImport()); }
 };
@@ -591,6 +600,133 @@ SwXMLTableCellContext_Impl::SwXMLTableCellContext_Impl(
     }
 }
 
+SwXMLTableCellContext_Impl::SwXMLTableCellContext_Impl(
+    SwXMLImport& rImport, sal_Int32 Element,
+    const Reference< xml::sax::XFastAttributeList > & xAttrList,
+    SwXMLTableContext *pTable )
+:   SvXMLImportContext( rImport ),
+    sFormula(),
+    xMyTable( pTable ),
+    fValue( 0.0 ),
+    bHasValue( false ),
+    m_bHasStringValue(false),
+    m_bValueTypeIsString(false),
+    bProtect( false ),
+    nRowSpan( 1UL ),
+    nColSpan( 1UL ),
+    nColRepeat( 1UL ),
+    bHasTextContent( false ),
+    bHasTableContent( false )
+{
+    sSaveParaDefault = GetImport().GetTextImport()->GetCellParaStyleDefault();
+    uno::Sequence< xml::FastAttribute > attributes = xAttrList->getFastAttributes();
+    for( xml::FastAttribute attribute : attributes )
+    {
+        const SvXMLTokenMap& rTokenMap =
+            GetSwImport().GetTableCellAttrTokenMap();
+        switch( rTokenMap.Get( attribute.Token ) )
+        {
+        case XML_TOK_TABLE_XMLID:
+            mXmlId = attribute.Value;
+            break;
+        case XML_TOK_TABLE_STYLE_NAME:
+            aStyleName = attribute.Value;
+            GetImport().GetTextImport()->SetCellParaStyleDefault(attribute.Value);
+            break;
+        case XML_TOK_TABLE_NUM_COLS_SPANNED:
+            nColSpan = (sal_uInt32)attribute.Value.toInt32();
+            if( nColSpan < 1UL )
+                nColSpan = 1UL;
+            break;
+        case XML_TOK_TABLE_NUM_ROWS_SPANNED:
+            nRowSpan = (sal_uInt32)attribute.Value.toInt32();
+            if( nRowSpan < 1UL )
+                nRowSpan = 1UL;
+            break;
+        case XML_TOK_TABLE_NUM_COLS_REPEATED:
+            nColRepeat = (sal_uInt32)attribute.Value.toInt32();
+            if( nColRepeat < 1UL )
+                nColRepeat = 1UL;
+            break;
+        case XML_TOK_TABLE_FORMULA:
+            {
+                OUString sTmp;
+                const sal_uInt16 nPrefix2 = GetImport().GetNamespaceMap().
+                        _GetKeyByAttrName( attribute.Value, &sTmp, false );
+                sFormula = XML_NAMESPACE_OOOW == nPrefix2 ? sTmp : attribute.Value;
+            }
+            break;
+        case XML_TOK_TABLE_VALUE:
+            {
+                double fTmp;
+                if (::sax::Converter::convertDouble(fTmp, attribute.Value))
+                {
+                    fValue = fTmp;
+                    bHasValue = true;
+                }
+            }
+            break;
+        case XML_TOK_TABLE_TIME_VALUE:
+            {
+                double fTmp;
+                if (::sax::Converter::convertDuration(fTmp, attribute.Value))
+                {
+                    fValue = fTmp;
+                    bHasValue = true;
+                }
+            }
+            break;
+        case XML_TOK_TABLE_DATE_VALUE:
+            {
+                double fTmp;
+                if (GetImport().GetMM100UnitConverter().convertDateTime(fTmp,
+                                                                      attribute.Value))
+                {
+                    fValue = fTmp;
+                    bHasValue = true;
+                }
+            }
+            break;
+        case XML_TOK_TABLE_BOOLEAN_VALUE:
+            {
+                bool bTmp(false);
+                if (::sax::Converter::convertBool(bTmp, attribute.Value))
+                {
+                    fValue = (bTmp ? 1.0 : 0.0);
+                    bHasValue = true;
+                }
+            }
+            break;
+        case XML_TOK_TABLE_PROTECTED:
+            {
+                bool bTmp(false);
+                if (::sax::Converter::convertBool(bTmp, attribute.Value))
+                {
+                    bProtect = bTmp;
+                }
+            }
+            break;
+        case XML_TOK_TABLE_STRING_VALUE:
+            {
+                m_StringValue = attribute.Value;
+                m_bHasStringValue = true;
+            }
+            break;
+        case XML_TOK_TABLE_VALUE_TYPE:
+            {
+                if ("string" == attribute.Value)
+                {
+                    m_bValueTypeIsString = true;
+                }
+                // ignore other types - it would be correct to require
+                // matching value-type and $type-value attributes,
+                // but we've been reading those without checking forever.
+            }
+            break;
+        }
+    }
+}
+
 SwXMLTableCellContext_Impl::~SwXMLTableCellContext_Impl()
 {
 }
@@ -696,6 +832,66 @@ SvXMLImportContext *SwXMLTableCellContext_Impl::CreateChildContext(
     return pContext;
 }
 
+Reference< xml::sax::XFastContextHandler > SAL_CALL
+    SwXMLTableCellContext_Impl::createFastChildContext( sal_Int32 Element,
+    const Reference< xml::sax::XFastAttributeList >& xAttrList )
+    throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+    Reference< xml::sax::XFastContextHandler > pContext = 0;
+
+    OUString sXmlId;
+    bool bSubTable = false;
+    if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_table) )
+    {
+        uno::Sequence< xml::FastAttribute > attributes = xAttrList->getFastAttributes();
+        for( xml::FastAttribute attribute : attributes )
+        {
+            if( attribute.Token == (FastToken::NAMESPACE | XML_NAMESPACE_TABLE | XML_is_sub_table)
+                && attribute.Value.equals( "true" ) )
+            {
+                bSubTable = true;
+            }
+            else if( attribute.Token == (FastToken::NAMESPACE | XML_NAMESPACE_XML | XML_id) )
+            {
+                sXmlId = attribute.Value;
+            }
+        //FIXME: RDFa
+        }
+    }
+
+    if( bSubTable )
+    {
+        if( !HasContent() )
+        {
+            SwXMLTableContext *pTblContext =
+                new SwXMLTableContext( GetSwImport(), Element,
+                                       xAttrList, GetTable() );
+            pContext = pTblContext;
+            if( GetTable()->IsValid() )
+                InsertContent( pTblContext );
+
+            GetTable()->SetHasSubTables( true );
+        }
+    }
+    else
+    {
+        if( GetTable()->IsValid() )
+            InsertContentIfNotThere();
+        // fdo#60842: "office:string-value" overrides text content -> no import
+        if (!(m_bValueTypeIsString && m_bHasStringValue))
+        {
+            pContext = GetImport().GetTextImport()->CreateTextChildContext(
+                        GetImport(), Element, xAttrList,
+                        XML_TEXT_TYPE_CELL  );
+        }
+    }
+
+    if( !pContext.is() )
+        pContext = new SvXMLImportContext( GetImport() );
+
+    return pContext;
+}
+
 void SwXMLTableCellContext_Impl::EndElement()
 {
     if( GetTable()->IsValid() )
@@ -754,6 +950,66 @@ void SwXMLTableCellContext_Impl::EndElement()
     GetImport().GetTextImport()->SetCellParaStyleDefault(sSaveParaDefault);
 }
 
+void SAL_CALL SwXMLTableCellContext_Impl::endFastElement( sal_Int32 /*Element*/)
+    throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+    if( GetTable()->IsValid() )
+    {
+        if( bHasTextContent )
+        {
+            GetImport().GetTextImport()->DeleteParagraph();
+            if( nColRepeat > 1 && nColSpan == 1 )
+            {
+                // The original text is invalid after deleting the last
+                // paragraph
+                Reference < XTextCursor > xSrcTxtCursor =
+                    GetImport().GetTextImport()->GetText()->createTextCursor();
+                xSrcTxtCursor->gotoEnd( sal_True );
+
+                // Until we have an API for copying we have to use the core.
+                Reference<XUnoTunnel> xSrcCrsrTunnel( xSrcTxtCursor, UNO_QUERY);
+                assert(xSrcCrsrTunnel.is() && "missing XUnoTunnel for Cursor");
+                OTextCursorHelper *pSrcTxtCrsr = reinterpret_cast< OTextCursorHelper * >(
+                        sal::static_int_cast< sal_IntPtr >( xSrcCrsrTunnel->getSomething( OTextCursorHelper::getUnoTunnelId() )));
+                assert(pSrcTxtCrsr && "SwXTextCursor missing");
+                SwDoc *pDoc = pSrcTxtCrsr->GetDoc();
+                const SwPaM *pSrcPaM = pSrcTxtCrsr->GetPaM();
+
+                while( nColRepeat > 1 && GetTable()->IsInsertCellPossible() )
+                {
+                    _InsertContent();
+
+                    Reference<XUnoTunnel> xDstCrsrTunnel(
+                        GetImport().GetTextImport()->GetCursor(), UNO_QUERY);
+                    assert(xDstCrsrTunnel.is() && "missing XUnoTunnel for Cursor");
+                    OTextCursorHelper *pDstTxtCrsr = reinterpret_cast< OTextCursorHelper * >(
+                            sal::static_int_cast< sal_IntPtr >( xDstCrsrTunnel->getSomething( OTextCursorHelper::getUnoTunnelId() )) );
+                    assert(pDstTxtCrsr && "SwXTextCursor missing");
+                    SwPaM aSrcPaM(*pSrcPaM->GetMark(), *pSrcPaM->GetPoint());
+                    SwPosition aDstPos( *pDstTxtCrsr->GetPaM()->GetPoint() );
+                    pDoc->getIDocumentContentOperations().CopyRange( aSrcPaM, aDstPos, false );
+
+                    nColRepeat--;
+                }
+            }
+        }
+        else if( !bHasTableContent )
+        {
+            InsertContent();
+            if( nColRepeat > 1 && nColSpan == 1 )
+            {
+                while( nColRepeat > 1 && GetTable()->IsInsertCellPossible() )
+                {
+                    _InsertContent();
+                    nColRepeat--;
+                }
+            }
+        }
+    }
+    GetImport().GetTextImport()->SetCellParaStyleDefault(sSaveParaDefault);
+}
+
+
 class SwXMLTableColContext_Impl : public SvXMLImportContext
 {
     SvXMLImportContextRef   xMyTable;
commit 0c29905a1843f25d0c659d65c4c592493205753c
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 13:35:55 2015 +0100

    SwXMLTableContext impl. fastparser interface
    
    only method declarations, no implementation
    
    Change-Id: I582be1320c7b6140159479e25809fbc22bbcf25c

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index 72134aa..9550f35 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -1439,6 +1439,29 @@ SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport,
 }
 
 SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport,
+    sal_Int32 Element,
+    const Reference< xml::sax::XFastAttributeList > & xAttrList )
+:   XMLTextTableContext( rImport, Element ),
+    pColumnDefaultCellStyleNames( 0 ),
+    pRows( new SwXMLTableRows_Impl ),
+    pTableNode( 0 ),
+    pBox1( 0 ),
+    pSttNd1( 0 ),
+    pBoxFmt( 0 ),
+    pLineFmt( 0 ),
+    pSharedBoxFormats(NULL),
+    pDDESource(NULL),
+    bFirstSection( true ),
+    bRelWidth( true ),
+    bHasSubTables( false ),
+    nHeaderRows( 0 ),
+    nCurRow( 0UL ),
+    nCurCol( 0UL ),
+    nWidth( 0UL )
+{
+}
+
+SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport,
         sal_uInt16 nPrfx,
         const OUString& rLName,
         const Reference< xml::sax::XAttributeList > &,
@@ -1464,6 +1487,30 @@ SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport,
 {
 }
 
+SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport,
+    sal_Int32 Element, const Reference< xml::sax::XFastAttributeList >&,
+    SwXMLTableContext *pTable )
+:   XMLTextTableContext( rImport, Element ),
+    pColumnDefaultCellStyleNames( 0 ),
+    pRows( new SwXMLTableRows_Impl ),
+    pTableNode( pTable->pTableNode ),
+    pBox1( 0 ),
+    pSttNd1( 0 ),
+    pBoxFmt( 0 ),
+    pLineFmt( 0 ),
+    pSharedBoxFormats(NULL),
+    xParentTable( pTable ),
+    pDDESource(NULL),
+    bFirstSection( false ),
+    bRelWidth( true ),
+    bHasSubTables( false ),
+    nHeaderRows( 0 ),
+    nCurRow( 0UL ),
+    nCurCol( 0UL ),
+    nWidth( 0UL )
+{
+}
+
 SwXMLTableContext::~SwXMLTableContext()
 {
     delete pColumnDefaultCellStyleNames;
@@ -1533,6 +1580,19 @@ SvXMLImportContext *SwXMLTableContext::CreateChildContext( sal_uInt16 nPrefix,
     return pContext;
 }
 
+Reference< xml::sax::XFastContextHandler > SAL_CALL
+    SwXMLTableContext::createFastChildContext( sal_Int32 Element,
+    const Reference< xml::sax::XFastAttributeList >& xAttrList )
+    throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+    Reference< xml::sax::XFastContextHandler > pContext = 0;
+
+    if( !pContext.is() )
+        pContext = new SvXMLImportContext( GetImport() );
+
+    return pContext;
+}
+
 void SwXMLTableContext::InsertColumn( sal_Int32 nWidth2, bool bRelWidth2,
                                          const OUString *pDfltCellStyleName )
 {
diff --git a/sw/source/filter/xml/xmltbli.hxx b/sw/source/filter/xml/xmltbli.hxx
index f5017fb..ac62c96 100644
--- a/sw/source/filter/xml/xmltbli.hxx
+++ b/sw/source/filter/xml/xmltbli.hxx
@@ -136,11 +136,16 @@ public:
                    const OUString& rLName,
                 const ::com::sun::star::uno::Reference<
                     ::com::sun::star::xml::sax::XAttributeList > & xAttrList );
+    SwXMLTableContext( SwXMLImport& rImport, sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList);
     SwXMLTableContext( SwXMLImport& rImport, sal_uInt16 nPrfx,
                    const OUString& rLName,
                   const ::com::sun::star::uno::Reference<
                     ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
                 SwXMLTableContext *pTable );
+    SwXMLTableContext( SwXMLImport& rImport, sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        SwXMLTableContext *pTable );
 
     virtual ~SwXMLTableContext();
 
@@ -148,6 +153,10 @@ public:
                 const OUString& rLocalName,
                 const ::com::sun::star::uno::Reference<
                     ::com::sun::star::xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
+        createFastChildContext( sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList)
+        throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     SwXMLImport& GetSwImport() { return static_cast<SwXMLImport&>(GetImport()); }
 
commit 1582c490a700bc6f909ddd145fd41f3560df9e22
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 13:46:10 2015 +0100

    XMLTextImportHelper compatible with fastparser
    
    one method needs implementation
    
    Change-Id: Id76773e3e0fdb1e05cc3d68de6da938f2598c449

diff --git a/include/xmloff/txtimp.hxx b/include/xmloff/txtimp.hxx
index 592c834..a98581d 100644
--- a/include/xmloff/txtimp.hxx
+++ b/include/xmloff/txtimp.hxx
@@ -64,7 +64,8 @@ namespace text {
 namespace frame { class XModel; }
 namespace container { class XNameContainer; class XIndexReplace; class XNameAccess; }
 namespace beans { class XPropertySet; }
-namespace xml { namespace sax { class XAttributeList; } }
+namespace xml { namespace sax { class XAttributeList;
+                                class XFastAttributeList; } }
 namespace util { struct DateTime; }
 namespace lang { class XMultiServiceFactory; }
 } } }
@@ -383,6 +384,9 @@ protected:
                 sal_uInt16 nPrefix, const OUString& rLocalName,
                 const ::com::sun::star::uno::Reference<
                     ::com::sun::star::xml::sax::XAttributeList > & xAttrList );
+    virtual SvXMLImportContext *CreateTableChildContext(
+        SvXMLImport& rImport, sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList);
 
     // access, lazy initialization and destruction of backpatchers
     // Code is implemented in XMLPropertyBackpatcher.cxx
@@ -415,6 +419,10 @@ public:
             const ::com::sun::star::uno::Reference<
                 ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
             XMLTextType eType = XML_TEXT_TYPE_SHAPE );
+    SvXMLImportContext *CreateTextChildContext(
+        SvXMLImport& rImport, sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        XMLTextType eType = XML_TEXT_TYPE_SHAPE );
 
     SvXMLTokenMap const& GetTextElemTokenMap();
     SvXMLTokenMap const& GetTextPElemTokenMap();
diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx
index edecd75..3683df5 100644
--- a/xmloff/source/text/txtimp.cxx
+++ b/xmloff/source/text/txtimp.cxx
@@ -2612,6 +2612,16 @@ SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext(
     return pContext;
 }
 
+SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext(
+    SvXMLImport& rImport, sal_Int32 Element,
+    const Reference< XFastAttributeList >& xAttrList,
+    XMLTextType eType )
+{
+    SvXMLImportContext *pContext = 0;
+
+    return pContext;
+}
+
 SvXMLImportContext *XMLTextImportHelper::CreateTableChildContext(
         SvXMLImport&,
         sal_uInt16 /*nPrefix*/, const OUString& /*rLocalName*/,
@@ -2620,6 +2630,13 @@ SvXMLImportContext *XMLTextImportHelper::CreateTableChildContext(
     return 0;
 }
 
+SvXMLImportContext *XMLTextImportHelper::CreateTableChildContext(
+    SvXMLImport&, sal_Int32 /*Element*/,
+    const Reference< XFastAttributeList >& )
+{
+    return 0;
+}
+
 /// get data style key for use with NumberFormat property
 sal_Int32 XMLTextImportHelper::GetDataStyleKey(const OUString& sStyleName,
                                                bool* pIsSystemLanguage )
commit 0c3da70b9c8c5fa489259617dc94b9265a4ae622
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Mon Feb 23 13:39:42 2015 +0100

    XMLTextTableContext implements fast interface
    
    Change-Id: Id33586bf876d822ae9a3fd4cfc18877fb20c3adf

diff --git a/include/xmloff/XMLTextTableContext.hxx b/include/xmloff/XMLTextTableContext.hxx
index a039beb..f5d8857 100644
--- a/include/xmloff/XMLTextTableContext.hxx
+++ b/include/xmloff/XMLTextTableContext.hxx
@@ -39,6 +39,7 @@ public:
     XMLTextTableContext( SvXMLImport& rImport,
             sal_uInt16 nPrfx,
             const OUString& rLName );
+    XMLTextTableContext( SvXMLImport& rImport, sal_Int32 Element );
     virtual ~XMLTextTableContext();
 
     virtual ::com::sun::star::uno::Reference <
diff --git a/xmloff/source/text/XMLTextTableContext.cxx b/xmloff/source/text/XMLTextTableContext.cxx
index 51f0755..22996c7 100644
--- a/xmloff/source/text/XMLTextTableContext.cxx
+++ b/xmloff/source/text/XMLTextTableContext.cxx
@@ -33,6 +33,12 @@ XMLTextTableContext::XMLTextTableContext(
 {
 }
 
+XMLTextTableContext::XMLTextTableContext(
+    SvXMLImport& rImport, sal_Int32 /*Element*/ )
+:   SvXMLImportContext( rImport )
+{
+}
+
 XMLTextTableContext::~XMLTextTableContext()
 {
 }
commit 054d890b2ec83876ebfbda5a4da1f7a1b3125340
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Fri Feb 13 13:23:54 2015 +0100

    XMLDocumentSettingsContext impl. fast interface
    
    all methods implemented
    
    Change-Id: Ia4f99d9f4509e7ea38b89d37989ddc5c31e407a9

diff --git a/include/xmloff/DocumentSettingsContext.hxx b/include/xmloff/DocumentSettingsContext.hxx
index 24296f3..0df9d77 100644
--- a/include/xmloff/DocumentSettingsContext.hxx
+++ b/include/xmloff/DocumentSettingsContext.hxx
@@ -38,13 +38,21 @@ public:
     XMLDocumentSettingsContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName,
                                     const ::com::sun::star::uno::Reference<
                                     ::com::sun::star::xml::sax::XAttributeList>& xAttrList);
+    XMLDocumentSettingsContext( SvXMLImport& rImport, sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList);
     virtual ~XMLDocumentSettingsContext();
 
     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
                                                     const OUString& rLocalName,
                                                     const ::com::sun::star::uno::Reference<
                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList ) SAL_OVERRIDE;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList>& Attribs)
+        throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
+
     virtual void EndElement() SAL_OVERRIDE;
+    virtual void SAL_CALL endFastElement( sal_Int32 Element)
+        throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
 private:
     XMLDocumentSettingsContext();                                               // never implemented
diff --git a/xmloff/source/core/DocumentSettingsContext.cxx b/xmloff/source/core/DocumentSettingsContext.cxx
index 2f52387..d083f7a 100644
--- a/xmloff/source/core/DocumentSettingsContext.cxx
+++ b/xmloff/source/core/DocumentSettingsContext.cxx
@@ -372,6 +372,15 @@ XMLDocumentSettingsContext::XMLDocumentSettingsContext(SvXMLImport& rImport, sal
     // here are no attributes
 }
 
+XMLDocumentSettingsContext::XMLDocumentSettingsContext(
+    SvXMLImport& rImport, sal_Int32 /*Element*/,
+    const uno::Reference< xml::sax::XFastAttributeList >& )
+:   SvXMLImportContext( rImport ),
+    m_pData( new XMLDocumentSettingsContext_Data )
+{
+    // here are no attributes
+}
+
 XMLDocumentSettingsContext::~XMLDocumentSettingsContext()
 {
 }
@@ -441,8 +450,50 @@ SvXMLImportContext *XMLDocumentSettingsContext::CreateChildContext( sal_uInt16 p
     return pContext;
 }
 
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL XMLDocumentSettingsContext::createFastChildContext(
+    sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList)
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    SvXMLImportContext *pContext = 0;
+    OUString sName;
+
+    if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_name ) )
+    {
+        sName = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_name );
+    }
+
+    if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_config_item_set) )
+    {
+        if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_OOO | XML_view_settings ) )
+            pContext = new XMLConfigItemSetContext(GetImport(), xAttrList, m_pData->aViewProps, NULL);
+        else if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_OOO | XML_configuration_settings ) )
+            pContext = new XMLConfigItemSetContext(GetImport(), xAttrList, m_pData->aConfigProps, NULL);
+        else
+        {
+            //TODO :: Fix right name
+            m_pData->aDocSpecificSettings.push_back( SettingsGroup( "", uno::Any() ) );
+            std::list< SettingsGroup >::reverse_iterator settingsPos =
+                m_pData->aDocSpecificSettings.rbegin();
+
+            pContext = new XMLConfigItemSetContext(GetImport(), xAttrList, settingsPos->aSettings, NULL);
+        }
+    }
+
+    if( !pContext )
+        pContext = new SvXMLImportContext( GetImport() );
+
+    return pContext;
+}
+
 void XMLDocumentSettingsContext::EndElement()
 {
+    //workaround until EndElement can be removed
+    endFastElement(0);
+}
+
+void SAL_CALL XMLDocumentSettingsContext::endFastElement( sal_Int32 /*Element*/ )
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
     uno::Sequence<beans::PropertyValue> aSeqViewProps;
     if (m_pData->aViewProps >>= aSeqViewProps)
     {
commit 51d846e71204921a78b60567ea071751722be441
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Fri Feb 13 13:14:55 2015 +0100

    derived classes of XMLConfigBaseContext ...
    
    implement fast interface
    XMLConfigItemMapIndexedContext
    XMLConfigItemSetContext
    XMLConfigItemMapNamedContext
    
    Change-Id: I77d60ec15f31f4908194c688b0ad8eaff97bb3d5

diff --git a/xmloff/source/core/DocumentSettingsContext.cxx b/xmloff/source/core/DocumentSettingsContext.cxx
index 2510924..2f52387 100644
--- a/xmloff/source/core/DocumentSettingsContext.cxx
+++ b/xmloff/source/core/DocumentSettingsContext.cxx
@@ -191,14 +191,22 @@ public:
                                     ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
                                     com::sun::star::uno::Any& rAny,
                                     XMLConfigBaseContext* pBaseContext);
+    XMLConfigItemSetContext(SvXMLImport& rImport,
+        const uno::Reference< xml::sax::XFastAttributeList >& xAttrList,
+        uno::Any& rAny, XMLConfigBaseContext* pBaseContext);
     virtual ~XMLConfigItemSetContext();
 
     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
                                                     const OUString& rLocalName,
                                                     const ::com::sun::star::uno::Reference<
                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList ) SAL_OVERRIDE;
+    virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     virtual void EndElement() SAL_OVERRIDE;
+    virtual void SAL_CALL endFastElement( sal_Int32 Element )
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 };
 
 class XMLConfigItemMapNamedContext : public XMLConfigBaseContext
@@ -209,6 +217,9 @@ public:
                                     ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
                                     com::sun::star::uno::Any& rAny,
                                     XMLConfigBaseContext* pBaseContext);
+    XMLConfigItemMapNamedContext(SvXMLImport& rImport, sal_Int32 Element,
+        const uno::Reference< xml::sax::XFastAttributeList >& xAttrList,
+        uno::Any& rAny, XMLConfigBaseContext* pBaseContext);
     virtual ~XMLConfigItemMapNamedContext();
 
     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
@@ -217,6 +228,13 @@ public:
                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList ) SAL_OVERRIDE;
 
     virtual void EndElement() SAL_OVERRIDE;
+
+    virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
+
+    virtual void SAL_CALL endFastElement( sal_Int32 Element )
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 };
 
 class XMLConfigItemMapIndexedContext : public XMLConfigBaseContext
@@ -232,6 +250,10 @@ public:
                                     com::sun::star::uno::Any& rAny,
                                     const OUString& rConfigItemName,
                                     XMLConfigBaseContext* pBaseContext);
+    XMLConfigItemMapIndexedContext(SvXMLImport& rImport, sal_Int32 Element,
+        const uno::Reference< xml::sax::XFastAttributeList >& xAttrList,
+        uno::Any& rAny, const OUString& rConfigItemName, XMLConfigBaseContext* pBaseContext);
+
     virtual ~XMLConfigItemMapIndexedContext();
 
     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
@@ -240,6 +262,13 @@ public:
                                         ::com::sun::star::xml::sax::XAttributeList>& xAttrList ) SAL_OVERRIDE;
 
     virtual void EndElement() SAL_OVERRIDE;
+
+    virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
+
+    virtual void SAL_CALL endFastElement( sal_Int32 Element )
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 };
 
 SvXMLImportContext *CreateSettingsContext(SvXMLImport& rImport, sal_uInt16 p_nPrefix,
@@ -285,6 +314,34 @@ SvXMLImportContext *CreateSettingsContext(SvXMLImport& rImport, sal_uInt16 p_nPr
     return pContext;
 }
 
+uno::Reference< xml::sax::XFastContextHandler > CreateSettingsContext(
+    SvXMLImport& rImport, sal_Int32 Element,
+    const uno::Reference< xml::sax::XFastAttributeList >& xAttrList,
+    beans::PropertyValue& rProp, XMLConfigBaseContext* pBaseContext)
+{
+    SvXMLImportContext *pContext = 0;
+    rProp.Name.clear();
+
+    if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_name ) )
+    {
+        rProp.Name = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_name );
+    }
+
+    if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_config_item) )
+        pContext = new XMLConfigItemContext(rImport, Element, xAttrList, rProp.Value, rProp.Name, pBaseContext);
+    else if( Element ==  (FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_config_item_set) ||
+            Element == (FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_config_item_map_entry) )
+        pContext = new XMLConfigItemSetContext(rImport, xAttrList, rProp.Value, pBaseContext);
+    else if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_config_item_map_named) )
+        pContext = new XMLConfigItemMapNamedContext(rImport, Element, xAttrList, rProp.Value, pBaseContext);
+    else if( Element == (FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_config_item_map_indexed) )
+        pContext = new XMLConfigItemMapIndexedContext(rImport, Element, xAttrList, rProp.Value, rProp.Name, pBaseContext);
+
+    if( !pContext )
+        pContext = new SvXMLImportContext( rImport );
+    return pContext;
+}
+
 namespace
 {
     struct SettingsGroup
@@ -489,6 +546,14 @@ XMLConfigItemSetContext::XMLConfigItemSetContext(SvXMLImport& rImport, sal_uInt1
     // here are no attributes
 }
 
+XMLConfigItemSetContext::XMLConfigItemSetContext(SvXMLImport& rImport,
+    const uno::Reference< xml::sax::XFastAttributeList >&,
+    uno::Any& rAny, XMLConfigBaseContext* pBaseContext)
+    : XMLConfigBaseContext( rImport, rAny, pBaseContext )
+{
+    // here are no attributes
+}
+
 XMLConfigItemSetContext::~XMLConfigItemSetContext()
 {
 }
@@ -501,6 +566,13 @@ SvXMLImportContext *XMLConfigItemSetContext::CreateChildContext( sal_uInt16 nPre
     return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this);
 }
 
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL XMLConfigItemSetContext::createFastChildContext(
+    sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList)
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    return CreateSettingsContext(GetImport(), Element, xAttrList, maProp, this);
+}
+
 void XMLConfigItemSetContext::EndElement()
 {
     mrAny <<= maProps.GetSequence();
@@ -508,6 +580,14 @@ void XMLConfigItemSetContext::EndElement()
         mpBaseContext->AddPropertyValue();
 }
 
+void SAL_CALL XMLConfigItemSetContext::endFastElement( sal_Int32 /*Element*/ )
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    mrAny <<= maProps.GetSequence();
+    if (mpBaseContext)
+        mpBaseContext->AddPropertyValue();
+}
+
 XMLConfigItemContext::XMLConfigItemContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName,
                                     const ::com::sun::star::uno::Reference<
                                     ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
@@ -770,6 +850,14 @@ XMLConfigItemMapNamedContext::XMLConfigItemMapNamedContext(SvXMLImport& rImport,
 {
 }
 
+XMLConfigItemMapNamedContext::XMLConfigItemMapNamedContext(SvXMLImport& rImport,
+    sal_Int32 /*Element*/,
+    const uno::Reference< xml::sax::XFastAttributeList >&,
+    uno::Any& rAny, XMLConfigBaseContext* pBaseContext)
+    : XMLConfigBaseContext(rImport, rAny, pBaseContext)
+{
+}
+
 XMLConfigItemMapNamedContext::~XMLConfigItemMapNamedContext()
 {
 }
@@ -782,6 +870,13 @@ SvXMLImportContext *XMLConfigItemMapNamedContext::CreateChildContext( sal_uInt16
     return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this);
 }
 
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL XMLConfigItemMapNamedContext::createFastChildContext(
+    sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    return CreateSettingsContext(GetImport(), Element, xAttrList, maProp, this);
+}
+
 void XMLConfigItemMapNamedContext::EndElement()
 {
     if (mpBaseContext)
@@ -794,6 +889,19 @@ void XMLConfigItemMapNamedContext::EndElement()
     }
 }
 
+void SAL_CALL XMLConfigItemMapNamedContext::endFastElement( sal_Int32 /*Element*/ )
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    if (mpBaseContext)
+    {
+        mrAny <<= maProps.GetNameContainer();
+        mpBaseContext->AddPropertyValue();
+    }
+    else {
+        OSL_FAIL("no BaseContext");
+    }
+}
+
 XMLConfigItemMapIndexedContext::XMLConfigItemMapIndexedContext(SvXMLImport& rImport, sal_uInt16 nPrfx,
                                     const OUString& rLName,
                                     const ::com::sun::star::uno::Reference<
@@ -806,6 +914,16 @@ XMLConfigItemMapIndexedContext::XMLConfigItemMapIndexedContext(SvXMLImport& rImp
 {
 }
 
+XMLConfigItemMapIndexedContext::XMLConfigItemMapIndexedContext(
+    SvXMLImport& rImport, sal_Int32 /*Element*/,
+    const uno::Reference< xml::sax::XFastAttributeList >& ,
+    uno::Any& rAny, const OUString& rConfigItemName,
+    XMLConfigBaseContext* pBaseContext)
+    : XMLConfigBaseContext(rImport, rAny, pBaseContext),
+    maConfigItemName( rConfigItemName )
+{
+}
+
 XMLConfigItemMapIndexedContext::~XMLConfigItemMapIndexedContext()
 {
 }
@@ -818,8 +936,21 @@ SvXMLImportContext *XMLConfigItemMapIndexedContext::CreateChildContext( sal_uInt
     return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this);
 }
 
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL XMLConfigItemMapIndexedContext::createFastChildContext(
+    sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList)
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    return CreateSettingsContext(GetImport(), Element, xAttrList, maProp, this);
+}
+
 void XMLConfigItemMapIndexedContext::EndElement()
 {
+    endFastElement( 0 );
+}
+
+void SAL_CALL XMLConfigItemMapIndexedContext::endFastElement( sal_Int32 /*Element*/ )
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
     if (mpBaseContext)
     {
         if ( maConfigItemName == "ForbiddenCharacters" )
commit b13e5ac10cd49e8d6c7c614473d0af2079348f04
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Fri Feb 13 13:02:26 2015 +0100

    XMLConfigItemContext implements fast interface
    
    the method endElement must be changed
    
    Change-Id: Ib1cb478017cffe22ed6a232625949bc14ff3581f

diff --git a/xmloff/source/core/DocumentSettingsContext.cxx b/xmloff/source/core/DocumentSettingsContext.cxx
index 7fabac1..2510924 100644
--- a/xmloff/source/core/DocumentSettingsContext.cxx
+++ b/xmloff/source/core/DocumentSettingsContext.cxx
@@ -158,6 +158,10 @@ public:
                                     com::sun::star::uno::Any& rAny,
                                     const OUString& rItemName,
                                     XMLConfigBaseContext* pBaseContext);
+    XMLConfigItemContext(SvXMLImport& rImport, sal_Int32 Element,
+        const uno::Reference< xml::sax::XFastAttributeList >& xAttrList,
+        uno::Any& rAny, const OUString& rItemName, XMLConfigBaseContext* pBaseContext);
+
     virtual ~XMLConfigItemContext();
 
     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
@@ -168,6 +172,14 @@ public:
 
     virtual void EndElement() SAL_OVERRIDE;
 
+    virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList>& xAttrList)
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL endFastElement( sal_Int32 Element )
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL characters( const OUString& aChars )
+        throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE;
+
     virtual void ManipulateConfigItem();
 };
 
@@ -524,6 +536,18 @@ XMLConfigItemContext::XMLConfigItemContext(SvXMLImport& rImport, sal_uInt16 nPrf
     }
 }
 
+XMLConfigItemContext::XMLConfigItemContext(SvXMLImport& rImport, sal_Int32 /*Element*/,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+    css::uno::Any& rTempAny, const OUString& rTempItemName, XMLConfigBaseContext* pTempBaseContext)
+    : SvXMLImportContext(rImport),
+    mrAny(rTempAny),
+    mrItemName(rTempItemName),
+    mpBaseContext(pTempBaseContext)
+{
+    if( xAttrList->hasAttribute( FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_type ) )
+        msType = xAttrList->getValue( FastToken::NAMESPACE | XML_NAMESPACE_CONFIG | XML_type );
+}
+
 XMLConfigItemContext::~XMLConfigItemContext()
 {
 }
@@ -537,6 +561,14 @@ SvXMLImportContext *XMLConfigItemContext::CreateChildContext( sal_uInt16 nPrefix
     return pContext;
 }
 
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL XMLConfigItemContext::createFastChildContext(
+    sal_Int32 /*Element*/, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/)
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    SvXMLImportContext* pContext = new SvXMLImportContext(GetImport());
+    return pContext;
+}
+
 void XMLConfigItemContext::Characters( const OUString& rChars )
 {
     if (IsXMLToken(msType, XML_BASE64BINARY))
@@ -556,6 +588,44 @@ void XMLConfigItemContext::Characters( const OUString& rChars )
                 sChars = sTrimmedChars;
             }
             uno::Sequence<sal_Int8> aBuffer((sChars.getLength() / 4) * 3 );
+            sal_Int32 const nCharsDecoded =
+                ::sax::Converter::decodeBase64SomeChars( aBuffer, sChars );
+            sal_uInt32 nStartPos(maDecoded.getLength());
+            sal_uInt32 nCount(aBuffer.getLength());
+            maDecoded.realloc(nStartPos + nCount);
+            sal_Int8* pDecoded = maDecoded.getArray();
+            sal_Int8* pBuffer = aBuffer.getArray();
+            for (sal_uInt32 i = 0; i < nCount; i++, pBuffer++)
+                pDecoded[nStartPos + i] = *pBuffer;
+            if( nCharsDecoded != sChars.getLength() )
+                msValue = sChars.copy( nCharsDecoded );
+        }
+    }
+    else
+        msValue += rChars;
+}
+
+void SAL_CALL XMLConfigItemContext::characters( const OUString& rChars )
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    //TODO: should be done via tokens
+    if( msType.equals( "base64Binary" ) )
+    {
+        OUString sTrimmedChars( rChars.trim() );
+        if( !sTrimmedChars.isEmpty() )
+        {
+            OUString sChars;
+            if( !msValue.isEmpty() )
+            {
+                sChars = msValue;
+                sChars += sTrimmedChars;
+                msValue.clear();
+            }
+            else
+            {
+                sChars = sTrimmedChars;
+            }
+            uno::Sequence<sal_Int8> aBuffer((sChars.getLength() / 4) * 3 );
 			sal_Int32 const nCharsDecoded =
                 ::sax::Converter::decodeBase64SomeChars( aBuffer, sChars );
             sal_uInt32 nStartPos(maDecoded.getLength());
@@ -575,6 +645,14 @@ void XMLConfigItemContext::Characters( const OUString& rChars )
 
 void XMLConfigItemContext::EndElement()
 {
+    //workaround until EndElement can be removed
+    endFastElement(0);
+}
+
+void SAL_CALL XMLConfigItemContext::endFastElement(sal_Int32 /*Element*/)
+    throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
+{
+    //TODO: remove IsXMLToken with equivalent method
     if (mpBaseContext)
     {
         if (IsXMLToken(msType, XML_BOOLEAN))
commit 9d27bac3b4d9706450bda0b9dbccaee20e1240ae
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Fri Feb 13 12:52:24 2015 +0100

    XMLConfigBaseContext implements fast interface
    
    Change-Id: I8d095eab8fef2e9f9778205d9a1b860ca9bae00c

diff --git a/xmloff/source/core/DocumentSettingsContext.cxx b/xmloff/source/core/DocumentSettingsContext.cxx
index 5e3fc42..7fabac1 100644
--- a/xmloff/source/core/DocumentSettingsContext.cxx
+++ b/xmloff/source/core/DocumentSettingsContext.cxx
@@ -27,6 +27,7 @@
 #include <xmloff/DocumentSettingsContext.hxx>
 #include <xmloff/xmlimp.hxx>
 #include <xmloff/xmltoken.hxx>
+#include <xmloff/token/tokens.hxx>
 #include <xmloff/xmlnmspe.hxx>
 #include <xmloff/nmspmap.hxx>
 #include <xmloff/xmluconv.hxx>
@@ -43,12 +44,15 @@
 #include <com/sun/star/document/PrinterIndependentLayout.hpp>
 #include <com/sun/star/document/IndexedPropertyValues.hpp>
 #include <com/sun/star/document/NamedPropertyValues.hpp>
+#include <com/sun/star/xml/sax/FastToken.hpp>
 #include <rtl/ustrbuf.hxx>
 #include <osl/diagnose.h>
 #include <xmlenums.hxx>
 
 using namespace com::sun::star;
+using namespace css::xml::sax;
 using namespace ::xmloff::token;
+using namespace xmloff;
 
 class XMLMyList
 {
@@ -131,6 +135,8 @@ public:
     XMLConfigBaseContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName,
                                     com::sun::star::uno::Any& rAny,
                                     XMLConfigBaseContext* pBaseContext);
+    XMLConfigBaseContext(SvXMLImport& rImport, uno::Any& rAny,
+        XMLConfigBaseContext* pBaseContext);
     virtual ~XMLConfigBaseContext();
 
     void AddPropertyValue() { maProps.push_back(maProp); }
@@ -446,6 +452,16 @@ XMLConfigBaseContext::XMLConfigBaseContext(SvXMLImport& rImport, sal_uInt16 nPrf
 {
 }
 
+XMLConfigBaseContext::XMLConfigBaseContext(SvXMLImport& rImport,
+    uno::Any& rTempAny, XMLConfigBaseContext* pTempBaseContext)
+    : SvXMLImportContext( rImport ),
+    maProps( rImport.GetComponentContext() ),
+    maProp(),
+    mrAny(rTempAny),
+    mpBaseContext(pTempBaseContext)
+{
+}
+
 XMLConfigBaseContext::~XMLConfigBaseContext()
 {
 }
commit 64671f4ac91aca55cdb600540e6a52836270bf2c
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Fri Feb 13 12:32:00 2015 +0100

    XMLTextFrameHyperlinkContext impl fast interface
    
    all methods are implemented
    
    Change-Id: Iefc12d9fa4e1f48abacc0b2d6447305189a3df1c

diff --git a/xmloff/source/text/XMLTextFrameHyperlinkContext.cxx b/xmloff/source/text/XMLTextFrameHyperlinkContext.cxx
index 1e76bd3..778b04b 100644
--- a/xmloff/source/text/XMLTextFrameHyperlinkContext.cxx
+++ b/xmloff/source/text/XMLTextFrameHyperlinkContext.cxx
@@ -23,6 +23,8 @@
 #include <xmloff/nmspmap.hxx>
 #include <xmloff/xmlnmspe.hxx>
 #include <xmloff/xmltoken.hxx>
+#include <xmloff/token/tokens.hxx>
+#include <com/sun/star/xml/sax/FastToken.hpp>
 #include "XMLTextFrameContext.hxx"
 #include "XMLTextFrameHyperlinkContext.hxx"
 
@@ -33,6 +35,8 @@ using namespace ::com::sun::star::text;
 using namespace ::com::sun::star::xml::sax;
 using namespace ::com::sun::star::beans;
 using namespace ::xmloff::token;
+using namespace xmloff;
+using css::xml::sax::FastToken::NAMESPACE;
 
 namespace drawing = com::sun::star::drawing;
 
@@ -96,6 +100,56 @@ XMLTextFrameHyperlinkContext::XMLTextFrameHyperlinkContext(
     }
 }
 
+XMLTextFrameHyperlinkContext::XMLTextFrameHyperlinkContext(
+    SvXMLImport& rImport, sal_Int32 /*Element*/,
+    const Reference< XFastAttributeList >& xAttrList,
+    TextContentAnchorType eATyp )
+:   SvXMLImportContext( rImport ),
+    eDefaultAnchorType( eATyp ),
+    bMap( false )
+{
+    OUString sShow;
+    const SvXMLTokenMap& rTokenMap =
+        GetImport().GetTextImport()->GetTextHyperlinkAttrTokenMap();
+
+    Sequence< css::xml::FastAttribute > attributes = xAttrList->getFastAttributes();
+    for( css::xml::FastAttribute attribute : attributes )
+    {
+        switch( rTokenMap.Get( attribute.Token ) )
+        {
+        case XML_TOK_TEXT_HYPERLINK_HREF:
+            sHRef = GetImport().GetAbsoluteReference( attribute.Value );
+            break;
+        case XML_TOK_TEXT_HYPERLINK_NAME:
+            sName = attribute.Value;
+            break;
+        case XML_TOK_TEXT_HYPERLINK_TARGET_FRAME:
+            sTargetFrameName = attribute.Value;
+            break;
+        case XML_TOK_TEXT_HYPERLINK_SHOW:
+            sShow = attribute.Value;
+            break;
+        case XML_TOK_TEXT_HYPERLINK_SERVER_MAP:
+            {
+                bool bTmp(false);
+                if( ::sax::Converter::convertBool( bTmp, attribute.Value ) )
+                {
+                    bMap = bTmp;
+                }
+            }
+            break;
+        }
+    }
+
+    if( !sShow.isEmpty() && sTargetFrameName.isEmpty() )
+    {
+        if( sShow.equals( "new" ) )
+            sTargetFrameName = "_blank";
+        else if( sShow.equals( "replace" ) )
+            sTargetFrameName = "_self";
+    }
+}
+
 XMLTextFrameHyperlinkContext::~XMLTextFrameHyperlinkContext()
 {
 }
@@ -104,6 +158,11 @@ void XMLTextFrameHyperlinkContext::EndElement()
 {
 }
 
+void SAL_CALL XMLTextFrameHyperlinkContext::endFastElement( sal_Int32 /*Element*/ )
+    throw(RuntimeException, SAXException, std::exception)
+{
+}
+
 SvXMLImportContext *XMLTextFrameHyperlinkContext::CreateChildContext(
         sal_uInt16 nPrefix,
         const OUString& rLocalName,
@@ -132,6 +191,32 @@ SvXMLImportContext *XMLTextFrameHyperlinkContext::CreateChildContext(
     return pContext;
 }
 
+Reference< XFastContextHandler > SAL_CALL
+    XMLTextFrameHyperlinkContext::createFastChildContext( sal_Int32 Element,
+    const Reference< XFastAttributeList >& xAttrList )
+    throw(RuntimeException, SAXException, std::exception)
+{
+    SvXMLImportContext *pContext = 0;
+    XMLTextFrameContext *pTextFrameContext = 0;
+
+    if( Element == (NAMESPACE | XML_NAMESPACE_DRAW | XML_frame) )
+    {
+        pTextFrameContext = new XMLTextFrameContext( GetImport(), Element,
+                xAttrList, eDefaultAnchorType );
+    }
+
+    if( pTextFrameContext )
+    {
+        pTextFrameContext->SetHyperlink( sHRef, sName, sTargetFrameName, bMap );
+        pContext = pTextFrameContext;
+        xFrameContext = pContext;
+    }
+    else
+        pContext = new SvXMLImportContext( GetImport() );
+
+    return pContext;
+}
+
 
 TextContentAnchorType XMLTextFrameHyperlinkContext::GetAnchorType() const
 {
diff --git a/xmloff/source/text/XMLTextFrameHyperlinkContext.hxx b/xmloff/source/text/XMLTextFrameHyperlinkContext.hxx
index 8e3c076..ff58d88 100644
--- a/xmloff/source/text/XMLTextFrameHyperlinkContext.hxx
+++ b/xmloff/source/text/XMLTextFrameHyperlinkContext.hxx
@@ -48,14 +48,23 @@ public:
             const ::com::sun::star::uno::Reference<
                 ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
             ::com::sun::star::text::TextContentAnchorType eDefaultAnchorType );
+    XMLTextFrameHyperlinkContext( SvXMLImport& rImport, sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        css::text::TextContentAnchorType eDefaultAnchorType );
     virtual ~XMLTextFrameHyperlinkContext();
 
     virtual void EndElement() SAL_OVERRIDE;
+    virtual void SAL_CALL endFastElement( sal_Int32 Element )
+        throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
                 const OUString& rLocalName,
                  const ::com::sun::star::uno::Reference<
                     ::com::sun::star::xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
+        createFastChildContext( sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
+        throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     ::com::sun::star::text::TextContentAnchorType GetAnchorType() const;
 
commit 76434261f0921081ce03101a62edcfe39c2ac6b2
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Fri Feb 13 12:31:01 2015 +0100

    XMLTextFrameContext implements fast inteface
    
    only methods declarations, implementations are missing
    
    Change-Id: I113d81b19e1fc406b47e80331a5a2bd091348fa3

diff --git a/xmloff/source/text/XMLTextFrameContext.cxx b/xmloff/source/text/XMLTextFrameContext.cxx
index 58ed9b3..07082aa 100644
--- a/xmloff/source/text/XMLTextFrameContext.cxx
+++ b/xmloff/source/text/XMLTextFrameContext.cxx
@@ -56,6 +56,8 @@
 #include <basegfx/matrix/b2dhommatrixtools.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
 #include <map>
+#include <xmloff/token/tokens.hxx>
+#include <com/sun/star/xml/sax/FastToken.hpp>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -68,6 +70,8 @@ using namespace ::com::sun::star::drawing;
 using namespace ::com::sun::star::document;
 using namespace ::xmloff::token;
 using ::com::sun::star::document::XEventsSupplier;
+using namespace xmloff;
+using css::xml::sax::FastToken::NAMESPACE;
 
 #define XML_TEXT_FRAME_TEXTBOX 1
 #define XML_TEXT_FRAME_GRAPHIC 2
@@ -1380,6 +1384,7 @@ XMLTextFrameContext::XMLTextFrameContext(
 :   SvXMLImportContext( rImport, nPrfx, rLName )
 ,   MultiImageImportHelper()
 ,   m_xAttrList( new SvXMLAttributeList( xAttrList ) )
+,   m_xFastAttrList( 0 )
 ,   m_pHyperlink( 0 )
     // Implement Title/Description Elements UI (#i73249#)
 ,   m_sTitle()
@@ -1430,6 +1435,25 @@ XMLTextFrameContext::XMLTextFrameContext(
     }
 }
 
+XMLTextFrameContext::XMLTextFrameContext(
+    SvXMLImport& rImport, sal_Int32 /*Element*/,
+    const Reference< XFastAttributeList >& xAttrList,
+    TextContentAnchorType eATyp )
+:   SvXMLImportContext( rImport ),
+    MultiImageImportHelper(),
+    m_xAttrList( 0 ),
+    m_xFastAttrList( xAttrList ),
+    m_pHyperlink( 0 ),
+    // Implement Title/Description Elements UI (#i73249#)
+    m_sTitle(),
+    m_sDesc(),
+    m_eDefaultAnchorType( eATyp ),
+    // Shapes in Writer cannot be named via context menu (#i51726#)
+    m_HasAutomaticStyleWithoutParentStyle( false ),
+    m_bSupportsReplacement( false )
+{
+}
+
 XMLTextFrameContext::~XMLTextFrameContext()
 {
     delete m_pHyperlink;
@@ -1475,6 +1499,11 @@ void XMLTextFrameContext::EndElement()
     }
 }
 
+void SAL_CALL XMLTextFrameContext::endFastElement( sal_Int32 /*Element*/ )
+    throw(RuntimeException, SAXException, std::exception)
+{
+}
+
 SvXMLImportContext *XMLTextFrameContext::CreateChildContext(
         sal_uInt16 p_nPrefix,
         const OUString& rLocalName,
@@ -1684,6 +1713,16 @@ SvXMLImportContext *XMLTextFrameContext::CreateChildContext(
     return pContext;
 }
 
+Reference< XFastContextHandler > SAL_CALL
+    XMLTextFrameContext::createFastChildContext( sal_Int32 /*Element*/,
+    const Reference< XFastAttributeList >& /*xAttrList*/ )
+    throw(RuntimeException, SAXException, std::exception)
+{
+    Reference< XFastContextHandler > pContext = 0;
+
+    return pContext;
+}
+
 void XMLTextFrameContext::SetHyperlink( const OUString& rHRef,
                        const OUString& rName,
                        const OUString& rTargetFrameName,
diff --git a/xmloff/source/text/XMLTextFrameContext.hxx b/xmloff/source/text/XMLTextFrameContext.hxx
index affb9bb..68ec0cc 100644
--- a/xmloff/source/text/XMLTextFrameContext.hxx
+++ b/xmloff/source/text/XMLTextFrameContext.hxx
@@ -34,6 +34,7 @@ class XMLTextFrameContext : public SvXMLImportContext, public MultiImageImportHe
 {
     ::com::sun::star::uno::Reference<
         ::com::sun::star::xml::sax::XAttributeList > m_xAttrList;
+    css::uno::Reference< css::xml::sax::XFastAttributeList > m_xFastAttrList;
 
     SvXMLImportContextRef m_xImplContext;
     SvXMLImportContextRef m_xReplImplContext;
@@ -72,14 +73,23 @@ public:
             const ::com::sun::star::uno::Reference<
                 ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
             ::com::sun::star::text::TextContentAnchorType eDfltAnchorType );
+    XMLTextFrameContext( SvXMLImport& rImport, sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        css::text::TextContentAnchorType eDfltAnchorType );
     virtual ~XMLTextFrameContext();
 
     virtual void EndElement() SAL_OVERRIDE;
+    virtual void SAL_CALL endFastElement( sal_Int32 Element )
+        throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
                 const OUString& rLocalName,
                  const ::com::sun::star::uno::Reference<
                     ::com::sun::star::xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
+        createFastChildContext( sal_Int32 Element,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
+        throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
 
     void SetHyperlink( const OUString& rHRef,
                        const OUString& rName,
commit 83f7f8d7b52caa671fdd46cc9e328c2cfa888bc8
Author: Daniel Sikeler <d.sikeler94 at gmail.com>
Date:   Fri Feb 13 10:34:38 2015 +0100

    SvXMLTokenMapEntries in xmloff/source/text/
    
    Change-Id: I9ba59566f9f936f4f35176e801a1c690ad113427

diff --git a/xmloff/source/text/XMLFootnoteImportContext.cxx b/xmloff/source/text/XMLFootnoteImportContext.cxx
index 440ff06..de26402 100644
--- a/xmloff/source/text/XMLFootnoteImportContext.cxx
+++ b/xmloff/source/text/XMLFootnoteImportContext.cxx
@@ -25,6 +25,7 @@
 #include <xmloff/nmspmap.hxx>
 #include <xmloff/xmlnmspe.hxx>
 #include <xmloff/xmltoken.hxx>
+#include <xmloff/token/tokens.hxx>
 
 #include "XMLFootnoteBodyImportContext.hxx"
 #include "XMLTextListBlockContext.hxx"
@@ -35,6 +36,7 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/text/XFootnote.hpp>
+#include <com/sun/star/xml/sax/FastToken.hpp>
 
 
 
@@ -44,6 +46,8 @@ using namespace ::com::sun::star::lang;
 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::xml::sax;
 using namespace ::xmloff::token;
+using namespace xmloff;
+using css::xml::sax::FastToken::NAMESPACE;
 
 TYPEINIT1(XMLFootnoteImportContext, SvXMLImportContext);
 
@@ -58,8 +62,10 @@ enum XMLFootnoteChildToken {
 static const SvXMLTokenMapEntry aFootnoteChildTokenMap[] =
 {
     { XML_NAMESPACE_TEXT, XML_NOTE_CITATION,
-      XML_TOK_FTN_NOTE_CITATION },
-    { XML_NAMESPACE_TEXT, XML_NOTE_BODY, XML_TOK_FTN_NOTE_BODY },
+      XML_TOK_FTN_NOTE_CITATION,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_note_citation) },
+    { XML_NAMESPACE_TEXT, XML_NOTE_BODY, XML_TOK_FTN_NOTE_BODY,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_note_body) },
     XML_TOKEN_MAP_END
 };
 
diff --git a/xmloff/source/text/XMLSectionImportContext.cxx b/xmloff/source/text/XMLSectionImportContext.cxx
index ea8ed95..b3e16aa 100644
--- a/xmloff/source/text/XMLSectionImportContext.cxx
+++ b/xmloff/source/text/XMLSectionImportContext.cxx
@@ -27,6 +27,7 @@
 #include <xmloff/xmlnmspe.hxx>
 #include <xmloff/xmltoken.hxx>
 #include <xmloff/prstylei.hxx>
+#include <xmloff/token/tokens.hxx>
 #include <sax/tools/converter.hxx>
 #include <com/sun/star/container/XNamed.hpp>
 #include <com/sun/star/uno/Reference.h>
@@ -34,6 +35,7 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/text/ControlCharacter.hpp>
+#include <com/sun/star/xml/sax/FastToken.hpp>
 
 
 using ::com::sun::star::beans::XPropertySet;
@@ -41,10 +43,12 @@ using ::com::sun::star::uno::Reference;
 using ::com::sun::star::xml::sax::XAttributeList;
 using ::com::sun::star::lang::XMultiServiceFactory;
 using ::com::sun::star::container::XNamed;
+using css::xml::sax::FastToken::NAMESPACE;
 
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::text;
 using namespace ::xmloff::token;
+using namespace xmloff;
 
 
 TYPEINIT1( XMLSectionImportContext, SvXMLImportContext );
@@ -71,16 +75,25 @@ enum XMLSectionToken
 
 static const SvXMLTokenMapEntry aSectionTokenMap[] =
 {
-    { XML_NAMESPACE_XML , XML_ID, XML_TOK_SECTION_XMLID },
-    { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_SECTION_STYLE_NAME },
-    { XML_NAMESPACE_TEXT, XML_NAME, XML_TOK_SECTION_NAME },
-    { XML_NAMESPACE_TEXT, XML_CONDITION, XML_TOK_SECTION_CONDITION },
-    { XML_NAMESPACE_TEXT, XML_DISPLAY, XML_TOK_SECTION_DISPLAY },
-    { XML_NAMESPACE_TEXT, XML_PROTECTED, XML_TOK_SECTION_PROTECT },
-    { XML_NAMESPACE_TEXT, XML_PROTECTION_KEY, XML_TOK_SECTION_PROTECTION_KEY},
-    { XML_NAMESPACE_TEXT, XML_IS_HIDDEN, XML_TOK_SECTION_IS_HIDDEN },
+    { XML_NAMESPACE_XML , XML_ID, XML_TOK_SECTION_XMLID,
+        (NAMESPACE | XML_NAMESPACE_XML | XML_id) },
+    { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_SECTION_STYLE_NAME,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_style_name) },
+    { XML_NAMESPACE_TEXT, XML_NAME, XML_TOK_SECTION_NAME,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_name) },
+    { XML_NAMESPACE_TEXT, XML_CONDITION, XML_TOK_SECTION_CONDITION,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_condition) },
+    { XML_NAMESPACE_TEXT, XML_DISPLAY, XML_TOK_SECTION_DISPLAY,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_display) },
+    { XML_NAMESPACE_TEXT, XML_PROTECTED, XML_TOK_SECTION_PROTECT,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_protected) },
+    { XML_NAMESPACE_TEXT, XML_PROTECTION_KEY, XML_TOK_SECTION_PROTECTION_KEY,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_protection_key) },
+    { XML_NAMESPACE_TEXT, XML_IS_HIDDEN, XML_TOK_SECTION_IS_HIDDEN,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_is_hidden) },
     // compatibility with SRC629 (or earlier) versions
-    { XML_NAMESPACE_TEXT, XML_PROTECT, XML_TOK_SECTION_PROTECT },
+    { XML_NAMESPACE_TEXT, XML_PROTECT, XML_TOK_SECTION_PROTECT,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_protect) },
     XML_TOKEN_MAP_END
 };
 
diff --git a/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx b/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx
index fc8aa97..cc8681d 100644
--- a/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx
+++ b/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx
@@ -26,20 +26,24 @@
 #include <xmloff/nmspmap.hxx>
 #include <xmloff/xmlnmspe.hxx>
 #include <xmloff/xmltoken.hxx>
+#include <xmloff/token/tokens.hxx>
 #include <sax/tools/converter.hxx>
 #include <com/sun/star/uno/Reference.h>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/beans/XMultiPropertySet.hpp>
 #include <tools/debug.hxx>
+#include <com/sun/star/xml/sax/FastToken.hpp>
 
 using ::com::sun::star::beans::XPropertySet;
 using ::com::sun::star::beans::XMultiPropertySet;
 using ::com::sun::star::uno::Reference;
 using ::com::sun::star::xml::sax::XAttributeList;
+using css::xml::sax::FastToken::NAMESPACE;
 
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::text;
 using namespace ::xmloff::token;
+using namespace xmloff;
 
 const sal_Char sAPI_DDECommandFile[] = "DDECommandFile";
 const sal_Char sAPI_DDECommandType[] = "DDECommandType";
@@ -78,11 +82,15 @@ enum XMLSectionSourceDDEToken
 static const SvXMLTokenMapEntry aSectionSourceDDETokenMap[] =
 {
     { XML_NAMESPACE_OFFICE, XML_DDE_APPLICATION,
-          XML_TOK_SECTION_DDE_APPLICATION },
-    { XML_NAMESPACE_OFFICE, XML_DDE_TOPIC, XML_TOK_SECTION_DDE_TOPIC },
-    { XML_NAMESPACE_OFFICE, XML_DDE_ITEM, XML_TOK_SECTION_DDE_ITEM },
+          XML_TOK_SECTION_DDE_APPLICATION,
+        (NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_application) },
+    { XML_NAMESPACE_OFFICE, XML_DDE_TOPIC, XML_TOK_SECTION_DDE_TOPIC,
+        (NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_topic) },
+    { XML_NAMESPACE_OFFICE, XML_DDE_ITEM, XML_TOK_SECTION_DDE_ITEM,
+        (NAMESPACE | XML_NAMESPACE_OFFICE | XML_dde_item) },
     { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_UPDATE,
-          XML_TOK_SECTION_IS_AUTOMATIC_UPDATE },
+          XML_TOK_SECTION_IS_AUTOMATIC_UPDATE,
+        (NAMESPACE | XML_NAMESPACE_OFFICE | XML_automatic_update) },
     XML_TOKEN_MAP_END
 };
 
diff --git a/xmloff/source/text/XMLSectionSourceImportContext.cxx b/xmloff/source/text/XMLSectionSourceImportContext.cxx
index 9a3e757..35592aa 100644
--- a/xmloff/source/text/XMLSectionSourceImportContext.cxx
+++ b/xmloff/source/text/XMLSectionSourceImportContext.cxx
@@ -26,17 +26,21 @@
 #include <xmloff/nmspmap.hxx>
 #include <xmloff/xmlnmspe.hxx>
 #include <xmloff/xmltoken.hxx>
+#include <xmloff/token/tokens.hxx>
 #include <com/sun/star/uno/Reference.h>
 #include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/xml/sax/FastToken.hpp>
 
 
 using ::com::sun::star::beans::XPropertySet;
 using ::com::sun::star::uno::Reference;
 using ::com::sun::star::xml::sax::XAttributeList;
+using css::xml::sax::FastToken::NAMESPACE;
 
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::text;
 using namespace ::xmloff::token;
+using namespace xmloff;
 
 
 TYPEINIT1(XMLSectionSourceImportContext, SvXMLImportContext);
@@ -64,10 +68,13 @@ enum XMLSectionSourceToken
 
 static const SvXMLTokenMapEntry aSectionSourceTokenMap[] =
 {
-    { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_SECTION_XLINK_HREF },
-    { XML_NAMESPACE_TEXT, XML_FILTER_NAME, XML_TOK_SECTION_TEXT_FILTER_NAME },
+    { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_SECTION_XLINK_HREF,
+        (NAMESPACE | XML_NAMESPACE_XLINK | XML_href) },
+    { XML_NAMESPACE_TEXT, XML_FILTER_NAME, XML_TOK_SECTION_TEXT_FILTER_NAME,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_filter_name) },
     { XML_NAMESPACE_TEXT, XML_SECTION_NAME,
-                                        XML_TOK_SECTION_TEXT_SECTION_NAME },
+                                        XML_TOK_SECTION_TEXT_SECTION_NAME,
+        (NAMESPACE | XML_NAMESPACE_TEXT | XML_section_name) },
     XML_TOKEN_MAP_END
 };
 

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list