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 <precomp.h>
29 #include "cxt2ary.hxx"
30 
31 
32 // NOT FULLY DEFINED SERVICES
33 #include <ary/entity.hxx>
34 #include <ary/cpp/c_class.hxx>
35 #include <ary/cpp/c_define.hxx>
36 #include <ary/cpp/c_enum.hxx>
37 #include <ary/cpp/c_enuval.hxx>
38 #include <ary/cpp/c_funct.hxx>
39 #include <ary/cpp/c_macro.hxx>
40 #include <ary/cpp/c_tydef.hxx>
41 #include <ary/cpp/c_vari.hxx>
42 #include <ary/cpp/c_gate.hxx>
43 #include <ary/cpp/cp_ce.hxx>
44 #include <ary/loc/loc_file.hxx>
45 #include <ary/doc/d_oldcppdocu.hxx>
46 #include <ary/info/docstore.hxx>
47 #include "icprivow.hxx"
48 
49 // Implementationheaders, only to be used in this file!
50 #include "sfscope.hxx"
51 #include "sownstck.hxx"
52 #include "sdocdist.hxx"
53 #include "srecover.hxx"
54 
55 
56 
57 
58 
59 namespace cpp
60 {
61 
62 using ary::cpp::E_Protection;
63 
64 ContextForAry::ContextForAry( ary::cpp::Gate &  io_rAryGate )
65     :   pGate(&io_rAryGate),
66         aTokenResult(),
67         pFileScopeInfo( new S_FileScopeInfo ),
68         pOwnerStack( new S_OwnerStack ),
69         pDocuDistributor( new S_DocuDistributor ),
70         pRecoveryGuard( new S_RecoveryGuard )
71 {
72     OpenNamespace( pGate->Ces().GlobalNamespace() );
73 }
74 
75 ContextForAry::~ContextForAry()
76 {
77 }
78 
79 ary::loc::File &
80 ContextForAry::inq_CurFile() const
81 {
82     csv_assert(pFileScopeInfo->pCurFile != 0);
83 
84     return *pFileScopeInfo->pCurFile;
85 }
86 
87 ary::cpp::Namespace &
88 ContextForAry::inq_CurNamespace() const
89 {
90     return pOwnerStack->CurNamespace();
91 }
92 
93 ary::cpp::Class *
94 ContextForAry::inq_CurClass() const
95 {
96     return pOwnerStack->CurClass();
97 }
98 
99 ary::cpp::Enum *
100 ContextForAry::inq_CurEnum() const
101 {
102     return pOwnerStack->CurEnum();
103 }
104 
105 
106 ary::cpp::InputContext::Owner &
107 ContextForAry::inq_CurOwner() const
108 {
109     return pOwnerStack->CurOwner();
110 }
111 
112 E_Protection
113 ContextForAry::inq_CurProtection() const
114 {
115     return pOwnerStack->CurProtection();
116 }
117 
118 void
119 ContextForAry::do_SetTokenResult( E_TokenDone			i_eDone,
120 							      E_EnvStackAction	    i_eWhat2DoWithEnvStack,
121 							      ParseEnvironment *	i_pParseEnv2Push )
122 {
123     aTokenResult.eDone = i_eDone;
124     aTokenResult.eStackAction = i_eWhat2DoWithEnvStack;
125     aTokenResult.pEnv2Push = i_pParseEnv2Push;
126 }
127 
128 void
129 ContextForAry::do_OpenNamespace( ary::cpp::Namespace & io_rOpenedNamespace )
130 {
131     pOwnerStack->OpenNamespace( io_rOpenedNamespace );
132 }
133 
134 void
135 ContextForAry::do_OpenExternC( bool )
136 {
137 	pOwnerStack->OpenExternC();
138 	// KORR_FUTURE
139 	// use i_bOnlyForOneDeclaration
140 }
141 
142 void
143 ContextForAry::do_OpenClass( ary::cpp::Class & io_rOpenedClass )
144 {
145     pOwnerStack->OpenClass(io_rOpenedClass);
146     pDocuDistributor->SetCurrentlyStoredRe(io_rOpenedClass);
147 }
148 
149 void
150 ContextForAry::do_OpenEnum(	ary::cpp::Enum & io_rOpenedEnum )
151 {
152     pOwnerStack->OpenEnum(io_rOpenedEnum);
153     pDocuDistributor->SetCurrentlyStoredRe(io_rOpenedEnum);
154 }
155 
156 void
157 ContextForAry::do_CloseBlock()
158 {
159     pOwnerStack->CloseBlock();
160 }
161 
162 void
163 ContextForAry::do_CloseClass()
164 {
165     pOwnerStack->CloseClass();
166 }
167 
168 void
169 ContextForAry::do_CloseEnum()
170 {
171     pOwnerStack->CloseEnum();
172 }
173 
174 void
175 ContextForAry::do_SetCurProtection( ary::cpp::E_Protection i_eProtection )
176 {
177     pOwnerStack->SetCurProtection(i_eProtection);
178 }
179 
180 void
181 ContextForAry::do_OpenTemplate( const StringVector & i_rParameters )
182 {
183     pFileScopeInfo->pCurTemplateParameters = new StringVector(i_rParameters);
184 }
185 
186 DYN StringVector *
187 ContextForAry::do_Get_CurTemplateParameters()
188 {
189     return pFileScopeInfo->pCurTemplateParameters.Release();
190 }
191 
192 void
193 ContextForAry::do_Close_OpenTemplate()
194 {
195     if (pFileScopeInfo->pCurTemplateParameters)
196         delete pFileScopeInfo->pCurTemplateParameters.Release();
197 }
198 
199 void
200 ContextForAry::do_Event_Class_FinishedBase( const String & )
201 {
202     // KORR_FUTURE
203 }
204 
205 void
206 ContextForAry::do_Event_Store_Typedef( ary::cpp::Typedef & io_rTypedef )
207 {
208     pDocuDistributor->SetCurrentlyStoredRe(io_rTypedef);
209 }
210 
211 void
212 ContextForAry::do_Event_Store_EnumValue( ary::cpp::EnumValue & io_rEnumValue )
213 {
214     pDocuDistributor->SetCurrentlyStoredRe(io_rEnumValue);
215 }
216 
217 void
218 ContextForAry::do_Event_Store_CppDefinition( ary::cpp::DefineEntity & io_rDefinition )
219 {
220     pDocuDistributor->SetCurrentlyStoredRe(io_rDefinition);
221 }
222 
223 void
224 ContextForAry::do_Event_EnterFunction_ParameterList()
225 {
226     // KORR_FUTURE
227     // Inform pDocuDistributor about possibility of parameters' inline documentation.
228 }
229 
230 void
231 ContextForAry::do_Event_Function_FinishedParameter( const String & )
232 {
233     // KORR_FUTURE
234 }
235 
236 void
237 ContextForAry::do_Event_LeaveFunction_ParameterList()
238 {
239     // KORR_FUTURE
240 }
241 
242 void
243 ContextForAry::do_Event_EnterFunction_Implementation()
244 {
245     // KORR_FUTURE
246 }
247 
248 void
249 ContextForAry::do_Event_LeaveFunction_Implementation()
250 {
251     // KORR_FUTURE
252 }
253 
254 void
255 ContextForAry::do_Event_Store_Function( ary::cpp::Function & io_rFunction )
256 {
257     pDocuDistributor->SetCurrentlyStoredRe(io_rFunction);
258 }
259 
260 
261 void
262 ContextForAry::do_Event_Store_Variable( ary::cpp::Variable & io_rVariable )
263 {
264     pDocuDistributor->SetCurrentlyStoredRe(io_rVariable);
265 }
266 
267 void
268 ContextForAry::do_TakeDocu( DYN ary::doc::OldCppDocu & let_drInfo )
269 {
270     let_drInfo.Store2(*pDocuDistributor);
271 }
272 
273 void
274 ContextForAry::do_StartWaitingFor_Recovery()
275 {
276     pRecoveryGuard->StartWaitingFor_Recovery();
277 }
278 
279 ary::cpp::Gate &
280 ContextForAry::inq_AryGate() const
281 {
282  	return * const_cast< ary::cpp::Gate* >(pGate);
283 }
284 
285 const ary::cpp::InputContext &
286 ContextForAry::inq_Context() const
287 {
288     return *this;
289 }
290 
291 String
292 ContextForAry::inq_CurFileName() const
293 {
294     return pFileScopeInfo->pCurFile != 0
295             ?   pFileScopeInfo->pCurFile->LocalName()
296             :   String::Null_();
297 }
298 
299 uintt
300 ContextForAry::inq_LineCount() const
301 {
302     return pFileScopeInfo->nLineCount;
303 }
304 
305 bool
306 ContextForAry::inq_IsWaitingFor_Recovery() const
307 {
308     return pRecoveryGuard->IsWithinRecovery();
309 }
310 
311 bool
312 ContextForAry::inq_IsExternC() const
313 {
314  	return pOwnerStack->IsExternC();
315 }
316 
317 void
318 ContextForAry::do_SetCurFile( ary::loc::File &  io_rCurFile )
319 {
320     pFileScopeInfo->pCurFile = &io_rCurFile;
321     pFileScopeInfo->nLineCount = 0;
322     pFileScopeInfo->pCurTemplateParameters = 0;
323 
324     pOwnerStack->Reset();
325     pDocuDistributor->Reset();
326     pRecoveryGuard->Reset();
327 }
328 
329 void
330 ContextForAry::do_Event_IncrLineCount()
331 {
332     ++pFileScopeInfo->nLineCount;
333     pDocuDistributor->Event_LineBreak();
334 }
335 
336 void
337 ContextForAry::do_Event_SwBracketOpen()
338 {
339     pRecoveryGuard->Hdl_SwBracketOpen();
340 }
341 
342 void
343 ContextForAry::do_Event_SwBracketClose()
344 {
345     pRecoveryGuard->Hdl_SwBracketClose();
346 }
347 
348 void
349 ContextForAry::do_Event_Semicolon()
350 {
351 	pRecoveryGuard->Hdl_Semicolon();
352 }
353 
354 
355 
356 
357 }   // namespace cpp
358