xref: /AOO41X/main/autodoc/source/parser_i/idoc/cx_docu2.cxx (revision 78bc99aafea97f4987aed12e674c2d2f1166dd91) !
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include <precomp.h>
23 #include <s2_dsapi/cx_docu2.hxx>
24 
25 
26 // NOT FULLY DEFINED SERVICES
27 #include <../../parser/inc/tokens/parseinc.hxx>
28 #include <s2_dsapi/tokrecv.hxx>
29 #include <s2_dsapi/tk_html.hxx>
30 #include <s2_dsapi/tk_xml.hxx>
31 #include <s2_dsapi/tk_docw2.hxx>
32 #include <x_parse2.hxx>
33 
34 
35 
36 namespace csi
37 {
38 namespace dsapi
39 {
40 
41 
42 
43 bool
PassNewToken()44 Cx_Base::PassNewToken()
45 {
46     if (pNewToken)
47     {
48         rReceiver.Receive(*pNewToken.Release());
49 
50         return true;
51     }
52     return false;
53 }
54 
55 TkpContext &
FollowUpContext()56 Cx_Base::FollowUpContext()
57 {
58     csv_assert(pFollowUpContext != 0);
59     return *pFollowUpContext;
60 }
61 
62 void
Handle_DocuSyntaxError(CharacterSource & io_rText)63 Cx_Base::Handle_DocuSyntaxError( CharacterSource & io_rText )
64 {
65     // KORR_FUTURE
66     // Put this into Error Log File
67 
68     Cerr() << "Error:  Syntax error in documentation within "
69               << "this text:\n\""
70               << io_rText.CutToken()
71               << "\"."
72               << Endl();
73     SetToken( new Tok_Word(io_rText.CurToken()) );
74 }
75 
76 void
ReadCharChain(CharacterSource & io_rText)77 Cx_EoHtml::ReadCharChain( CharacterSource & io_rText )
78 {
79     if ( NULCH == jumpTo(io_rText,'>') )
80         throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
81     io_rText.MoveOn();
82     SetToken(new Tok_HtmlTag(io_rText.CutToken(),bToken_IsStartOfParagraph));
83 }
84 
85 void
ReadCharChain(CharacterSource & io_rText)86 Cx_EoXmlConst::ReadCharChain( CharacterSource & io_rText )
87 {
88     char c = jumpTo(io_rText,'>','*');
89     if ( NULCH == c OR '*' == c )
90     {
91         Handle_DocuSyntaxError(io_rText);
92         return;
93     }
94 
95     io_rText.MoveOn();
96     io_rText.CutToken();
97     SetToken(new Tok_XmlConst(eTokenId));
98 }
99 
100 void
ReadCharChain(CharacterSource & io_rText)101 Cx_EoXmlLink_BeginTag::ReadCharChain( CharacterSource & io_rText )
102 {
103     String  sScope;
104     String  sDim;
105 
106     do {
107         char cReached = jumpTo(io_rText,'"','>','*');
108         switch (cReached)
109         {
110             case '"':
111             {
112                 io_rText.MoveOn();
113                 io_rText.CutToken();
114                 char c = jumpTo(io_rText,'"','*', '>');
115                 if ( NULCH == c OR '*' == c OR '>' == c)
116                 {
117                     if ( '>' == c )
118                         io_rText.MoveOn();
119                     Handle_DocuSyntaxError(io_rText);
120                     return;
121                 }
122 
123                 const char * pAttribute = io_rText.CutToken();
124                 if ( *pAttribute != '[' )
125                     sScope = pAttribute;
126                 else
127                     sDim = pAttribute;
128 
129                 io_rText.MoveOn();
130                 break;
131             }
132             case '>':
133                 break;
134             case '*':
135                 Handle_DocuSyntaxError(io_rText);
136                 return;
137             default:
138                 throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
139         }   // end switch
140     }   while ( io_rText.CurChar() != '>' );
141 
142     io_rText.MoveOn();
143     io_rText.CutToken();
144     SetToken( new Tok_XmlLink_BeginTag(eTokenId, sScope.c_str(), sDim.c_str()) );
145 }
146 
147 void
ReadCharChain(CharacterSource & io_rText)148 Cx_EoXmlLink_EndTag::ReadCharChain( CharacterSource & io_rText )
149 {
150     char c = jumpTo(io_rText,'>','*');
151     if ( NULCH == c OR '*' == c )
152     {
153         Handle_DocuSyntaxError(io_rText);
154         return;
155     }
156 
157     io_rText.MoveOn();
158     io_rText.CutToken();
159     SetToken(new Tok_XmlLink_EndTag(eTokenId));
160 }
161 
162 void
ReadCharChain(CharacterSource & io_rText)163 Cx_EoXmlFormat_BeginTag::ReadCharChain( CharacterSource & io_rText )
164 {
165     String  sDim;
166 
167     char cReached = jumpTo(io_rText,'"','>','*');
168     switch (cReached)
169     {
170         case '"':
171         {
172             io_rText.MoveOn();
173             io_rText.CutToken();
174 
175             char c = jumpTo(io_rText,'"','*','>');
176             if ( NULCH == c OR '*' == c OR '>' == c )
177             {
178                 if ('>' == c )
179                     io_rText.MoveOn();
180                 Handle_DocuSyntaxError(io_rText);
181                 return;
182             }
183 
184             sDim = io_rText.CutToken();
185 
186             c = jumpTo(io_rText,'>','*');
187             if ( NULCH == c OR '*' == c )
188             {
189                 Handle_DocuSyntaxError(io_rText);
190                 return;
191             }
192             break;
193         }
194         case '>':
195             break;
196         case '*':
197             Handle_DocuSyntaxError(io_rText);
198             return;
199         default:
200             throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
201     }   // end switch
202 
203     io_rText.MoveOn();
204     io_rText.CutToken();
205     SetToken(new Tok_XmlFormat_BeginTag(eTokenId, sDim));
206 }
207 
208 void
ReadCharChain(CharacterSource & io_rText)209 Cx_EoXmlFormat_EndTag::ReadCharChain( CharacterSource & io_rText )
210 {
211     char c = jumpTo(io_rText,'>','*');
212     if ( NULCH == c OR '*' == c )
213     {
214         Handle_DocuSyntaxError(io_rText);
215         return;
216     }
217 
218     io_rText.MoveOn();
219     io_rText.CutToken();
220     SetToken(new Tok_XmlFormat_EndTag(eTokenId));
221 }
222 
223 void
ReadCharChain(CharacterSource & io_rText)224 Cx_CheckStar::ReadCharChain( CharacterSource & io_rText )
225 {
226     bEndTokenFound = false;
227     if (bIsEnd)
228     {
229         char cNext = jumpOver(io_rText,'*');
230         if ( NULCH == cNext )
231             throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
232         if (cNext == '/')
233         {
234             io_rText.MoveOn();
235             SetToken(new Tok_DocuEnd);
236             bEndTokenFound = true;
237         }
238         else
239         {
240             SetToken( new Tok_Word(io_rText.CutToken()) );
241         }
242     }
243     else
244     {
245         jumpToWhite(io_rText);
246         SetToken( new Tok_Word(io_rText.CutToken()) );
247     }
248 }
249 
250 TkpContext &
FollowUpContext()251 Cx_CheckStar::FollowUpContext()
252 {
253     if (bEndTokenFound)
254         return *pEnd_FollowUpContext;
255     else
256         return Cx_Base::FollowUpContext();
257 }
258 
259 }   // namespace dsapi
260 }   // namespace csi
261 
262