1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include "layoutnodecontext.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include "oox/helper/attributelist.hxx"
27*b1cdbd2cSJim Jagielski #include "oox/drawingml/diagram/diagram.hxx"
28*b1cdbd2cSJim Jagielski #include "oox/drawingml/shapecontext.hxx"
29*b1cdbd2cSJim Jagielski #include "diagramdefinitioncontext.hxx"
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski using namespace ::oox::core;
32*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
33*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::xml::sax;
34*b1cdbd2cSJim Jagielski using ::rtl::OUString;
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski namespace oox { namespace drawingml {
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski class IfContext
39*b1cdbd2cSJim Jagielski 	: public LayoutNodeContext
40*b1cdbd2cSJim Jagielski {
41*b1cdbd2cSJim Jagielski public:
IfContext(ContextHandler & rParent,const Reference<XFastAttributeList> & xAttribs,const LayoutAtomPtr & pNode)42*b1cdbd2cSJim Jagielski     IfContext( ContextHandler& rParent,
43*b1cdbd2cSJim Jagielski 			   const Reference< XFastAttributeList >& xAttribs,
44*b1cdbd2cSJim Jagielski 			   const LayoutAtomPtr & pNode )
45*b1cdbd2cSJim Jagielski         : LayoutNodeContext( rParent, xAttribs, pNode )
46*b1cdbd2cSJim Jagielski 		{
47*b1cdbd2cSJim Jagielski 			ConditionAtomPtr pAtom( boost::dynamic_pointer_cast< ConditionAtom >(pNode) );
48*b1cdbd2cSJim Jagielski 			OSL_ENSURE( pAtom, "Must pass a ConditionAtom" );
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski 			pAtom->iterator().loadFromXAttr( xAttribs );
51*b1cdbd2cSJim Jagielski 			pAtom->cond().loadFromXAttr( xAttribs );
52*b1cdbd2cSJim Jagielski 		}
53*b1cdbd2cSJim Jagielski };
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski class AlgorithmContext
58*b1cdbd2cSJim Jagielski     : public ContextHandler
59*b1cdbd2cSJim Jagielski {
60*b1cdbd2cSJim Jagielski public:
AlgorithmContext(ContextHandler & rParent,const Reference<XFastAttributeList> & xAttribs,const LayoutAtomPtr & pNode)61*b1cdbd2cSJim Jagielski     AlgorithmContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, const LayoutAtomPtr & pNode )
62*b1cdbd2cSJim Jagielski         : ContextHandler( rParent )
63*b1cdbd2cSJim Jagielski 		, mnRevision( 0 )
64*b1cdbd2cSJim Jagielski 		, mnType( 0 )
65*b1cdbd2cSJim Jagielski 		, mpNode( pNode )
66*b1cdbd2cSJim Jagielski 		{
67*b1cdbd2cSJim Jagielski 			AttributeList aAttribs( xAttribs );
68*b1cdbd2cSJim Jagielski 			mnRevision = aAttribs.getInteger( XML_rev, 0 );
69*b1cdbd2cSJim Jagielski 			mnType = xAttribs->getOptionalValueToken( XML_type, 0 );
70*b1cdbd2cSJim Jagielski 		}
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski private:
73*b1cdbd2cSJim Jagielski 	sal_Int32     mnRevision;
74*b1cdbd2cSJim Jagielski 	sal_Int32     mnType;
75*b1cdbd2cSJim Jagielski 	LayoutAtomPtr mpNode;
76*b1cdbd2cSJim Jagielski };
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski class ChooseContext
80*b1cdbd2cSJim Jagielski     : public ContextHandler
81*b1cdbd2cSJim Jagielski {
82*b1cdbd2cSJim Jagielski public:
ChooseContext(ContextHandler & rParent,const Reference<XFastAttributeList> & xAttribs,const LayoutAtomPtr & pNode)83*b1cdbd2cSJim Jagielski     ChooseContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, const LayoutAtomPtr & pNode )
84*b1cdbd2cSJim Jagielski         : ContextHandler( rParent )
85*b1cdbd2cSJim Jagielski 		, mbHasElse( false )
86*b1cdbd2cSJim Jagielski 		, mpNode( pNode )
87*b1cdbd2cSJim Jagielski 		{
88*b1cdbd2cSJim Jagielski 			msName = xAttribs->getOptionalValue( XML_name );
89*b1cdbd2cSJim Jagielski 		}
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 	virtual Reference< XFastContextHandler > SAL_CALL
createFastChildContext(::sal_Int32 aElement,const Reference<XFastAttributeList> & xAttribs)92*b1cdbd2cSJim Jagielski 	createFastChildContext( ::sal_Int32 aElement,
93*b1cdbd2cSJim Jagielski 							const Reference< XFastAttributeList >& xAttribs )
94*b1cdbd2cSJim Jagielski 		throw (SAXException, RuntimeException)
95*b1cdbd2cSJim Jagielski 		{
96*b1cdbd2cSJim Jagielski 			Reference< XFastContextHandler > xRet;
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 			switch( aElement )
99*b1cdbd2cSJim Jagielski 			{
100*b1cdbd2cSJim Jagielski 			case XML_if:
101*b1cdbd2cSJim Jagielski 			{
102*b1cdbd2cSJim Jagielski 				// CT_When
103*b1cdbd2cSJim Jagielski 				LayoutAtomPtr pAtom( new ConditionAtom( false ) );
104*b1cdbd2cSJim Jagielski 				mpNode->addChild( pAtom );
105*b1cdbd2cSJim Jagielski                 xRet.set( new IfContext( *this, xAttribs, pAtom ) );
106*b1cdbd2cSJim Jagielski 				break;
107*b1cdbd2cSJim Jagielski 			}
108*b1cdbd2cSJim Jagielski 			case XML_else:
109*b1cdbd2cSJim Jagielski 				// CT_Otherwise
110*b1cdbd2cSJim Jagielski 				if( !mbHasElse )
111*b1cdbd2cSJim Jagielski 				{
112*b1cdbd2cSJim Jagielski 					LayoutAtomPtr pAtom( new ConditionAtom( true ) );
113*b1cdbd2cSJim Jagielski 					mpNode->addChild( pAtom );
114*b1cdbd2cSJim Jagielski                     xRet.set( new IfContext( *this, xAttribs, pAtom ) );
115*b1cdbd2cSJim Jagielski 					mbHasElse = true;
116*b1cdbd2cSJim Jagielski 				}
117*b1cdbd2cSJim Jagielski 				else
118*b1cdbd2cSJim Jagielski 				{
119*b1cdbd2cSJim Jagielski 					OSL_TRACE( "ignoring second else clause" );
120*b1cdbd2cSJim Jagielski 				}
121*b1cdbd2cSJim Jagielski 				break;
122*b1cdbd2cSJim Jagielski 			default:
123*b1cdbd2cSJim Jagielski 				break;
124*b1cdbd2cSJim Jagielski 			}
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski 			if( !xRet.is() )
127*b1cdbd2cSJim Jagielski 				xRet.set(this);
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 			return xRet;
130*b1cdbd2cSJim Jagielski 		}
131*b1cdbd2cSJim Jagielski private:
132*b1cdbd2cSJim Jagielski 	bool     mbHasElse;
133*b1cdbd2cSJim Jagielski 	OUString msName;
134*b1cdbd2cSJim Jagielski 	LayoutAtomPtr mpNode;
135*b1cdbd2cSJim Jagielski };
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski class ForEachContext
141*b1cdbd2cSJim Jagielski 	: public LayoutNodeContext
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski public:
ForEachContext(ContextHandler & rParent,const Reference<XFastAttributeList> & xAttribs,const LayoutAtomPtr & pNode)144*b1cdbd2cSJim Jagielski     ForEachContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, const LayoutAtomPtr & pNode )
145*b1cdbd2cSJim Jagielski         : LayoutNodeContext( rParent, xAttribs, pNode )
146*b1cdbd2cSJim Jagielski 		{
147*b1cdbd2cSJim Jagielski 			ForEachAtomPtr pAtom( boost::dynamic_pointer_cast< ForEachAtom >(pNode) );
148*b1cdbd2cSJim Jagielski 			OSL_ENSURE( pAtom, "Must pass a ForEachAtom" );
149*b1cdbd2cSJim Jagielski 			xAttribs->getOptionalValue( XML_ref );
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 			pAtom->iterator().loadFromXAttr( xAttribs );
152*b1cdbd2cSJim Jagielski 		}
153*b1cdbd2cSJim Jagielski };
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski // CT_LayoutVariablePropertySet
157*b1cdbd2cSJim Jagielski class LayoutVariablePropertySetContext
158*b1cdbd2cSJim Jagielski     : public ContextHandler
159*b1cdbd2cSJim Jagielski {
160*b1cdbd2cSJim Jagielski public:
LayoutVariablePropertySetContext(ContextHandler & rParent,LayoutNode::VarMap & aVar)161*b1cdbd2cSJim Jagielski     LayoutVariablePropertySetContext( ContextHandler& rParent, LayoutNode::VarMap & aVar )
162*b1cdbd2cSJim Jagielski         : ContextHandler( rParent )
163*b1cdbd2cSJim Jagielski 		, mVariables( aVar )
164*b1cdbd2cSJim Jagielski 		{
165*b1cdbd2cSJim Jagielski 		}
166*b1cdbd2cSJim Jagielski 
~LayoutVariablePropertySetContext()167*b1cdbd2cSJim Jagielski 	virtual ~LayoutVariablePropertySetContext()
168*b1cdbd2cSJim Jagielski 		{
169*b1cdbd2cSJim Jagielski 		}
170*b1cdbd2cSJim Jagielski 
createFastChildContext(::sal_Int32 aElement,const Reference<XFastAttributeList> & xAttribs)171*b1cdbd2cSJim Jagielski 	virtual Reference< XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 aElement, const Reference< XFastAttributeList >& xAttribs )
172*b1cdbd2cSJim Jagielski 		throw (SAXException, RuntimeException)
173*b1cdbd2cSJim Jagielski 		{
174*b1cdbd2cSJim Jagielski 			Reference< XFastContextHandler > xRet;
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski             sal_Int32 nIdx =  LayoutNodeContext::tagToVarIdx( getBaseToken( aElement ) );
177*b1cdbd2cSJim Jagielski 			if( nIdx != -1 )
178*b1cdbd2cSJim Jagielski 			{
179*b1cdbd2cSJim Jagielski 				mVariables[ nIdx ] = makeAny( xAttribs->getOptionalValue( XML_val ) );
180*b1cdbd2cSJim Jagielski 			}
181*b1cdbd2cSJim Jagielski 			if( !xRet.is() )
182*b1cdbd2cSJim Jagielski 				xRet.set(this);
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski 			return xRet;
185*b1cdbd2cSJim Jagielski 		}
186*b1cdbd2cSJim Jagielski private:
187*b1cdbd2cSJim Jagielski 	LayoutNode::VarMap & mVariables;
188*b1cdbd2cSJim Jagielski };
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski // CT_LayoutNode
LayoutNodeContext(ContextHandler & rParent,const Reference<XFastAttributeList> & xAttribs,const LayoutAtomPtr & pNode)192*b1cdbd2cSJim Jagielski LayoutNodeContext::LayoutNodeContext( ContextHandler& rParent,
193*b1cdbd2cSJim Jagielski 									  const Reference< XFastAttributeList >& xAttribs,
194*b1cdbd2cSJim Jagielski 									  const LayoutAtomPtr &pNode )
195*b1cdbd2cSJim Jagielski     : ContextHandler( rParent )
196*b1cdbd2cSJim Jagielski 	, mpNode( pNode )
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski 	OSL_ENSURE( pNode, "Node must NOT be NULL" );
199*b1cdbd2cSJim Jagielski 	mpNode->setName( xAttribs->getOptionalValue( XML_name ) );
200*b1cdbd2cSJim Jagielski 	// TODO shall we even bother?
201*b1cdbd2cSJim Jagielski 	// b or t
202*b1cdbd2cSJim Jagielski //	sal_Int32 nChOrder = xAttributes->getOptionalValueToken( XML_chOrder, XML_b );
203*b1cdbd2cSJim Jagielski //	OUString sMoveWith = xAttributes->getOptionalValue( XML_moveWith );
204*b1cdbd2cSJim Jagielski //	OUString sStyleLbl = xAttributes->getOptionalValue( XML_styleLbl );
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 
~LayoutNodeContext()208*b1cdbd2cSJim Jagielski LayoutNodeContext::~LayoutNodeContext()
209*b1cdbd2cSJim Jagielski {
210*b1cdbd2cSJim Jagielski }
211*b1cdbd2cSJim Jagielski 
endFastElement(::sal_Int32)212*b1cdbd2cSJim Jagielski void SAL_CALL LayoutNodeContext::endFastElement( ::sal_Int32 )
213*b1cdbd2cSJim Jagielski 	throw (SAXException, RuntimeException)
214*b1cdbd2cSJim Jagielski {
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski /** convert the XML tag to a variable index in the array
219*b1cdbd2cSJim Jagielski  * @param aTag the tag, wihout namespace
220*b1cdbd2cSJim Jagielski  * @return the variable index. -1 is an error
221*b1cdbd2cSJim Jagielski  */
tagToVarIdx(sal_Int32 aTag)222*b1cdbd2cSJim Jagielski sal_Int32 LayoutNodeContext::tagToVarIdx( sal_Int32 aTag )
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski 	sal_Int32 nIdx = -1;
225*b1cdbd2cSJim Jagielski 	switch( aTag )
226*b1cdbd2cSJim Jagielski 	{
227*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( animLvl ):
228*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_animLvl;
229*b1cdbd2cSJim Jagielski 		break;
230*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( animOne ):
231*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_animOne;
232*b1cdbd2cSJim Jagielski 		break;
233*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( bulletEnabled ):
234*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_bulletEnabled;
235*b1cdbd2cSJim Jagielski 		break;
236*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( chMax ):
237*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_chMax;
238*b1cdbd2cSJim Jagielski 		break;
239*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( chPref ):
240*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_chPref;
241*b1cdbd2cSJim Jagielski 		break;
242*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( dir ):
243*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_dir;
244*b1cdbd2cSJim Jagielski 		break;
245*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( hierBranch ):
246*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_hierBranch;
247*b1cdbd2cSJim Jagielski 		break;
248*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( orgChart ):
249*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_orgChart;
250*b1cdbd2cSJim Jagielski 		break;
251*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( resizeHandles ):
252*b1cdbd2cSJim Jagielski 		nIdx = LayoutNode::VAR_resizeHandles;
253*b1cdbd2cSJim Jagielski 		break;
254*b1cdbd2cSJim Jagielski 	default:
255*b1cdbd2cSJim Jagielski 		break;
256*b1cdbd2cSJim Jagielski 	}
257*b1cdbd2cSJim Jagielski 	return nIdx;
258*b1cdbd2cSJim Jagielski }
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski Reference< XFastContextHandler > SAL_CALL
createFastChildContext(::sal_Int32 aElement,const Reference<XFastAttributeList> & xAttribs)262*b1cdbd2cSJim Jagielski LayoutNodeContext::createFastChildContext( ::sal_Int32 aElement,
263*b1cdbd2cSJim Jagielski 												  const Reference< XFastAttributeList >& xAttribs )
264*b1cdbd2cSJim Jagielski 	throw (SAXException, RuntimeException)
265*b1cdbd2cSJim Jagielski {
266*b1cdbd2cSJim Jagielski 	Reference< XFastContextHandler > xRet;
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski 	switch( aElement )
269*b1cdbd2cSJim Jagielski 	{
270*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( layoutNode ):
271*b1cdbd2cSJim Jagielski 	{
272*b1cdbd2cSJim Jagielski 		LayoutNodePtr pNode( new LayoutNode() );
273*b1cdbd2cSJim Jagielski 		mpNode->addChild( pNode );
274*b1cdbd2cSJim Jagielski         xRet.set( new LayoutNodeContext( *this, xAttribs, pNode ) );
275*b1cdbd2cSJim Jagielski 		break;
276*b1cdbd2cSJim Jagielski 	}
277*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( shape ):
278*b1cdbd2cSJim Jagielski 	{
279*b1cdbd2cSJim Jagielski 		ShapePtr pShape( new Shape() );
280*b1cdbd2cSJim Jagielski         xRet.set( new ShapeContext( *this, ShapePtr(), pShape ) );
281*b1cdbd2cSJim Jagielski 		break;
282*b1cdbd2cSJim Jagielski 	}
283*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( extLst ):
284*b1cdbd2cSJim Jagielski         return xRet;
285*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( alg ):
286*b1cdbd2cSJim Jagielski 	{
287*b1cdbd2cSJim Jagielski 		// CT_Algorithm
288*b1cdbd2cSJim Jagielski 		LayoutAtomPtr pAtom( new AlgAtom );
289*b1cdbd2cSJim Jagielski 		mpNode->addChild( pAtom );
290*b1cdbd2cSJim Jagielski         xRet.set( new AlgorithmContext( *this, xAttribs, pAtom ) );
291*b1cdbd2cSJim Jagielski 		break;
292*b1cdbd2cSJim Jagielski 	}
293*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( choose ):
294*b1cdbd2cSJim Jagielski 	{
295*b1cdbd2cSJim Jagielski 		// CT_Choose
296*b1cdbd2cSJim Jagielski 		LayoutAtomPtr pAtom( new ChooseAtom );
297*b1cdbd2cSJim Jagielski 		mpNode->addChild( pAtom );
298*b1cdbd2cSJim Jagielski         xRet.set( new ChooseContext( *this, xAttribs, pAtom ) );
299*b1cdbd2cSJim Jagielski  		break;
300*b1cdbd2cSJim Jagielski 	}
301*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( forEach ):
302*b1cdbd2cSJim Jagielski 	{
303*b1cdbd2cSJim Jagielski 		// CT_ForEach
304*b1cdbd2cSJim Jagielski 		LayoutAtomPtr pAtom( new ForEachAtom );
305*b1cdbd2cSJim Jagielski 		mpNode->addChild( pAtom );
306*b1cdbd2cSJim Jagielski         xRet.set( new ForEachContext( *this, xAttribs, pAtom ) );
307*b1cdbd2cSJim Jagielski 		break;
308*b1cdbd2cSJim Jagielski 	}
309*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( constrLst ):
310*b1cdbd2cSJim Jagielski 		// CT_Constraints
311*b1cdbd2cSJim Jagielski 		// TODO
312*b1cdbd2cSJim Jagielski 		break;
313*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( presOf ):
314*b1cdbd2cSJim Jagielski 	{
315*b1cdbd2cSJim Jagielski 		// CT_PresentationOf
316*b1cdbd2cSJim Jagielski 		// TODO
317*b1cdbd2cSJim Jagielski 		xAttribs->getOptionalValue( XML_axis );
318*b1cdbd2cSJim Jagielski 		xAttribs->getOptionalValue( XML_cnt );
319*b1cdbd2cSJim Jagielski 		xAttribs->getOptionalValue( XML_hideLastTrans );
320*b1cdbd2cSJim Jagielski 		xAttribs->getOptionalValue( XML_ptType );
321*b1cdbd2cSJim Jagielski 		xAttribs->getOptionalValue( XML_st );
322*b1cdbd2cSJim Jagielski 		xAttribs->getOptionalValue( XML_step );
323*b1cdbd2cSJim Jagielski 		break;
324*b1cdbd2cSJim Jagielski 	}
325*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( ruleLst ):
326*b1cdbd2cSJim Jagielski 		// CT_Rules
327*b1cdbd2cSJim Jagielski 		// TODO
328*b1cdbd2cSJim Jagielski 		break;
329*b1cdbd2cSJim Jagielski 	case DGM_TOKEN( varLst ):
330*b1cdbd2cSJim Jagielski 	{
331*b1cdbd2cSJim Jagielski 		LayoutNodePtr pNode( boost::dynamic_pointer_cast< LayoutNode >( mpNode ) );
332*b1cdbd2cSJim Jagielski 		if( pNode )
333*b1cdbd2cSJim Jagielski 		{
334*b1cdbd2cSJim Jagielski             xRet.set( new LayoutVariablePropertySetContext( *this, pNode->variables() ) );
335*b1cdbd2cSJim Jagielski 		}
336*b1cdbd2cSJim Jagielski 		else
337*b1cdbd2cSJim Jagielski 		{
338*b1cdbd2cSJim Jagielski 			OSL_TRACE( "OOX: encountered a varLst in a non layoutNode context" );
339*b1cdbd2cSJim Jagielski 		}
340*b1cdbd2cSJim Jagielski 		break;
341*b1cdbd2cSJim Jagielski 	}
342*b1cdbd2cSJim Jagielski 	default:
343*b1cdbd2cSJim Jagielski 		break;
344*b1cdbd2cSJim Jagielski 	}
345*b1cdbd2cSJim Jagielski 	if( !xRet.is() )
346*b1cdbd2cSJim Jagielski 		xRet.set(this);
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski 	return xRet;
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski } }
353