blob: 531b5e31586f0ae9a3dcbe0d23a71e2ae0338500 [file] [log] [blame]
/**************************************************************
*
* 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/textcharacterpropertiescontext.hxx"
#include "oox/helper/attributelist.hxx"
#include "oox/drawingml/drawingmltypes.hxx"
#include "oox/drawingml/colorchoicecontext.hxx"
#include "oox/drawingml/lineproperties.hxx"
#include "oox/drawingml/textparagraphproperties.hxx"
#include "oox/core/relations.hxx"
#include "hyperlinkcontext.hxx"
using ::rtl::OUString;
using namespace ::oox::core;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::xml::sax;
using namespace ::com::sun::star::awt;
namespace oox { namespace drawingml {
// --------------------------------------------------------------------
// CT_TextCharacterProperties
TextCharacterPropertiesContext::TextCharacterPropertiesContext(
ContextHandler& rParent,
const Reference< XFastAttributeList >& rXAttributes,
TextCharacterProperties& rTextCharacterProperties )
: ContextHandler( rParent )
, mrTextCharacterProperties( rTextCharacterProperties )
{
AttributeList aAttribs( rXAttributes );
if ( aAttribs.hasAttribute( XML_lang ) )
mrTextCharacterProperties.moLang = aAttribs.getString( XML_lang );
if ( aAttribs.hasAttribute( XML_sz ) )
mrTextCharacterProperties.moHeight = aAttribs.getInteger( XML_sz );
if ( aAttribs.hasAttribute( XML_u ) )
mrTextCharacterProperties.moUnderline = aAttribs.getToken( XML_u );
if ( aAttribs.hasAttribute( XML_strike ) )
mrTextCharacterProperties.moStrikeout = aAttribs.getToken( XML_strike );
// mrTextCharacterProperties.moCaseMap = aAttribs.getToken( XML_cap );
if ( aAttribs.hasAttribute( XML_b ) )
mrTextCharacterProperties.moBold = aAttribs.getBool( XML_b );
if ( aAttribs.hasAttribute( XML_i ) )
mrTextCharacterProperties.moItalic = aAttribs.getBool( XML_i );
// TODO
/* todo: we need to be able to iterate over the XFastAttributes
// ST_TextNonNegativePoint
const OUString sCharKerning( CREATE_OUSTRING( "CharKerning" ) );
//case A_TOKEN( kern ):
// ST_TextLanguageID
OUString sAltLang = rXAttributes->getOptionalValue( XML_altLang );
case A_TOKEN( kumimoji ): // xsd:boolean
break;
case A_TOKEN( spc ): // ST_TextPoint
case A_TOKEN( normalizeH ): // xsd:boolean
case A_TOKEN( baseline ): // ST_Percentage
case A_TOKEN( noProof ): // xsd:boolean
case A_TOKEN( dirty ): // xsd:boolean
case A_TOKEN( err ): // xsd:boolean
case A_TOKEN( smtClean ): // xsd:boolean
case A_TOKEN( smtId ): // xsd:unsignedInt
break;
*/
}
TextCharacterPropertiesContext::~TextCharacterPropertiesContext()
{
}
// --------------------------------------------------------------------
void TextCharacterPropertiesContext::endFastElement( sal_Int32 ) throw (SAXException, RuntimeException)
{
}
// --------------------------------------------------------------------
Reference< XFastContextHandler > TextCharacterPropertiesContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttributes ) throw (SAXException, RuntimeException)
{
AttributeList aAttribs( xAttributes );
Reference< XFastContextHandler > xRet;
switch( aElementToken )
{
// TODO unsupported yet
// case A_TOKEN( ln ): // CT_LineProperties
// xRet.set( new LinePropertiesContext( getHandler(), xAttributes, maTextOutlineProperties ) );
// break;
case A_TOKEN( solidFill ): // EG_FillProperties
xRet.set( new ColorContext( *this, mrTextCharacterProperties.maCharColor ) );
break;
// EG_EffectProperties
case A_TOKEN( effectDag ): // CT_EffectContainer 5.1.10.25
case A_TOKEN( effectLst ): // CT_EffectList 5.1.10.26
break;
case A_TOKEN( highlight ): // CT_Color
xRet.set( new ColorContext( *this, mrTextCharacterProperties.maHighlightColor ) );
break;
// EG_TextUnderlineLine
case A_TOKEN( uLnTx ): // CT_TextUnderlineLineFollowText
mrTextCharacterProperties.moUnderlineLineFollowText = true;
break;
// TODO unsupported yet
// case A_TOKEN( uLn ): // CT_LineProperties
// xRet.set( new LinePropertiesContext( getHandler(), xAttributes, maUnderlineProperties ) );
// break;
// EG_TextUnderlineFill
case A_TOKEN( uFillTx ): // CT_TextUnderlineFillFollowText
mrTextCharacterProperties.moUnderlineFillFollowText = true;
break;
case A_TOKEN( uFill ): // CT_TextUnderlineFillGroupWrapper->EG_FillProperties (not supported)
xRet.set( new SimpleFillPropertiesContext( *this, mrTextCharacterProperties.maUnderlineColor ) );
break;
// CT_FontCollection
case A_TOKEN( latin ): // CT_TextFont
mrTextCharacterProperties.maLatinFont.setAttributes( aAttribs );
break;
case A_TOKEN( ea ): // CT_TextFont
mrTextCharacterProperties.maAsianFont.setAttributes( aAttribs );
break;
case A_TOKEN( cs ): // CT_TextFont
mrTextCharacterProperties.maComplexFont.setAttributes( aAttribs );
break;
case A_TOKEN( sym ): // CT_TextFont
mrTextCharacterProperties.maSymbolFont.setAttributes( aAttribs );
break;
case A_TOKEN( hlinkClick ): // CT_Hyperlink
case A_TOKEN( hlinkMouseOver ): // CT_Hyperlink
xRet.set( new HyperLinkContext( *this, xAttributes, mrTextCharacterProperties.maHyperlinkPropertyMap ) );
break;
}
if( !xRet.is() )
xRet.set( this );
return xRet;
}
// --------------------------------------------------------------------
} }