summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper/DomainMapper.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter/source/dmapper/DomainMapper.cxx')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx132
1 files changed, 95 insertions, 37 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index d61cf5024b99..dbf9a33f067b 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -28,6 +28,8 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
+#include "PageBordersHandler.hxx"
+
#include <dmapper/DomainMapper.hxx>
#include <DomainMapper_Impl.hxx>
#include <ConversionHelper.hxx>
@@ -177,6 +179,10 @@ DomainMapper::~DomainMapper()
uno::Reference< document::XEventBroadcaster > xBroadcaster(xIndexesSupplier, uno::UNO_QUERY);
xBroadcaster->addEventListener(uno::Reference< document::XEventListener >(new ModelEventListener));
}
+
+
+ // Apply the document settings after everything else
+ m_pImpl->GetSettingsTable()->ApplyProperties( m_pImpl->GetTextDocument( ) );
}
catch( const uno::Exception& rEx )
{
@@ -552,8 +558,8 @@ void DomainMapper::attribute(Id nName, Value & val)
//if the style is a user defined style then it must have an ISTD - built-in styles might not have it
StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
::rtl::OUString sValue = ::rtl::OUString::valueOf(nIntValue, 16);
- const StyleSheetEntry* pEntry = pStyleSheets->FindStyleSheetByISTD(sValue);
- if(pEntry)
+ const StyleSheetEntryPtr pEntry = pStyleSheets->FindStyleSheetByISTD(sValue);
+ if( pEntry.get( ) )
{
bool bParaStyle = (pEntry->nStyleTypeCode == STYLE_TYPE_PARA);
if(bParaStyle)
@@ -1882,12 +1888,12 @@ void DomainMapper::attribute(Id nName, Value & val)
/* WRITERFILTERSTATUS: done: 80, planned: 0.5, spent: 0.2 */
//TODO: autospacing depends on some document property (called fDontUseHTMLAutoSpacing in old ww8 filter) 100 or 280 twip
//and should be set to 0 on start of page
- m_pImpl->GetTopContext()->Insert( PROP_TOP_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_TOP_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
break;
case NS_ooxml::LN_CT_Spacing_afterAutospacing:
/* WRITERFILTERSTATUS: done: 80, planned: 0.5, spent: 0.2 */
//TODO: autospacing depends on some document property (called fDontUseHTMLAutoSpacing in old ww8 filter) 100 or 280 twip
- m_pImpl->GetTopContext()->Insert( PROP_BOTTOM_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_BOTTOM_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
break;
case NS_ooxml::LN_CT_SmartTagRun_uri:
case NS_ooxml::LN_CT_SmartTagRun_element:
@@ -1926,13 +1932,6 @@ void DomainMapper::attribute(Id nName, Value & val)
//afterwards the adding of the binary data.
m_pImpl->GetGraphicImport( IMPORT_AS_DETECTED_INLINE )->attribute(nName, val);
m_pImpl->ImportGraphic( val.getProperties(), IMPORT_AS_DETECTED_INLINE );
- if( m_pImpl->IsInShapeContext() )
- {
- //imported text from temporary shape needs to be copied to the real shape
- uno::Reference< drawing::XShape > xShape;
- val.getAny() >>= xShape;
- m_pImpl->CopyTemporaryShapeText( xShape );
- }
}
break;
case NS_ooxml::LN_CT_FramePr_dropCap:
@@ -2090,19 +2089,12 @@ void DomainMapper::attribute(Id nName, Value & val)
break;
case NS_ooxml::LN_CT_Markup_id:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
- m_pImpl->SetCurrentRedlineId( sStringValue );
+ m_pImpl->SetCurrentRedlineId( nIntValue );
break;
case NS_ooxml::LN_token:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
m_pImpl->SetCurrentRedlineToken( nIntValue );
break;
- case NS_ooxml::LN_mark_shape:
- /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
- if( nIntValue )
- m_pImpl->PopShapeContext();
- else
- m_pImpl->PushShapeContext();
- break;
case NS_ooxml::LN_CT_LineNumber_countBy:
/* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
case NS_ooxml::LN_CT_LineNumber_restart:
@@ -2144,6 +2136,9 @@ void DomainMapper::attribute(Id nName, Value & val)
case NS_ooxml::LN_CT_Color_themeShade:
//unsupported
break;
+ case NS_ooxml::LN_endtrackchange:
+ m_pImpl->RemoveCurrentRedline( );
+ break;
default:
{
#if OSL_DEBUG_LEVEL > 0
@@ -2625,6 +2620,15 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
break; // sprmPPropRMark
case NS_sprm::LN_POutLvl:
/* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ {
+ if( m_pImpl->IsStyleSheetImport() )
+ {
+ sal_Int16 nLvl = static_cast< sal_Int16 >( nIntValue );
+
+ StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
+ pStyleSheetPropertyMap->SetOutlineLevel( nLvl );
+ }
+ }
break; // sprmPOutLvl
case NS_sprm::LN_PFBiDi:
/* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
@@ -3877,6 +3881,20 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
}
}
break;
+ case NS_ooxml::LN_EG_SectPrContents_pgBorders:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) && pSectionContext )
+ {
+ PageBordersHandlerPtr pHandler( new PageBordersHandler );
+ pProperties->resolve( *pHandler );
+
+ // Set the borders to the context and apply them to the styles
+ pHandler->SetBorders( pSectionContext );
+ pSectionContext->SetBorderParams( pHandler->GetDisplayOffset( ) );
+ }
+ }
+ break;
case NS_ooxml::LN_CT_PPrBase_pStyle:
{
@@ -3886,20 +3904,31 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
const ::rtl::OUString sConvertedStyleName = pStyleTable->ConvertStyleName( sStringValue, true );
if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sConvertedStyleName ));
- const StyleSheetEntry* pEntry = pStyleTable->FindStyleSheetByISTD(sStringValue);
+ const StyleSheetEntryPtr pEntry = pStyleTable->FindStyleSheetByISTD(sStringValue);
//apply numbering to paragraph if it was set at the style
- OSL_ENSURE( pEntry, "no style sheet found" );
+ OSL_ENSURE( pEntry.get(), "no style sheet found" );
const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
+
if( pStyleSheetProperties && pStyleSheetProperties->GetListId() >= 0 )
- rContext->Insert( PROP_NUMBERING_RULES, true, uno::makeAny(m_pImpl->GetListTable()->GetNumberingRules(pStyleSheetProperties->GetListId())), false);
+ rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny(
+ m_pImpl->GetListTable( )->GetStyleName( pStyleSheetProperties->GetListId( ) ) ), false);
+
if( pStyleSheetProperties && pStyleSheetProperties->GetListLevel() >= 0 )
rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
}
break;
case NS_ooxml::LN_EG_RPrBase_rStyle:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
- if (m_pImpl->GetTopContext())
- m_pImpl->GetTopContext()->Insert( PROP_CHAR_STYLE_NAME, true, uno::makeAny( m_pImpl->GetStyleSheetTable()->ConvertStyleName( sStringValue, true )));
+ {
+ rtl::OUString sConvertedName( m_pImpl->GetStyleSheetTable()->ConvertStyleName( sStringValue, true ) );
+ // First check if the style exists in the document.
+ StyleSheetEntryPtr pEntry = m_pImpl->GetStyleSheetTable( )->FindStyleSheetByStyleName( sConvertedName );
+ bool bExists = pEntry.get( ) && ( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR );
+
+ // Add the property if the style exists
+ if ( bExists && m_pImpl->GetTopContext() )
+ m_pImpl->GetTopContext()->Insert( PROP_CHAR_STYLE_NAME, true, uno::makeAny( sConvertedName ) );
+ }
break;
case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
@@ -4036,16 +4065,16 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
}
}
break;
+ case NS_ooxml::LN_paratrackchange:
+ m_pImpl->StartParaChange( );
case NS_ooxml::LN_trackchange:
/* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
case NS_ooxml::LN_EG_RPrContent_rPrChange:
/* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
{
+ m_pImpl->AddNewRedline( );
resolveSprmProps( rSprm );
// now the properties author, date and id should be available
- ::rtl::OUString sAuthor = m_pImpl->GetCurrentRedlineAuthor();
- ::rtl::OUString sDate = m_pImpl->GetCurrentRedlineDate();
- ::rtl::OUString sId = m_pImpl->GetCurrentRedlineId();
sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
switch( nToken & 0xffff )
{
@@ -4054,6 +4083,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
case ooxml::OOXML_del : break;
default: OSL_ENSURE( false, "redline token other than mod, ins or del" );
}
+ m_pImpl->EndParaChange( );
}
break;
case NS_ooxml::LN_CT_RPrChange_rPr:
@@ -4062,15 +4092,21 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
/* WRITERFILTERSTATUS: done: 0, planned: 4, spent: 0 */
case NS_ooxml::LN_object:
{
+#if DEBUG
+ clog << "DomainMapper: LN_object" << endl;
+#endif
writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties.get())
+ if( pProperties.get( ) )
{
OLEHandlerPtr pOLEHandler( new OLEHandler );
pProperties->resolve(*pOLEHandler);
- ::rtl::OUString sStreamName = pOLEHandler->copyOLEOStream( m_pImpl->GetTextDocument() );
- if(sStreamName.getLength())
+ if ( pOLEHandler->isOLEObject( ) )
{
- m_pImpl->appendOLE( sStreamName, pOLEHandler );
+ ::rtl::OUString sStreamName = pOLEHandler->copyOLEOStream( m_pImpl->GetTextDocument() );
+ if( sStreamName.getLength() )
+ {
+ m_pImpl->appendOLE( sStreamName, pOLEHandler );
+ }
}
}
}
@@ -4099,7 +4135,6 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
case NS_ooxml::LN_CT_Lvl_pStyle:
//TODO: numbering style should apply current numbering level - not yet supported
break;
-
default:
{
#if OSL_DEBUG_LEVEL > 0
@@ -4225,19 +4260,36 @@ void DomainMapper::endParagraphGroup()
#endif
}
+void DomainMapper::startShape( uno::Reference< drawing::XShape > xShape )
+{
+ m_pImpl->PushShapeContext( xShape );
+}
+
+void DomainMapper::endShape( )
+{
+ m_pImpl->PopShapeContext( );
+}
+
/*-- 13.06.2007 16:15:55---------------------------------------------------
-----------------------------------------------------------------------*/
-void DomainMapper::PushStyleSheetProperties( PropertyMapPtr pStyleProperties )
+void DomainMapper::PushStyleSheetProperties( PropertyMapPtr pStyleProperties, bool bAffectTableMngr )
{
m_pImpl->PushStyleProperties( pStyleProperties );
+ if ( bAffectTableMngr )
+ m_pImpl->getTableManager( ).SetStyleProperties( pStyleProperties );
}
/*-- 13.06.2007 16:15:55---------------------------------------------------
-----------------------------------------------------------------------*/
-void DomainMapper::PopStyleSheetProperties()
+void DomainMapper::PopStyleSheetProperties( bool bAffectTableMngr )
{
m_pImpl->PopProperties( CONTEXT_STYLESHEET );
+ if ( bAffectTableMngr )
+ {
+ PropertyMapPtr emptyPtr;
+ m_pImpl->getTableManager( ).SetStyleProperties( emptyPtr );
+ }
}
/*-- 28.01.2008 14:52:33---------------------------------------------------
@@ -4484,10 +4536,13 @@ void DomainMapper::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
break;
case NS_ooxml::LN_NUMBERING:
case NS_rtf::LN_LISTTABLE:
- /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
- //the same for list tables
- ref->resolve( *m_pImpl->GetListTable() );
+ //the same for list tables
+ ref->resolve( *m_pImpl->GetListTable() );
+ m_pImpl->GetListTable( )->CreateNumberingRules( );
+ }
break;
case NS_rtf::LN_LFOTABLE:
/* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
@@ -4497,6 +4552,9 @@ void DomainMapper::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
case NS_ooxml::LN_THEMETABLE:
ref->resolve ( *m_pImpl->GetThemeTable() );
break;
+ case NS_ooxml::LN_SETTINGS:
+ ref->resolve( *m_pImpl->GetSettingsTable( ) );
+ break;
default:
OSL_ENSURE( false, "which table is to be filled here?");
}