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 #ifndef ADC_PARSEINC_HXX
29 #define ADC_PARSEINC_HXX
30 
31 
32 #include <tools/tkpchars.hxx>
33 
34 inline char
35 jumpOver( CharacterSource & io_rText,
36 		  char in_c )
37 {
38 	char cNext;
39 	for ( cNext = io_rText.CurChar();
40 		  cNext == in_c;
41 		  cNext = io_rText.MoveOn() )
42 	{ }
43 
44 	return cNext;
45 }
46 
47 inline char
48 jumpTo( CharacterSource & io_rText,
49 		char              in_c )
50 {
51 	char cNext;
52 	for ( cNext = io_rText.CurChar();
53 		  cNext != in_c AND cNext != 0;
54 		  cNext = io_rText.MoveOn() )
55 	{ }
56 
57 	return cNext;
58 }
59 
60 inline char
61 jumpTo( CharacterSource & io_rText,
62 		char              in_c1,
63 		char              in_c2 )
64 {
65 	char cNext;
66 	for ( cNext = io_rText.CurChar();
67 		  cNext != in_c1 AND cNext != in_c2 AND cNext != 0;
68 		  cNext = io_rText.MoveOn() )
69 	{ }
70 
71 	return cNext;
72 }
73 
74 inline char
75 jumpTo( CharacterSource & io_rText,
76 		char              in_c1,
77 		char              in_c2,
78         char              in_c3 )
79 {
80 	char cNext;
81 	for ( cNext = io_rText.CurChar();
82 		  cNext != in_c1 AND cNext != in_c2 AND cNext != in_c3 AND cNext != 0;
83 		  cNext = io_rText.MoveOn() )
84 	{ }
85 
86 	return cNext;
87 }
88 
89 inline char
90 jumpTo( CharacterSource & io_rText,
91 		char              in_c1,
92 		char              in_c2,
93 		char              in_c3,
94 		char              in_c4 )
95 {
96 	char cNext;
97 	for ( cNext = io_rText.CurChar();
98 		  cNext != in_c1 AND cNext != in_c2 AND cNext != in_c3
99 		                 AND cNext != in_c4 AND cNext != 0;
100 		  cNext = io_rText.MoveOn() )
101 	{ }
102 
103 	return cNext;
104 }
105 
106 inline char
107 jumpOverWhite(CharacterSource & io_rText)
108 {
109 	char cNext;
110 	for ( cNext = io_rText.CurChar();
111 		  static_cast<UINT8>(cNext) < 33
112 		  	AND cNext != 0 AND cNext != 13 AND cNext != 10;
113 		  cNext = io_rText.MoveOn() )
114 	{ }
115 
116 	return cNext;
117 }
118 
119 inline char
120 jumpToWhite(CharacterSource & io_rText)
121 {
122 	char cNext;
123 	for ( cNext = io_rText.CurChar();
124 		  static_cast<UINT8>(cNext) > 32;
125 		  cNext = io_rText.MoveOn() )
126 	{ }
127 
128 	return cNext;
129 }
130 
131 inline char
132 jumpToEol(CharacterSource & io_rText, int & o_rCount_BackslashedLineBreaks )
133 {
134     o_rCount_BackslashedLineBreaks = 0;
135 	char cNext;
136 	for ( cNext = io_rText.CurChar();
137 		  cNext != 13 AND cNext != 10 AND cNext != NULCH;
138 		  cNext = io_rText.MoveOn() )
139     {
140 		if ( cNext == '\\')
141         {
142 			cNext = io_rText.MoveOn();
143             if ( cNext == 13 )
144     			io_rText.MoveOn();
145             if ( cNext == 10 )
146                 ++o_rCount_BackslashedLineBreaks;
147         }
148 	}
149 	return cNext;
150 }
151 
152 inline char
153 jumpToEol(CharacterSource & io_rText)
154 {
155 	char cNext;
156 	for ( cNext = io_rText.CurChar();
157 		  cNext != 13 AND cNext != 10 AND cNext != NULCH;
158 		  cNext = io_rText.MoveOn() )
159     {
160 		if ( cNext == '\\')
161 			io_rText.MoveOn();
162 	}
163 	return cNext;
164 }
165 
166 inline char
167 jumpOverEol(CharacterSource & io_rText)
168 {
169 	char cNext = io_rText.CurChar();
170 
171 	if (cNext == 13)
172 		io_rText.MoveOn();
173 	if (cNext == 10)
174 		io_rText.MoveOn();
175 	return cNext;
176 }
177 
178 
179 inline char	// Finds a matching closing bracket after the opening one is passed
180 jumpToMatchingBracket( CharacterSource & io_rText,
181 					   char 			 in_cBegin,
182 			           char 			 in_cEnd )
183 {
184 	intt nCounter = 1;
185 	char cNext;
186 	for ( cNext = io_rText.CurChar();
187 		  nCounter - (cNext == in_cEnd ? 1 : 0) > 0 AND cNext != NULCH;
188 		  cNext = io_rText.MoveOn() )
189 	{
190 		if (cNext == in_cEnd)
191 		   nCounter++;
192 		else if (cNext == in_cBegin)
193 		   nCounter--;
194 	}
195 
196 	return cNext;
197 }
198 
199 
200 
201 
202 #endif
203 
204