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 
23 
24 #ifndef ADC_TKPCONTX_HXX
25 #define ADC_TKPCONTX_HXX
26 
27 // USED SERVICES
28 	// BASE CLASSES
29 	// COMPONENTS
30 	// PARAMETERS
31 #include <tokens/token.hxx>
32 class CharacterSource;
33 class TkpNullContext;
34 
35 /**	@task
36 	Specifies a context within which tokens are interpreted in a special
37 	way. For example in parsing C++ there could be a context for code,
38 	one for comments and a third one for preprocessor statements, because
39 	each of these would give the same token different meanings.
40 
41 	The three functions
42 			ReadCharChain()
43 			PassNewToken()
44 			FollowUpContext()
45 	have to be called in this sequence.
46 
47 **/
48 class TkpContext
49 {
50   public:
51 	// LIFECYCLE
~TkpContext()52 	virtual					~TkpContext() {}
53 
54 	// OPERATIONS
55 	/** @descr
56 		The functions starts to parse with the CurChar() of io_rText.
57 		It leaves io_rText.CurChar() at the first char of the following Token or
58 		the following Context.
59 
60 		This function returns, when a context has parsed some characterss
61 		and completed a token OR left the context.
62 		If the token is to be ignored, it is cut from io_rText.
63 
64 		If the token is to be parsed further in a different context,
65 		it is NOT cut from io_rText.
66 
67 		After this function PassNewToken() has to be called.
68 
69 		If the function has found a valid and complete token, PassNewToken()
70 		passes the parsed token to the internally known receiver and
71 		returns true. The token is cut from io_rText.
72 	**/
73 	virtual void		ReadCharChain(
74 							CharacterSource &	io_rText ) = 0;
75 	/** Has to pass the parsed token to a known receiver.
76 		If the token is to be parsed further in a different context,
77 		PassNewToken() returns false, but the token is NOT cut from io_rText.
78 
79 		@return true, if a token was passed.
80 				false, if the token was not parsed completely by this context
81 					   or if the token is to be ignored.
82 	*/
83 	virtual bool		PassNewToken() = 0;
84 	virtual TkpContext &
85 						FollowUpContext() = 0;
86 
87 	static TkpNullContext &
88 						Null_();
89 };
90 
91 class StateMachineContext
92 {
93   public:
94 	typedef TextToken::F_CRTOK F_CRTOK;
95 
~StateMachineContext()96     virtual ~StateMachineContext() {}
97 
98 	/// Is used by StmBoundsStatus only.
99 	virtual	void		PerformStatusFunction(
100 							uintt				i_nStatusSignal,
101 							F_CRTOK		        i_fTokenCreateFunction,
102 							CharacterSource &	io_rText ) = 0;
103 };
104 
105 class TkpNullContext : public TkpContext
106 {
107   public:
108 						~TkpNullContext();
109 
110 	virtual void		ReadCharChain(
111 							CharacterSource &	io_rText );
112 	virtual bool		PassNewToken();
113 	virtual TkpContext &
114 						FollowUpContext();
115 };
116 
117 namespace autodoc
118 {
119 
120 class TkpDocuContext : public TkpContext
121 {
122   public:
123 	virtual void	  	SetParentContext(
124 							TkpContext &		io_rParentContext,
125 							const char *		i_sMultiLineEndToken ) = 0;
126 	virtual void	  	AssignDealer(
127 							TokenDealer &		o_rDealer ) = 0;
128 	virtual void	   	SetMode_IsMultiLine(
129 							bool				i_bTrue ) = 0;
130 };
131 
132 } // namespace autodoc
133 
134 #endif
135 
136 
137