/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.regexp;
import static org.joni.constants.MetaChar.INEFFECTIVE_META_CHAR;
import org.joni.Option;
import org.joni.Syntax;
import org.joni.Syntax.MetaCharTable;
import org.joni.constants.SyntaxProperties;
/**
* Joni {@link Syntax} configuration
*/
final class JoniSyntax implements SyntaxProperties {
private JoniSyntax() {
}
// - OP_ESC_W_WORD, OP_ESC_S_WHITE_SPACE and OP_ESC_D_DIGIT are not enabled, because they
// require an ASCII-compatible encoding
// - OP_ESC_OCTAL3 is not enabled, because it's semantics are not compatible
private static final int op = OP_DOT_ANYCHAR | OP_ASTERISK_ZERO_INF | OP_PLUS_ONE_INF | OP_QMARK_ZERO_ONE
| OP_BRACE_INTERVAL | OP_VBAR_ALT | OP_LPAREN_SUBEXP | OP_ESC_AZ_BUF_ANCHOR | OP_DECIMAL_BACKREF
| OP_BRACKET_CC | OP_ESC_B_WORD_BOUND | OP_LINE_ANCHOR | OP_QMARK_NON_GREEDY | OP_ESC_CONTROL_CHARS
| OP_ESC_C_CONTROL | OP_ESC_X_HEX2 | OP_ESC_X_BRACE_HEX8;
// - OP2_OPTION_ECMASCRIPT is not enabled, because it breaks nested repeats
private static final int op2 = OP2_QMARK_GROUP_EFFECT | OP2_OPTION_PERL | OP2_ESC_V_VTAB | OP2_ESC_U_HEX4
| OP2_ESC_P_BRACE_CHAR_PROPERTY;
private static final int behaviour = BACKSLASH_ESCAPE_IN_CC | ALLOW_EMPTY_RANGE_IN_CC
| DIFFERENT_LEN_ALT_LOOK_BEHIND;
public static final Syntax ECMAScript = new Syntax(op, op2, behaviour, Option.NONE,
new MetaCharTable('\\', /* esc */
INEFFECTIVE_META_CHAR, /* anychar '.' */
INEFFECTIVE_META_CHAR, /* anytime '*' */
INEFFECTIVE_META_CHAR, /* zero or one time '?' */
INEFFECTIVE_META_CHAR, /* one or more time '+' */
INEFFECTIVE_META_CHAR /* anychar anytime */
));
}