- HOOK_ALL(0, whitelist, +1, &cs, regex);
- if ((cs.flags & DO_CATCH)
- || (cs.flags & IS_NEGATIVE)) {
- OFFSHOOT(+1, +2, 1, 1, &cs, regex);
- } else {
- cs.flags |= INCREMENT_STATE;
- }
- OFFSHOOT(0, +1, 1, 0, &cs, regex);
+ goto DEFAULT;
+ }
+ switch(*s){
+ case '<': {
+ // XXX: make this legible
+ if (cs.flags & IS_AT_THE_BEGINNING
+ && !(cs.flags & DO_CATCH)
+ && !(cs.flags & IS_NEGATIVE)
+ && whitelist[0] == '\0') {
+ // ---
+ cs.flags |= INCREMENT_STATE;
+ cs.flags |= DO_FORBID_START_OF_STRING;
+ strcat(whitelist, JEGER_CHAR_symbol_chars);
+ // ---
+ ABSOLUTE_OFFSHOOT( JEGER_SOS_STATE, JEGER_INIT_STATE+1, 0, 0, regex);
+ ABSOLUTE_OFFSHOOT(JEGER_INIT_STATE, JEGER_INIT_STATE+2, 1, 0, regex);
+ HOOK_ALL(0, whitelist, HALT_AND_CATCH_FIRE, &cs, regex);
+ // ---
+ ++cs.state;
+ cs.width = 0;
+ cs.match_width = 0;
+ HOOK_ALL(0, whitelist, +1, &cs, regex);
+ cs.width = 1;
+ OFFSHOOT(0, +1, 1, 0, &cs, regex);
+ // ---
+ } else {
+ HOOK_ALL(0, whitelist, +1, &cs, regex);
+ if ((cs.flags & DO_CATCH)
+ || (cs.flags & IS_NEGATIVE)) {
+ OFFSHOOT(+1, +2, 1, 1, &cs, regex);
+ } else {
+ cs.flags |= INCREMENT_STATE;
+ }
+ OFFSHOOT(0, +1, 1, 0, &cs, regex);
+ }
+ cs.flags |= IS_NEGATIVE;
+ strcat(blacklist, JEGER_CHAR_symbol_chars);
+ s += 1;
+ } break;
+ case '>': {
+ HOOK_ALL(0, whitelist, +1, &cs, regex);
+ cs.flags |= IS_NEGATIVE | INCREMENT_STATE;
+ strcat(blacklist, JEGER_CHAR_symbol_chars);
+ OFFSHOOT(+1, +2, 0, 0, &cs, regex);
+ ++cs.state;
+ s += 1;
+ } break;