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