Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <precomp.h>
21 : #include <s2_luidl/pe_singl.hxx>
22 :
23 :
24 : // NOT FULLY DEFINED SERVICES
25 : #include <ary/idl/i_gate.hxx>
26 : #include <ary/idl/i_singleton.hxx>
27 : #include <ary/idl/i_sisingleton.hxx>
28 : #include <ary/idl/ip_ce.hxx>
29 : #include <ary/doc/d_oldidldocu.hxx>
30 : #include <s2_luidl/pe_type2.hxx>
31 : #include <s2_luidl/tk_keyw.hxx>
32 : #include <s2_luidl/tk_ident.hxx>
33 : #include <s2_luidl/tk_punct.hxx>
34 :
35 :
36 :
37 : namespace csi
38 : {
39 : namespace uidl
40 : {
41 :
42 :
43 3 : PE_Singleton::PE_Singleton()
44 : : eState(e_none),
45 : sData_Name(),
46 : bIsPreDeclaration(false),
47 : pCurSingleton(0),
48 : pCurSiSingleton(0),
49 : pPE_Type(0),
50 3 : nCurParsed_Type(0)
51 : {
52 3 : pPE_Type = new PE_Type(nCurParsed_Type);
53 3 : }
54 :
55 : void
56 3 : PE_Singleton::EstablishContacts( UnoIDL_PE * io_pParentPE,
57 : ary::Repository & io_rRepository,
58 : TokenProcessing_Result & o_rResult )
59 : {
60 3 : UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
61 3 : pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
62 3 : }
63 :
64 6 : PE_Singleton::~PE_Singleton()
65 : {
66 6 : }
67 :
68 : void
69 84 : PE_Singleton::ProcessToken( const Token & i_rToken )
70 : {
71 84 : i_rToken.Trigger(*this);
72 84 : }
73 :
74 :
75 : void
76 19 : PE_Singleton::Process_MetaType( const TokMetaType & i_rToken )
77 : {
78 19 : switch ( i_rToken.Id() )
79 : {
80 : case TokMetaType::mt_service:
81 4 : if (eState == e_std)
82 : {
83 4 : SetResult(done, push_sure, pPE_Type.Ptr());
84 4 : eState = in_service;
85 : }
86 : else
87 0 : On_Default();
88 4 : break;
89 : case TokMetaType::mt_singleton:
90 15 : if (eState == need_name)
91 15 : SetResult(done, stay);
92 : else
93 0 : On_Default();
94 15 : break;
95 : default:
96 : // KORR_FUTURE
97 : // Should throw syntax error warning
98 : ;
99 :
100 : } // end switch
101 19 : }
102 :
103 : void
104 15 : PE_Singleton::Process_Identifier( const TokIdentifier & i_rToken )
105 : {
106 15 : if (eState == need_name)
107 : {
108 15 : sData_Name = i_rToken.Text();
109 15 : SetResult(done, stay);
110 15 : eState = need_curlbr_open;
111 : }
112 : else
113 0 : On_Default();
114 15 : }
115 :
116 : void
117 38 : PE_Singleton::Process_Punctuation( const TokPunctuation & i_rToken )
118 : {
119 38 : switch (i_rToken.Id())
120 : {
121 : case TokPunctuation::CurledBracketOpen:
122 4 : if (eState == need_curlbr_open)
123 : {
124 4 : pCurSingleton = &Gate().Ces().Store_Singleton(
125 4 : CurNamespace().CeId(),
126 8 : sData_Name );
127 4 : PassDocuAt(*pCurSingleton);
128 4 : SetResult(done, stay);
129 4 : eState = e_std;
130 : }
131 : else
132 0 : On_Default();
133 4 : break;
134 : case TokPunctuation::CurledBracketClose:
135 4 : if (eState == e_std)
136 : {
137 4 : SetResult(done, stay);
138 4 : eState = need_finish;
139 : }
140 : else
141 0 : On_Default();
142 4 : break;
143 : case TokPunctuation::Semicolon:
144 19 : switch (eState)
145 : {
146 4 : case e_std: SetResult(done, stay);
147 4 : break;
148 : case need_finish:
149 15 : SetResult(done, pop_success);
150 15 : eState = e_none;
151 15 : break;
152 : default:
153 0 : On_Default();
154 : } // end switch
155 19 : break;
156 : case TokPunctuation::Colon:
157 11 : switch (eState)
158 : {
159 : case need_curlbr_open:
160 11 : SetResult(done, push_sure, pPE_Type.Ptr());
161 11 : eState = in_base_interface;
162 11 : break;
163 : default:
164 0 : On_Default();
165 : } // end switch
166 11 : break;
167 : default:
168 0 : On_Default();
169 : } // end switch
170 38 : }
171 :
172 : void
173 0 : PE_Singleton::Process_Default()
174 : {
175 0 : On_Default();
176 0 : }
177 :
178 :
179 : void
180 0 : PE_Singleton::On_Default()
181 : {
182 0 : SetResult(not_done, pop_failure);
183 0 : }
184 :
185 : void
186 15 : PE_Singleton::InitData()
187 : {
188 15 : eState = need_name;
189 15 : sData_Name.clear();
190 15 : bIsPreDeclaration = false;
191 15 : pCurSingleton = 0;
192 15 : pCurSiSingleton = 0;
193 15 : nCurParsed_Type = 0;
194 15 : }
195 :
196 : void
197 15 : PE_Singleton::TransferData()
198 : {
199 15 : if (NOT bIsPreDeclaration)
200 : {
201 : csv_assert(sData_Name.size() > 0);
202 : csv_assert( (pCurSingleton != 0) != (pCurSiSingleton != 0) );
203 : }
204 :
205 15 : eState = e_none;
206 15 : }
207 :
208 : void
209 15 : PE_Singleton::ReceiveData()
210 : {
211 15 : switch (eState)
212 : {
213 : case in_service:
214 4 : pCurSingleton->Set_Service(nCurParsed_Type);
215 4 : nCurParsed_Type = 0;
216 4 : eState = e_std;
217 4 : break;
218 : case in_base_interface:
219 11 : pCurSiSingleton = &Gate().Ces().Store_SglIfcSingleton(
220 11 : CurNamespace().CeId(),
221 : sData_Name,
222 22 : nCurParsed_Type );
223 11 : PassDocuAt(*pCurSiSingleton);
224 11 : nCurParsed_Type = 0;
225 11 : eState = need_finish;
226 11 : break;
227 : default:
228 : csv_assert(false);
229 : } // end switch
230 15 : }
231 :
232 : UnoIDL_PE &
233 12 : PE_Singleton::MyPE()
234 : {
235 12 : return *this;
236 : }
237 :
238 : } // namespace uidl
239 3 : } // namespace csi
240 :
241 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|