| 159 | } |
| 160 | |
| 161 | txU4 fxGetNextCode(txParser* parser) |
| 162 | { |
| 163 | txU4 code = (txU4)(*(parser->getter))(parser->stream); |
| 164 | if ((code & 0x80) && (code != (txU4)C_EOF)) { |
| 165 | txUTF8Sequence const *sequence = NULL; |
| 166 | for (sequence = gxUTF8Sequences; sequence->size; sequence++) { |
| 167 | if ((code & sequence->cmask) == sequence->cval) |
| 168 | break; |
| 169 | } |
| 170 | if (sequence->size == 0) { |
| 171 | fxReportParserError(parser, parser->states[2].line, "invalid character %d", code); |
| 172 | code = (txU4)C_EOF; |
| 173 | } |
| 174 | else { |
| 175 | txS4 size = sequence->size - 1; |
| 176 | while (size) { |
| 177 | size--; |
| 178 | code = (code << 6) | ((*(parser->getter))(parser->stream) & 0x3F); |
| 179 | } |
| 180 | code &= sequence->lmask; |
| 181 | } |
| 182 | if (code == 0x000110000) |
| 183 | code = 0; |
| 184 | } |
| 185 | return code; |
| 186 | } |
| 187 | |
| 188 | txString fxGetNextDigits(txParser* parser, txString (*f)(txParser*, txString, txString), txString p, txString q, int empty) |
| 189 | { |
no test coverage detected