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