1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #include "oox/drawingml/textcharacterproperties.hxx" 29*cdf0e10cSrcweir #include <com/sun/star/lang/Locale.hpp> 30*cdf0e10cSrcweir #include <com/sun/star/awt/FontSlant.hpp> 31*cdf0e10cSrcweir #include <com/sun/star/awt/FontWeight.hpp> 32*cdf0e10cSrcweir #include "oox/helper/helper.hxx" 33*cdf0e10cSrcweir #include "oox/helper/propertyset.hxx" 34*cdf0e10cSrcweir #include "oox/core/xmlfilterbase.hxx" 35*cdf0e10cSrcweir #include "oox/drawingml/drawingmltypes.hxx" 36*cdf0e10cSrcweir #include "oox/token/tokens.hxx" 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir using ::rtl::OUString; 39*cdf0e10cSrcweir using ::oox::core::XmlFilterBase; 40*cdf0e10cSrcweir using namespace ::com::sun::star; 41*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 42*cdf0e10cSrcweir using namespace ::com::sun::star::beans; 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir namespace oox { 45*cdf0e10cSrcweir namespace drawingml { 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir // ============================================================================ 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir void TextCharacterProperties::assignUsed( const TextCharacterProperties& rSourceProps ) 50*cdf0e10cSrcweir { 51*cdf0e10cSrcweir // overwrite all properties exisiting in rSourceProps 52*cdf0e10cSrcweir maHyperlinkPropertyMap.insert( rSourceProps.maHyperlinkPropertyMap.begin(), rSourceProps.maHyperlinkPropertyMap.end() ); 53*cdf0e10cSrcweir maLatinFont.assignIfUsed( rSourceProps.maLatinFont ); 54*cdf0e10cSrcweir maAsianFont.assignIfUsed( rSourceProps.maAsianFont ); 55*cdf0e10cSrcweir maComplexFont.assignIfUsed( rSourceProps.maComplexFont ); 56*cdf0e10cSrcweir maSymbolFont.assignIfUsed( rSourceProps.maSymbolFont ); 57*cdf0e10cSrcweir maCharColor.assignIfUsed( rSourceProps.maCharColor ); 58*cdf0e10cSrcweir maHighlightColor.assignIfUsed( rSourceProps.maHighlightColor ); 59*cdf0e10cSrcweir maUnderlineColor.assignIfUsed( rSourceProps.maUnderlineColor ); 60*cdf0e10cSrcweir moHeight.assignIfUsed( rSourceProps.moHeight ); 61*cdf0e10cSrcweir moSpacing.assignIfUsed( rSourceProps.moSpacing ); 62*cdf0e10cSrcweir moUnderline.assignIfUsed( rSourceProps.moUnderline ); 63*cdf0e10cSrcweir moStrikeout.assignIfUsed( rSourceProps.moStrikeout ); 64*cdf0e10cSrcweir moCaseMap.assignIfUsed( rSourceProps.moCaseMap ); 65*cdf0e10cSrcweir moBold.assignIfUsed( rSourceProps.moBold ); 66*cdf0e10cSrcweir moItalic.assignIfUsed( rSourceProps.moItalic ); 67*cdf0e10cSrcweir moUnderlineLineFollowText.assignIfUsed( rSourceProps.moUnderlineLineFollowText ); 68*cdf0e10cSrcweir moUnderlineFillFollowText.assignIfUsed( rSourceProps.moUnderlineFillFollowText ); 69*cdf0e10cSrcweir } 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFilterBase& rFilter ) const 72*cdf0e10cSrcweir { 73*cdf0e10cSrcweir OUString aFontName; 74*cdf0e10cSrcweir sal_Int16 nFontPitch = 0; 75*cdf0e10cSrcweir sal_Int16 nFontFamily = 0; 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir if( maLatinFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) ) 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir rPropMap[ PROP_CharFontName ] <<= aFontName; 80*cdf0e10cSrcweir rPropMap[ PROP_CharFontPitch ] <<= nFontPitch; 81*cdf0e10cSrcweir rPropMap[ PROP_CharFontFamily ] <<= nFontFamily; 82*cdf0e10cSrcweir } 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir if( maAsianFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) ) 85*cdf0e10cSrcweir { 86*cdf0e10cSrcweir rPropMap[ PROP_CharFontNameAsian ] <<= aFontName; 87*cdf0e10cSrcweir rPropMap[ PROP_CharFontPitchAsian ] <<= nFontFamily; 88*cdf0e10cSrcweir rPropMap[ PROP_CharFontFamilyAsian ] <<= nFontPitch; 89*cdf0e10cSrcweir } 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir if( maComplexFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) ) 92*cdf0e10cSrcweir { 93*cdf0e10cSrcweir rPropMap[ PROP_CharFontNameComplex ] <<= aFontName; 94*cdf0e10cSrcweir rPropMap[ PROP_CharFontPitchComplex ] <<= nFontPitch; 95*cdf0e10cSrcweir rPropMap[ PROP_CharFontFamilyComplex ] <<= nFontFamily; 96*cdf0e10cSrcweir } 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir // symbolfont, will now be ... textrun.cxx ... ausgewertet !!!i#113673 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir if( maCharColor.isUsed() ) 101*cdf0e10cSrcweir rPropMap[ PROP_CharColor ] <<= maCharColor.getColor( rFilter.getGraphicHelper() ); 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir if( moLang.has() && (moLang.get().getLength() > 0) ) 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir lang::Locale aLocale; 106*cdf0e10cSrcweir sal_Int32 nSepPos = moLang.get().indexOf( sal_Unicode( '-' ), 0 ); 107*cdf0e10cSrcweir if ( nSepPos >= 0 ) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir aLocale.Language = moLang.get().copy( 0, nSepPos ); 110*cdf0e10cSrcweir aLocale.Country = moLang.get().copy( nSepPos + 1 ); 111*cdf0e10cSrcweir } 112*cdf0e10cSrcweir else 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir aLocale.Language = moLang.get(); 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir rPropMap[ PROP_CharLocale ] <<= aLocale; 117*cdf0e10cSrcweir rPropMap[ PROP_CharLocaleAsian ] <<= aLocale; 118*cdf0e10cSrcweir rPropMap[ PROP_CharLocaleComplex ] <<= aLocale; 119*cdf0e10cSrcweir } 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir if( moHeight.has() ) 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir float fHeight = GetFontHeight( moHeight.get() ); 124*cdf0e10cSrcweir rPropMap[ PROP_CharHeight ] <<= fHeight; 125*cdf0e10cSrcweir rPropMap[ PROP_CharHeightAsian ] <<= fHeight; 126*cdf0e10cSrcweir rPropMap[ PROP_CharHeightComplex ] <<= fHeight; 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir rPropMap[ PROP_CharKerning ] <<= (sal_Int16) GetTextSpacingPoint( moSpacing.get( 0 ) ); 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir rPropMap[ PROP_CharUnderline ] <<= GetFontUnderline( moUnderline.get( XML_none ) ); 132*cdf0e10cSrcweir rPropMap[ PROP_CharStrikeout ] <<= GetFontStrikeout( moStrikeout.get( XML_noStrike ) ); 133*cdf0e10cSrcweir rPropMap[ PROP_CharCaseMap ] <<= GetCaseMap( moCaseMap.get( XML_none ) ); 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir float fWeight = moBold.get( false ) ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL; 136*cdf0e10cSrcweir rPropMap[ PROP_CharWeight ] <<= fWeight; 137*cdf0e10cSrcweir rPropMap[ PROP_CharWeightAsian ] <<= fWeight; 138*cdf0e10cSrcweir rPropMap[ PROP_CharWeightComplex ] <<= fWeight; 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir awt::FontSlant eSlant = moItalic.get( false ) ? awt::FontSlant_ITALIC : awt::FontSlant_NONE; 141*cdf0e10cSrcweir rPropMap[ PROP_CharPosture ] <<= eSlant; 142*cdf0e10cSrcweir rPropMap[ PROP_CharPostureAsian ] <<= eSlant; 143*cdf0e10cSrcweir rPropMap[ PROP_CharPostureComplex ] <<= eSlant; 144*cdf0e10cSrcweir 145*cdf0e10cSrcweir bool bUnderlineFillFollowText = moUnderlineFillFollowText.get( false ); 146*cdf0e10cSrcweir if( moUnderline.has() && maUnderlineColor.isUsed() && !bUnderlineFillFollowText ) 147*cdf0e10cSrcweir { 148*cdf0e10cSrcweir rPropMap[ PROP_CharUnderlineHasColor ] <<= true; 149*cdf0e10cSrcweir rPropMap[ PROP_CharUnderlineColor ] <<= maUnderlineColor.getColor( rFilter.getGraphicHelper() ); 150*cdf0e10cSrcweir } 151*cdf0e10cSrcweir } 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir void TextCharacterProperties::pushToPropSet( PropertySet& rPropSet, const XmlFilterBase& rFilter ) const 154*cdf0e10cSrcweir { 155*cdf0e10cSrcweir PropertyMap aPropMap; 156*cdf0e10cSrcweir pushToPropMap( aPropMap, rFilter ); 157*cdf0e10cSrcweir rPropSet.setProperties( aPropMap ); 158*cdf0e10cSrcweir } 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir float TextCharacterProperties::getCharHeightPoints( float fDefault ) const 161*cdf0e10cSrcweir { 162*cdf0e10cSrcweir return moHeight.has() ? GetFontHeight( moHeight.get() ) : fDefault; 163*cdf0e10cSrcweir } 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir // ============================================================================ 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir } // namespace drawingml 168*cdf0e10cSrcweir } // namespace oox 169*cdf0e10cSrcweir 170