xref: /AOO41X/main/autodoc/source/parser_i/inc/s2_luidl/pe_excp.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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 #ifndef LUIDL_PE_EXCP_HXX
29 #define LUIDL_PE_EXCP_HXX
30 
31 
32 
33 // USED SERVICES
34 	// BASE CLASSES
35 #include <s2_luidl/parsenv2.hxx>
36 #include <s2_luidl/pestate.hxx>
37 	// COMPONENTS
38 #include <s2_luidl/semnode.hxx>
39 #include <ary/qualiname.hxx>
40 	// PARAMETERS
41 
42 
43 
44 namespace csi
45 {
46 namespace prl
47 {
48     class TNamespace;
49 }
50 }
51 
52 
53 
54 namespace csi
55 {
56 namespace uidl
57 {
58 
59 
60 class Exception;
61 class StructElement;
62 class PE_StructElement;
63 class PE_Type;
64 
65 
66 class PE_Exception : public UnoIDL_PE
67 {
68   public:
69 						PE_Exception();
70 	virtual void	 	EstablishContacts(
71 							UnoIDL_PE *			io_pParentPE,
72 							ary::Repository &	io_rRepository,
73 							TokenProcessing_Result &
74 												o_rResult );
75 						~PE_Exception();
76 	virtual void	  	ProcessToken(
77 							const Token &		i_rToken );
78 
79   private:
80 	struct S_Work
81 	{
82 							S_Work();
83 
84 		void				InitData();
85 		void				Prepare_PE_QualifiedName();
86 		void				Prepare_PE_Element();
87 		void				Data_Set_Name(
88 								const char *		i_sName );
89         // DATA
90 		String              sData_Name;
91 		bool				bIsPreDeclaration;
92 		ary::idl::Ce_id		nCurStruct;
93 
94 		Dyn<PE_StructElement>
95 							pPE_Element;
96 		ary::idl::Ce_id		nCurParsed_ElementRef;
97 		Dyn<PE_Type>		pPE_Type;
98 		ary::idl::Type_id	nCurParsed_Base;
99 	};
100 
101 	struct S_Stati;
102     class PE_StructState;
103     friend struct S_Stati;
104     friend class PE_StructState;
105 
106 
107 	class PE_StructState : public ParseEnvState
108 	{
109 	  public:
110 
111 	  protected:
112 							PE_StructState(
113 								PE_Exception &			i_rStruct )
114 													: 	rStruct(i_rStruct) {}
115 		void				MoveState(
116 								ParseEnvState &	    i_rState ) const;
117 		void				SetResult(
118 								E_TokenDone			i_eDone,
119 								E_EnvStackAction	i_eWhat2DoWithEnvStack,
120 								UnoIDL_PE *			i_pParseEnv2Push = 0 ) const
121 													{ rStruct.SetResult(i_eDone, i_eWhat2DoWithEnvStack, i_pParseEnv2Push); }
122 
123 		S_Stati &          	Stati() const           { return *rStruct.pStati; }
124 		S_Work &			Work() const			{ return rStruct.aWork; }
125 		PE_Exception &		PE() const				{ return rStruct; }
126 
127 	  private:
128 		virtual UnoIDL_PE &	MyPE();
129 		// DATA
130 		PE_Exception &			rStruct;
131 	};
132 
133 	class State_None : public PE_StructState
134 	{
135 		public:
136 							State_None(
137 								PE_Exception &			i_rStruct )
138 													: 	PE_StructState(i_rStruct) {}
139 	};
140 	class State_WaitForName : public PE_StructState
141 	{  	// -> Name
142 	  public:
143 							State_WaitForName(
144 								PE_Exception &			i_rStruct )
145 													: 	PE_StructState(i_rStruct) {}
146 		virtual void		Process_Identifier(
147 								const TokIdentifier &
148 													i_rToken );
149 	};
150 	class State_GotName : public PE_StructState
151 	{  	// -> : { ;
152 	  public:
153 							State_GotName(
154 								PE_Exception &			i_rStruct )
155 													: 	PE_StructState(i_rStruct) {}
156 		virtual void		Process_Punctuation(
157 								const TokPunctuation &
158 													i_rToken );
159 	};
160 	class State_WaitForBase : public PE_StructState
161 	{   // -> Base
162 	  public:
163 							State_WaitForBase(
164 								PE_Exception &			i_rStruct )
165 													: 	PE_StructState(i_rStruct) {}
166 		virtual void		On_SubPE_Left();
167 	};
168 	class State_GotBase : public PE_StructState
169 	{   // -> {
170 	  public:
171 							State_GotBase(
172 								PE_Exception &			i_rStruct )
173 													: 	PE_StructState(i_rStruct) {}
174 		virtual void		Process_Punctuation(
175 								const TokPunctuation &
176 													i_rToken );
177 	};
178 	class State_WaitForElement : public PE_StructState
179 	{   // -> Typ }
180 	  public:
181 							State_WaitForElement(
182 								PE_Exception &			i_rStruct )
183 													: 	PE_StructState(i_rStruct) {}
184 		virtual void		Process_Identifier(
185 								const TokIdentifier &
186 												i_rToken );
187 		virtual void		Process_NameSeparator();
188 		virtual void		Process_BuiltInType(
189 								const TokBuiltInType &
190 												i_rToken );
191 		virtual void		Process_TypeModifier(
192 								const TokTypeModifier &
193 													i_rToken );
194 		virtual void		Process_Punctuation(
195 								const TokPunctuation &
196 													i_rToken );
197 //		virtual void		On_SubPE_Left();
198 	};
199 	class State_WaitForFinish : public PE_StructState
200 	{ // -> ;
201 	  public:
202 							State_WaitForFinish(
203 								PE_Exception &			i_rStruct )
204 													: 	PE_StructState(i_rStruct) {}
205 		virtual void		Process_Punctuation(
206 								const TokPunctuation &
207 													i_rToken );
208 	};
209 
210 	struct S_Stati
211 	{
212 							S_Stati(
213 								PE_Exception &			io_rStruct );
214 		void				SetState(
215 								ParseEnvState &		i_rNextState )
216 													{ pCurStatus = &i_rNextState; }
217 
218 		State_None			aNone;
219 		State_WaitForName	aWaitForName;
220 		State_GotName       aGotName;
221 		State_WaitForBase   aWaitForBase;
222 		State_GotBase       aGotBase;
223 		State_WaitForElement
224 							aWaitForElement;
225 		State_WaitForFinish aWaitForFinish;
226 
227 		ParseEnvState *		pCurStatus;
228 	};
229 
230 	virtual void		InitData();
231 	virtual void		TransferData();
232 	virtual void		ReceiveData();
233 
234     public:
235 
236 	void        store_Exception();
237 
238 	private:
239 
240 	S_Stati &	       	Stati()					{ return *pStati; }
241 	S_Work &			Work()					{ return aWork; }
242 
243 	// DATA
244 	S_Work				aWork;
245 	Dyn<S_Stati>		pStati;
246 };
247 
248 
249 inline void
250 PE_Exception::PE_StructState::MoveState(
251 								ParseEnvState &	    i_rState ) const
252 													{ rStruct.Stati().SetState(i_rState); }
253 
254 }   // namespace uidl
255 }   // namespace csi
256 
257 
258 #endif
259 
260