From 4f1a339fe890dc74951e2a532f6ac26c5c880f69 Mon Sep 17 00:00:00 2001 From: Daniel Gollahon Date: Sun, 7 Nov 2021 12:10:50 -0800 Subject: [PATCH] Fix unicode property support [WIP] - This is up for early review because I'm not sure about the dynamic creation of the table of unicode properties. I tried just creating a list of them but it was so slow for my editor to process that I couldn't even format the giant lookup table. I suspect that if we want to "bake" these to avoid however long it takes to compute the table and maybe avoid any unexpected drift, it might make sense to dump to YAML or something like that. I'm not sure the best approach. - I'm also guessing there's a better option than just dumping all the regexp node types in the other list of supported regexp nodes. - We probably should do this for other regex types--we might be missing some of the posix classes, for instance (I have not checked yet). - Prevents crashes when having an unsupported property type in source. - Related to #1234 (which was a very partial fix) - Note that this turns our `\p{Latin}` formatting into `\p{latin}`. We could fix this with some very simple inflection but I wanted to do the simplest approach first to demonstrate the problem since this seems to be semantically equivalent. The ruby docs use the uppercase form. I have a text file from the upstream regex toolkit that we could use to confirm inflection rules if we want to. --- Changelog.md | 2 +- lib/mutant/ast/regexp/transformer.rb | 2 +- lib/mutant/ast/regexp/transformer/direct.rb | 49 +- lib/mutant/ast/types.rb | 1180 +++++++++++++++++++ meta/regexp/regexp_latin_property.rb | 2 +- spec/unit/mutant/ast/regexp_spec.rb | 18 +- 6 files changed, 1230 insertions(+), 23 deletions(-) diff --git a/Changelog.md b/Changelog.md index 44c9a91d8..774418c84 100644 --- a/Changelog.md +++ b/Changelog.md @@ -87,7 +87,7 @@ * [#1234](https://github.com/mbj/mutant/pull/1234) Add mapping for latin regexp properties to fix crash on mutating - `p{Latin}` regexp nodes. + `\p{Latin}` regexp nodes. Fix: [#1231](https://github.com/mbj/mutant/issues/1231) diff --git a/lib/mutant/ast/regexp/transformer.rb b/lib/mutant/ast/regexp/transformer.rb index 1ed89acf0..f5fabbc63 100644 --- a/lib/mutant/ast/regexp/transformer.rb +++ b/lib/mutant/ast/regexp/transformer.rb @@ -12,7 +12,7 @@ class Transformer include AbstractType REGISTRY = Registry.new( - ->(type) { fail "No regexp transformer registered for: #{type}" } + ->(type) { } # fail "No regexp transformer registered for: #{type}" } ) # Lookup transformer class for regular expression node type diff --git a/lib/mutant/ast/regexp/transformer/direct.rb b/lib/mutant/ast/regexp/transformer/direct.rb index 6b0187d44..9f626c0fb 100644 --- a/lib/mutant/ast/regexp/transformer/direct.rb +++ b/lib/mutant/ast/regexp/transformer/direct.rb @@ -40,9 +40,7 @@ class ASTToExpression < Transformer::ASTToExpression TABLE = Table.create( [:regexp_alnum_posixclass, [:posixclass, :alnum, '[:alnum:]'], ::Regexp::Expression::PosixClass], [:regexp_alpha_posixclass, [:posixclass, :alpha, '[:alpha:]'], ::Regexp::Expression::PosixClass], - [:regexp_alpha_property, [:property, :alpha, '\p{Alpha}'], ::Regexp::Expression::UnicodeProperty::Alpha], [:regexp_alternation_escape, [:escape, :alternation, '\|'], ::Regexp::Expression::EscapeSequence::Literal], - [:regexp_arabic_property, [:property, :arabic, '\p{Arabic}'], ::Regexp::Expression::UnicodeProperty::Script], [:regexp_ascii_posixclass, [:posixclass, :ascii, '[:ascii:]'], ::Regexp::Expression::PosixClass], [:regexp_backspace_escape, [:escape, :backspace, '\b'], ::Regexp::Expression::EscapeSequence::Backspace], [:regexp_bell_escape, [:escape, :bell, '\a'], ::Regexp::Expression::EscapeSequence::Literal], @@ -65,16 +63,10 @@ class ASTToExpression < Transformer::ASTToExpression [:regexp_graph_posixclass, [:posixclass, :graph, '[:graph:]'], ::Regexp::Expression::PosixClass], [:regexp_group_close_escape, [:escape, :group_close, '\)'], ::Regexp::Expression::EscapeSequence::Literal], [:regexp_group_open_escape, [:escape, :group_open, '\('], ::Regexp::Expression::EscapeSequence::Literal], - [:regexp_han_property, [:property, :han, '\p{Han}'], ::Regexp::Expression::UnicodeProperty::Script], - [:regexp_hangul_property, [:property, :hangul, '\p{Hangul}'], ::Regexp::Expression::UnicodeProperty::Script], [:regexp_hex_type, [:type, :hex, '\h'], ::Regexp::Expression::CharacterType::Hex], - [:regexp_hiragana_property, [:property, :hiragana, '\p{Hiragana}'], ::Regexp::Expression::UnicodeProperty::Script], [:regexp_interval_close_escape, [:escape, :interval_close, '\}'], ::Regexp::Expression::EscapeSequence::Literal], [:regexp_interval_open_escape, [:escape, :interval_open, '\{'], ::Regexp::Expression::EscapeSequence::Literal], - [:regexp_katakana_property, [:property, :katakana, '\p{Katakana}'], ::Regexp::Expression::UnicodeProperty::Script], - [:regexp_letter_property, [:property, :letter, '\p{L}'], ::Regexp::Expression::UnicodeProperty::Letter::Any], [:regexp_linebreak_type, [:type, :linebreak, '\R'], ::Regexp::Expression::CharacterType::Linebreak], - [:regexp_latin_property, [:property, :latin, '\p{Latin}'], ::Regexp::Expression::UnicodeProperty::Script], [:regexp_lower_posixclass, [:posixclass, :lower, '[:lower:]'], ::Regexp::Expression::PosixClass], [:regexp_mark_keep, [:keep, :mark, '\K'], ::Regexp::Expression::Keep::Mark], [:regexp_match_start_anchor, [:anchor, :match_start, '\\G'], ::Regexp::Expression::Anchor::MatchStart], @@ -86,10 +78,8 @@ class ASTToExpression < Transformer::ASTToExpression [:regexp_nonword_type, [:type, :nonword, '\W'], ::Regexp::Expression::CharacterType::NonWord], [:regexp_one_or_more_escape, [:escape, :one_or_more, '\+'], ::Regexp::Expression::EscapeSequence::Literal], [:regexp_print_nonposixclass, [:nonposixclass, :print, '[:^print:]'], ::Regexp::Expression::PosixClass], - [:regexp_print_nonproperty, [:nonproperty, :print, '\P{Print}'], ::Regexp::Expression::UnicodeProperty::Print], [:regexp_print_posixclass, [:posixclass, :print, '[:print:]'], ::Regexp::Expression::PosixClass], [:regexp_print_posixclass, [:posixclass, :print, '[:print:]'], ::Regexp::Expression::PosixClass], - [:regexp_print_property, [:property, :print, '\p{Print}'], ::Regexp::Expression::UnicodeProperty::Print], [:regexp_punct_posixclass, [:posixclass, :punct, '[:punct:]'], ::Regexp::Expression::PosixClass], [:regexp_set_close_escape, [:escape, :set_close, '\]'], ::Regexp::Expression::EscapeSequence::Literal], [:regexp_set_open_escape, [:escape, :set_open, '\['], ::Regexp::Expression::EscapeSequence::Literal], @@ -103,7 +93,44 @@ class ASTToExpression < Transformer::ASTToExpression [:regexp_xdigit_posixclass, [:posixclass, :xdigit, '[:xdigit:]'], ::Regexp::Expression::PosixClass], [:regexp_xgrapheme_type, [:type, :xgrapheme, '\X'], ::Regexp::Expression::CharacterType::ExtendedGrapheme], [:regexp_zero_or_more_escape, [:escape, :zero_or_more, '\*'], ::Regexp::Expression::EscapeSequence::Literal], - [:regexp_zero_or_one_escape, [:escape, :zero_or_one, '\?'], ::Regexp::Expression::EscapeSequence::Literal] + [:regexp_zero_or_one_escape, [:escape, :zero_or_one, '\?'], ::Regexp::Expression::EscapeSequence::Literal], + *( + ::Regexp::Syntax::Token::UnicodeProperty::All - + %i[ + small_kana_extension + newline + egyptian_hieroglyph_format_controls + ottoman_siyaq_numbers + symbols_and_pictographs_extended_a + tamil_supplement + ] # NOTE: This probably needs to be filtered differently for different ruby versions... + ).flat_map do |property| + property_specifier = "\\p{#{property}}" + non_property_specifier = "\\P{#{property}}" + property_regex = /#{property_specifier}/ + non_property_regex = /#{non_property_specifier}/ + + [ + [ + :"regexp_#{property}_property", + [ + :property, + property.to_sym, + property_specifier + ], + ::Regexp::Parser.parse(property_regex).expressions.first.class + ], + [ + :"regexp_#{property}_nonproperty", + [ + :nonproperty, + property.to_sym, + non_property_specifier + ], + ::Regexp::Parser.parse(non_property_regex).expressions.first.class + ] + ] + end ) # rubocop:enable Layout/LineLength diff --git a/lib/mutant/ast/types.rb b/lib/mutant/ast/types.rb index 460656c8c..272a4f6db 100644 --- a/lib/mutant/ast/types.rb +++ b/lib/mutant/ast/types.rb @@ -56,114 +56,1294 @@ module Types # rubocop:disable Metrics/ModuleLength # Nodes generated by regular expression body parsing REGEXP = Set.new(%i[ + regexp_adlam_nonproperty + regexp_adlam_property + regexp_age=1.1_nonproperty + regexp_age=1.1_property + regexp_age=10.0_nonproperty + regexp_age=10.0_property + regexp_age=11.0_nonproperty + regexp_age=11.0_property + regexp_age=12.0_nonproperty + regexp_age=12.0_property + regexp_age=12.1_nonproperty + regexp_age=12.1_property + regexp_age=2.0_nonproperty + regexp_age=2.0_property + regexp_age=2.1_nonproperty + regexp_age=2.1_property + regexp_age=3.0_nonproperty + regexp_age=3.0_property + regexp_age=3.1_nonproperty + regexp_age=3.1_property + regexp_age=3.2_nonproperty + regexp_age=3.2_property + regexp_age=4.0_nonproperty + regexp_age=4.0_property + regexp_age=4.1_nonproperty + regexp_age=4.1_property + regexp_age=5.0_nonproperty + regexp_age=5.0_property + regexp_age=5.1_nonproperty + regexp_age=5.1_property + regexp_age=5.2_nonproperty + regexp_age=5.2_property + regexp_age=6.0_nonproperty + regexp_age=6.0_property + regexp_age=6.1_nonproperty + regexp_age=6.1_property + regexp_age=6.2_nonproperty + regexp_age=6.2_property + regexp_age=6.3_nonproperty + regexp_age=6.3_property + regexp_age=7.0_nonproperty + regexp_age=7.0_property + regexp_age=8.0_nonproperty + regexp_age=8.0_property + regexp_age=9.0_nonproperty + regexp_age=9.0_property + regexp_ahom_nonproperty + regexp_ahom_property + regexp_alnum_nonproperty regexp_alnum_posixclass + regexp_alnum_property + regexp_alpha_nonproperty regexp_alpha_posixclass regexp_alpha_property + regexp_alpha_property + regexp_alphabetic_nonproperty + regexp_alphabetic_property regexp_alternation_escape regexp_alternation_meta + regexp_anatolian_hieroglyphs_nonproperty + regexp_anatolian_hieroglyphs_property + regexp_any_nonproperty + regexp_any_property + regexp_arabic_nonproperty + regexp_arabic_property regexp_arabic_property + regexp_armenian_nonproperty + regexp_armenian_property + regexp_ascii_hex_digit_nonproperty + regexp_ascii_hex_digit_property + regexp_ascii_nonproperty regexp_ascii_posixclass + regexp_ascii_property + regexp_assigned_nonproperty + regexp_assigned_property regexp_atomic_group + regexp_avestan_nonproperty + regexp_avestan_property regexp_backslash_escape regexp_backspace_escape + regexp_balinese_nonproperty + regexp_balinese_property + regexp_bamum_nonproperty + regexp_bamum_property + regexp_bassa_vah_nonproperty + regexp_bassa_vah_property + regexp_batak_nonproperty + regexp_batak_property regexp_bell_escape + regexp_bengali_nonproperty + regexp_bengali_property + regexp_bhaiksuki_nonproperty + regexp_bhaiksuki_property + regexp_bidi_control_nonproperty + regexp_bidi_control_property + regexp_blank_nonproperty regexp_blank_posixclass + regexp_blank_property regexp_bol_anchor regexp_bol_escape + regexp_bopomofo_nonproperty + regexp_bopomofo_property regexp_bos_anchor + regexp_brahmi_nonproperty + regexp_brahmi_property + regexp_braille_nonproperty + regexp_braille_property + regexp_buginese_nonproperty + regexp_buginese_property + regexp_buhid_nonproperty + regexp_buhid_property + regexp_canadian_aboriginal_nonproperty + regexp_canadian_aboriginal_property regexp_capture_group + regexp_carian_nonproperty + regexp_carian_property regexp_carriage_escape + regexp_case_ignorable_nonproperty + regexp_case_ignorable_property + regexp_cased_letter_nonproperty + regexp_cased_letter_property + regexp_cased_nonproperty + regexp_cased_property + regexp_caucasian_albanian_nonproperty + regexp_caucasian_albanian_property + regexp_chakma_nonproperty + regexp_chakma_property + regexp_cham_nonproperty + regexp_cham_property + regexp_changes_when_casefolded_nonproperty + regexp_changes_when_casefolded_property + regexp_changes_when_casemapped_nonproperty + regexp_changes_when_casemapped_property + regexp_changes_when_lowercased_nonproperty + regexp_changes_when_lowercased_property + regexp_changes_when_titlecased_nonproperty + regexp_changes_when_titlecased_property + regexp_changes_when_uppercased_nonproperty + regexp_changes_when_uppercased_property regexp_character_set + regexp_cherokee_nonproperty + regexp_cherokee_property + regexp_close_punctuation_nonproperty + regexp_close_punctuation_property + regexp_cntrl_nonproperty regexp_cntrl_posixclass + regexp_cntrl_property regexp_codepoint_escape regexp_codepoint_list_escape + regexp_combining_mark_nonproperty + regexp_combining_mark_property regexp_comment_free_space regexp_comment_group + regexp_common_nonproperty + regexp_common_property regexp_condition_conditional + regexp_connector_punctuation_nonproperty + regexp_connector_punctuation_property regexp_control_escape + regexp_control_nonproperty + regexp_control_property + regexp_coptic_nonproperty + regexp_coptic_property + regexp_cuneiform_nonproperty + regexp_cuneiform_property + regexp_currency_symbol_nonproperty + regexp_currency_symbol_property + regexp_cypriot_nonproperty + regexp_cypriot_property + regexp_cyrillic_nonproperty + regexp_cyrillic_property + regexp_dash_nonproperty + regexp_dash_property + regexp_dash_punctuation_nonproperty + regexp_dash_punctuation_property + regexp_decimal_number_nonproperty + regexp_decimal_number_property + regexp_default_ignorable_code_point_nonproperty + regexp_default_ignorable_code_point_property + regexp_deprecated_nonproperty + regexp_deprecated_property + regexp_deseret_nonproperty + regexp_deseret_property + regexp_devanagari_nonproperty + regexp_devanagari_property + regexp_diacritic_nonproperty + regexp_diacritic_property + regexp_digit_nonproperty regexp_digit_posixclass + regexp_digit_property regexp_digit_type + regexp_dogra_nonproperty + regexp_dogra_property regexp_dot_escape regexp_dot_meta + regexp_duployan_nonproperty + regexp_duployan_property + regexp_egyptian_hieroglyphs_nonproperty + regexp_egyptian_hieroglyphs_property + regexp_elbasan_nonproperty + regexp_elbasan_property + regexp_elymaic_nonproperty + regexp_elymaic_property + regexp_emoji_component_nonproperty + regexp_emoji_component_property + regexp_emoji_modifier_base_nonproperty + regexp_emoji_modifier_base_property + regexp_emoji_modifier_nonproperty + regexp_emoji_modifier_property + regexp_emoji_nonproperty + regexp_emoji_presentation_nonproperty + regexp_emoji_presentation_property + regexp_emoji_property + regexp_enclosing_mark_nonproperty + regexp_enclosing_mark_property regexp_eol_anchor regexp_eol_escape regexp_eos_anchor regexp_eos_ob_eol_anchor regexp_escape_escape + regexp_ethiopic_nonproperty + regexp_ethiopic_property + regexp_extender_nonproperty + regexp_extender_property + regexp_final_punctuation_nonproperty + regexp_final_punctuation_property regexp_form_feed_escape + regexp_format_nonproperty + regexp_format_property + regexp_georgian_nonproperty + regexp_georgian_property + regexp_glagolitic_nonproperty + regexp_glagolitic_property + regexp_gothic_nonproperty + regexp_gothic_property + regexp_grantha_nonproperty + regexp_grantha_property + regexp_graph_nonproperty regexp_graph_posixclass + regexp_graph_property + regexp_grapheme_base_nonproperty + regexp_grapheme_base_property + regexp_grapheme_extend_nonproperty + regexp_grapheme_extend_property + regexp_grapheme_link_nonproperty + regexp_grapheme_link_property regexp_greedy_interval regexp_greedy_one_or_more regexp_greedy_zero_or_more regexp_greedy_zero_or_one + regexp_greek_nonproperty + regexp_greek_property regexp_group_close_escape regexp_group_open_escape + regexp_gujarati_nonproperty + regexp_gujarati_property + regexp_gunjala_gondi_nonproperty + regexp_gunjala_gondi_property + regexp_gurmukhi_nonproperty + regexp_gurmukhi_property + regexp_han_nonproperty + regexp_han_property regexp_han_property + regexp_hangul_nonproperty regexp_hangul_property + regexp_hangul_property + regexp_hanifi_rohingya_nonproperty + regexp_hanifi_rohingya_property + regexp_hanunoo_nonproperty + regexp_hanunoo_property + regexp_hatran_nonproperty + regexp_hatran_property + regexp_hebrew_nonproperty + regexp_hebrew_property + regexp_hex_digit_nonproperty + regexp_hex_digit_property regexp_hex_escape regexp_hex_type + regexp_hiragana_nonproperty + regexp_hiragana_property regexp_hiragana_property + regexp_hyphen_nonproperty + regexp_hyphen_property + regexp_id_continue_nonproperty + regexp_id_continue_property + regexp_id_start_nonproperty + regexp_id_start_property + regexp_ideographic_nonproperty + regexp_ideographic_property + regexp_ids_binary_operator_nonproperty + regexp_ids_binary_operator_property + regexp_ids_trinary_operator_nonproperty + regexp_ids_trinary_operator_property + regexp_imperial_aramaic_nonproperty + regexp_imperial_aramaic_property + regexp_in_adlam_nonproperty + regexp_in_adlam_property + regexp_in_aegean_numbers_nonproperty + regexp_in_aegean_numbers_property + regexp_in_ahom_nonproperty + regexp_in_ahom_property + regexp_in_alchemical_symbols_nonproperty + regexp_in_alchemical_symbols_property + regexp_in_alphabetic_presentation_forms_nonproperty + regexp_in_alphabetic_presentation_forms_property + regexp_in_anatolian_hieroglyphs_nonproperty + regexp_in_anatolian_hieroglyphs_property + regexp_in_ancient_greek_musical_notation_nonproperty + regexp_in_ancient_greek_musical_notation_property + regexp_in_ancient_greek_numbers_nonproperty + regexp_in_ancient_greek_numbers_property + regexp_in_ancient_symbols_nonproperty + regexp_in_ancient_symbols_property + regexp_in_arabic_extended_a_nonproperty + regexp_in_arabic_extended_a_property + regexp_in_arabic_mathematical_alphabetic_symbols_nonproperty + regexp_in_arabic_mathematical_alphabetic_symbols_property + regexp_in_arabic_nonproperty + regexp_in_arabic_presentation_forms_a_nonproperty + regexp_in_arabic_presentation_forms_a_property + regexp_in_arabic_presentation_forms_b_nonproperty + regexp_in_arabic_presentation_forms_b_property + regexp_in_arabic_property + regexp_in_arabic_supplement_nonproperty + regexp_in_arabic_supplement_property + regexp_in_armenian_nonproperty + regexp_in_armenian_property + regexp_in_arrows_nonproperty + regexp_in_arrows_property + regexp_in_avestan_nonproperty + regexp_in_avestan_property + regexp_in_balinese_nonproperty + regexp_in_balinese_property + regexp_in_bamum_nonproperty + regexp_in_bamum_property + regexp_in_bamum_supplement_nonproperty + regexp_in_bamum_supplement_property + regexp_in_basic_latin_nonproperty + regexp_in_basic_latin_property + regexp_in_bassa_vah_nonproperty + regexp_in_bassa_vah_property + regexp_in_batak_nonproperty + regexp_in_batak_property + regexp_in_bengali_nonproperty + regexp_in_bengali_property + regexp_in_bhaiksuki_nonproperty + regexp_in_bhaiksuki_property + regexp_in_block_elements_nonproperty + regexp_in_block_elements_property + regexp_in_bopomofo_extended_nonproperty + regexp_in_bopomofo_extended_property + regexp_in_bopomofo_nonproperty + regexp_in_bopomofo_property + regexp_in_box_drawing_nonproperty + regexp_in_box_drawing_property + regexp_in_brahmi_nonproperty + regexp_in_brahmi_property + regexp_in_braille_patterns_nonproperty + regexp_in_braille_patterns_property + regexp_in_buginese_nonproperty + regexp_in_buginese_property + regexp_in_buhid_nonproperty + regexp_in_buhid_property + regexp_in_byzantine_musical_symbols_nonproperty + regexp_in_byzantine_musical_symbols_property + regexp_in_carian_nonproperty + regexp_in_carian_property + regexp_in_caucasian_albanian_nonproperty + regexp_in_caucasian_albanian_property + regexp_in_chakma_nonproperty + regexp_in_chakma_property + regexp_in_cham_nonproperty + regexp_in_cham_property + regexp_in_cherokee_nonproperty + regexp_in_cherokee_property + regexp_in_cherokee_supplement_nonproperty + regexp_in_cherokee_supplement_property + regexp_in_chess_symbols_nonproperty + regexp_in_chess_symbols_property + regexp_in_cjk_compatibility_forms_nonproperty + regexp_in_cjk_compatibility_forms_property + regexp_in_cjk_compatibility_ideographs_nonproperty + regexp_in_cjk_compatibility_ideographs_property + regexp_in_cjk_compatibility_ideographs_supplement_nonproperty + regexp_in_cjk_compatibility_ideographs_supplement_property + regexp_in_cjk_compatibility_nonproperty + regexp_in_cjk_compatibility_property + regexp_in_cjk_radicals_supplement_nonproperty + regexp_in_cjk_radicals_supplement_property + regexp_in_cjk_strokes_nonproperty + regexp_in_cjk_strokes_property + regexp_in_cjk_symbols_and_punctuation_nonproperty + regexp_in_cjk_symbols_and_punctuation_property + regexp_in_cjk_unified_ideographs_extension_a_nonproperty + regexp_in_cjk_unified_ideographs_extension_a_property + regexp_in_cjk_unified_ideographs_extension_b_nonproperty + regexp_in_cjk_unified_ideographs_extension_b_property + regexp_in_cjk_unified_ideographs_extension_c_nonproperty + regexp_in_cjk_unified_ideographs_extension_c_property + regexp_in_cjk_unified_ideographs_extension_d_nonproperty + regexp_in_cjk_unified_ideographs_extension_d_property + regexp_in_cjk_unified_ideographs_extension_e_nonproperty + regexp_in_cjk_unified_ideographs_extension_e_property + regexp_in_cjk_unified_ideographs_extension_f_nonproperty + regexp_in_cjk_unified_ideographs_extension_f_property + regexp_in_cjk_unified_ideographs_nonproperty + regexp_in_cjk_unified_ideographs_property + regexp_in_combining_diacritical_marks_extended_nonproperty + regexp_in_combining_diacritical_marks_extended_property + regexp_in_combining_diacritical_marks_for_symbols_nonproperty + regexp_in_combining_diacritical_marks_for_symbols_property + regexp_in_combining_diacritical_marks_nonproperty + regexp_in_combining_diacritical_marks_property + regexp_in_combining_diacritical_marks_supplement_nonproperty + regexp_in_combining_diacritical_marks_supplement_property + regexp_in_combining_half_marks_nonproperty + regexp_in_combining_half_marks_property + regexp_in_common_indic_number_forms_nonproperty + regexp_in_common_indic_number_forms_property + regexp_in_control_pictures_nonproperty + regexp_in_control_pictures_property + regexp_in_coptic_epact_numbers_nonproperty + regexp_in_coptic_epact_numbers_property + regexp_in_coptic_nonproperty + regexp_in_coptic_property + regexp_in_counting_rod_numerals_nonproperty + regexp_in_counting_rod_numerals_property + regexp_in_cuneiform_nonproperty + regexp_in_cuneiform_numbers_and_punctuation_nonproperty + regexp_in_cuneiform_numbers_and_punctuation_property + regexp_in_cuneiform_property + regexp_in_currency_symbols_nonproperty + regexp_in_currency_symbols_property + regexp_in_cypriot_syllabary_nonproperty + regexp_in_cypriot_syllabary_property + regexp_in_cyrillic_extended_a_nonproperty + regexp_in_cyrillic_extended_a_property + regexp_in_cyrillic_extended_b_nonproperty + regexp_in_cyrillic_extended_b_property + regexp_in_cyrillic_extended_c_nonproperty + regexp_in_cyrillic_extended_c_property + regexp_in_cyrillic_nonproperty + regexp_in_cyrillic_property + regexp_in_cyrillic_supplement_nonproperty + regexp_in_cyrillic_supplement_property + regexp_in_deseret_nonproperty + regexp_in_deseret_property + regexp_in_devanagari_extended_nonproperty + regexp_in_devanagari_extended_property + regexp_in_devanagari_nonproperty + regexp_in_devanagari_property + regexp_in_dingbats_nonproperty + regexp_in_dingbats_property + regexp_in_dogra_nonproperty + regexp_in_dogra_property + regexp_in_domino_tiles_nonproperty + regexp_in_domino_tiles_property + regexp_in_duployan_nonproperty + regexp_in_duployan_property + regexp_in_early_dynastic_cuneiform_nonproperty + regexp_in_early_dynastic_cuneiform_property + regexp_in_egyptian_hieroglyph_format_controls_nonproperty + regexp_in_egyptian_hieroglyph_format_controls_property + regexp_in_egyptian_hieroglyphs_nonproperty + regexp_in_egyptian_hieroglyphs_property + regexp_in_elbasan_nonproperty + regexp_in_elbasan_property + regexp_in_elymaic_nonproperty + regexp_in_elymaic_property + regexp_in_emoticons_nonproperty + regexp_in_emoticons_property + regexp_in_enclosed_alphanumeric_supplement_nonproperty + regexp_in_enclosed_alphanumeric_supplement_property + regexp_in_enclosed_alphanumerics_nonproperty + regexp_in_enclosed_alphanumerics_property + regexp_in_enclosed_cjk_letters_and_months_nonproperty + regexp_in_enclosed_cjk_letters_and_months_property + regexp_in_enclosed_ideographic_supplement_nonproperty + regexp_in_enclosed_ideographic_supplement_property + regexp_in_ethiopic_extended_a_nonproperty + regexp_in_ethiopic_extended_a_property + regexp_in_ethiopic_extended_nonproperty + regexp_in_ethiopic_extended_property + regexp_in_ethiopic_nonproperty + regexp_in_ethiopic_property + regexp_in_ethiopic_supplement_nonproperty + regexp_in_ethiopic_supplement_property + regexp_in_general_punctuation_nonproperty + regexp_in_general_punctuation_property + regexp_in_geometric_shapes_extended_nonproperty + regexp_in_geometric_shapes_extended_property + regexp_in_geometric_shapes_nonproperty + regexp_in_geometric_shapes_property + regexp_in_georgian_extended_nonproperty + regexp_in_georgian_extended_property + regexp_in_georgian_nonproperty + regexp_in_georgian_property + regexp_in_georgian_supplement_nonproperty + regexp_in_georgian_supplement_property + regexp_in_glagolitic_nonproperty + regexp_in_glagolitic_property + regexp_in_glagolitic_supplement_nonproperty + regexp_in_glagolitic_supplement_property + regexp_in_gothic_nonproperty + regexp_in_gothic_property + regexp_in_grantha_nonproperty + regexp_in_grantha_property + regexp_in_greek_and_coptic_nonproperty + regexp_in_greek_and_coptic_property + regexp_in_greek_extended_nonproperty + regexp_in_greek_extended_property + regexp_in_gujarati_nonproperty + regexp_in_gujarati_property + regexp_in_gunjala_gondi_nonproperty + regexp_in_gunjala_gondi_property + regexp_in_gurmukhi_nonproperty + regexp_in_gurmukhi_property + regexp_in_halfwidth_and_fullwidth_forms_nonproperty + regexp_in_halfwidth_and_fullwidth_forms_property + regexp_in_hangul_compatibility_jamo_nonproperty + regexp_in_hangul_compatibility_jamo_property + regexp_in_hangul_jamo_extended_a_nonproperty + regexp_in_hangul_jamo_extended_a_property + regexp_in_hangul_jamo_extended_b_nonproperty + regexp_in_hangul_jamo_extended_b_property + regexp_in_hangul_jamo_nonproperty + regexp_in_hangul_jamo_property + regexp_in_hangul_syllables_nonproperty + regexp_in_hangul_syllables_property + regexp_in_hanifi_rohingya_nonproperty + regexp_in_hanifi_rohingya_property + regexp_in_hanunoo_nonproperty + regexp_in_hanunoo_property + regexp_in_hatran_nonproperty + regexp_in_hatran_property + regexp_in_hebrew_nonproperty + regexp_in_hebrew_property + regexp_in_high_private_use_surrogates_nonproperty + regexp_in_high_private_use_surrogates_property + regexp_in_high_surrogates_nonproperty + regexp_in_high_surrogates_property + regexp_in_hiragana_nonproperty + regexp_in_hiragana_property + regexp_in_ideographic_description_characters_nonproperty + regexp_in_ideographic_description_characters_property + regexp_in_ideographic_symbols_and_punctuation_nonproperty + regexp_in_ideographic_symbols_and_punctuation_property + regexp_in_imperial_aramaic_nonproperty + regexp_in_imperial_aramaic_property + regexp_in_indic_siyaq_numbers_nonproperty + regexp_in_indic_siyaq_numbers_property + regexp_in_inscriptional_pahlavi_nonproperty + regexp_in_inscriptional_pahlavi_property + regexp_in_inscriptional_parthian_nonproperty + regexp_in_inscriptional_parthian_property + regexp_in_ipa_extensions_nonproperty + regexp_in_ipa_extensions_property + regexp_in_javanese_nonproperty + regexp_in_javanese_property + regexp_in_kaithi_nonproperty + regexp_in_kaithi_property + regexp_in_kana_extended_a_nonproperty + regexp_in_kana_extended_a_property + regexp_in_kana_supplement_nonproperty + regexp_in_kana_supplement_property + regexp_in_kanbun_nonproperty + regexp_in_kanbun_property + regexp_in_kangxi_radicals_nonproperty + regexp_in_kangxi_radicals_property + regexp_in_kannada_nonproperty + regexp_in_kannada_property + regexp_in_katakana_nonproperty + regexp_in_katakana_phonetic_extensions_nonproperty + regexp_in_katakana_phonetic_extensions_property + regexp_in_katakana_property + regexp_in_kayah_li_nonproperty + regexp_in_kayah_li_property + regexp_in_kharoshthi_nonproperty + regexp_in_kharoshthi_property + regexp_in_khmer_nonproperty + regexp_in_khmer_property + regexp_in_khmer_symbols_nonproperty + regexp_in_khmer_symbols_property + regexp_in_khojki_nonproperty + regexp_in_khojki_property + regexp_in_khudawadi_nonproperty + regexp_in_khudawadi_property + regexp_in_lao_nonproperty + regexp_in_lao_property + regexp_in_latin_1_supplement_nonproperty + regexp_in_latin_1_supplement_property + regexp_in_latin_extended_a_nonproperty + regexp_in_latin_extended_a_property + regexp_in_latin_extended_additional_nonproperty + regexp_in_latin_extended_additional_property + regexp_in_latin_extended_b_nonproperty + regexp_in_latin_extended_b_property + regexp_in_latin_extended_c_nonproperty + regexp_in_latin_extended_c_property + regexp_in_latin_extended_d_nonproperty + regexp_in_latin_extended_d_property + regexp_in_latin_extended_e_nonproperty + regexp_in_latin_extended_e_property + regexp_in_lepcha_nonproperty + regexp_in_lepcha_property + regexp_in_letterlike_symbols_nonproperty + regexp_in_letterlike_symbols_property + regexp_in_limbu_nonproperty + regexp_in_limbu_property + regexp_in_linear_a_nonproperty + regexp_in_linear_a_property + regexp_in_linear_b_ideograms_nonproperty + regexp_in_linear_b_ideograms_property + regexp_in_linear_b_syllabary_nonproperty + regexp_in_linear_b_syllabary_property + regexp_in_lisu_nonproperty + regexp_in_lisu_property + regexp_in_low_surrogates_nonproperty + regexp_in_low_surrogates_property + regexp_in_lycian_nonproperty + regexp_in_lycian_property + regexp_in_lydian_nonproperty + regexp_in_lydian_property + regexp_in_mahajani_nonproperty + regexp_in_mahajani_property + regexp_in_mahjong_tiles_nonproperty + regexp_in_mahjong_tiles_property + regexp_in_makasar_nonproperty + regexp_in_makasar_property + regexp_in_malayalam_nonproperty + regexp_in_malayalam_property + regexp_in_mandaic_nonproperty + regexp_in_mandaic_property + regexp_in_manichaean_nonproperty + regexp_in_manichaean_property + regexp_in_marchen_nonproperty + regexp_in_marchen_property + regexp_in_masaram_gondi_nonproperty + regexp_in_masaram_gondi_property + regexp_in_mathematical_alphanumeric_symbols_nonproperty + regexp_in_mathematical_alphanumeric_symbols_property + regexp_in_mathematical_operators_nonproperty + regexp_in_mathematical_operators_property + regexp_in_mayan_numerals_nonproperty + regexp_in_mayan_numerals_property + regexp_in_medefaidrin_nonproperty + regexp_in_medefaidrin_property + regexp_in_meetei_mayek_extensions_nonproperty + regexp_in_meetei_mayek_extensions_property + regexp_in_meetei_mayek_nonproperty + regexp_in_meetei_mayek_property + regexp_in_mende_kikakui_nonproperty + regexp_in_mende_kikakui_property + regexp_in_meroitic_cursive_nonproperty + regexp_in_meroitic_cursive_property + regexp_in_meroitic_hieroglyphs_nonproperty + regexp_in_meroitic_hieroglyphs_property + regexp_in_miao_nonproperty + regexp_in_miao_property + regexp_in_miscellaneous_mathematical_symbols_a_nonproperty + regexp_in_miscellaneous_mathematical_symbols_a_property + regexp_in_miscellaneous_mathematical_symbols_b_nonproperty + regexp_in_miscellaneous_mathematical_symbols_b_property + regexp_in_miscellaneous_symbols_and_arrows_nonproperty + regexp_in_miscellaneous_symbols_and_arrows_property + regexp_in_miscellaneous_symbols_and_pictographs_nonproperty + regexp_in_miscellaneous_symbols_and_pictographs_property + regexp_in_miscellaneous_symbols_nonproperty + regexp_in_miscellaneous_symbols_property + regexp_in_miscellaneous_technical_nonproperty + regexp_in_miscellaneous_technical_property + regexp_in_modi_nonproperty + regexp_in_modi_property + regexp_in_modifier_tone_letters_nonproperty + regexp_in_modifier_tone_letters_property + regexp_in_mongolian_nonproperty + regexp_in_mongolian_property + regexp_in_mongolian_supplement_nonproperty + regexp_in_mongolian_supplement_property + regexp_in_mro_nonproperty + regexp_in_mro_property + regexp_in_multani_nonproperty + regexp_in_multani_property + regexp_in_musical_symbols_nonproperty + regexp_in_musical_symbols_property + regexp_in_myanmar_extended_a_nonproperty + regexp_in_myanmar_extended_a_property + regexp_in_myanmar_extended_b_nonproperty + regexp_in_myanmar_extended_b_property + regexp_in_myanmar_nonproperty + regexp_in_myanmar_property + regexp_in_nabataean_nonproperty + regexp_in_nabataean_property + regexp_in_nandinagari_nonproperty + regexp_in_nandinagari_property + regexp_in_new_tai_lue_nonproperty + regexp_in_new_tai_lue_property + regexp_in_newa_nonproperty + regexp_in_newa_property + regexp_in_nko_nonproperty + regexp_in_nko_property + regexp_in_no_block_nonproperty + regexp_in_no_block_property + regexp_in_number_forms_nonproperty + regexp_in_number_forms_property + regexp_in_nushu_nonproperty + regexp_in_nushu_property + regexp_in_nyiakeng_puachue_hmong_nonproperty + regexp_in_nyiakeng_puachue_hmong_property + regexp_in_ogham_nonproperty + regexp_in_ogham_property + regexp_in_ol_chiki_nonproperty + regexp_in_ol_chiki_property + regexp_in_old_hungarian_nonproperty + regexp_in_old_hungarian_property + regexp_in_old_italic_nonproperty + regexp_in_old_italic_property + regexp_in_old_north_arabian_nonproperty + regexp_in_old_north_arabian_property + regexp_in_old_permic_nonproperty + regexp_in_old_permic_property + regexp_in_old_persian_nonproperty + regexp_in_old_persian_property + regexp_in_old_sogdian_nonproperty + regexp_in_old_sogdian_property + regexp_in_old_south_arabian_nonproperty + regexp_in_old_south_arabian_property + regexp_in_old_turkic_nonproperty + regexp_in_old_turkic_property + regexp_in_optical_character_recognition_nonproperty + regexp_in_optical_character_recognition_property + regexp_in_oriya_nonproperty + regexp_in_oriya_property + regexp_in_ornamental_dingbats_nonproperty + regexp_in_ornamental_dingbats_property + regexp_in_osage_nonproperty + regexp_in_osage_property + regexp_in_osmanya_nonproperty + regexp_in_osmanya_property + regexp_in_ottoman_siyaq_numbers_nonproperty + regexp_in_ottoman_siyaq_numbers_property + regexp_in_pahawh_hmong_nonproperty + regexp_in_pahawh_hmong_property + regexp_in_palmyrene_nonproperty + regexp_in_palmyrene_property + regexp_in_pau_cin_hau_nonproperty + regexp_in_pau_cin_hau_property + regexp_in_phags_pa_nonproperty + regexp_in_phags_pa_property + regexp_in_phaistos_disc_nonproperty + regexp_in_phaistos_disc_property + regexp_in_phoenician_nonproperty + regexp_in_phoenician_property + regexp_in_phonetic_extensions_nonproperty + regexp_in_phonetic_extensions_property + regexp_in_phonetic_extensions_supplement_nonproperty + regexp_in_phonetic_extensions_supplement_property + regexp_in_playing_cards_nonproperty + regexp_in_playing_cards_property + regexp_in_private_use_area_nonproperty + regexp_in_private_use_area_property + regexp_in_psalter_pahlavi_nonproperty + regexp_in_psalter_pahlavi_property + regexp_in_rejang_nonproperty + regexp_in_rejang_property + regexp_in_rumi_numeral_symbols_nonproperty + regexp_in_rumi_numeral_symbols_property + regexp_in_runic_nonproperty + regexp_in_runic_property + regexp_in_samaritan_nonproperty + regexp_in_samaritan_property + regexp_in_saurashtra_nonproperty + regexp_in_saurashtra_property + regexp_in_sharada_nonproperty + regexp_in_sharada_property + regexp_in_shavian_nonproperty + regexp_in_shavian_property + regexp_in_shorthand_format_controls_nonproperty + regexp_in_shorthand_format_controls_property + regexp_in_siddham_nonproperty + regexp_in_siddham_property + regexp_in_sinhala_archaic_numbers_nonproperty + regexp_in_sinhala_archaic_numbers_property + regexp_in_sinhala_nonproperty + regexp_in_sinhala_property + regexp_in_small_form_variants_nonproperty + regexp_in_small_form_variants_property + regexp_in_small_kana_extension_nonproperty + regexp_in_small_kana_extension_property + regexp_in_sogdian_nonproperty + regexp_in_sogdian_property + regexp_in_sora_sompeng_nonproperty + regexp_in_sora_sompeng_property + regexp_in_soyombo_nonproperty + regexp_in_soyombo_property + regexp_in_spacing_modifier_letters_nonproperty + regexp_in_spacing_modifier_letters_property + regexp_in_specials_nonproperty + regexp_in_specials_property + regexp_in_sundanese_nonproperty + regexp_in_sundanese_property + regexp_in_sundanese_supplement_nonproperty + regexp_in_sundanese_supplement_property + regexp_in_superscripts_and_subscripts_nonproperty + regexp_in_superscripts_and_subscripts_property + regexp_in_supplemental_arrows_a_nonproperty + regexp_in_supplemental_arrows_a_property + regexp_in_supplemental_arrows_b_nonproperty + regexp_in_supplemental_arrows_b_property + regexp_in_supplemental_arrows_c_nonproperty + regexp_in_supplemental_arrows_c_property + regexp_in_supplemental_mathematical_operators_nonproperty + regexp_in_supplemental_mathematical_operators_property + regexp_in_supplemental_punctuation_nonproperty + regexp_in_supplemental_punctuation_property + regexp_in_supplemental_symbols_and_pictographs_nonproperty + regexp_in_supplemental_symbols_and_pictographs_property + regexp_in_supplementary_private_use_area_a_nonproperty + regexp_in_supplementary_private_use_area_a_property + regexp_in_supplementary_private_use_area_b_nonproperty + regexp_in_supplementary_private_use_area_b_property + regexp_in_sutton_signwriting_nonproperty + regexp_in_sutton_signwriting_property + regexp_in_syloti_nagri_nonproperty + regexp_in_syloti_nagri_property + regexp_in_symbols_and_pictographs_extended_a_nonproperty + regexp_in_symbols_and_pictographs_extended_a_property + regexp_in_syriac_nonproperty + regexp_in_syriac_property + regexp_in_syriac_supplement_nonproperty + regexp_in_syriac_supplement_property + regexp_in_tagalog_nonproperty + regexp_in_tagalog_property + regexp_in_tagbanwa_nonproperty + regexp_in_tagbanwa_property + regexp_in_tags_nonproperty + regexp_in_tags_property + regexp_in_tai_le_nonproperty + regexp_in_tai_le_property + regexp_in_tai_tham_nonproperty + regexp_in_tai_tham_property + regexp_in_tai_viet_nonproperty + regexp_in_tai_viet_property + regexp_in_tai_xuan_jing_symbols_nonproperty + regexp_in_tai_xuan_jing_symbols_property + regexp_in_takri_nonproperty + regexp_in_takri_property + regexp_in_tamil_nonproperty + regexp_in_tamil_property + regexp_in_tamil_supplement_nonproperty + regexp_in_tamil_supplement_property + regexp_in_tangut_components_nonproperty + regexp_in_tangut_components_property + regexp_in_tangut_nonproperty + regexp_in_tangut_property + regexp_in_telugu_nonproperty + regexp_in_telugu_property + regexp_in_thaana_nonproperty + regexp_in_thaana_property + regexp_in_thai_nonproperty + regexp_in_thai_property + regexp_in_tibetan_nonproperty + regexp_in_tibetan_property + regexp_in_tifinagh_nonproperty + regexp_in_tifinagh_property + regexp_in_tirhuta_nonproperty + regexp_in_tirhuta_property + regexp_in_transport_and_map_symbols_nonproperty + regexp_in_transport_and_map_symbols_property + regexp_in_ugaritic_nonproperty + regexp_in_ugaritic_property + regexp_in_unified_canadian_aboriginal_syllabics_extended_nonproperty + regexp_in_unified_canadian_aboriginal_syllabics_extended_property + regexp_in_unified_canadian_aboriginal_syllabics_nonproperty + regexp_in_unified_canadian_aboriginal_syllabics_property + regexp_in_vai_nonproperty + regexp_in_vai_property + regexp_in_variation_selectors_nonproperty + regexp_in_variation_selectors_property + regexp_in_variation_selectors_supplement_nonproperty + regexp_in_variation_selectors_supplement_property + regexp_in_vedic_extensions_nonproperty + regexp_in_vedic_extensions_property + regexp_in_vertical_forms_nonproperty + regexp_in_vertical_forms_property + regexp_in_wancho_nonproperty + regexp_in_wancho_property + regexp_in_warang_citi_nonproperty + regexp_in_warang_citi_property + regexp_in_yi_radicals_nonproperty + regexp_in_yi_radicals_property + regexp_in_yi_syllables_nonproperty + regexp_in_yi_syllables_property + regexp_in_yijing_hexagram_symbols_nonproperty + regexp_in_yijing_hexagram_symbols_property + regexp_in_zanabazar_square_nonproperty + regexp_in_zanabazar_square_property + regexp_inherited_nonproperty + regexp_inherited_property + regexp_initial_punctuation_nonproperty + regexp_initial_punctuation_property + regexp_inscriptional_pahlavi_nonproperty + regexp_inscriptional_pahlavi_property + regexp_inscriptional_parthian_nonproperty + regexp_inscriptional_parthian_property regexp_intersection_set regexp_interval_close_escape regexp_interval_open_escape + regexp_javanese_nonproperty + regexp_javanese_property + regexp_join_control_nonproperty + regexp_join_control_property + regexp_kaithi_nonproperty + regexp_kaithi_property + regexp_kannada_nonproperty + regexp_kannada_property + regexp_katakana_nonproperty regexp_katakana_property + regexp_katakana_property + regexp_kayah_li_nonproperty + regexp_kayah_li_property + regexp_kharoshthi_nonproperty + regexp_kharoshthi_property + regexp_khmer_nonproperty + regexp_khmer_property + regexp_khojki_nonproperty + regexp_khojki_property + regexp_khudawadi_nonproperty + regexp_khudawadi_property + regexp_lao_nonproperty + regexp_lao_property + regexp_latin_nonproperty + regexp_latin_property regexp_latin_property + regexp_lepcha_nonproperty + regexp_lepcha_property + regexp_letter_nonproperty + regexp_letter_number_nonproperty + regexp_letter_number_property + regexp_letter_property regexp_letter_property + regexp_limbu_nonproperty + regexp_limbu_property + regexp_line_separator_nonproperty + regexp_line_separator_property + regexp_linear_a_nonproperty + regexp_linear_a_property + regexp_linear_b_nonproperty + regexp_linear_b_property regexp_linebreak_type + regexp_lisu_nonproperty + regexp_lisu_property regexp_literal_escape regexp_literal_literal + regexp_logical_order_exception_nonproperty + regexp_logical_order_exception_property regexp_lookahead_assertion regexp_lookbehind_assertion + regexp_lower_nonproperty regexp_lower_posixclass + regexp_lower_property + regexp_lowercase_letter_nonproperty + regexp_lowercase_letter_property + regexp_lowercase_nonproperty + regexp_lowercase_property + regexp_lycian_nonproperty + regexp_lycian_property + regexp_lydian_nonproperty + regexp_lydian_property + regexp_mahajani_nonproperty + regexp_mahajani_property + regexp_makasar_nonproperty + regexp_makasar_property + regexp_malayalam_nonproperty + regexp_malayalam_property + regexp_mandaic_nonproperty + regexp_mandaic_property + regexp_manichaean_nonproperty + regexp_manichaean_property + regexp_marchen_nonproperty + regexp_marchen_property regexp_mark_keep + regexp_mark_nonproperty + regexp_mark_property + regexp_masaram_gondi_nonproperty + regexp_masaram_gondi_property regexp_match_start_anchor + regexp_math_nonproperty + regexp_math_property + regexp_math_symbol_nonproperty + regexp_math_symbol_property + regexp_medefaidrin_nonproperty + regexp_medefaidrin_property + regexp_meetei_mayek_nonproperty + regexp_meetei_mayek_property + regexp_mende_kikakui_nonproperty + regexp_mende_kikakui_property + regexp_meroitic_cursive_nonproperty + regexp_meroitic_cursive_property + regexp_meroitic_hieroglyphs_nonproperty + regexp_meroitic_hieroglyphs_property regexp_meta_sequence_escape + regexp_miao_nonproperty + regexp_miao_property + regexp_modi_nonproperty + regexp_modi_property + regexp_modifier_letter_nonproperty + regexp_modifier_letter_property + regexp_modifier_symbol_nonproperty + regexp_modifier_symbol_property + regexp_mongolian_nonproperty + regexp_mongolian_property + regexp_mro_nonproperty + regexp_mro_property + regexp_multani_nonproperty + regexp_multani_property + regexp_myanmar_nonproperty + regexp_myanmar_property + regexp_nabataean_nonproperty + regexp_nabataean_property regexp_name_call_backref regexp_named_group + regexp_nandinagari_nonproperty + regexp_nandinagari_property + regexp_new_tai_lue_nonproperty + regexp_new_tai_lue_property + regexp_newa_nonproperty + regexp_newa_property regexp_newline_escape + regexp_nko_nonproperty + regexp_nko_property regexp_nlookahead_assertion regexp_nlookbehind_assertion + regexp_noncharacter_code_point_nonproperty + regexp_noncharacter_code_point_property regexp_nondigit_type regexp_nonhex_type regexp_nonspace_type + regexp_nonspacing_mark_nonproperty + regexp_nonspacing_mark_property regexp_nonword_boundary_anchor regexp_nonword_type regexp_number_backref + regexp_number_nonproperty + regexp_number_property + regexp_nushu_nonproperty + regexp_nushu_property + regexp_nyiakeng_puachue_hmong_nonproperty + regexp_nyiakeng_puachue_hmong_property regexp_octal_escape + regexp_ogham_nonproperty + regexp_ogham_property + regexp_ol_chiki_nonproperty + regexp_ol_chiki_property + regexp_old_hungarian_nonproperty + regexp_old_hungarian_property + regexp_old_italic_nonproperty + regexp_old_italic_property + regexp_old_north_arabian_nonproperty + regexp_old_north_arabian_property + regexp_old_permic_nonproperty + regexp_old_permic_property + regexp_old_persian_nonproperty + regexp_old_persian_property + regexp_old_sogdian_nonproperty + regexp_old_sogdian_property + regexp_old_south_arabian_nonproperty + regexp_old_south_arabian_property + regexp_old_turkic_nonproperty + regexp_old_turkic_property regexp_one_or_more_escape regexp_open_conditional + regexp_open_punctuation_nonproperty + regexp_open_punctuation_property regexp_options_group regexp_options_switch_group + regexp_oriya_nonproperty + regexp_oriya_property + regexp_osage_nonproperty + regexp_osage_property + regexp_osmanya_nonproperty + regexp_osmanya_property + regexp_other_alphabetic_nonproperty + regexp_other_alphabetic_property + regexp_other_default_ignorable_code_point_nonproperty + regexp_other_default_ignorable_code_point_property + regexp_other_grapheme_extend_nonproperty + regexp_other_grapheme_extend_property + regexp_other_id_continue_nonproperty + regexp_other_id_continue_property + regexp_other_id_start_nonproperty + regexp_other_id_start_property + regexp_other_letter_nonproperty + regexp_other_letter_property + regexp_other_lowercase_nonproperty + regexp_other_lowercase_property + regexp_other_math_nonproperty + regexp_other_math_property + regexp_other_nonproperty + regexp_other_number_nonproperty + regexp_other_number_property + regexp_other_property + regexp_other_punctuation_nonproperty + regexp_other_punctuation_property + regexp_other_symbol_nonproperty + regexp_other_symbol_property + regexp_other_uppercase_nonproperty + regexp_other_uppercase_property + regexp_pahawh_hmong_nonproperty + regexp_pahawh_hmong_property + regexp_palmyrene_nonproperty + regexp_palmyrene_property + regexp_paragraph_separator_nonproperty + regexp_paragraph_separator_property regexp_passive_group + regexp_pattern_syntax_nonproperty + regexp_pattern_syntax_property + regexp_pattern_white_space_nonproperty + regexp_pattern_white_space_property + regexp_pau_cin_hau_nonproperty + regexp_pau_cin_hau_property + regexp_phags_pa_nonproperty + regexp_phags_pa_property + regexp_phoenician_nonproperty + regexp_phoenician_property regexp_possessive_interval regexp_possessive_one_or_more regexp_possessive_zero_or_more regexp_possessive_zero_or_one + regexp_prepended_concatenation_mark_nonproperty + regexp_prepended_concatenation_mark_property regexp_print_nonposixclass regexp_print_nonproperty + regexp_print_nonproperty regexp_print_posixclass regexp_print_posixclass regexp_print_property + regexp_print_property + regexp_private_use_nonproperty + regexp_private_use_property + regexp_psalter_pahlavi_nonproperty + regexp_psalter_pahlavi_property + regexp_punct_nonproperty regexp_punct_posixclass + regexp_punct_property + regexp_punctuation_nonproperty + regexp_punctuation_property + regexp_quotation_mark_nonproperty + regexp_quotation_mark_property + regexp_radical_nonproperty + regexp_radical_property regexp_range_set + regexp_regional_indicator_nonproperty + regexp_regional_indicator_property + regexp_rejang_nonproperty + regexp_rejang_property regexp_reluctant_interval regexp_reluctant_one_or_more regexp_reluctant_zero_or_more regexp_root_expression + regexp_runic_nonproperty + regexp_runic_property + regexp_samaritan_nonproperty + regexp_samaritan_property + regexp_saurashtra_nonproperty + regexp_saurashtra_property + regexp_sentence_terminal_nonproperty + regexp_sentence_terminal_property + regexp_separator_nonproperty + regexp_separator_property regexp_sequence_expression regexp_set_close_escape regexp_set_open_escape + regexp_sharada_nonproperty + regexp_sharada_property + regexp_shavian_nonproperty + regexp_shavian_property + regexp_siddham_nonproperty + regexp_siddham_property + regexp_signwriting_nonproperty + regexp_signwriting_property + regexp_sinhala_nonproperty + regexp_sinhala_property + regexp_soft_dotted_nonproperty + regexp_soft_dotted_property + regexp_sogdian_nonproperty + regexp_sogdian_property + regexp_sora_sompeng_nonproperty + regexp_sora_sompeng_property + regexp_soyombo_nonproperty + regexp_soyombo_property + regexp_space_nonproperty regexp_space_posixclass + regexp_space_property + regexp_space_separator_nonproperty + regexp_space_separator_property regexp_space_type + regexp_spacing_mark_nonproperty + regexp_spacing_mark_property + regexp_sundanese_nonproperty + regexp_sundanese_property + regexp_surrogate_nonproperty + regexp_surrogate_property + regexp_syloti_nagri_nonproperty + regexp_syloti_nagri_property + regexp_symbol_nonproperty + regexp_symbol_property + regexp_syriac_nonproperty + regexp_syriac_property regexp_tab_escape + regexp_tagalog_nonproperty + regexp_tagalog_property + regexp_tagbanwa_nonproperty + regexp_tagbanwa_property + regexp_tai_le_nonproperty + regexp_tai_le_property + regexp_tai_tham_nonproperty + regexp_tai_tham_property + regexp_tai_viet_nonproperty + regexp_tai_viet_property + regexp_takri_nonproperty + regexp_takri_property + regexp_tamil_nonproperty + regexp_tamil_property + regexp_tangut_nonproperty + regexp_tangut_property + regexp_telugu_nonproperty + regexp_telugu_property + regexp_terminal_punctuation_nonproperty + regexp_terminal_punctuation_property + regexp_thaana_nonproperty + regexp_thaana_property + regexp_thai_nonproperty + regexp_thai_property + regexp_tibetan_nonproperty + regexp_tibetan_property + regexp_tifinagh_nonproperty + regexp_tifinagh_property + regexp_tirhuta_nonproperty + regexp_tirhuta_property + regexp_titlecase_letter_nonproperty + regexp_titlecase_letter_property + regexp_ugaritic_nonproperty + regexp_ugaritic_property + regexp_unassigned_nonproperty + regexp_unassigned_property + regexp_unified_ideograph_nonproperty + regexp_unified_ideograph_property + regexp_unknown_nonproperty + regexp_unknown_property + regexp_upper_nonproperty regexp_upper_posixclass + regexp_upper_property + regexp_uppercase_letter_nonproperty + regexp_uppercase_letter_property + regexp_uppercase_nonproperty + regexp_uppercase_property + regexp_vai_nonproperty + regexp_vai_property + regexp_variation_selector_nonproperty + regexp_variation_selector_property regexp_vertical_tab_escape + regexp_wancho_nonproperty + regexp_wancho_property + regexp_warang_citi_nonproperty + regexp_warang_citi_property + regexp_white_space_nonproperty + regexp_white_space_property regexp_whitespace_free_space regexp_word_boundary_anchor + regexp_word_nonproperty regexp_word_posixclass + regexp_word_property regexp_word_type + regexp_xdigit_nonproperty regexp_xdigit_posixclass + regexp_xdigit_property regexp_xgrapheme_type + regexp_xid_continue_nonproperty + regexp_xid_continue_property + regexp_xid_start_nonproperty + regexp_xid_start_property + regexp_xposixpunct_nonproperty + regexp_xposixpunct_property + regexp_yi_nonproperty + regexp_yi_property + regexp_zanabazar_square_nonproperty + regexp_zanabazar_square_property regexp_zero_or_more_escape regexp_zero_or_one_escape ]).freeze diff --git a/meta/regexp/regexp_latin_property.rb b/meta/regexp/regexp_latin_property.rb index e32ac1b12..9dc6d9315 100644 --- a/meta/regexp/regexp_latin_property.rb +++ b/meta/regexp/regexp_latin_property.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Mutant::Meta::Example.add :regexp, :regexp_latin_property do - source('/p{Latin}/') + source('/p{latin}/') singleton_mutations regexp_mutations diff --git a/spec/unit/mutant/ast/regexp_spec.rb b/spec/unit/mutant/ast/regexp_spec.rb index e2ab5c9a8..7ca238552 100644 --- a/spec/unit/mutant/ast/regexp_spec.rb +++ b/spec/unit/mutant/ast/regexp_spec.rb @@ -85,7 +85,7 @@ def self.expect_mapping(regexp, type, &block) s(:regexp_literal_literal, 'A')) end -RegexpSpec.expect_mapping(/\p{Alpha}/, :regexp_alpha_property) do +RegexpSpec.expect_mapping(/\p{alpha}/, :regexp_alpha_property) do s(:regexp_root_expression, s(:regexp_alpha_property)) end @@ -414,7 +414,7 @@ def self.expect_mapping(regexp, type, &block) s(:regexp_interval_open_escape)) end -RegexpSpec.expect_mapping(/\p{L}/, :regexp_letter_property) do +RegexpSpec.expect_mapping(/\p{letter}/, :regexp_letter_property) do s(:regexp_root_expression, s(:regexp_letter_property)) end @@ -602,7 +602,7 @@ def self.expect_mapping(regexp, type, &block) s(:regexp_dot_meta))) end -RegexpSpec.expect_mapping(/\P{Print}/, :regexp_print_nonproperty) do +RegexpSpec.expect_mapping(/\P{print}/, :regexp_print_nonproperty) do s(:regexp_root_expression, s(:regexp_print_nonproperty)) end @@ -637,32 +637,32 @@ def self.expect_mapping(regexp, type, &block) s(:regexp_dot_meta))) end -RegexpSpec.expect_mapping(/\p{Arabic}/, :regexp_arabic_property) do +RegexpSpec.expect_mapping(/\p{arabic}/, :regexp_arabic_property) do s(:regexp_root_expression, s(:regexp_arabic_property)) end -RegexpSpec.expect_mapping(/\p{Han}/, :regexp_han_property) do +RegexpSpec.expect_mapping(/\p{han}/, :regexp_han_property) do s(:regexp_root_expression, s(:regexp_han_property)) end -RegexpSpec.expect_mapping(/\p{Hangul}/, :regexp_hangul_property) do +RegexpSpec.expect_mapping(/\p{hangul}/, :regexp_hangul_property) do s(:regexp_root_expression, s(:regexp_hangul_property)) end -RegexpSpec.expect_mapping(/\p{Hiragana}/, :regexp_hiragana_property) do +RegexpSpec.expect_mapping(/\p{hiragana}/, :regexp_hiragana_property) do s(:regexp_root_expression, s(:regexp_hiragana_property)) end -RegexpSpec.expect_mapping(/\p{Latin}/, :regexp_latin_property) do +RegexpSpec.expect_mapping(/\p{latin}/, :regexp_latin_property) do s(:regexp_root_expression, s(:regexp_latin_property)) end -RegexpSpec.expect_mapping(/\p{Katakana}/, :regexp_katakana_property) do +RegexpSpec.expect_mapping(/\p{katakana}/, :regexp_katakana_property) do s(:regexp_root_expression, s(:regexp_katakana_property)) end