/************************************************************** * * 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/textcharacterproperties.hxx" #include #include #include #include "oox/helper/helper.hxx" #include "oox/helper/propertyset.hxx" #include "oox/core/xmlfilterbase.hxx" #include "oox/drawingml/drawingmltypes.hxx" #include "oox/token/tokens.hxx" using ::rtl::OUString; using ::oox::core::XmlFilterBase; using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; namespace oox { namespace drawingml { // ============================================================================ void TextCharacterProperties::assignUsed( const TextCharacterProperties& rSourceProps ) { // overwrite all properties exisiting in rSourceProps maHyperlinkPropertyMap.insert( rSourceProps.maHyperlinkPropertyMap.begin(), rSourceProps.maHyperlinkPropertyMap.end() ); maLatinFont.assignIfUsed( rSourceProps.maLatinFont ); maAsianFont.assignIfUsed( rSourceProps.maAsianFont ); maComplexFont.assignIfUsed( rSourceProps.maComplexFont ); maSymbolFont.assignIfUsed( rSourceProps.maSymbolFont ); // keep existing char color if (!maCharColor.isUsed()) maCharColor.assignIfUsed( rSourceProps.maCharColor ); maHighlightColor.assignIfUsed( rSourceProps.maHighlightColor ); maUnderlineColor.assignIfUsed( rSourceProps.maUnderlineColor ); moHeight.assignIfUsed( rSourceProps.moHeight ); moSpacing.assignIfUsed( rSourceProps.moSpacing ); moUnderline.assignIfUsed( rSourceProps.moUnderline ); moStrikeout.assignIfUsed( rSourceProps.moStrikeout ); moCaseMap.assignIfUsed( rSourceProps.moCaseMap ); moBold.assignIfUsed( rSourceProps.moBold ); moItalic.assignIfUsed( rSourceProps.moItalic ); moUnderlineLineFollowText.assignIfUsed( rSourceProps.moUnderlineLineFollowText ); moUnderlineFillFollowText.assignIfUsed( rSourceProps.moUnderlineFillFollowText ); } void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFilterBase& rFilter ) const { OUString aFontName; sal_Int16 nFontPitch = 0; sal_Int16 nFontFamily = 0; if( maLatinFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) ) { rPropMap[ PROP_CharFontName ] <<= aFontName; rPropMap[ PROP_CharFontPitch ] <<= nFontPitch; rPropMap[ PROP_CharFontFamily ] <<= nFontFamily; } if( maAsianFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) ) { rPropMap[ PROP_CharFontNameAsian ] <<= aFontName; rPropMap[ PROP_CharFontPitchAsian ] <<= nFontFamily; rPropMap[ PROP_CharFontFamilyAsian ] <<= nFontPitch; } if( maComplexFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) ) { rPropMap[ PROP_CharFontNameComplex ] <<= aFontName; rPropMap[ PROP_CharFontPitchComplex ] <<= nFontPitch; rPropMap[ PROP_CharFontFamilyComplex ] <<= nFontFamily; } // symbolfont, will now be ... textrun.cxx ... ausgewertet !!!i#113673 if( maCharColor.isUsed() ) rPropMap[ PROP_CharColor ] <<= maCharColor.getColor( rFilter.getGraphicHelper() ); if( moLang.has() && (moLang.get().getLength() > 0) ) { lang::Locale aLocale; sal_Int32 nSepPos = moLang.get().indexOf( sal_Unicode( '-' ), 0 ); if ( nSepPos >= 0 ) { aLocale.Language = moLang.get().copy( 0, nSepPos ); aLocale.Country = moLang.get().copy( nSepPos + 1 ); } else { aLocale.Language = moLang.get(); } rPropMap[ PROP_CharLocale ] <<= aLocale; rPropMap[ PROP_CharLocaleAsian ] <<= aLocale; rPropMap[ PROP_CharLocaleComplex ] <<= aLocale; } if( moHeight.has() ) { float fHeight = GetFontHeight( moHeight.get() ); rPropMap[ PROP_CharHeight ] <<= fHeight; rPropMap[ PROP_CharHeightAsian ] <<= fHeight; rPropMap[ PROP_CharHeightComplex ] <<= fHeight; } rPropMap[ PROP_CharKerning ] <<= (sal_Int16) GetTextSpacingPoint( moSpacing.get( 0 ) ); rPropMap[ PROP_CharUnderline ] <<= GetFontUnderline( moUnderline.get( XML_none ) ); rPropMap[ PROP_CharStrikeout ] <<= GetFontStrikeout( moStrikeout.get( XML_noStrike ) ); rPropMap[ PROP_CharCaseMap ] <<= GetCaseMap( moCaseMap.get( XML_none ) ); float fWeight = moBold.get( false ) ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL; rPropMap[ PROP_CharWeight ] <<= fWeight; rPropMap[ PROP_CharWeightAsian ] <<= fWeight; rPropMap[ PROP_CharWeightComplex ] <<= fWeight; awt::FontSlant eSlant = moItalic.get( false ) ? awt::FontSlant_ITALIC : awt::FontSlant_NONE; rPropMap[ PROP_CharPosture ] <<= eSlant; rPropMap[ PROP_CharPostureAsian ] <<= eSlant; rPropMap[ PROP_CharPostureComplex ] <<= eSlant; bool bUnderlineFillFollowText = moUnderlineFillFollowText.get( false ); if( moUnderline.has() && maUnderlineColor.isUsed() && !bUnderlineFillFollowText ) { rPropMap[ PROP_CharUnderlineHasColor ] <<= true; rPropMap[ PROP_CharUnderlineColor ] <<= maUnderlineColor.getColor( rFilter.getGraphicHelper() ); } } void TextCharacterProperties::pushToPropSet( PropertySet& rPropSet, const XmlFilterBase& rFilter ) const { PropertyMap aPropMap; pushToPropMap( aPropMap, rFilter ); rPropSet.setProperties( aPropMap ); } float TextCharacterProperties::getCharHeightPoints( float fDefault ) const { return moHeight.has() ? GetFontHeight( moHeight.get() ) : fDefault; } // ============================================================================ } // namespace drawingml } // namespace oox