case ANCR_TEXT_SEGMENT_BOUNDARY:
case ANCR_NO_TEXT_SEGMENT_BOUNDARY:
- r = add_op(reg, OP_TEXT_SEGMENT_BOUNDARY);
- if (r != 0) return r;
- COP(reg)->text_segment_boundary.not =
- (node->type == ANCR_NO_TEXT_SEGMENT_BOUNDARY ? 1 : 0);
+ {
+ enum TextSegmentBoundaryType type;
+
+ r = add_op(reg, OP_TEXT_SEGMENT_BOUNDARY);
+ if (r != 0) return r;
+
+ type = EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
+#ifdef USE_UNICODE_WORD_BREAK
+ if (ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_TEXT_SEGMENT_WORD))
+ type = WORD_BOUNDARY;
+#endif
+
+ COP(reg)->text_segment_boundary.type = type;
+ COP(reg)->text_segment_boundary.not =
+ (node->type == ANCR_NO_TEXT_SEGMENT_BOUNDARY ? 1 : 0);
+ }
break;
case ANCR_PREC_READ:
#endif
case '-': case 'i': case 'm': case 's': case 'x':
case 'W': case 'D': case 'S': case 'P':
+ case 'y':
{
int neg = 0;
case 'S': OPTION_NEGATE(option, ONIG_OPTION_SPACE_IS_ASCII, neg); break;
case 'P': OPTION_NEGATE(option, ONIG_OPTION_POSIX_IS_ASCII, neg); break;
+ case 'y': /* y{g}, y{w} */
+ {
+ if (neg != 0) return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+ if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+ if (! PPEEK_IS('{')) return ONIGERR_UNDEFINED_GROUP_OPTION;
+ PFETCH(c);
+ if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+ PFETCH(c);
+ switch (c) {
+ case 'g':
+ OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER, 0);
+ OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_WORD, 1);
+ break;
+#ifdef USE_UNICODE_WORD_BREAK
+ case 'w':
+ if (! ONIGENC_IS_UNICODE_ENCODING(enc))
+ return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+ OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_WORD, 0);
+ OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER, 1);
+ break;
+#endif
+ default:
+ return ONIGERR_UNDEFINED_GROUP_OPTION;
+ break;
+ }
+ if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+ PFETCH(c);
+ if (c != '}')
+ return ONIGERR_UNDEFINED_GROUP_OPTION;
+ break;
+ } /* case 'y' */
+
default:
return ONIGERR_UNDEFINED_GROUP_OPTION;
}
if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
PFETCH(c);
- }
+ } /* while (1) */
}
break;