1 /* 2 * Copyright © 2019-today Peter M. Stahl pemistahl@gmail.com 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expressed or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #![allow(deprecated)] 18 19 use crate::regexp::Feature; 20 21 #[derive(Clone, Debug, Hash, Ord, PartialOrd, Eq, PartialEq)] 22 pub struct RegExpConfig { 23 pub(crate) conversion_features: Vec<Feature>, 24 pub(crate) minimum_repetitions: u32, 25 pub(crate) minimum_substring_length: u32, 26 pub(crate) is_digit_converted: bool, 27 pub(crate) is_non_digit_converted: bool, 28 pub(crate) is_space_converted: bool, 29 pub(crate) is_non_space_converted: bool, 30 pub(crate) is_word_converted: bool, 31 pub(crate) is_non_word_converted: bool, 32 pub(crate) is_repetition_converted: bool, 33 pub(crate) is_case_insensitive_matching: bool, 34 pub(crate) is_capturing_group_enabled: bool, 35 pub(crate) is_non_ascii_char_escaped: bool, 36 pub(crate) is_astral_code_point_converted_to_surrogate: bool, 37 pub(crate) is_verbose_mode_enabled: bool, 38 pub(crate) is_start_anchor_disabled: bool, 39 pub(crate) is_end_anchor_disabled: bool, 40 pub(crate) is_output_colorized: bool, 41 } 42 43 impl RegExpConfig { new() -> Self44 pub(crate) fn new() -> Self { 45 Self { 46 conversion_features: vec![], 47 minimum_repetitions: 1, 48 minimum_substring_length: 1, 49 is_digit_converted: false, 50 is_non_digit_converted: false, 51 is_space_converted: false, 52 is_non_space_converted: false, 53 is_word_converted: false, 54 is_non_word_converted: false, 55 is_repetition_converted: false, 56 is_case_insensitive_matching: false, 57 is_capturing_group_enabled: false, 58 is_non_ascii_char_escaped: false, 59 is_astral_code_point_converted_to_surrogate: false, 60 is_verbose_mode_enabled: false, 61 is_start_anchor_disabled: false, 62 is_end_anchor_disabled: false, 63 is_output_colorized: false, 64 } 65 } 66 is_digit_converted(&self) -> bool67 pub(crate) fn is_digit_converted(&self) -> bool { 68 self.is_digit_converted || self.conversion_features.contains(&Feature::Digit) 69 } 70 is_non_digit_converted(&self) -> bool71 pub(crate) fn is_non_digit_converted(&self) -> bool { 72 self.is_non_digit_converted || self.conversion_features.contains(&Feature::NonDigit) 73 } 74 is_space_converted(&self) -> bool75 pub(crate) fn is_space_converted(&self) -> bool { 76 self.is_space_converted || self.conversion_features.contains(&Feature::Space) 77 } 78 is_non_space_converted(&self) -> bool79 pub(crate) fn is_non_space_converted(&self) -> bool { 80 self.is_non_space_converted || self.conversion_features.contains(&Feature::NonSpace) 81 } 82 is_word_converted(&self) -> bool83 pub(crate) fn is_word_converted(&self) -> bool { 84 self.is_word_converted || self.conversion_features.contains(&Feature::Word) 85 } 86 is_non_word_converted(&self) -> bool87 pub(crate) fn is_non_word_converted(&self) -> bool { 88 self.is_non_word_converted || self.conversion_features.contains(&Feature::NonWord) 89 } 90 is_repetition_converted(&self) -> bool91 pub(crate) fn is_repetition_converted(&self) -> bool { 92 self.is_repetition_converted || self.conversion_features.contains(&Feature::Repetition) 93 } 94 is_case_insensitive_matching(&self) -> bool95 pub(crate) fn is_case_insensitive_matching(&self) -> bool { 96 self.is_case_insensitive_matching 97 || self 98 .conversion_features 99 .contains(&Feature::CaseInsensitivity) 100 } 101 is_capturing_group_enabled(&self) -> bool102 pub(crate) fn is_capturing_group_enabled(&self) -> bool { 103 self.is_capturing_group_enabled 104 || self.conversion_features.contains(&Feature::CapturingGroup) 105 } 106 is_char_class_feature_enabled(&self) -> bool107 pub(crate) fn is_char_class_feature_enabled(&self) -> bool { 108 self.is_digit_converted 109 || self.is_non_digit_converted 110 || self.is_space_converted 111 || self.is_non_space_converted 112 || self.is_word_converted 113 || self.is_non_word_converted 114 || self.is_case_insensitive_matching 115 || self.is_capturing_group_enabled 116 || self.conversion_features.iter().any(|it| it.is_char_class()) 117 } 118 } 119