summaryrefslogtreecommitdiff
path: root/sc/source/filter/xml/xmlrowi.cxx
diff options
context:
space:
mode:
authorMohammed Abdul Azeem <azeemmysore@gmail.com>2016-09-05 14:38:30 +0530
committerMichael Meeks <michael.meeks@collabora.com>2017-01-25 11:20:48 +0000
commit8154953add163554c00935486a1cf5677cef2609 (patch)
treed8e148e84aa1e164a2358827085f4d9240ce5e31 /sc/source/filter/xml/xmlrowi.cxx
parent657eea01046c7f39ee8ca4545241372177385946 (diff)
ScXMLTableRowCellContext implements fast interfaces:
Implementation of fast interfaces for contexts in path from ScXMLImport::CreateFastContext to ScXMLTableRowCellContext. FastParser is enabled and duplicates are avoided at all possible places. OOoXML filters still need those legacy paths we removed, so I had to temporarily map them to fast elements, which would increase their load time, but hopefully it should help us in the long run. Change-Id: Ie997a9a8b72787da2356abc99ea2cd57c2e5b670 Reviewed-on: https://gerrit.libreoffice.org/28648 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'sc/source/filter/xml/xmlrowi.cxx')
-rw-r--r--sc/source/filter/xml/xmlrowi.cxx146
1 files changed, 72 insertions, 74 deletions
diff --git a/sc/source/filter/xml/xmlrowi.cxx b/sc/source/filter/xml/xmlrowi.cxx
index 2a66bde28ee4..130843211c9d 100644
--- a/sc/source/filter/xml/xmlrowi.cxx
+++ b/sc/source/filter/xml/xmlrowi.cxx
@@ -33,6 +33,7 @@
#include <xmloff/xmlnmspe.hxx>
#include <xmloff/families.hxx>
#include <xmloff/xmltoken.hxx>
+#include <sax/fastattribs.hxx>
#include <com/sun/star/sheet/XSpreadsheet.hpp>
#include <com/sun/star/table/XColumnRowRange.hpp>
#include <com/sun/star/sheet/XPrintAreas.hpp>
@@ -43,55 +44,58 @@ using namespace com::sun::star;
using namespace xmloff::token;
ScXMLTableRowContext::ScXMLTableRowContext( ScXMLImport& rImport,
- sal_uInt16 nPrfx,
- const OUString& rLName,
- const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) :
- ScXMLImportContext( rImport, nPrfx, rLName ),
+ sal_Int32 /*nElement*/,
+ const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList ) :
+ ScXMLImportContext( rImport ),
sVisibility(GetXMLToken(XML_VISIBLE)),
nRepeatedRows(1),
bHasCell(false)
{
OUString sCellStyleName;
- sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
const SvXMLTokenMap& rAttrTokenMap(GetScImport().GetTableRowAttrTokenMap());
- for( sal_Int16 i=0; i < nAttrCount; ++i )
+ if ( xAttrList.is() )
{
- const OUString& sAttrName(xAttrList->getNameByIndex( i ));
- OUString aLocalName;
- sal_uInt16 nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
- sAttrName, &aLocalName ));
- const OUString& sValue(xAttrList->getValueByIndex( i ));
+ sax_fastparser::FastAttributeList *pAttribList;
+ assert( dynamic_cast< sax_fastparser::FastAttributeList *>( xAttrList.get() ) != nullptr );
+ pAttribList = static_cast< sax_fastparser::FastAttributeList *>( xAttrList.get() );
- switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+ const std::vector< sal_Int32 >& rAttrList = pAttribList->getFastAttributeTokens();
+ for ( size_t i = 0; i < rAttrList.size(); i++ )
{
- case XML_TOK_TABLE_ROW_ATTR_STYLE_NAME:
+ const OUString sValue = OUString(pAttribList->getFastAttributeValue(i),
+ pAttribList->AttributeValueLength(i), RTL_TEXTENCODING_UTF8);
+ switch( rAttrTokenMap.Get( rAttrList[ i ] ) )
{
- sStyleName = sValue;
- }
- break;
- case XML_TOK_TABLE_ROW_ATTR_VISIBILITY:
- {
- sVisibility = sValue;
- }
- break;
- case XML_TOK_TABLE_ROW_ATTR_REPEATED:
- {
- nRepeatedRows = std::max( sValue.toInt32(), (sal_Int32) 1 );
- nRepeatedRows = std::min( nRepeatedRows, MAXROWCOUNT );
- }
- break;
- case XML_TOK_TABLE_ROW_ATTR_DEFAULT_CELL_STYLE_NAME:
- {
- sCellStyleName = sValue;
- }
- break;
- /*case XML_TOK_TABLE_ROW_ATTR_USE_OPTIMAL_HEIGHT:
- {
- sOptimalHeight = sValue;
+ case XML_TOK_TABLE_ROW_ATTR_STYLE_NAME:
+ {
+ sStyleName = sValue;
+ }
+ break;
+ case XML_TOK_TABLE_ROW_ATTR_VISIBILITY:
+ {
+ sVisibility = sValue;
+ }
+ break;
+ case XML_TOK_TABLE_ROW_ATTR_REPEATED:
+ {
+ nRepeatedRows = std::max( sValue.toInt32(), (sal_Int32) 1 );
+ nRepeatedRows = std::min( nRepeatedRows, MAXROWCOUNT );
+ }
+ break;
+ case XML_TOK_TABLE_ROW_ATTR_DEFAULT_CELL_STYLE_NAME:
+ {
+ sCellStyleName = sValue;
+ }
+ break;
+ /*case XML_TOK_TABLE_ROW_ATTR_USE_OPTIMAL_HEIGHT:
+ {
+ sOptimalHeight = sValue;
+ }
+ break;*/
}
- break;*/
}
}
+
GetScImport().GetTables().AddRow();
GetScImport().GetTables().SetRowStyle(sCellStyleName);
}
@@ -100,21 +104,22 @@ ScXMLTableRowContext::~ScXMLTableRowContext()
{
}
-SvXMLImportContext *ScXMLTableRowContext::CreateChildContext( sal_uInt16 nPrefix,
- const OUString& rLName,
- const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ ScXMLTableRowContext::createFastChildContext( sal_Int32 nElement,
+ const uno::Reference< xml::sax::XFastAttributeList > & xAttrList )
+ throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
SvXMLImportContext *pContext(nullptr);
const SvXMLTokenMap& rTokenMap(GetScImport().GetTableRowElemTokenMap());
- switch( rTokenMap.Get( nPrefix, rLName ) )
+ switch( rTokenMap.Get( nElement ) )
{
case XML_TOK_TABLE_ROW_CELL:
// if( IsInsertCellPossible() )
{
bHasCell = true;
- pContext = new ScXMLTableRowCellContext( GetScImport(), nPrefix,
- rLName, xAttrList, false, static_cast<SCROW>(nRepeatedRows)
+ pContext = new ScXMLTableRowCellContext( GetScImport(), nElement,
+ xAttrList, false, static_cast<SCROW>(nRepeatedRows)
//this
);
}
@@ -123,8 +128,8 @@ SvXMLImportContext *ScXMLTableRowContext::CreateChildContext( sal_uInt16 nPrefix
// if( IsInsertCellPossible() )
{
bHasCell = true;
- pContext = new ScXMLTableRowCellContext( GetScImport(), nPrefix,
- rLName, xAttrList, true, static_cast<SCROW>(nRepeatedRows)
+ pContext = new ScXMLTableRowCellContext( GetScImport(), nElement,
+ xAttrList, true, static_cast<SCROW>(nRepeatedRows)
//this
);
}
@@ -132,12 +137,13 @@ SvXMLImportContext *ScXMLTableRowContext::CreateChildContext( sal_uInt16 nPrefix
}
if( !pContext )
- pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+ pContext = new SvXMLImportContext( GetImport() );
return pContext;
}
-void ScXMLTableRowContext::EndElement()
+void SAL_CALL ScXMLTableRowContext::endFastElement(sal_Int32 /*nElement*/)
+ throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
ScXMLImport& rXMLImport(GetScImport());
if (!bHasCell && nRepeatedRows > 1)
@@ -209,12 +215,11 @@ void ScXMLTableRowContext::EndElement()
}
ScXMLTableRowsContext::ScXMLTableRowsContext( ScXMLImport& rImport,
- sal_uInt16 nPrfx,
- const OUString& rLName,
- const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+ sal_Int32 /*nElement*/,
+ const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
const bool bTempHeader,
const bool bTempGroup ) :
- ScXMLImportContext( rImport, nPrfx, rLName ),
+ ScXMLImportContext( rImport ),
nHeaderStartRow(0),
nGroupStartRow(0),
bHeader(bTempHeader),
@@ -232,17 +237,11 @@ ScXMLTableRowsContext::ScXMLTableRowsContext( ScXMLImport& rImport,
{
nGroupStartRow = rImport.GetTables().GetCurrentRow();
++nGroupStartRow;
- sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
- for( sal_Int16 i=0; i < nAttrCount; ++i )
+ if ( xAttrList.is() &&
+ xAttrList->hasAttribute( NAMESPACE_TOKEN( XML_NAMESPACE_TABLE ) | XML_DISPLAY ) )
{
- const OUString& sAttrName(xAttrList->getNameByIndex( i ));
- OUString aLocalName;
- sal_uInt16 nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
- sAttrName, &aLocalName ));
- const OUString& sValue(xAttrList->getValueByIndex( i ));
-
- if ((nPrefix == XML_NAMESPACE_TABLE) && IsXMLToken(aLocalName, XML_DISPLAY))
- bGroupDisplay = IsXMLToken(sValue, XML_TRUE);
+ bGroupDisplay = IsXMLToken( xAttrList->getValue(
+ NAMESPACE_TOKEN( XML_NAMESPACE_TABLE ) | XML_DISPLAY ), XML_TRUE );
}
}
}
@@ -251,45 +250,44 @@ ScXMLTableRowsContext::~ScXMLTableRowsContext()
{
}
-SvXMLImportContext *ScXMLTableRowsContext::CreateChildContext( sal_uInt16 nPrefix,
- const OUString& rLName,
- const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ ScXMLTableRowsContext::createFastChildContext( sal_Int32 nElement,
+ const uno::Reference< xml::sax::XFastAttributeList > & xAttrList )
+ throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
SvXMLImportContext *pContext(nullptr);
const SvXMLTokenMap& rTokenMap(GetScImport().GetTableRowsElemTokenMap());
- switch( rTokenMap.Get( nPrefix, rLName ) )
+ switch( rTokenMap.Get( nElement ) )
{
case XML_TOK_TABLE_ROWS_ROW_GROUP:
- pContext = new ScXMLTableRowsContext( GetScImport(), nPrefix,
- rLName, xAttrList,
+ pContext = new ScXMLTableRowsContext( GetScImport(), nElement, xAttrList,
false, true );
break;
case XML_TOK_TABLE_ROWS_HEADER_ROWS:
- pContext = new ScXMLTableRowsContext( GetScImport(), nPrefix,
- rLName, xAttrList,
+ pContext = new ScXMLTableRowsContext( GetScImport(), nElement, xAttrList,
true, false );
break;
case XML_TOK_TABLE_ROWS_ROWS:
- pContext = new ScXMLTableRowsContext( GetScImport(), nPrefix,
- rLName, xAttrList,
+ pContext = new ScXMLTableRowsContext( GetScImport(), nElement, xAttrList,
false, false );
break;
case XML_TOK_TABLE_ROWS_ROW:
- pContext = new ScXMLTableRowContext( GetScImport(), nPrefix,
- rLName, xAttrList//,
+ pContext = new ScXMLTableRowContext( GetScImport(), nElement,
+ xAttrList//,
//this
);
break;
}
if( !pContext )
- pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+ pContext = new SvXMLImportContext( GetImport() );
return pContext;
}
-void ScXMLTableRowsContext::EndElement()
+void SAL_CALL ScXMLTableRowsContext::endFastElement(sal_Int32 /*nElement*/)
+ throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
ScXMLImport& rXMLImport(GetScImport());
if (bHeader)