xref: /trunk/main/autodoc/source/parser_i/idl/pe_evalu.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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 <s2_luidl/pe_evalu.hxx>
30 
31 // NOT FULLY DECLARED SERVICES
32 #include <ary/idl/i_enumvalue.hxx>
33 #include <ary/idl/i_gate.hxx>
34 #include <ary/idl/ip_ce.hxx>
35 #include <ary/doc/d_oldidldocu.hxx>
36 #include <s2_luidl/tk_ident.hxx>
37 #include <s2_luidl/tk_punct.hxx>
38 #include <s2_luidl/tk_const.hxx>
39 
40 
41 namespace csi
42 {
43 namespace uidl
44 {
45 
46 
47 #ifdef DF
48 #undef DF
49 #endif
50 #define DF  &PE_Value::On_Default
51 
52 PE_Value::F_TOK
53 PE_Value::aDispatcher[PE_Value::e_STATES_MAX][PE_Value::tt_MAX] =
54         {   { DF, DF, DF },  // e_none
55             { &PE_Value::On_expect_name_Identifier,
56                   DF, DF },  // expect_name
57             { DF, &PE_Value::On_got_name_Punctuation,
58                       &PE_Value::On_got_name_Assignment }  // got_name
59         };
60 
61 
62 
63 inline void
64 PE_Value::CallHandler( const char *     i_sTokenText,
65                        E_TokenType      i_eTokenType )
66     { (this->*aDispatcher[eState][i_eTokenType])(i_sTokenText); }
67 
68 
69 
70 
71 
72 PE_Value::PE_Value( String  &   o_rName,
73                     String  &   o_rAssignment,
74                     bool        i_bIsConst )
75     :   eState(e_none),
76         pName(&o_rName),
77         pAssignment(&o_rAssignment),
78         bIsConst(i_bIsConst)
79 {
80 }
81 
82 void
83 PE_Value::EstablishContacts( UnoIDL_PE *                io_pParentPE,
84                              ary::Repository &          io_rRepository,
85                              TokenProcessing_Result &   o_rResult )
86 {
87     UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
88 }
89 
90 PE_Value::~PE_Value()
91 {
92 }
93 
94 void
95 PE_Value::ProcessToken( const Token & i_rToken )
96 {
97     i_rToken.Trigger(*this);
98 }
99 
100 void
101 PE_Value::Process_Identifier( const TokIdentifier & i_rToken )
102 {
103     CallHandler(i_rToken.Text(), tt_identifier);
104 }
105 
106 void
107 PE_Value::Process_Punctuation( const TokPunctuation & i_rToken )
108 {
109     CallHandler(i_rToken.Text(), tt_punctuation);
110 }
111 
112 void
113 PE_Value::Process_Assignment( const TokAssignment & i_rToken )
114 {
115     CallHandler(i_rToken.Text(), tt_assignment);
116 }
117 
118 void
119 PE_Value::On_expect_name_Identifier(const char * i_sText)
120 {
121     *pName = i_sText;
122     SetResult(done,stay);
123     eState = got_name;
124 }
125 
126 void
127 PE_Value::On_got_name_Punctuation(const char * i_sText)
128 {
129     if ( (i_sText[0] == ',' AND NOT IsConst())
130          OR (i_sText[0] == ';' AND IsConst()) )
131     {
132         SetResult(done,pop_success);
133         eState = e_none;
134     }
135     else if (i_sText[0] == '}' AND NOT IsConst())
136     {
137         SetResult(not_done,pop_success);
138         eState = e_none;
139     }
140     else
141         On_Default(i_sText);
142 }
143 
144 void
145 PE_Value::On_got_name_Assignment(const char * i_sText)
146 {
147     *pAssignment = i_sText;
148     SetResult(done,pop_success);
149     eState = e_none;
150 }
151 
152 void
153 PE_Value::On_Default(const char * )
154 {
155     SetResult(not_done,pop_failure);
156 }
157 
158 void
159 PE_Value::InitData()
160 {
161     eState = expect_name;
162 
163     *pName = "";
164     *pAssignment = "";
165 }
166 
167 void
168 PE_Value::TransferData()
169 {
170     csv_assert(pName->length() > 0);
171     eState = e_none;
172 }
173 
174 UnoIDL_PE &
175 PE_Value::MyPE()
176 {
177     return *this;
178 }
179 
180 }   // namespace uidl
181 }   // namespace csi
182 
183