1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #include "oox/drawingml/textcharacterpropertiescontext.hxx"
29 
30 #include "oox/helper/attributelist.hxx"
31 #include "oox/drawingml/drawingmltypes.hxx"
32 #include "oox/drawingml/colorchoicecontext.hxx"
33 #include "oox/drawingml/lineproperties.hxx"
34 #include "oox/drawingml/textparagraphproperties.hxx"
35 #include "oox/core/relations.hxx"
36 #include "hyperlinkcontext.hxx"
37 
38 using ::rtl::OUString;
39 using namespace ::oox::core;
40 using namespace ::com::sun::star::uno;
41 using namespace ::com::sun::star::xml::sax;
42 using namespace ::com::sun::star::awt;
43 
44 namespace oox { namespace drawingml {
45 
46 // --------------------------------------------------------------------
47 
48 // CT_TextCharacterProperties
49 TextCharacterPropertiesContext::TextCharacterPropertiesContext(
50         ContextHandler& rParent,
51         const Reference< XFastAttributeList >& rXAttributes,
52         TextCharacterProperties& rTextCharacterProperties )
53 : ContextHandler( rParent )
54 , mrTextCharacterProperties( rTextCharacterProperties )
55 {
56     AttributeList aAttribs( rXAttributes );
57 	if ( aAttribs.hasAttribute( XML_lang ) )
58 		mrTextCharacterProperties.moLang = aAttribs.getString( XML_lang );
59 	if ( aAttribs.hasAttribute( XML_sz ) )
60 		mrTextCharacterProperties.moHeight = aAttribs.getInteger( XML_sz );
61 	if ( aAttribs.hasAttribute( XML_u ) )
62 		mrTextCharacterProperties.moUnderline = aAttribs.getToken( XML_u );
63 	if ( aAttribs.hasAttribute( XML_strike ) )
64 		mrTextCharacterProperties.moStrikeout = aAttribs.getToken( XML_strike );
65 
66 //  mrTextCharacterProperties.moCaseMap     = aAttribs.getToken( XML_cap );
67 	if ( aAttribs.hasAttribute( XML_b ) )
68 		mrTextCharacterProperties.moBold = aAttribs.getBool( XML_b );
69 	if ( aAttribs.hasAttribute( XML_i ) )
70 		mrTextCharacterProperties.moItalic = aAttribs.getBool( XML_i );
71 
72 // TODO
73 /*	 todo: we need to be able to iterate over the XFastAttributes
74 
75   // ST_TextNonNegativePoint
76     const OUString sCharKerning( CREATE_OUSTRING( "CharKerning" ) );
77 	//case A_TOKEN( kern ):
78 
79   // ST_TextLanguageID
80 	OUString sAltLang = rXAttributes->getOptionalValue( XML_altLang );
81 
82 		case A_TOKEN( kumimoji ):		// xsd:boolean
83 			break;
84 		case A_TOKEN( spc ):			// ST_TextPoint
85 		case A_TOKEN( normalizeH ):		// xsd:boolean
86 		case A_TOKEN( baseline ):		// ST_Percentage
87 		case A_TOKEN( noProof ):		// xsd:boolean
88 		case A_TOKEN( dirty ):			// xsd:boolean
89 		case A_TOKEN( err ):			// xsd:boolean
90 		case A_TOKEN( smtClean ):		// xsd:boolean
91 		case A_TOKEN( smtId ):			// xsd:unsignedInt
92 			break;
93 */
94 
95 }
96 
97 TextCharacterPropertiesContext::~TextCharacterPropertiesContext()
98 {
99 }
100 
101 // --------------------------------------------------------------------
102 
103 void TextCharacterPropertiesContext::endFastElement( sal_Int32 ) throw (SAXException, RuntimeException)
104 {
105 }
106 
107 // --------------------------------------------------------------------
108 
109 Reference< XFastContextHandler > TextCharacterPropertiesContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttributes ) throw (SAXException, RuntimeException)
110 {
111     AttributeList aAttribs( xAttributes );
112 	Reference< XFastContextHandler > xRet;
113 	switch( aElementToken )
114 	{
115 // TODO unsupported yet
116 //        case A_TOKEN( ln ):         // CT_LineProperties
117 //            xRet.set( new LinePropertiesContext( getHandler(), xAttributes, maTextOutlineProperties ) );
118 //        break;
119 
120         case A_TOKEN( solidFill ):  // EG_FillProperties
121             xRet.set( new ColorContext( *this, mrTextCharacterProperties.maCharColor ) );
122         break;
123 
124         // EG_EffectProperties
125         case A_TOKEN( effectDag ):  // CT_EffectContainer 5.1.10.25
126         case A_TOKEN( effectLst ):  // CT_EffectList 5.1.10.26
127         break;
128 
129         case A_TOKEN( highlight ):  // CT_Color
130             xRet.set( new ColorContext( *this, mrTextCharacterProperties.maHighlightColor ) );
131         break;
132 
133 		// EG_TextUnderlineLine
134         case A_TOKEN( uLnTx ):      // CT_TextUnderlineLineFollowText
135             mrTextCharacterProperties.moUnderlineLineFollowText = true;
136         break;
137 // TODO unsupported yet
138 //        case A_TOKEN( uLn ):        // CT_LineProperties
139 //            xRet.set( new LinePropertiesContext( getHandler(), xAttributes, maUnderlineProperties ) );
140 //        break;
141 
142 		// EG_TextUnderlineFill
143         case A_TOKEN( uFillTx ):    // CT_TextUnderlineFillFollowText
144             mrTextCharacterProperties.moUnderlineFillFollowText = true;
145         break;
146         case A_TOKEN( uFill ):      // CT_TextUnderlineFillGroupWrapper->EG_FillProperties (not supported)
147             xRet.set( new SimpleFillPropertiesContext( *this, mrTextCharacterProperties.maUnderlineColor ) );
148         break;
149 
150 		// CT_FontCollection
151         case A_TOKEN( latin ):      // CT_TextFont
152             mrTextCharacterProperties.maLatinFont.setAttributes( aAttribs );
153         break;
154         case A_TOKEN( ea ):         // CT_TextFont
155             mrTextCharacterProperties.maAsianFont.setAttributes( aAttribs );
156         break;
157         case A_TOKEN( cs ):         // CT_TextFont
158             mrTextCharacterProperties.maComplexFont.setAttributes( aAttribs );
159         break;
160         case A_TOKEN( sym ):        // CT_TextFont
161             mrTextCharacterProperties.maSymbolFont.setAttributes( aAttribs );
162         break;
163 
164         case A_TOKEN( hlinkClick ):     // CT_Hyperlink
165         case A_TOKEN( hlinkMouseOver ): // CT_Hyperlink
166             xRet.set( new HyperLinkContext( *this, xAttributes,  mrTextCharacterProperties.maHyperlinkPropertyMap ) );
167         break;
168 	}
169     if( !xRet.is() )
170         xRet.set( this );
171 	return xRet;
172 }
173 
174 // --------------------------------------------------------------------
175 
176 } }
177 
178