| 934 | } |
| 935 | |
| 936 | void* fxCharSetOperand(txPatternParser* parser, txInteger* kind) |
| 937 | { |
| 938 | void* result = NULL; |
| 939 | if (parser->character == C_EOF) { |
| 940 | fxPatternParserError(parser, gxErrors[mxInvalidRange]); |
| 941 | } |
| 942 | else if (parser->character == '[') { |
| 943 | fxPatternParserNext(parser); |
| 944 | result = fxCharSetExpression(parser); |
| 945 | *kind = 1; |
| 946 | if (parser->character != ']') |
| 947 | fxPatternParserError(parser, gxErrors[mxInvalidRange]); |
| 948 | fxPatternParserNext(parser); |
| 949 | } |
| 950 | else if (parser->character == '\\') { |
| 951 | fxPatternParserNext(parser); |
| 952 | if (parser->character == 'q') { |
| 953 | result = fxCharSetStrings(parser); |
| 954 | *kind = 1; |
| 955 | } |
| 956 | else |
| 957 | result = fxCharSetParseEscape(parser, 1, kind); |
| 958 | } |
| 959 | else if (c_strchr("&!#$%*+,.:;<=>?@^`~", parser->character)) { |
| 960 | txInteger character = parser->character; |
| 961 | fxPatternParserNext(parser); |
| 962 | if (character == parser->character) |
| 963 | fxPatternParserError(parser, gxErrors[mxInvalidRange]); |
| 964 | result = fxCharSetSingle(parser, character); |
| 965 | *kind = 0; |
| 966 | } |
| 967 | else if (c_strchr("()[]{}/-\\|", parser->character)) { |
| 968 | fxPatternParserError(parser, gxErrors[mxInvalidRange]); |
| 969 | } |
| 970 | else { |
| 971 | result = fxCharSetSingle(parser, parser->character); |
| 972 | fxPatternParserNext(parser); |
| 973 | *kind = 0; |
| 974 | } |
| 975 | return result; |
| 976 | } |
| 977 | |
| 978 | void* fxCharSetParseEscape(txPatternParser* parser, txBoolean punctuator, txInteger* kind) |
| 979 | { |
no test coverage detected