/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "oox/drawingml/customshapegeometry.hxx" #include #include #include #include "oox/helper/helper.hxx" #include "oox/helper/attributelist.hxx" #include "oox/helper/propertymap.hxx" using ::rtl::OUString; using namespace ::oox::core; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::drawing; using namespace ::com::sun::star::xml::sax; namespace oox { namespace drawingml { enum FormularCommand { FC_MULDIV = 0, FC_PLUSMINUS, FC_PLUSDIV, FC_IFELSE, FC_ABS, FC_AT2, FC_CAT2, FC_COS, FC_MAX, FC_MIN, FC_MOD, FC_PIN, FC_SAT2, FC_SIN, FC_SQRT, FC_TAN, FC_VAL, FC_LAST }; struct FormularCommandNameTable { const char* pS; FormularCommand pE; }; static FormularCommandNameTable pFormularCommandNameTable[] = { { "*/", FC_MULDIV }, { "+-", FC_PLUSMINUS }, { "+/", FC_PLUSDIV }, { "ifelse", FC_IFELSE }, { "abs", FC_ABS }, { "at2", FC_AT2 }, { "cat2", FC_CAT2 }, { "cos", FC_COS }, { "max", FC_MAX }, { "min", FC_MIN }, { "mod", FC_MOD }, { "pin", FC_PIN }, { "sat2", FC_SAT2 }, { "sin", FC_SIN }, { "sqrt", FC_SQRT }, { "tan", FC_TAN }, { "val", FC_VAL } }; typedef std::hash_map< rtl::OUString, FormularCommand, comphelper::UStringHash, comphelper::UStringEqual > FormulaCommandHMap; static const FormulaCommandHMap* pCommandHashMap; // rtl::OUString GetFormulaParameter( const EnhancedCustomShapeParameter& rParameter ) { rtl::OUString aRet; switch( rParameter.Type ) { case EnhancedCustomShapeParameterType::NORMAL : { if ( rParameter.Value.getValueTypeClass() == TypeClass_DOUBLE ) { double fValue = 0.0; if ( rParameter.Value >>= fValue ) aRet = rtl::OUString::valueOf( fValue ); } else { sal_Int32 nValue = 0; if ( rParameter.Value >>= nValue ) aRet = rtl::OUString::valueOf( nValue ); } } break; case EnhancedCustomShapeParameterType::EQUATION : { if ( rParameter.Value.getValueTypeClass() == TypeClass_LONG ) { sal_Int32 nFormulaIndex; if ( rParameter.Value >>= nFormulaIndex ) { aRet = CREATE_OUSTRING( "?" ) + rtl::OUString::valueOf( nFormulaIndex ) + CREATE_OUSTRING( " " ); } } else { // ups... we should have an index here and not the formula name } } break; case EnhancedCustomShapeParameterType::ADJUSTMENT : { if ( rParameter.Value.getValueTypeClass() == TypeClass_LONG ) { sal_Int32 nAdjustmentIndex; if ( rParameter.Value >>= nAdjustmentIndex ) { aRet = CREATE_OUSTRING( "$" ) + rtl::OUString::valueOf( nAdjustmentIndex ) + CREATE_OUSTRING( " " ); } } else { // ups... we should have an index here and not the formula name } } break; case EnhancedCustomShapeParameterType::LEFT : { const rtl::OUString sLeft( CREATE_OUSTRING( "left" ) ); aRet = sLeft; } break; case EnhancedCustomShapeParameterType::TOP : { const rtl::OUString sTop( CREATE_OUSTRING( "top" ) ); aRet = sTop; } break; case EnhancedCustomShapeParameterType::RIGHT : { const rtl::OUString sRight( CREATE_OUSTRING( "right" ) ); aRet = sRight; } break; case EnhancedCustomShapeParameterType::BOTTOM : { const rtl::OUString sBottom( CREATE_OUSTRING( "bottom" ) ); aRet = sBottom; } break; case EnhancedCustomShapeParameterType::XSTRETCH : { const rtl::OUString sXStretch( CREATE_OUSTRING( "xstretch" ) ); aRet = sXStretch; } break; case EnhancedCustomShapeParameterType::YSTRETCH : { const rtl::OUString sYStretch( CREATE_OUSTRING( "ystretch" ) ); aRet = sYStretch; } break; case EnhancedCustomShapeParameterType::HASSTROKE : { const rtl::OUString sHasStroke( CREATE_OUSTRING( "hasstroke" ) ); aRet = sHasStroke; } break; case EnhancedCustomShapeParameterType::HASFILL : { const rtl::OUString sHasFill( CREATE_OUSTRING( "hasfill" ) ); aRet = sHasFill; } break; case EnhancedCustomShapeParameterType::WIDTH : { const rtl::OUString sWidth( CREATE_OUSTRING( "width" ) ); aRet = sWidth; } break; case EnhancedCustomShapeParameterType::HEIGHT : { const rtl::OUString sHeight( CREATE_OUSTRING( "height" ) ); aRet = sHeight; } break; case EnhancedCustomShapeParameterType::LOGWIDTH : { const rtl::OUString sLogWidth( CREATE_OUSTRING( "logwidth" ) ); aRet = sLogWidth; } break; case EnhancedCustomShapeParameterType::LOGHEIGHT : { const rtl::OUString sLogHeight( CREATE_OUSTRING( "logheight" ) ); aRet = sLogHeight; } break; } return aRet; } // --------------------------------------------------------------------- static EnhancedCustomShapeParameter GetAdjCoordinate( CustomShapeProperties& rCustomShapeProperties, const::rtl::OUString& rValue, sal_Bool bNoSymbols ) { com::sun::star::drawing::EnhancedCustomShapeParameter aRet; if ( rValue.getLength() ) { sal_Bool bConstant = sal_True; sal_Int32 nConstant = 0; sal_Char nVal = 0; // first check if its a constant value switch( AttributeConversion::decodeToken( rValue ) ) { case XML_3cd4 : nConstant = 270 * 60000; break; case XML_3cd8 : nConstant = 135 * 60000; break; case XML_5cd8 : nConstant = 225 * 60000; break; case XML_7cd8 : nConstant = 315 * 60000; break; case XML_cd2 : nConstant = 180 * 60000; break; case XML_cd4 : nConstant = 90 * 60000; break; case XML_cd8 : nConstant = 45 * 60000; break; case XML_b : // variable height of the shape defined in spPr case XML_h : { if ( bNoSymbols ) { CustomShapeGuide aGuide; aGuide.maName = rValue; aGuide.maFormula = CREATE_OUSTRING( "height" ); aRet.Value = Any( CustomShapeProperties::SetCustomShapeGuideValue( rCustomShapeProperties.getGuideList(), aGuide ) ); aRet.Type = EnhancedCustomShapeParameterType::EQUATION; } else aRet.Type = EnhancedCustomShapeParameterType::HEIGHT; // TODO: HEIGHT needs to be implemented } break; case XML_hd8 : // !!PASSTHROUGH INTENDED nVal += 2; // */ h 1.0 8.0 case XML_hd6 : // */ h 1.0 6.0 nVal++; case XML_hd5 : // */ h 1.0 5.0 nVal++; case XML_hd4 : // */ h 1.0 4.0 nVal += 2; case XML_hd2 : // */ h 1.0 2.0 case XML_vc : // */ h 1.0 2.0 { nVal += '2'; CustomShapeGuide aGuide; aGuide.maName = rValue; aGuide.maFormula = CREATE_OUSTRING( "height/" ) + rtl::OUString( nVal ); aRet.Value = Any( CustomShapeProperties::SetCustomShapeGuideValue( rCustomShapeProperties.getGuideList(), aGuide ) ); aRet.Type = EnhancedCustomShapeParameterType::EQUATION; } break; case XML_t : case XML_l : { nConstant = 0; aRet.Type = EnhancedCustomShapeParameterType::NORMAL; } break; case XML_ls : // longest side: max w h { CustomShapeGuide aGuide; aGuide.maName = rValue; aGuide.maFormula = CREATE_OUSTRING( "max(width,height)" ); aRet.Value = Any( CustomShapeProperties::SetCustomShapeGuideValue( rCustomShapeProperties.getGuideList(), aGuide ) ); aRet.Type = EnhancedCustomShapeParameterType::EQUATION; } break; case XML_ss : // shortest side: min w h { CustomShapeGuide aGuide; aGuide.maName = rValue; aGuide.maFormula = CREATE_OUSTRING( "min(width,height)" ); aRet.Value = Any( CustomShapeProperties::SetCustomShapeGuideValue( rCustomShapeProperties.getGuideList(), aGuide ) ); aRet.Type = EnhancedCustomShapeParameterType::EQUATION; } break; case XML_ssd8 : // */ ss 1.0 8.0 nVal += 2; case XML_ssd6 : // */ ss 1.0 6.0 nVal += 2; case XML_ssd4 : // */ ss 1.0 4.0 nVal += 2; case XML_ssd2 : // */ ss 1.0 2.0 { nVal += '2'; CustomShapeGuide aGuide; aGuide.maName = rValue; aGuide.maFormula = CREATE_OUSTRING( "min(width,height)/" ) + rtl::OUString( nVal ); aRet.Value = Any( CustomShapeProperties::SetCustomShapeGuideValue( rCustomShapeProperties.getGuideList(), aGuide ) ); aRet.Type = EnhancedCustomShapeParameterType::EQUATION; } break; case XML_r : // variable width of the shape defined in spPr case XML_w : { if ( bNoSymbols ) { CustomShapeGuide aGuide; aGuide.maName = rValue; aGuide.maFormula = CREATE_OUSTRING( "width" ); aRet.Value = Any( CustomShapeProperties::SetCustomShapeGuideValue( rCustomShapeProperties.getGuideList(), aGuide ) ); aRet.Type = EnhancedCustomShapeParameterType::EQUATION; } else aRet.Type = EnhancedCustomShapeParameterType::WIDTH; } break; case XML_wd10 : // */ w 1.0 10.0 nVal += 2; case XML_wd8 : // */ w 1.0 8.0 nVal += 2; case XML_wd6 : // */ w 1.0 6.0 nVal++; case XML_wd5 : // */ w 1.0 5.0 nVal++; case XML_wd4 : // */ w 1.0 4.0 nVal += 2; case XML_hc : // */ w 1.0 2.0 case XML_wd2 : // */ w 1.0 2.0 { nVal += '2'; CustomShapeGuide aGuide; aGuide.maName = rValue; aGuide.maFormula = CREATE_OUSTRING( "width/" ) + rtl::OUString( nVal ); aRet.Value = Any( CustomShapeProperties::SetCustomShapeGuideValue( rCustomShapeProperties.getGuideList(), aGuide ) ); aRet.Type = EnhancedCustomShapeParameterType::EQUATION; } break; default: bConstant = sal_False; break; } if ( bConstant ) { if ( nConstant ) { aRet.Value = Any( nConstant ); aRet.Type = EnhancedCustomShapeParameterType::NORMAL; } } else { sal_Unicode n = rValue[ 0 ]; if ( ( n == '+' ) || ( n == '-' ) ) { if ( rValue.getLength() > 0 ) n = rValue[ 1 ]; } if ( ( n >= '0' ) && ( n <= '9' ) ) { // seems to be a ST_Coordinate aRet.Value = Any( rValue.toInt32() ); aRet.Type = EnhancedCustomShapeParameterType::NORMAL; } else { sal_Int32 nGuideIndex = CustomShapeProperties::GetCustomShapeGuideValue( rCustomShapeProperties.getAdjustmentGuideList(), rValue ); if ( nGuideIndex >= 0 ) { aRet.Value = Any( nGuideIndex ); aRet.Type = EnhancedCustomShapeParameterType::ADJUSTMENT; } else { nGuideIndex = CustomShapeProperties::GetCustomShapeGuideValue( rCustomShapeProperties.getGuideList(), rValue ); if ( nGuideIndex >= 0 ) { aRet.Value = Any( nGuideIndex ); aRet.Type = EnhancedCustomShapeParameterType::EQUATION; } else aRet.Value = Any( rValue ); } } } } return aRet; } static EnhancedCustomShapeParameter GetAdjAngle( CustomShapeProperties& rCustomShapeProperties, const ::rtl::OUString& rValue ) { EnhancedCustomShapeParameter aAngle( GetAdjCoordinate( rCustomShapeProperties, rValue, sal_True ) ); if ( aAngle.Type == EnhancedCustomShapeParameterType::NORMAL ) { sal_Int32 nValue = 0; aAngle.Value >>= nValue; double fValue = ( static_cast< double >( nValue ) / 60000.0 ) * 360.0; aAngle.Value <<= fValue; } return aAngle; } // --------------------------------------------------------------------- // CT_GeomGuideList class GeomGuideListContext : public ContextHandler { public: GeomGuideListContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, std::vector< CustomShapeGuide >& rGuideList ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: std::vector< CustomShapeGuide >& mrGuideList; CustomShapeProperties& mrCustomShapeProperties; }; GeomGuideListContext::GeomGuideListContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, std::vector< CustomShapeGuide >& rGuideList ) : ContextHandler( rParent ) , mrGuideList( rGuideList ) , mrCustomShapeProperties( rCustomShapeProperties ) { } static rtl::OUString convertToOOEquation( CustomShapeProperties& rCustomShapeProperties, const rtl::OUString& rSource ) { if ( !pCommandHashMap ) { FormulaCommandHMap* pHM = new FormulaCommandHMap(); for( sal_Int32 i = 0; i < FC_LAST; i++ ) (*pHM)[ OUString::createFromAscii( pFormularCommandNameTable[ i ].pS ) ] = pFormularCommandNameTable[ i ].pE; pCommandHashMap = pHM; } std::vector< rtl::OUString > aTokens; sal_Int32 nIndex = 0; do { rtl::OUString aToken( rSource.getToken( 0, ' ', nIndex ) ); if ( aToken.getLength() ) aTokens.push_back( aToken ); } while ( nIndex >= 0 ); rtl::OUString aEquation; if ( aTokens.size() ) { sal_Int32 i, nParameters = aTokens.size() - 1; if ( nParameters > 3 ) nParameters = 3; rtl::OUString sParameters[ 3 ]; for ( i = 0; i < nParameters; i++ ) sParameters[ i ] = GetFormulaParameter( GetAdjCoordinate( rCustomShapeProperties, aTokens[ i + 1 ], sal_False ) ); const FormulaCommandHMap::const_iterator aIter( pCommandHashMap->find( aTokens[ 0 ] ) ); if ( aIter != pCommandHashMap->end() ) { switch( aIter->second ) { case FC_MULDIV : { if ( nParameters == 3 ) aEquation = sParameters[ 0 ] + CREATE_OUSTRING( "*" ) + sParameters[ 1 ] + CREATE_OUSTRING( "/" ) + sParameters[ 2 ]; } break; case FC_PLUSMINUS : { if ( nParameters == 3 ) aEquation = sParameters[ 0 ] + CREATE_OUSTRING( "+" ) + sParameters[ 1 ] + CREATE_OUSTRING( "-" ) + sParameters[ 2 ]; } break; case FC_PLUSDIV : { if ( nParameters == 3 ) aEquation = CREATE_OUSTRING( "(" ) + sParameters[ 0 ] + CREATE_OUSTRING( "+" ) + sParameters[ 1 ] + CREATE_OUSTRING( ")/" ) + sParameters[ 2 ]; } break; case FC_IFELSE : { if ( nParameters == 3 ) aEquation = CREATE_OUSTRING( "if(" ) + sParameters[ 0 ] + CREATE_OUSTRING( "," ) + sParameters[ 1 ] + CREATE_OUSTRING( "," ) + sParameters[ 2 ] + CREATE_OUSTRING( ")" ); } break; case FC_ABS : { if ( nParameters == 1 ) aEquation = CREATE_OUSTRING( "abs(" ) + sParameters[ 0 ] + CREATE_OUSTRING( ")" ); } break; case FC_AT2 : { if ( nParameters == 2 ) aEquation = CREATE_OUSTRING( "atan2(" ) + sParameters[ 0 ] + CREATE_OUSTRING( "," ) + sParameters[ 1 ] + CREATE_OUSTRING( ")" ); } break; case FC_CAT2 : { if ( nParameters == 3 ) aEquation = sParameters[ 0 ] + CREATE_OUSTRING( "*(cos(arctan(" ) + sParameters[ 1 ] + CREATE_OUSTRING( "," ) + sParameters[ 2 ] + CREATE_OUSTRING( ")))" ); } break; case FC_COS : { if ( nParameters == 2 ) aEquation = sParameters[ 0 ] + CREATE_OUSTRING( "*cos(" ) + sParameters[ 1 ] + CREATE_OUSTRING( ")" ); } break; case FC_MAX : { if ( nParameters == 2 ) aEquation = CREATE_OUSTRING( "max(" ) + sParameters[ 0 ] + CREATE_OUSTRING( "," ) + sParameters[ 1 ] + CREATE_OUSTRING( ")" ); } break; case FC_MIN : { if ( nParameters == 2 ) aEquation = CREATE_OUSTRING( "min(" ) + sParameters[ 0 ] + CREATE_OUSTRING( "," ) + sParameters[ 1 ] + CREATE_OUSTRING( ")" ); } break; case FC_MOD : { if ( nParameters == 3 ) aEquation = CREATE_OUSTRING( "sqrt(" ) + sParameters[ 0 ] + CREATE_OUSTRING( "*" ) + sParameters[ 0 ] + CREATE_OUSTRING( "+" ) + sParameters[ 1 ] + CREATE_OUSTRING( "*" ) + sParameters[ 1 ] + CREATE_OUSTRING( "+" ) + sParameters[ 2 ] + CREATE_OUSTRING( "*" ) + sParameters[ 2 ] + CREATE_OUSTRING( ")" ); } break; case FC_PIN : { if ( nParameters == 3 ) // if(x-y,x,if(y-z,z,y)) aEquation = CREATE_OUSTRING( "if(" ) + sParameters[ 0 ] + CREATE_OUSTRING( "-" ) + sParameters[ 1 ] + CREATE_OUSTRING( "," ) + sParameters[ 0 ] + CREATE_OUSTRING( ",if(" ) + sParameters[ 2 ] + CREATE_OUSTRING( "-" ) + sParameters[ 1 ] + CREATE_OUSTRING( "," ) + sParameters[ 1 ] + CREATE_OUSTRING( "," ) + sParameters[ 2 ] + CREATE_OUSTRING( "))" ); } break; case FC_SAT2 : { if ( nParameters == 3 ) aEquation = sParameters[ 0 ] + CREATE_OUSTRING( "*(sin(arctan(" ) + sParameters[ 1 ] + CREATE_OUSTRING( "," ) + sParameters[ 2 ] + CREATE_OUSTRING( ")))" ); } break; case FC_SIN : { if ( nParameters == 2 ) aEquation = sParameters[ 0 ] + CREATE_OUSTRING( "*sin(" ) + sParameters[ 1 ] + CREATE_OUSTRING( ")" ); } break; case FC_SQRT : { if ( nParameters == 1 ) aEquation = CREATE_OUSTRING( "sqrt(" ) + sParameters[ 0 ] + CREATE_OUSTRING( ")" ); } break; case FC_TAN : { if ( nParameters == 2 ) aEquation = sParameters[ 0 ] + CREATE_OUSTRING( "*tan(" ) + sParameters[ 1 ] + CREATE_OUSTRING( ")" ); } break; case FC_VAL : { if ( nParameters == 1 ) aEquation = sParameters[ 0 ]; } break; default : break; } } } return aEquation; } Reference< XFastContextHandler > GeomGuideListContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { if ( aElementToken == A_TOKEN( gd ) ) // CT_GeomGuide { CustomShapeGuide aGuide; aGuide.maName = xAttribs->getOptionalValue( XML_name ); aGuide.maFormula = convertToOOEquation( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_fmla ) ); mrGuideList.push_back( aGuide ); } return this; } // --------------------------------------------------------------------- static const rtl::OUString GetGeomGuideName( const ::rtl::OUString& rValue ) { return rValue; } // --------------------------------------------------------------------- // CT_AdjPoint2D class AdjPoint2DContext : public ContextHandler { public: AdjPoint2DContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rAdjPoint2D ); }; AdjPoint2DContext::AdjPoint2DContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rAdjPoint2D ) : ContextHandler( rParent ) { rAdjPoint2D.First = GetAdjCoordinate( rCustomShapeProperties, xAttribs->getOptionalValue( XML_x ), sal_True ); rAdjPoint2D.Second = GetAdjCoordinate( rCustomShapeProperties, xAttribs->getOptionalValue( XML_y ), sal_True ); } // --------------------------------------------------------------------- // CT_XYAdjustHandle class XYAdjustHandleContext : public ContextHandler { public: XYAdjustHandleContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, AdjustHandle& rAdjustHandle ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: AdjustHandle& mrAdjustHandle; CustomShapeProperties& mrCustomShapeProperties; }; XYAdjustHandleContext::XYAdjustHandleContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, AdjustHandle& rAdjustHandle ) : ContextHandler( rParent ) , mrAdjustHandle( rAdjustHandle ) , mrCustomShapeProperties( rCustomShapeProperties ) { const rtl::OUString aEmptyDefault; AttributeList aAttribs( xAttribs ); if ( aAttribs.hasAttribute( XML_gdRefX ) ) { mrAdjustHandle.gdRef1 = GetGeomGuideName( aAttribs.getString( XML_gdRefX, aEmptyDefault ) ); } if ( aAttribs.hasAttribute( XML_minX ) ) { mrAdjustHandle.min1 = GetAdjCoordinate( mrCustomShapeProperties, aAttribs.getString( XML_minX, aEmptyDefault ), sal_True ); } if ( aAttribs.hasAttribute( XML_maxX ) ) { mrAdjustHandle.max1 = GetAdjCoordinate( mrCustomShapeProperties, aAttribs.getString( XML_maxX, aEmptyDefault ), sal_True ); } if ( aAttribs.hasAttribute( XML_gdRefY ) ) { mrAdjustHandle.gdRef2 = GetGeomGuideName( aAttribs.getString( XML_gdRefY, aEmptyDefault ) ); } if ( aAttribs.hasAttribute( XML_minY ) ) { mrAdjustHandle.min2 = GetAdjCoordinate( mrCustomShapeProperties, aAttribs.getString( XML_minY, aEmptyDefault ), sal_True ); } if ( aAttribs.hasAttribute( XML_maxY ) ) { mrAdjustHandle.max2 = GetAdjCoordinate( mrCustomShapeProperties, aAttribs.getString( XML_maxY, aEmptyDefault ), sal_True ); } } Reference< XFastContextHandler > XYAdjustHandleContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( pos ) ) xContext = new AdjPoint2DContext( *this, xAttribs, mrCustomShapeProperties, mrAdjustHandle.pos ); // CT_AdjPoint2D return xContext; } // --------------------------------------------------------------------- // CT_PolarAdjustHandle class PolarAdjustHandleContext : public ContextHandler { public: PolarAdjustHandleContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, AdjustHandle& rAdjustHandle ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: AdjustHandle& mrAdjustHandle; CustomShapeProperties& mrCustomShapeProperties; }; PolarAdjustHandleContext::PolarAdjustHandleContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, AdjustHandle& rAdjustHandle ) : ContextHandler( rParent ) , mrAdjustHandle( rAdjustHandle ) , mrCustomShapeProperties( rCustomShapeProperties ) { const rtl::OUString aEmptyDefault; AttributeList aAttribs( xAttribs ); if ( aAttribs.hasAttribute( XML_gdRefR ) ) { mrAdjustHandle.gdRef1 = GetGeomGuideName( aAttribs.getString( XML_gdRefR, aEmptyDefault ) ); } if ( aAttribs.hasAttribute( XML_minR ) ) { mrAdjustHandle.min1 = GetAdjCoordinate( mrCustomShapeProperties, aAttribs.getString( XML_minR, aEmptyDefault ), sal_True ); } if ( aAttribs.hasAttribute( XML_maxR ) ) { mrAdjustHandle.max1 = GetAdjCoordinate( mrCustomShapeProperties, aAttribs.getString( XML_maxR, aEmptyDefault ), sal_True ); } if ( aAttribs.hasAttribute( XML_gdRefAng ) ) { mrAdjustHandle.gdRef2 = GetGeomGuideName( aAttribs.getString( XML_gdRefAng, aEmptyDefault ) ); } if ( aAttribs.hasAttribute( XML_minAng ) ) { mrAdjustHandle.min2 = GetAdjAngle( mrCustomShapeProperties, aAttribs.getString( XML_minAng, aEmptyDefault ) ); } if ( aAttribs.hasAttribute( XML_maxAng ) ) { mrAdjustHandle.max2 = GetAdjAngle( mrCustomShapeProperties, aAttribs.getString( XML_maxAng, aEmptyDefault ) ); } } Reference< XFastContextHandler > PolarAdjustHandleContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( pos ) ) xContext = new AdjPoint2DContext( *this, xAttribs, mrCustomShapeProperties, mrAdjustHandle.pos ); // CT_AdjPoint2D return xContext; } // --------------------------------------------------------------------- // CT_AdjustHandleList class AdjustHandleListContext : public ContextHandler { public: AdjustHandleListContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, std::vector< AdjustHandle >& rAdjustHandleList ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: std::vector< AdjustHandle >& mrAdjustHandleList; CustomShapeProperties& mrCustomShapeProperties; }; AdjustHandleListContext::AdjustHandleListContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, std::vector< AdjustHandle >& rAdjustHandleList ) : ContextHandler( rParent ) , mrAdjustHandleList( rAdjustHandleList ) , mrCustomShapeProperties( rCustomShapeProperties ) { } Reference< XFastContextHandler > AdjustHandleListContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( ahXY ) ) // CT_XYAdjustHandle { AdjustHandle aAdjustHandle( sal_False ); mrAdjustHandleList.push_back( aAdjustHandle ); xContext = new XYAdjustHandleContext( *this, xAttribs, mrCustomShapeProperties, mrAdjustHandleList.back() ); } else if ( aElementToken == A_TOKEN( ahPolar ) ) // CT_PolarAdjustHandle { AdjustHandle aAdjustHandle( sal_True ); mrAdjustHandleList.push_back( aAdjustHandle ); xContext = new PolarAdjustHandleContext( *this, xAttribs, mrCustomShapeProperties, mrAdjustHandleList.back() ); } return xContext; } // --------------------------------------------------------------------- // CT_ConnectionSite class ConnectionSiteContext : public ContextHandler { public: ConnectionSiteContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, ConnectionSite& rConnectionSite ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: ConnectionSite& mrConnectionSite; CustomShapeProperties& mrCustomShapeProperties; }; ConnectionSiteContext::ConnectionSiteContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, ConnectionSite& rConnectionSite ) : ContextHandler( rParent ) , mrConnectionSite( rConnectionSite ) , mrCustomShapeProperties( rCustomShapeProperties ) { mrConnectionSite.ang = GetAdjAngle( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_ang ) ); } Reference< XFastContextHandler > ConnectionSiteContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( pos ) ) xContext = new AdjPoint2DContext( *this, xAttribs, mrCustomShapeProperties, mrConnectionSite.pos ); // CT_AdjPoint2D return xContext; } // --------------------------------------------------------------------- // CT_Path2DMoveTo class Path2DMoveToContext : public ContextHandler { public: Path2DMoveToContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rAdjPoint2D ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: EnhancedCustomShapeParameterPair& mrAdjPoint2D; CustomShapeProperties& mrCustomShapeProperties; }; Path2DMoveToContext::Path2DMoveToContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rAdjPoint2D ) : ContextHandler( rParent ) , mrAdjPoint2D( rAdjPoint2D ) , mrCustomShapeProperties( rCustomShapeProperties ) { } Reference< XFastContextHandler > Path2DMoveToContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( pt ) ) xContext = new AdjPoint2DContext( *this, xAttribs, mrCustomShapeProperties, mrAdjPoint2D ); // CT_AdjPoint2D return xContext; } // --------------------------------------------------------------------- // CT_Path2DLineTo class Path2DLineToContext : public ContextHandler { public: Path2DLineToContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rAdjPoint2D ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: EnhancedCustomShapeParameterPair& mrAdjPoint2D; CustomShapeProperties& mrCustomShapeProperties; }; Path2DLineToContext::Path2DLineToContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rAdjPoint2D ) : ContextHandler( rParent ) , mrAdjPoint2D( rAdjPoint2D ) , mrCustomShapeProperties( rCustomShapeProperties ) { } Reference< XFastContextHandler > Path2DLineToContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( pt ) ) xContext = new AdjPoint2DContext( *this, xAttribs, mrCustomShapeProperties, mrAdjPoint2D ); // CT_AdjPoint2D return xContext; } // --------------------------------------------------------------------- // CT_Path2DQuadBezierTo class Path2DQuadBezierToContext : public ContextHandler { public: Path2DQuadBezierToContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rPt1, EnhancedCustomShapeParameterPair& rPt2 ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: EnhancedCustomShapeParameterPair& mrPt1; EnhancedCustomShapeParameterPair& mrPt2; int nCount; CustomShapeProperties& mrCustomShapeProperties; }; Path2DQuadBezierToContext::Path2DQuadBezierToContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rPt1, EnhancedCustomShapeParameterPair& rPt2 ) : ContextHandler( rParent ) , mrPt1( rPt1 ) , mrPt2( rPt2 ) , nCount( 0 ) , mrCustomShapeProperties( rCustomShapeProperties ) { } Reference< XFastContextHandler > Path2DQuadBezierToContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( pt ) ) xContext = new AdjPoint2DContext( *this, xAttribs, mrCustomShapeProperties, nCount++ ? mrPt2 : mrPt1 ); // CT_AdjPoint2D return xContext; } // --------------------------------------------------------------------- // CT_Path2DCubicBezierTo class Path2DCubicBezierToContext : public ContextHandler { public: Path2DCubicBezierToContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair&, EnhancedCustomShapeParameterPair&, EnhancedCustomShapeParameterPair& ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: CustomShapeProperties& mrCustomShapeProperties; EnhancedCustomShapeParameterPair& mrControlPt1; EnhancedCustomShapeParameterPair& mrControlPt2; EnhancedCustomShapeParameterPair& mrEndPt; int nCount; }; Path2DCubicBezierToContext::Path2DCubicBezierToContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, EnhancedCustomShapeParameterPair& rControlPt1, EnhancedCustomShapeParameterPair& rControlPt2, EnhancedCustomShapeParameterPair& rEndPt ) : ContextHandler( rParent ) , mrCustomShapeProperties( rCustomShapeProperties ) , mrControlPt1( rControlPt1 ) , mrControlPt2( rControlPt2 ) , mrEndPt( rEndPt ) , nCount( 0 ) { } Reference< XFastContextHandler > Path2DCubicBezierToContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( pt ) ) xContext = new AdjPoint2DContext( *this, xAttribs, mrCustomShapeProperties, nCount++ ? nCount == 2 ? mrControlPt2 : mrEndPt : mrControlPt1 ); // CT_AdjPoint2D return xContext; } // --------------------------------------------------------------------- // CT_Path2DContext class Path2DContext : public ContextHandler { public: Path2DContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, std::vector< com::sun::star::drawing::EnhancedCustomShapeSegment >& rSegments, Path2D& rPath2D ); virtual ~Path2DContext(); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: Path2D& mrPath2D; std::vector< com::sun::star::drawing::EnhancedCustomShapeSegment >& mrSegments; CustomShapeProperties& mrCustomShapeProperties; }; Path2DContext::Path2DContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties, std::vector< com::sun::star::drawing::EnhancedCustomShapeSegment >& rSegments, Path2D& rPath2D ) : ContextHandler( rParent ) , mrPath2D( rPath2D ) , mrSegments( rSegments ) , mrCustomShapeProperties( rCustomShapeProperties ) { const rtl::OUString aEmptyString; AttributeList aAttribs( xAttribs ); rPath2D.w = aAttribs.getString( XML_w, aEmptyString ).toInt64(); rPath2D.h = aAttribs.getString( XML_h, aEmptyString ).toInt64(); rPath2D.fill = aAttribs.getToken( XML_fill, XML_norm ); rPath2D.stroke = aAttribs.getBool( XML_stroke, sal_True ); rPath2D.extrusionOk = aAttribs.getBool( XML_extrusionOk, sal_True ); } Path2DContext::~Path2DContext() { EnhancedCustomShapeSegment aNewSegment; if ( mrPath2D.fill == XML_none ) { aNewSegment.Command = EnhancedCustomShapeSegmentCommand::NOFILL; aNewSegment.Count = 0; mrSegments.push_back( aNewSegment ); } aNewSegment.Command = EnhancedCustomShapeSegmentCommand::ENDSUBPATH; aNewSegment.Count = 0; mrSegments.push_back( aNewSegment ); } Reference< XFastContextHandler > Path2DContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw ( SAXException, RuntimeException ) { Reference< XFastContextHandler > xContext; switch( aElementToken ) { case A_TOKEN( close ) : { EnhancedCustomShapeSegment aNewSegment; aNewSegment.Command = EnhancedCustomShapeSegmentCommand::CLOSESUBPATH; aNewSegment.Count = 0; mrSegments.push_back( aNewSegment ); } break; case A_TOKEN( moveTo ) : { EnhancedCustomShapeSegment aNewSegment; aNewSegment.Command = EnhancedCustomShapeSegmentCommand::MOVETO; aNewSegment.Count = 1; mrSegments.push_back( aNewSegment ); EnhancedCustomShapeParameterPair aAdjPoint2D; mrPath2D.parameter.push_back( aAdjPoint2D ); xContext = new Path2DMoveToContext( *this, mrCustomShapeProperties, mrPath2D.parameter.back() ); } break; case A_TOKEN( lnTo ) : { if ( !mrSegments.empty() && ( mrSegments.back().Command == EnhancedCustomShapeSegmentCommand::LINETO ) ) mrSegments.back().Count++; else { EnhancedCustomShapeSegment aSegment; aSegment.Command = EnhancedCustomShapeSegmentCommand::LINETO; aSegment.Count = 1; mrSegments.push_back( aSegment ); } EnhancedCustomShapeParameterPair aAdjPoint2D; mrPath2D.parameter.push_back( aAdjPoint2D ); xContext = new Path2DLineToContext( *this, mrCustomShapeProperties, mrPath2D.parameter.back() ); } break; case A_TOKEN( arcTo ) : // CT_Path2DArcTo { if ( !mrSegments.empty() && ( mrSegments.back().Command == EnhancedCustomShapeSegmentCommand::ARCTO ) ) mrSegments.back().Count++; else { EnhancedCustomShapeSegment aSegment; aSegment.Command = EnhancedCustomShapeSegmentCommand::ARCTO; aSegment.Count = 1; mrSegments.push_back( aSegment ); } EnhancedCustomShapeParameter aWidth = GetAdjCoordinate( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_wR ), sal_True ); EnhancedCustomShapeParameter aHeight = GetAdjCoordinate( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_hR ), sal_True ); EnhancedCustomShapeParameter aStartAngle = GetAdjAngle( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_stAng ) ); EnhancedCustomShapeParameter swAngle = GetAdjAngle( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_swAng ) ); EnhancedCustomShapeParameterPair aPt1; // TODO: conversion from (wr hr stAng swAng) EnhancedCustomShapeParameterPair aPt2; // to (x1 y1 x2 y2 x3 y3 x y) needed EnhancedCustomShapeParameterPair aPt3; EnhancedCustomShapeParameterPair aPt; mrPath2D.parameter.push_back( aPt1 ); mrPath2D.parameter.push_back( aPt2 ); mrPath2D.parameter.push_back( aPt3 ); mrPath2D.parameter.push_back( aPt ); } break; case A_TOKEN( quadBezTo ) : { if ( !mrSegments.empty() && ( mrSegments.back().Command == EnhancedCustomShapeSegmentCommand::QUADRATICCURVETO ) ) mrSegments.back().Count++; else { EnhancedCustomShapeSegment aSegment; aSegment.Command = EnhancedCustomShapeSegmentCommand::QUADRATICCURVETO; aSegment.Count = 1; mrSegments.push_back( aSegment ); } EnhancedCustomShapeParameterPair aPt1; EnhancedCustomShapeParameterPair aPt2; mrPath2D.parameter.push_back( aPt1 ); mrPath2D.parameter.push_back( aPt2 ); xContext = new Path2DQuadBezierToContext( *this, mrCustomShapeProperties, mrPath2D.parameter[ mrPath2D.parameter.size() - 2 ], mrPath2D.parameter.back() ); } break; case A_TOKEN( cubicBezTo ) : { if ( !mrSegments.empty() && ( mrSegments.back().Command == EnhancedCustomShapeSegmentCommand::CURVETO ) ) mrSegments.back().Count++; else { EnhancedCustomShapeSegment aSegment; aSegment.Command = EnhancedCustomShapeSegmentCommand::CURVETO; aSegment.Count = 1; mrSegments.push_back( aSegment ); } EnhancedCustomShapeParameterPair aControlPt1; EnhancedCustomShapeParameterPair aControlPt2; EnhancedCustomShapeParameterPair aEndPt; mrPath2D.parameter.push_back( aControlPt1 ); mrPath2D.parameter.push_back( aControlPt2 ); mrPath2D.parameter.push_back( aEndPt ); xContext = new Path2DCubicBezierToContext( *this, mrCustomShapeProperties, mrPath2D.parameter[ mrPath2D.parameter.size() - 3 ], mrPath2D.parameter[ mrPath2D.parameter.size() - 2 ], mrPath2D.parameter.back() ); } break; } return xContext; } // --------------------------------------------------------------------- // CT_Path2DList class Path2DListContext : public ContextHandler { public: Path2DListContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, std::vector< EnhancedCustomShapeSegment >& rSegments, std::vector< Path2D >& rPath2DList ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); protected: CustomShapeProperties& mrCustomShapeProperties; std::vector< com::sun::star::drawing::EnhancedCustomShapeSegment >& mrSegments; std::vector< Path2D >& mrPath2DList; }; Path2DListContext::Path2DListContext( ContextHandler& rParent, CustomShapeProperties& rCustomShapeProperties, std::vector< EnhancedCustomShapeSegment >& rSegments, std::vector< Path2D >& rPath2DList ) : ContextHandler( rParent ) , mrCustomShapeProperties( rCustomShapeProperties ) , mrSegments( rSegments ) , mrPath2DList( rPath2DList ) { } ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL Path2DListContext::createFastChildContext( sal_Int32 aElementToken, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException) { Reference< XFastContextHandler > xContext; if ( aElementToken == A_TOKEN( path ) ) { Path2D aPath2D; mrPath2DList.push_back( aPath2D ); xContext = new Path2DContext( *this, xAttribs, mrCustomShapeProperties, mrSegments, mrPath2DList.back() ); } return xContext; } // --------------------------------------------------------------------- OUString GetShapeType( sal_Int32 nType ) { OUString sType; switch( nType ) { case XML_lineInv: // TODO case XML_line: { static const OUString sLine = CREATE_OUSTRING( "mso-spt20" ); sType = sLine; } break; case XML_triangle: { static const OUString sTriangle = CREATE_OUSTRING( "isosceles-triangle" ); sType = sTriangle; } break; case XML_rtTriangle: { static const OUString sRtTriangle = CREATE_OUSTRING( "right-triangle" ); sType = sRtTriangle; } break; case XML_rect: { static const OUString sRectangle = CREATE_OUSTRING( "rectangle" ); sType = sRectangle; } break; case XML_diamond: { static const OUString sDiamond = CREATE_OUSTRING( "diamond" ); sType = sDiamond; } break; case XML_parallelogram: { static const OUString sParallelogram = CREATE_OUSTRING( "parallelogram" ); sType = sParallelogram; } break; case XML_nonIsoscelesTrapezoid: // TODO case XML_trapezoid: { static const OUString sTrapezoid = CREATE_OUSTRING( "trapezoid" ); sType = sTrapezoid; } break; case XML_pentagon: { static const OUString sPentagon = CREATE_OUSTRING( "pentagon" ); sType = sPentagon; } break; case XML_heptagon: // TODO case XML_hexagon: { static const OUString sHexagon = CREATE_OUSTRING( "hexagon" ); sType = sHexagon; } break; case XML_decagon: // TODO case XML_dodecagon: // TODO case XML_octagon: { static const OUString sOctagon = CREATE_OUSTRING( "octagon" ); sType = sOctagon; } break; case XML_star4: { static const OUString sStar4 = CREATE_OUSTRING( "star4" ); sType = sStar4; } break; case XML_star6: // TODO case XML_star7: // TODO case XML_star5: { static const OUString sStar5 = CREATE_OUSTRING( "star5" ); sType = sStar5; } break; case XML_star10: // TODO case XML_star12: // TODO case XML_star16: // TODO case XML_star8: { static const OUString sStar8 = CREATE_OUSTRING( "star8" ); sType = sStar8; } break; case XML_star32: // TODO case XML_star24: { static const OUString sStar24 = CREATE_OUSTRING( "star24" ); sType = sStar24; } break; case XML_round1Rect: // TODO case XML_round2SameRect: // TODO case XML_round2DiagRect: // TODO case XML_snipRoundRect: // TODO case XML_snip1Rect: // TODO case XML_snip2SameRect: // TODO case XML_snip2DiagRect: // TODO case XML_roundRect: { static const OUString sRoundRect = CREATE_OUSTRING( "round-rectangle" ); sType = sRoundRect; } break; case XML_plaque: { static const OUString sPlaque = CREATE_OUSTRING( "mso-spt21" ); sType = sPlaque; } break; case XML_teardrop:{ static const OUString sTearDrop = CREATE_OUSTRING( "teardrop" ); sType = sTearDrop; } break; case XML_ellipse: { static const OUString sEllipse = CREATE_OUSTRING( "ellipse" ); sType = sEllipse; } break; case XML_homePlate: { static const OUString sHomePlate = CREATE_OUSTRING( "pentagon-right" ); sType = sHomePlate; } break; case XML_chevron: { static const OUString sChevron = CREATE_OUSTRING( "chevron" ); sType = sChevron; } break; case XML_pieWedge: // TODO case XML_pie: // TODO case XML_blockArc: { static const OUString sBlockArc = CREATE_OUSTRING( "block-arc" ); sType = sBlockArc; } break; case XML_donut: { static const OUString sDonut = CREATE_OUSTRING( "ring" ); sType = sDonut; } break; case XML_noSmoking: { static const OUString sNoSmoking = CREATE_OUSTRING( "forbidden" ); sType = sNoSmoking; } break; case XML_rightArrow: { static const OUString sRightArrow = CREATE_OUSTRING( "right-arrow" ); sType = sRightArrow; } break; case XML_leftArrow: { static const OUString sLeftArrow = CREATE_OUSTRING( "left-arrow" ); sType = sLeftArrow; } break; case XML_upArrow: { static const OUString sUpArrow = CREATE_OUSTRING( "up-arrow" ); sType = sUpArrow; } break; case XML_downArrow: { static const OUString sDownArrow = CREATE_OUSTRING( "down-arrow" ); sType = sDownArrow; } break; case XML_stripedRightArrow: { static const OUString sStripedRightArrow = CREATE_OUSTRING( "striped-right-arrow" ); sType = sStripedRightArrow; } break; case XML_notchedRightArrow: { static const OUString sNotchedRightArrow = CREATE_OUSTRING( "notched-right-arrow" ); sType = sNotchedRightArrow; } break; case XML_bentUpArrow: { static const OUString sBentUpArrow = CREATE_OUSTRING( "mso-spt90" ); sType = sBentUpArrow; } break; case XML_leftRightArrow: { static const OUString sLeftRightArrow = CREATE_OUSTRING( "left-right-arrow" ); sType = sLeftRightArrow; } break; case XML_upDownArrow: { static const OUString sUpDownArrow = CREATE_OUSTRING( "up-down-arrow" ); sType = sUpDownArrow; } break; case XML_leftUpArrow: { static const OUString sLeftUpArrow = CREATE_OUSTRING( "mso-spt89" ); sType = sLeftUpArrow; } break; case XML_leftRightUpArrow: { static const OUString sLeftRightUpArrow = CREATE_OUSTRING( "mso-spt182" ); sType = sLeftRightUpArrow; } break; case XML_quadArrow: { static const OUString sQuadArrow = CREATE_OUSTRING( "quad-arrow" ); sType = sQuadArrow; } break; case XML_leftArrowCallout: { static const OUString sLeftArrowCallout = CREATE_OUSTRING( "left-arrow-callout" ); sType = sLeftArrowCallout; } break; case XML_rightArrowCallout: { static const OUString sRightArrowCallout = CREATE_OUSTRING( "right-arrow-callout" ); sType = sRightArrowCallout; } break; case XML_upArrowCallout: { static const OUString sUpArrowCallout = CREATE_OUSTRING( "up-arrow-callout" ); sType = sUpArrowCallout; } break; case XML_downArrowCallout: { static const OUString sDownArrowCallout = CREATE_OUSTRING( "down-arrow-callout" ); sType = sDownArrowCallout; } break; case XML_leftRightArrowCallout: { static const OUString sLeftRightArrowCallout = CREATE_OUSTRING( "left-right-arrow-callout" ); sType = sLeftRightArrowCallout; } break; case XML_upDownArrowCallout: { static const OUString sUpDownArrowCallout = CREATE_OUSTRING( "up-down-arrow-callout" ); sType = sUpDownArrowCallout; } break; case XML_quadArrowCallout: { static const OUString sQuadArrowCallout = CREATE_OUSTRING( "quad-arrow-callout" ); sType = sQuadArrowCallout; } break; case XML_bentArrow: { static const OUString sBentArrow = CREATE_OUSTRING( "mso-spt91" ); sType = sBentArrow; } break; case XML_uturnArrow: { static const OUString sUTurnArrow = CREATE_OUSTRING( "mso-spt101" ); sType = sUTurnArrow; } break; case XML_leftCircularArrow: // TODO case XML_leftRightCircularArrow: // TODO case XML_circularArrow: { static const OUString sCircularArrow = CREATE_OUSTRING( "circular-arrow" ); sType = sCircularArrow; } break; case XML_curvedRightArrow: { static const OUString sCurvedRightArrow = CREATE_OUSTRING( "mso-spt102" ); sType = sCurvedRightArrow; } break; case XML_curvedLeftArrow: { static const OUString sCurvedLeftArrow = CREATE_OUSTRING( "mso-spt103" ); sType = sCurvedLeftArrow; } break; case XML_curvedUpArrow: { static const OUString sCurvedUpArrow = CREATE_OUSTRING( "mso-spt104" ); sType = sCurvedUpArrow; } break; case XML_swooshArrow: // TODO case XML_curvedDownArrow: { static const OUString sCurvedDownArrow = CREATE_OUSTRING( "mso-spt105" ); sType = sCurvedDownArrow; } break; case XML_cube: { static const OUString sCube = CREATE_OUSTRING( "cube" ); sType = sCube; } break; case XML_can: { static const OUString sCan = CREATE_OUSTRING( "can" ); sType = sCan; } break; case XML_lightningBolt: { static const OUString sLightningBolt = CREATE_OUSTRING( "lightning" ); sType = sLightningBolt; } break; case XML_heart: { static const OUString sHeart = CREATE_OUSTRING( "heart" ); sType = sHeart; } break; case XML_sun: { static const OUString sSun = CREATE_OUSTRING( "sun" ); sType = sSun; } break; case XML_moon: { static const OUString sMoon = CREATE_OUSTRING( "moon" ); sType = sMoon; } break; case XML_smileyFace: { static const OUString sSmileyFace = CREATE_OUSTRING( "smiley" ); sType = sSmileyFace; } break; case XML_irregularSeal1: { static const OUString sIrregularSeal1 = CREATE_OUSTRING( "mso-spt71" ); sType = sIrregularSeal1; } break; case XML_irregularSeal2: { static const OUString sIrregularSeal2 = CREATE_OUSTRING( "bang" ); sType = sIrregularSeal2; } break; case XML_foldedCorner: { static const OUString sFoldedCorner = CREATE_OUSTRING( "paper" ); sType = sFoldedCorner; } break; case XML_bevel: { static const OUString sBevel = CREATE_OUSTRING( "quad-bevel" ); sType = sBevel; } break; case XML_halfFrame: // TODO case XML_corner: // TODO case XML_diagStripe: // TODO case XML_chord: // TODO case XML_frame: { static const OUString sFrame = CREATE_OUSTRING( "mso-spt75" ); sType = sFrame; } break; case XML_arc: { static const OUString sArc = CREATE_OUSTRING( "mso-spt19" ); sType = sArc; } break; case XML_leftBracket: { static const OUString sLeftBracket = CREATE_OUSTRING( "left-bracket" ); sType = sLeftBracket; } break; case XML_rightBracket: { static const OUString sRightBracket = CREATE_OUSTRING( "right-bracket" ); sType = sRightBracket; } break; case XML_leftBrace: { static const OUString sLeftBrace = CREATE_OUSTRING( "left-brace" ); sType = sLeftBrace; } break; case XML_rightBrace: { static const OUString sRightBrace = CREATE_OUSTRING( "right-brace" ); sType = sRightBrace; } break; case XML_bracketPair: { static const OUString sBracketPair = CREATE_OUSTRING( "bracket-pair" ); sType = sBracketPair; } break; case XML_bracePair: { static const OUString sBracePair = CREATE_OUSTRING( "brace-pair" ); sType = sBracePair; } break; case XML_straightConnector1: { static const OUString sStraightConnector1 = CREATE_OUSTRING( "mso-spt32" ); sType = sStraightConnector1; } break; case XML_bentConnector2: { static const OUString sBentConnector2 = CREATE_OUSTRING( "mso-spt33" ); sType = sBentConnector2; } break; case XML_bentConnector3: { static const OUString sBentConnector3 = CREATE_OUSTRING( "mso-spt34" ); sType = sBentConnector3; } break; case XML_bentConnector4: { static const OUString sBentConnector4 = CREATE_OUSTRING( "mso-spt35" ); sType = sBentConnector4; } break; case XML_bentConnector5: { static const OUString sBentConnector5 = CREATE_OUSTRING( "mso-spt36" ); sType = sBentConnector5; } break; case XML_curvedConnector2: { static const OUString sCurvedConnector2 = CREATE_OUSTRING( "mso-spt37" ); sType = sCurvedConnector2; } break; case XML_curvedConnector3: { static const OUString sCurvedConnector3 = CREATE_OUSTRING( "mso-spt38" ); sType = sCurvedConnector3; } break; case XML_curvedConnector4: { static const OUString sCurvedConnector4 = CREATE_OUSTRING( "mso-spt39" ); sType = sCurvedConnector4; } break; case XML_curvedConnector5: { static const OUString sCurvedConnector5 = CREATE_OUSTRING( "mso-spt40" ); sType = sCurvedConnector5; } break; case XML_callout1: { static const OUString sCallout1 = CREATE_OUSTRING( "mso-spt41" ); sType = sCallout1; } break; case XML_callout2: { static const OUString sCallout2 = CREATE_OUSTRING( "mso-spt42" ); sType = sCallout2; } break; case XML_callout3: { static const OUString sCallout3 = CREATE_OUSTRING( "mso-spt43" ); sType = sCallout3; } break; case XML_accentCallout1: { static const OUString sAccentCallout1 = CREATE_OUSTRING( "mso-spt44" ); sType = sAccentCallout1; } break; case XML_accentCallout2: { static const OUString sAccentCallout2 = CREATE_OUSTRING( "mso-spt45" ); sType = sAccentCallout2; } break; case XML_accentCallout3: { static const OUString sAccentCallout3 = CREATE_OUSTRING( "mso-spt46" ); sType = sAccentCallout3; } break; case XML_borderCallout1: { static const OUString sBorderCallout1 = CREATE_OUSTRING( "line-callout-1" ); sType = sBorderCallout1; } break; case XML_borderCallout2: { static const OUString sBorderCallout2 = CREATE_OUSTRING( "line-callout-2" ); sType = sBorderCallout2; } break; case XML_borderCallout3: { static const OUString sBorderCallout3 = CREATE_OUSTRING( "mso-spt49" ); sType = sBorderCallout3; } break; case XML_accentBorderCallout1: { static const OUString sAccentBorderCallout1 = CREATE_OUSTRING( "mso-spt50" ); sType = sAccentBorderCallout1; } break; case XML_accentBorderCallout2: { static const OUString sAccentBorderCallout2 = CREATE_OUSTRING( "mso-spt51" ); sType = sAccentBorderCallout2; } break; case XML_accentBorderCallout3: { static const OUString sAccentBorderCallout3 = CREATE_OUSTRING( "mso-spt52" ); sType = sAccentBorderCallout3; } break; case XML_wedgeRectCallout: { static const OUString sWedgeRectCallout = CREATE_OUSTRING( "rectangular-callout" ); sType = sWedgeRectCallout; } break; case XML_wedgeRoundRectCallout: { static const OUString sWedgeRoundRectCallout = CREATE_OUSTRING( "round-rectangular-callout" ); sType = sWedgeRoundRectCallout; } break; case XML_wedgeEllipseCallout: { static const OUString sWedgeEllipseCallout = CREATE_OUSTRING( "round-callout" ); sType = sWedgeEllipseCallout; } break; case XML_cloud: // TODO case XML_cloudCallout: { static const OUString sCloudCallout = CREATE_OUSTRING( "cloud-callout" ); sType = sCloudCallout; } break; case XML_ribbon: { static const OUString sRibbon = CREATE_OUSTRING( "mso-spt53" ); sType = sRibbon; } break; case XML_ribbon2: { static const OUString sRibbon2 = CREATE_OUSTRING( "mso-spt54" ); sType = sRibbon2; } break; case XML_ellipseRibbon: { static const OUString sEllipseRibbon = CREATE_OUSTRING( "mso-spt107" ); sType = sEllipseRibbon; } break; case XML_leftRightRibbon: // TODO case XML_ellipseRibbon2: { static const OUString sEllipseRibbon2 = CREATE_OUSTRING( "mso-spt108" ); sType = sEllipseRibbon2; } break; case XML_verticalScroll: { static const OUString sVerticalScroll = CREATE_OUSTRING( "vertical-scroll" ); sType = sVerticalScroll; } break; case XML_horizontalScroll: { static const OUString sHorizontalScroll = CREATE_OUSTRING( "horizontal-scroll" ); sType = sHorizontalScroll; } break; case XML_wave: { static const OUString sWave = CREATE_OUSTRING( "mso-spt64" ); sType = sWave; } break; case XML_doubleWave: { static const OUString sDoubleWave = CREATE_OUSTRING( "mso-spt188" ); sType = sDoubleWave; } break; case XML_plus: { static const OUString sPlus = CREATE_OUSTRING( "cross" ); sType = sPlus; } break; case XML_flowChartProcess: { static const OUString sFlowChartProcess = CREATE_OUSTRING( "flowchart-process" ); sType = sFlowChartProcess; } break; case XML_flowChartDecision: { static const OUString sFlowChartDecision = CREATE_OUSTRING( "flowchart-decision" ); sType = sFlowChartDecision; } break; case XML_flowChartInputOutput: { static const OUString sFlowChartInputOutput = CREATE_OUSTRING( "flowchart-data" ); sType = sFlowChartInputOutput; } break; case XML_flowChartPredefinedProcess: { static const OUString sFlowChartPredefinedProcess = CREATE_OUSTRING( "flowchart-predefined-process" ); sType = sFlowChartPredefinedProcess; } break; case XML_flowChartInternalStorage: { static const OUString sFlowChartInternalStorage = CREATE_OUSTRING( "flowchart-internal-storage" ); sType = sFlowChartInternalStorage; } break; case XML_flowChartDocument: { static const OUString sFlowChartDocument = CREATE_OUSTRING( "flowchart-document" ); sType = sFlowChartDocument; } break; case XML_flowChartMultidocument: { static const OUString sFlowChartMultidocument = CREATE_OUSTRING( "flowchart-multidocument" ); sType = sFlowChartMultidocument; } break; case XML_flowChartTerminator: { static const OUString sFlowChartTerminator = CREATE_OUSTRING( "flowchart-terminator" ); sType = sFlowChartTerminator; } break; case XML_flowChartPreparation : { static const OUString sFlowChartPreparation = CREATE_OUSTRING( "flowchart-preparation" ); sType = sFlowChartPreparation; } break; case XML_flowChartManualInput: { static const OUString sFlowChartManualInput = CREATE_OUSTRING( "flowchart-manual-input" ); sType = sFlowChartManualInput; } break; case XML_flowChartManualOperation: { static const OUString sFlowChartManualOperation = CREATE_OUSTRING( "flowchart-manual-operation" ); sType = sFlowChartManualOperation; } break; case XML_flowChartConnector: { static const OUString sFlowChartConnector = CREATE_OUSTRING( "flowchart-connector" ); sType = sFlowChartConnector; } break; case XML_flowChartPunchedCard: { static const OUString sFlowChartPunchedCard = CREATE_OUSTRING( "flowchart-card" ); sType = sFlowChartPunchedCard; } break; case XML_flowChartPunchedTape: { static const OUString sFlowChartPunchedTape = CREATE_OUSTRING( "flowchart-punched-tape" ); sType = sFlowChartPunchedTape; } break; case XML_flowChartSummingJunction: { static const OUString sFlowChartSummingJunction = CREATE_OUSTRING( "flowchart-summing-junction" ); sType = sFlowChartSummingJunction; } break; case XML_flowChartOr: { static const OUString sFlowChartOr = CREATE_OUSTRING( "flowchart-or" ); sType = sFlowChartOr; } break; case XML_flowChartCollate: { static const OUString sFlowChartCollate = CREATE_OUSTRING( "flowchart-collate" ); sType = sFlowChartCollate; } break; case XML_flowChartSort: { static const OUString sFlowChartSort = CREATE_OUSTRING( "flowchart-sort" ); sType = sFlowChartSort; } break; case XML_flowChartExtract: { static const OUString sFlowChartExtract = CREATE_OUSTRING( "flowchart-extract" ); sType = sFlowChartExtract; } break; case XML_flowChartMerge: { static const OUString sFlowChartMerge = CREATE_OUSTRING( "flowchart-merge" ); sType = sFlowChartMerge; } break; case XML_flowChartOfflineStorage: { static const OUString sFlowChartOfflineStorage = CREATE_OUSTRING( "mso-spt129" ); sType = sFlowChartOfflineStorage; } break; case XML_flowChartOnlineStorage: { static const OUString sFlowChartOnlineStorage = CREATE_OUSTRING( "flowchart-stored-data" ); sType = sFlowChartOnlineStorage; } break; case XML_flowChartMagneticTape: { static const OUString sFlowChartMagneticTape = CREATE_OUSTRING( "flowchart-sequential-access" ); sType = sFlowChartMagneticTape; } break; case XML_flowChartMagneticDisk: { static const OUString sFlowChartMagneticDisk = CREATE_OUSTRING( "flowchart-magnetic-disk" ); sType = sFlowChartMagneticDisk; } break; case XML_flowChartMagneticDrum: { static const OUString sFlowChartMagneticDrum = CREATE_OUSTRING( "flowchart-direct-access-storage" ); sType = sFlowChartMagneticDrum; } break; case XML_flowChartDisplay: { static const OUString sFlowChartDisplay = CREATE_OUSTRING( "flowchart-display" ); sType = sFlowChartDisplay; } break; case XML_flowChartDelay: { static const OUString sFlowChartDelay = CREATE_OUSTRING( "flowchart-delay" ); sType = sFlowChartDelay; } break; case XML_flowChartAlternateProcess: { static const OUString sFlowChartAlternateProcess = CREATE_OUSTRING( "flowchart-alternate-process" ); sType = sFlowChartAlternateProcess; } break; case XML_flowChartOffpageConnector: { static const OUString sFlowChartOffpageConnector = CREATE_OUSTRING( "flowchart-off-page-connector" ); sType = sFlowChartOffpageConnector; } break; case XML_actionButtonBlank: { static const OUString sActionButtonBlank = CREATE_OUSTRING( "mso-spt189" ); sType = sActionButtonBlank; } break; case XML_actionButtonHome: { static const OUString sActionButtonHome = CREATE_OUSTRING( "mso-spt190" ); sType = sActionButtonHome; } break; case XML_actionButtonHelp: { static const OUString sActionButtonHelp = CREATE_OUSTRING( "mso-spt191" ); sType = sActionButtonHelp; } break; case XML_actionButtonInformation: { static const OUString sActionButtonInformation = CREATE_OUSTRING( "mso-spt192" ); sType = sActionButtonInformation; } break; case XML_actionButtonForwardNext: { static const OUString sActionButtonForwardNext = CREATE_OUSTRING( "mso-spt193" ); sType = sActionButtonForwardNext; } break; case XML_actionButtonBackPrevious: { static const OUString sActionButtonBackPrevious = CREATE_OUSTRING( "mso-spt194" ); sType = sActionButtonBackPrevious; } break; case XML_actionButtonEnd: { static const OUString sActionButtonEnd = CREATE_OUSTRING( "mso-spt195" ); sType = sActionButtonEnd; } break; case XML_actionButtonBeginning: { static const OUString sActionButtonBeginning = CREATE_OUSTRING( "mso-spt196" ); sType = sActionButtonBeginning; } break; case XML_actionButtonReturn: { static const OUString sActionButtonReturn = CREATE_OUSTRING( "mso-spt197" ); sType = sActionButtonReturn; } break; case XML_actionButtonDocument: { static const OUString sActionButtonDocument = CREATE_OUSTRING( "mso-spt198" ); sType = sActionButtonDocument; } break; case XML_actionButtonSound: { static const OUString sActionButtonSound = CREATE_OUSTRING( "mso-spt199" ); sType = sActionButtonSound; } break; case XML_actionButtonMovie: { static const OUString sActionButtonMovie = CREATE_OUSTRING( "mso-spt200" ); sType = sActionButtonMovie; } break; case XML_gear6: // TODO case XML_gear9: // TODO case XML_funnel: // TODO case XML_mathPlus: // TODO case XML_mathMinus: // TODO case XML_mathMultiply: // TODO case XML_mathDivide: // TODO case XML_mathEqual: // TODO case XML_mathNotEqual: // TODO case XML_cornerTabs: // TODO case XML_squareTabs: // TODO case XML_plaqueTabs: // TODO case XML_chartX: // TODO case XML_chartStar: // TODO case XML_chartPlus: { // TODO static const OUString sRectangle = CREATE_OUSTRING( "rectangle" ); sType = sRectangle; } break; default: break; } return sType; } static OUString GetTextShapeType( sal_Int32 nType ) { OUString sType; switch( nType ) { case XML_textNoShape: // TODO case XML_textPlain: { static const OUString sTextPlain = CREATE_OUSTRING( "fontwork-plain-text" ); sType = sTextPlain; } break; case XML_textStop: { static const OUString sTextStop = CREATE_OUSTRING( "fontwork-stop" ); sType = sTextStop; } break; case XML_textTriangle: { static const OUString sTextTriangle = CREATE_OUSTRING( "fontwork-triangle-up" ); sType = sTextTriangle; } break; case XML_textTriangleInverted: { static const OUString sTextTriangleInverted = CREATE_OUSTRING( "fontwork-triangle-down" ); sType = sTextTriangleInverted; } break; case XML_textChevron: { static const OUString sTextChevron = CREATE_OUSTRING( "fontwork-chevron-up" ); sType = sTextChevron; } break; case XML_textChevronInverted: { static const OUString sTextChevronInverted = CREATE_OUSTRING( "fontwork-chevron-down" ); sType = sTextChevronInverted; } break; case XML_textRingInside: { static const OUString sTextRingInside = CREATE_OUSTRING( "mso-spt142" ); sType = sTextRingInside; } break; case XML_textRingOutside: { static const OUString sTextRingOutside = CREATE_OUSTRING( "mso-spt143" ); sType = sTextRingOutside; } break; case XML_textArchUp: { static const OUString sTextArchUp = CREATE_OUSTRING( "fontwork-arch-up-curve" ); sType = sTextArchUp; } break; case XML_textArchDown: { static const OUString sTextArchDown = CREATE_OUSTRING( "fontwork-arch-down-curve" ); sType = sTextArchDown; } break; case XML_textCircle: { static const OUString sTextCircle = CREATE_OUSTRING( "fontwork-circle-curve" ); sType = sTextCircle; } break; case XML_textButton: { static const OUString sTextButton = CREATE_OUSTRING( "fontwork-open-circle-curve" ); sType = sTextButton; } break; case XML_textArchUpPour: { static const OUString sTextArchUpPour = CREATE_OUSTRING( "fontwork-arch-up-pour" ); sType = sTextArchUpPour; } break; case XML_textArchDownPour: { static const OUString sTextArchDownPour = CREATE_OUSTRING( "fontwork-arch-down-pour" ); sType = sTextArchDownPour; } break; case XML_textCirclePour: { static const OUString sTextCirclePour = CREATE_OUSTRING( "fontwork-circle-pour" ); sType = sTextCirclePour; } break; case XML_textButtonPour: { static const OUString sTextButtonPour = CREATE_OUSTRING( "fontwork-open-circle-pour" ); sType = sTextButtonPour; } break; case XML_textCurveUp: { static const OUString sTextCurveUp = CREATE_OUSTRING( "fontwork-curve-up" ); sType = sTextCurveUp; } break; case XML_textCurveDown: { static const OUString sTextCurveDown = CREATE_OUSTRING( "fontwork-curve-down" ); sType = sTextCurveDown; } break; case XML_textCanUp: { static const OUString sTextCanUp = CREATE_OUSTRING( "mso-spt174" ); sType = sTextCanUp; } break; case XML_textCanDown: { static const OUString sTextCanDown = CREATE_OUSTRING( "mso-spt175" ); sType = sTextCanDown; } break; case XML_textWave1: { static const OUString sTextWave1 = CREATE_OUSTRING( "fontwork-wave" ); sType = sTextWave1; } break; case XML_textWave2: { static const OUString sTextWave2 = CREATE_OUSTRING( "mso-spt157" ); sType = sTextWave2; } break; case XML_textDoubleWave1: { static const OUString sTextDoubleWave1 = CREATE_OUSTRING( "mso-spt158" ); sType = sTextDoubleWave1; } break; case XML_textWave4: { static const OUString sTextWave4 = CREATE_OUSTRING( "mso-spt159" ); sType = sTextWave4; } break; case XML_textInflate: { static const OUString sTextInflate = CREATE_OUSTRING( "fontwork-inflate" ); sType = sTextInflate; } break; case XML_textDeflate: { static const OUString sTextDeflate = CREATE_OUSTRING( "mso-spt161" ); sType = sTextDeflate; } break; case XML_textInflateBottom: { static const OUString sTextInflateBottom = CREATE_OUSTRING( "mso-spt162" ); sType = sTextInflateBottom; } break; case XML_textDeflateBottom: { static const OUString sTextDeflateBottom = CREATE_OUSTRING( "mso-spt163" ); sType = sTextDeflateBottom; } break; case XML_textInflateTop: { static const OUString sTextInflateTop = CREATE_OUSTRING( "mso-spt164" ); sType = sTextInflateTop; } break; case XML_textDeflateTop: { static const OUString sTextDeflateTop = CREATE_OUSTRING( "mso-spt165" ); sType = sTextDeflateTop; } break; case XML_textDeflateInflate: { static const OUString sTextDeflateInflate = CREATE_OUSTRING( "mso-spt166" ); sType = sTextDeflateInflate; } break; case XML_textDeflateInflateDeflate: { static const OUString sTextDeflateInflateDeflate = CREATE_OUSTRING( "mso-spt167" ); sType = sTextDeflateInflateDeflate; } break; case XML_textFadeRight: { static const OUString sTextFadeRight = CREATE_OUSTRING( "fontwork-fade-right" ); sType = sTextFadeRight; } break; case XML_textFadeLeft: { static const OUString sTextFadeLeft = CREATE_OUSTRING( "fontwork-fade-left" ); sType = sTextFadeLeft; } break; case XML_textFadeUp: { static const OUString sTextFadeUp = CREATE_OUSTRING( "fontwork-fade-up" ); sType = sTextFadeUp; } break; case XML_textFadeDown: { static const OUString sTextFadeDown = CREATE_OUSTRING( "fontwork-fade-down" ); sType = sTextFadeDown; } break; case XML_textSlantUp: { static const OUString sTextSlantUp = CREATE_OUSTRING( "fontwork-slant-up" ); sType = sTextSlantUp; } break; case XML_textSlantDown: { static const OUString sTextSlantDown = CREATE_OUSTRING( "fontwork-slant-down" ); sType = sTextSlantDown; } break; case XML_textCascadeUp: { static const OUString sTextCascadeUp = CREATE_OUSTRING( "fontwork-fade-up-and-right" ); sType = sTextCascadeUp; } break; case XML_textCascadeDown: { static const OUString sTextCascadeDown = CREATE_OUSTRING( "fontwork-fade-up-and-left" ); sType = sTextCascadeDown; } break; default: break; } return sType; } // --------------------------------------------------------------------- // CT_CustomGeometry2D CustomShapeGeometryContext::CustomShapeGeometryContext( ContextHandler& rParent, const Reference< XFastAttributeList >& /* xAttribs */, CustomShapeProperties& rCustomShapeProperties ) : ContextHandler( rParent ) , mrCustomShapeProperties( rCustomShapeProperties ) { } Reference< XFastContextHandler > CustomShapeGeometryContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) { Reference< XFastContextHandler > xContext; switch( aElementToken ) { case A_TOKEN( avLst ): // CT_GeomGuideList adjust value list xContext = new GeomGuideListContext( *this, mrCustomShapeProperties, mrCustomShapeProperties.getAdjustmentGuideList() ); break; case A_TOKEN( gdLst ): // CT_GeomGuideList guide list xContext = new GeomGuideListContext( *this, mrCustomShapeProperties, mrCustomShapeProperties.getGuideList() ); break; case A_TOKEN( ahLst ): // CT_AdjustHandleList adjust handle list xContext = new AdjustHandleListContext( *this, mrCustomShapeProperties, mrCustomShapeProperties.getAdjustHandleList() ); break; case A_TOKEN( cxnLst ): // CT_ConnectionSiteList connection site list xContext = this; break; case A_TOKEN( rect ): // CT_GeomRectList geometry rect list { GeomRect aGeomRect; aGeomRect.l = GetAdjCoordinate( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_l ), sal_True ); aGeomRect.t = GetAdjCoordinate( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_t ), sal_True ); aGeomRect.r = GetAdjCoordinate( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_r ), sal_True ); aGeomRect.b = GetAdjCoordinate( mrCustomShapeProperties, xAttribs->getOptionalValue( XML_b ), sal_True ); mrCustomShapeProperties.getTextRect() = aGeomRect; } break; case A_TOKEN( pathLst ): // CT_Path2DList 2d path list xContext = new Path2DListContext( *this, mrCustomShapeProperties, mrCustomShapeProperties.getSegments(), mrCustomShapeProperties.getPath2DList() ); break; // from cxnLst: case A_TOKEN( cxn ): // CT_ConnectionSite { ConnectionSite aConnectionSite; mrCustomShapeProperties.getConnectionSiteList().push_back( aConnectionSite ); xContext = new ConnectionSiteContext( *this, xAttribs, mrCustomShapeProperties, mrCustomShapeProperties.getConnectionSiteList().back() ); } break; } return xContext; } // --------------------------------------------------------------------- // CT_PresetGeometry2D PresetShapeGeometryContext::PresetShapeGeometryContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties ) : ContextHandler( rParent ) , mrCustomShapeProperties( rCustomShapeProperties ) { OUString sShapeType; sal_Int32 nShapeType = xAttribs->getOptionalValueToken( XML_prst, FastToken::DONTKNOW ); if ( nShapeType != FastToken::DONTKNOW ) sShapeType = GetShapeType( nShapeType ); OSL_ENSURE( sShapeType.getLength(), "oox::drawingml::CustomShapeCustomGeometryContext::CustomShapeCustomGeometryContext(), unknown shape type" ); mrCustomShapeProperties.setShapePresetType( sShapeType ); } Reference< XFastContextHandler > PresetShapeGeometryContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& ) throw (SAXException, RuntimeException) { if ( aElementToken == A_TOKEN( avLst ) ) return new GeomGuideListContext( *this, mrCustomShapeProperties, mrCustomShapeProperties.getAdjustmentGuideList() ); else return this; } // --------------------------------------------------------------------- // CT_PresetTextShape PresetTextShapeContext::PresetTextShapeContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, CustomShapeProperties& rCustomShapeProperties ) : ContextHandler( rParent ) , mrCustomShapeProperties( rCustomShapeProperties ) { OUString sShapeType; sal_Int32 nShapeType = xAttribs->getOptionalValueToken( XML_prst, FastToken::DONTKNOW ); if ( nShapeType != FastToken::DONTKNOW ) sShapeType = GetTextShapeType( nShapeType ); OSL_ENSURE( sShapeType.getLength(), "oox::drawingml::CustomShapeCustomGeometryContext::CustomShapeCustomGeometryContext(), unknown shape type" ); mrCustomShapeProperties.setShapePresetType( sShapeType ); } Reference< XFastContextHandler > PresetTextShapeContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& ) throw (SAXException, RuntimeException) { if ( aElementToken == A_TOKEN( avLst ) ) return new GeomGuideListContext( *this, mrCustomShapeProperties, mrCustomShapeProperties.getAdjustmentGuideList() ); else return this; } } }