19 #ifndef NUSPELL_CHECKER_HXX
20 #define NUSPELL_CHECKER_HXX
22 #include "aff_data.hxx"
25 NUSPELL_BEGIN_INLINE_NAMESPACE
35 Word_List::const_pointer root_word = {};
37 operator Word_List::const_pointer()
const {
return root_word; }
38 auto& operator*()
const {
return *root_word; }
39 auto operator->()
const {
return root_word; }
42 template <
class T1 =
void,
class T2 =
void>
73 Word_List::const_pointer word_entry = {};
74 unsigned char num_words_modifier = {};
75 signed char num_syllable_modifier = {};
77 operator Word_List::const_pointer()
const {
return word_entry; }
78 auto& operator*()
const {
return *word_entry; }
79 auto operator->()
const {
return word_entry; }
83 enum Forceucase :
bool {
84 FORBID_BAD_FORCEUCASE =
false,
85 ALLOW_BAD_FORCEUCASE =
true
88 enum Hidden_Homonym :
bool {
89 ACCEPT_HIDDEN_HOMONYM =
false,
90 SKIP_HIDDEN_HOMONYM =
true
96 auto spell_priv(std::string& s)
const -> bool;
97 auto spell_break(std::string& s,
size_t depth = 0)
const -> bool;
98 auto spell_casing(std::string& s)
const ->
const Flag_Set*;
99 auto spell_casing_upper(std::string& s)
const ->
const Flag_Set*;
100 auto spell_casing_title(std::string& s)
const ->
const Flag_Set*;
101 auto spell_sharps(std::string& base,
size_t n_pos = 0,
size_t n = 0,
102 size_t rep = 0)
const ->
const Flag_Set*;
104 auto check_word(std::string& s, Forceucase allow_bad_forceucase = {},
105 Hidden_Homonym skip_hidden_homonym = {})
const
107 auto check_simple_word(std::string& word,
108 Hidden_Homonym skip_hidden_homonym = {})
const
111 template <Affixing_Mode m>
112 auto affix_NOT_valid(
const Prefix& a)
const;
113 template <Affixing_Mode m>
114 auto affix_NOT_valid(
const Suffix& a)
const;
115 template <Affixing_Mode m,
class AffixT>
116 auto outer_affix_NOT_valid(
const AffixT& a)
const;
117 template <
class AffixT>
118 auto is_circumfix(
const AffixT& a)
const;
119 template <Affixing_Mode m>
120 auto is_valid_inside_compound(
const Flag_Set& flags)
const;
122 template <Affixing_Mode m = FULL_WORD>
123 auto strip_prefix_only(std::string& s,
124 Hidden_Homonym skip_hidden_homonym = {})
const
127 template <Affixing_Mode m = FULL_WORD>
128 auto strip_suffix_only(std::string& s,
129 Hidden_Homonym skip_hidden_homonym = {})
const
132 template <Affixing_Mode m = FULL_WORD>
134 strip_prefix_then_suffix(std::string& s,
135 Hidden_Homonym skip_hidden_homonym = {})
const
138 template <Affixing_Mode m>
139 auto strip_pfx_then_sfx_2(
const Prefix& pe, std::string& s,
140 Hidden_Homonym skip_hidden_homonym)
const
143 template <Affixing_Mode m = FULL_WORD>
145 strip_suffix_then_prefix(std::string& s,
146 Hidden_Homonym skip_hidden_homonym = {})
const
149 template <Affixing_Mode m>
150 auto strip_sfx_then_pfx_2(
const Suffix& se, std::string& s,
151 Hidden_Homonym skip_hidden_homonym)
const
154 template <Affixing_Mode m = FULL_WORD>
155 auto strip_prefix_then_suffix_commutative(
156 std::string& word, Hidden_Homonym skip_hidden_homonym = {})
const
159 template <Affixing_Mode m = FULL_WORD>
160 auto strip_pfx_then_sfx_comm_2(
const Prefix& pe, std::string& word,
161 Hidden_Homonym skip_hidden_homonym)
const
164 template <Affixing_Mode m = FULL_WORD>
166 strip_suffix_then_suffix(std::string& s,
167 Hidden_Homonym skip_hidden_homonym = {})
const
170 template <Affixing_Mode m>
171 auto strip_sfx_then_sfx_2(
const Suffix& se1, std::string& s,
172 Hidden_Homonym skip_hidden_homonym)
const
175 template <Affixing_Mode m = FULL_WORD>
177 strip_prefix_then_prefix(std::string& s,
178 Hidden_Homonym skip_hidden_homonym = {})
const
181 template <Affixing_Mode m>
182 auto strip_pfx_then_pfx_2(
const Prefix& pe1, std::string& s,
183 Hidden_Homonym skip_hidden_homonym)
const
186 template <Affixing_Mode m = FULL_WORD>
187 auto strip_prefix_then_2_suffixes(
188 std::string& s, Hidden_Homonym skip_hidden_homonym = {})
const
191 template <Affixing_Mode m>
192 auto strip_pfx_2_sfx_3(
const Prefix& pe1,
const Suffix& se1,
194 Hidden_Homonym skip_hidden_homonym)
const
197 template <Affixing_Mode m = FULL_WORD>
198 auto strip_suffix_prefix_suffix(
199 std::string& s, Hidden_Homonym skip_hidden_homonym = {})
const
202 template <Affixing_Mode m>
203 auto strip_s_p_s_3(
const Suffix& se1,
const Prefix& pe1,
205 Hidden_Homonym skip_hidden_homonym)
const
208 template <Affixing_Mode m = FULL_WORD>
209 auto strip_2_suffixes_then_prefix(
210 std::string& s, Hidden_Homonym skip_hidden_homonym = {})
const
213 template <Affixing_Mode m>
214 auto strip_2_sfx_pfx_3(
const Suffix& se1,
const Suffix& se2,
216 Hidden_Homonym skip_hidden_homonym)
const
219 template <Affixing_Mode m = FULL_WORD>
220 auto strip_suffix_then_2_prefixes(
221 std::string& s, Hidden_Homonym skip_hidden_homonym = {})
const
224 template <Affixing_Mode m>
225 auto strip_sfx_2_pfx_3(
const Suffix& se1,
const Prefix& pe1,
227 Hidden_Homonym skip_hidden_homonym)
const
230 template <Affixing_Mode m = FULL_WORD>
231 auto strip_prefix_suffix_prefix(
232 std::string& word, Hidden_Homonym skip_hidden_homonym = {})
const
235 template <Affixing_Mode m>
236 auto strip_p_s_p_3(
const Prefix& pe1,
const Suffix& se1,
238 Hidden_Homonym skip_hidden_homonym)
const
241 template <Affixing_Mode m = FULL_WORD>
242 auto strip_2_prefixes_then_suffix(
243 std::string& word, Hidden_Homonym skip_hidden_homonym = {})
const
246 template <Affixing_Mode m>
247 auto strip_2_pfx_sfx_3(
const Prefix& pe1,
const Prefix& pe2,
249 Hidden_Homonym skip_hidden_homonym)
const
252 auto check_compound(std::string& word,
253 Forceucase allow_bad_forceucase)
const
256 template <Affixing_Mode m = AT_COMPOUND_BEGIN>
257 auto check_compound(std::string& word,
size_t start_pos,
258 size_t num_part, std::string& part,
259 Forceucase allow_bad_forceucase)
const
262 template <Affixing_Mode m = AT_COMPOUND_BEGIN>
263 auto check_compound_classic(std::string& word,
size_t start_pos,
264 size_t i,
size_t num_part,
266 Forceucase allow_bad_forceucase)
const
269 template <Affixing_Mode m = AT_COMPOUND_BEGIN>
270 auto check_compound_with_pattern_replacements(
271 std::string& word,
size_t start_pos,
size_t i,
size_t num_part,
272 std::string& part, Forceucase allow_bad_forceucase)
const
275 template <Affixing_Mode m>
278 auto calc_num_words_modifier(
const Prefix& pfx)
const ->
unsigned char;
280 template <Affixing_Mode m>
281 auto calc_syllable_modifier(Word_List::const_reference we)
const
284 template <Affixing_Mode m>
285 auto calc_syllable_modifier(Word_List::const_reference we,
286 const Suffix& sfx)
const ->
signed char;
288 auto count_syllables(std::string_view word)
const -> size_t;
290 auto check_compound_with_rules(std::string& word,
291 std::vector<const Flag_Set*>& words_data,
292 size_t start_pos, std::string& part,
293 Forceucase allow_bad_forceucase)
const
296 auto is_rep_similar(std::string& word)
const -> bool;
299 template <Affixing_Mode m>
300 auto Checker::affix_NOT_valid(
const Prefix& e)
const
302 if (m == FULL_WORD && e.cont_flags.contains(compound_onlyin_flag))
304 if (m == AT_COMPOUND_END &&
305 !e.cont_flags.contains(compound_permit_flag))
307 if (m != FULL_WORD && e.cont_flags.contains(compound_forbid_flag))
311 template <Affixing_Mode m>
312 auto Checker::affix_NOT_valid(
const Suffix& e)
const
314 if (m == FULL_WORD && e.cont_flags.contains(compound_onlyin_flag))
316 if (m == AT_COMPOUND_BEGIN &&
317 !e.cont_flags.contains(compound_permit_flag))
319 if (m != FULL_WORD && e.cont_flags.contains(compound_forbid_flag))
323 template <Affixing_Mode m,
class AffixT>
324 auto Checker::outer_affix_NOT_valid(
const AffixT& e)
const
326 if (affix_NOT_valid<m>(e))
328 if (e.cont_flags.contains(need_affix_flag))
332 template <
class AffixT>
333 auto Checker::is_circumfix(
const AffixT& a)
const
335 return a.cont_flags.contains(circumfix_flag);
338 template <
class AffixInner,
class AffixOuter>
339 auto cross_valid_inner_outer(
const AffixInner& inner,
const AffixOuter& outer)
341 return inner.cont_flags.contains(outer.flag);
344 template <
class Affix>
345 auto cross_valid_inner_outer(
const Flag_Set& word_flags,
const Affix& afx)
347 return word_flags.contains(afx.flag);
350 NUSPELL_END_INLINE_NAMESPACE
Library main namespace.
Definition: aff_data.cxx:33
Definition: aff_data.hxx:88
Definition: checker.hxx:34
Definition: checker.hxx:43
Definition: checker.hxx:82
Definition: checker.hxx:72
bool affixed_and_modified
Definition: checker.hxx:76
Definition: structures.hxx:803
Definition: structures.hxx:839