Changeset 7055


Ignore:
Timestamp:
11/10/16 10:22:52 (8 years ago)
Author:
Oliver Schonefeld
Message:
  • fix typo in RegexFlag? enum
  • fix missing break statement in processing of 'l' regex flag
  • raise parsing error in case of mutually exclusive regex flags
Location:
FCSSimpleEndpoint/trunk/src/main/java/eu/clarin/sru/server/fcs/parser
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • FCSSimpleEndpoint/trunk/src/main/java/eu/clarin/sru/server/fcs/parser/Expression.java

    r6935 r7055  
    132132        if (regex_flags != null) {
    133133            sb.append("/");
    134             if (regex_flags.contains(RegexFlag.CASE_INSENSITVE)) {
     134            if (regex_flags.contains(RegexFlag.CASE_INSENSITIVE)) {
    135135                sb.append("i");
    136136            }
    137             if (regex_flags.contains(RegexFlag.CASE_SENSITVE)) {
     137            if (regex_flags.contains(RegexFlag.CASE_SENSITIVE)) {
    138138                sb.append("I");
    139139            }
  • FCSSimpleEndpoint/trunk/src/main/java/eu/clarin/sru/server/fcs/parser/QueryParser.java

    r6935 r7055  
    580580                        /* $FALL-THROUGH$ */
    581581                    case 'c':
    582                         flags.add(RegexFlag.CASE_INSENSITVE);
     582                        flags.add(RegexFlag.CASE_INSENSITIVE);
    583583                        break;
    584584                    case 'I':
    585585                        /* $FALL-THROUGH$ */
    586586                    case 'C':
    587                         flags.add(RegexFlag.CASE_SENSITVE);
     587                        flags.add(RegexFlag.CASE_SENSITIVE);
    588588                        break;
    589589                    case 'l':
    590590                        flags.add(RegexFlag.LITERAL_MATCHING);
     591                        break;
    591592                    case 'd':
    592593                        flags.add(RegexFlag.IGNORE_DIACRITICS);
     
    594595                    default:
    595596                        throw new ExpressionTreeBuilderException(
    596                                 "unexpected regex flag: " + s.charAt(i));
     597                                "unknown regex modifier flag: " + s.charAt(i));
    597598                    } // switch
    598599                }
    599                 // FIXME: validate flags? most combinations are mutually exclusive
     600
     601                // validate regex flags
     602                if (flags.contains(RegexFlag.CASE_SENSITIVE) &&
     603                        flags.contains(RegexFlag.CASE_INSENSITIVE)) {
     604                    throw new ExpressionTreeBuilderException(
     605                            "invalid combination of regex modifier flags: " +
     606                            "'i' or 'c' and 'I' or 'C' are mutually exclusive");
     607                }
     608                if (flags.contains(RegexFlag.LITERAL_MATCHING) &&
     609                            (flags.contains(RegexFlag.CASE_SENSITIVE) ||
     610                             flags.contains(RegexFlag.CASE_INSENSITIVE) ||
     611                             flags.contains(RegexFlag.IGNORE_DIACRITICS))) {
     612                    throw new ExpressionTreeBuilderException(
     613                            "invalid combination of regex modifier flags: 'l' " +
     614                            "is mutually exclusive with 'i', 'c', 'I', 'C' or 'd'");
     615                }
     616
    600617                stack.push(flags);
    601618            } else {
  • FCSSimpleEndpoint/trunk/src/main/java/eu/clarin/sru/server/fcs/parser/RegexFlag.java

    r6935 r7055  
    2525     * case insensitive.
    2626     */
    27     CASE_INSENSITVE,
     27    CASE_INSENSITIVE,
    2828    /**
    2929     * case sensitive.
    3030     */
    31     CASE_SENSITVE,
     31    CASE_SENSITIVE,
    3232    /**
    3333     * match exactly (= literally).
Note: See TracChangeset for help on using the changeset viewer.