|  | /************************************************************** | 
|  | * | 
|  | * 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 <com/sun/star/lang/Locale.hpp> | 
|  | #include <com/sun/star/awt/FontSlant.hpp> | 
|  | #include <com/sun/star/awt/FontWeight.hpp> | 
|  | #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 | 
|  |  |