summaryrefslogtreecommitdiff
path: root/starmath
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@suse.cz>2011-08-31 16:32:51 +0200
committerLuboš Luňák <l.lunak@suse.cz>2011-09-01 14:06:36 +0200
commitcd0f9f31a2eb400e4b028eaddbf9b16d94ad5572 (patch)
tree0bbce7c2a0aed06a4c6564143c8dd78ff55cf3b3 /starmath
parent9ff870f1cbfbcb822a03ff7073bba1d54f9756ab (diff)
implement support for limits to .docx math export
Diffstat (limited to 'starmath')
-rw-r--r--starmath/source/ooxml.cxx98
1 files changed, 68 insertions, 30 deletions
diff --git a/starmath/source/ooxml.cxx b/starmath/source/ooxml.cxx
index e5fd6e370bc4..7f06d71ba50c 100644
--- a/starmath/source/ooxml.cxx
+++ b/starmath/source/ooxml.cxx
@@ -462,38 +462,76 @@ static rtl::OString mathSymbolToString( const SmNode* node )
void SmOoxml::HandleOperator( const SmOperNode* pNode, int nLevel )
{
fprintf( stderr, "OPER %d\n", pNode->GetToken().eType );
- const SmSubSupNode* subsup = pNode->GetSubNode( 0 )->GetType() == NSUBSUP
- ? static_cast< const SmSubSupNode* >( pNode->GetSubNode( 0 )) : NULL;
- const SmNode* operation = subsup != NULL ? subsup->GetBody() : pNode->GetSubNode( 0 );
- m_pSerializer->startElementNS( XML_m, XML_nary, FSEND );
- m_pSerializer->startElementNS( XML_m, XML_naryPr, FSEND );
- m_pSerializer->singleElementNS( XML_m, XML_chr,
- FSNS( XML_m, XML_val ), mathSymbolToString( operation ).getStr(), FSEND );
- if( subsup == NULL || subsup->GetSubSup( CSUB ) == NULL )
- m_pSerializer->singleElementNS( XML_m, XML_subHide, FSNS( XML_m, XML_val ), "1", FSEND );
- if( subsup == NULL || subsup->GetSubSup( CSUP ) == NULL )
- m_pSerializer->singleElementNS( XML_m, XML_supHide, FSNS( XML_m, XML_val ), "1", FSEND );
- m_pSerializer->endElementNS( XML_m, XML_naryPr );
- if( subsup == NULL || subsup->GetSubSup( CSUB ) == NULL )
- m_pSerializer->singleElementNS( XML_m, XML_sub, FSEND );
- else
- {
- m_pSerializer->startElementNS( XML_m, XML_sub, FSEND );
- HandleNode( subsup->GetSubSup( CSUB ), nLevel + 1 );
- m_pSerializer->endElementNS( XML_m, XML_sub );
- }
- if( subsup == NULL || subsup->GetSubSup( CSUP ) == NULL )
- m_pSerializer->singleElementNS( XML_m, XML_sup, FSEND );
- else
+ switch( pNode->GetToken().eType )
{
- m_pSerializer->startElementNS( XML_m, XML_sup, FSEND );
- HandleNode( subsup->GetSubSup( CSUP ), nLevel + 1 );
- m_pSerializer->endElementNS( XML_m, XML_sup );
+ case TINT:
+ case TIINT:
+ case TIIINT:
+ case TLINT:
+ case TLLINT:
+ case TLLLINT:
+ {
+ const SmSubSupNode* subsup = pNode->GetSubNode( 0 )->GetType() == NSUBSUP
+ ? static_cast< const SmSubSupNode* >( pNode->GetSubNode( 0 )) : NULL;
+ const SmNode* operation = subsup != NULL ? subsup->GetBody() : pNode->GetSubNode( 0 );
+ m_pSerializer->startElementNS( XML_m, XML_nary, FSEND );
+ m_pSerializer->startElementNS( XML_m, XML_naryPr, FSEND );
+ m_pSerializer->singleElementNS( XML_m, XML_chr,
+ FSNS( XML_m, XML_val ), mathSymbolToString( operation ).getStr(), FSEND );
+ if( subsup == NULL || subsup->GetSubSup( CSUB ) == NULL )
+ m_pSerializer->singleElementNS( XML_m, XML_subHide, FSNS( XML_m, XML_val ), "1", FSEND );
+ if( subsup == NULL || subsup->GetSubSup( CSUP ) == NULL )
+ m_pSerializer->singleElementNS( XML_m, XML_supHide, FSNS( XML_m, XML_val ), "1", FSEND );
+ m_pSerializer->endElementNS( XML_m, XML_naryPr );
+ if( subsup == NULL || subsup->GetSubSup( CSUB ) == NULL )
+ m_pSerializer->singleElementNS( XML_m, XML_sub, FSEND );
+ else
+ {
+ m_pSerializer->startElementNS( XML_m, XML_sub, FSEND );
+ HandleNode( subsup->GetSubSup( CSUB ), nLevel + 1 );
+ m_pSerializer->endElementNS( XML_m, XML_sub );
+ }
+ if( subsup == NULL || subsup->GetSubSup( CSUP ) == NULL )
+ m_pSerializer->singleElementNS( XML_m, XML_sup, FSEND );
+ else
+ {
+ m_pSerializer->startElementNS( XML_m, XML_sup, FSEND );
+ HandleNode( subsup->GetSubSup( CSUP ), nLevel + 1 );
+ m_pSerializer->endElementNS( XML_m, XML_sup );
+ }
+ m_pSerializer->startElementNS( XML_m, XML_e, FSEND );
+ HandleNode( pNode->GetSubNode( 1 ), nLevel + 1 ); // body
+ m_pSerializer->endElementNS( XML_m, XML_e );
+ m_pSerializer->endElementNS( XML_m, XML_nary );
+ break;
+ }
+ case TLIM:
+ m_pSerializer->startElementNS( XML_m, XML_func, FSEND );
+ m_pSerializer->startElementNS( XML_m, XML_fName, FSEND );
+ m_pSerializer->startElementNS( XML_m, XML_limLow, FSEND );
+ m_pSerializer->startElementNS( XML_m, XML_e, FSEND );
+ HandleNode( pNode->GetSymbol(), nLevel + 1 );
+ m_pSerializer->endElementNS( XML_m, XML_e );
+ m_pSerializer->startElementNS( XML_m, XML_lim, FSEND );
+ if( const SmSubSupNode* subsup = pNode->GetSubNode( 0 )->GetType() == NSUBSUP
+ ? static_cast< const SmSubSupNode* >( pNode->GetSubNode( 0 )) : NULL )
+ {
+ if( subsup->GetSubSup( CSUB ) != NULL )
+ HandleNode( subsup->GetSubSup( CSUB ), nLevel + 1 );
+ }
+ m_pSerializer->endElementNS( XML_m, XML_lim );
+ m_pSerializer->endElementNS( XML_m, XML_limLow );
+ m_pSerializer->endElementNS( XML_m, XML_fName );
+ m_pSerializer->startElementNS( XML_m, XML_e, FSEND );
+ HandleNode( pNode->GetSubNode( 1 ), nLevel + 1 ); // body
+ m_pSerializer->endElementNS( XML_m, XML_e );
+ m_pSerializer->endElementNS( XML_m, XML_func );
+ break;
+ default:
+ OSL_FAIL( "Unhandled operation" );
+ HandleAllSubNodes( pNode, nLevel );
+ break;
}
- m_pSerializer->startElementNS( XML_m, XML_e, FSEND );
- HandleNode( pNode->GetSubNode( 1 ), nLevel + 1 ); // body
- m_pSerializer->endElementNS( XML_m, XML_e );
- m_pSerializer->endElementNS( XML_m, XML_nary );
}
void SmOoxml::HandleSubSupScript( const SmSubSupNode* pNode, int nLevel )