Rune Caster 1.0.0
Modern C++ Text Processing Framework
Loading...
Searching...
No Matches
spell_filter.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "spell_base.hpp"
4#include "unicode.hpp"
5#include <vector>
6#include "rune_sequence.hpp"
7
8namespace rune_caster {
9
10namespace spell {
11namespace filter {
12
20private:
21 std::vector<unicode::Category> filtered_categories_;
22 bool remove_mode_; // true = remove, false = keep only
23
24public:
27
33 explicit CategoryFilter(std::vector<unicode::Category> categories, bool remove = true);
34
35 RuneSequence operator()(const RuneSequence& input) const override;
36 std::string description() const override;
37 std::string name() const override { return "CategoryFilter"; }
38
43 const std::vector<unicode::Category>& filtered_categories() const noexcept {
44 return filtered_categories_;
45 }
46
51 bool is_remove_mode() const noexcept { return remove_mode_; }
52};
53
61private:
62 std::vector<unicode::Script> filtered_scripts_;
63 bool remove_mode_; // true = remove, false = keep only
64
65public:
68
74 explicit ScriptFilter(std::vector<unicode::Script> scripts, bool remove = true);
75
76 RuneSequence operator()(const RuneSequence& input) const override;
77 std::string description() const override;
78 std::string name() const override { return "ScriptFilter"; }
79
84 const std::vector<unicode::Script>& filtered_scripts() const noexcept {
85 return filtered_scripts_;
86 }
87
92 bool is_remove_mode() const noexcept { return remove_mode_; }
93};
94
102private:
103 bool remove_mode_; // true = remove punctuation, false = keep only punctuation
104
105public:
108
109 explicit PunctuationFilter(bool remove = true) : remove_mode_(remove) {}
110
111 RuneSequence operator()(const RuneSequence& input) const override;
112
113 std::string description() const override {
114 return remove_mode_ ? "Remove punctuation" : "Keep only punctuation";
115 }
116
117 std::string name() const override { return "PunctuationFilter"; }
118
119 bool is_remove_mode() const noexcept { return remove_mode_; }
120};
121
122} // namespace filter
123
124// Import commonly used filters
125using filter::CategoryFilter;
126using filter::ScriptFilter;
127using filter::PunctuationFilter;
128
129} // namespace spell
130} // namespace rune_caster
CategoryFilter(std::vector< unicode::Category > categories, bool remove=true)
Construct a CategoryFilter.
bool is_remove_mode() const noexcept
Check if this filter is in remove mode.
std::string name() const override
Get the spell's name.
CategoryFilter(std::vector< unicode::Category > categories, bool remove=true)
Construct a CategoryFilter.
RuneSequence operator()(const RuneSequence &input) const override
Apply the spell transformation.
const std::vector< unicode::Category > & filtered_categories() const noexcept
Get the filtered categories.
std::string description() const override
Get the spell's description.
std::string name() const override
Get the spell's name.
RuneSequence operator()(const RuneSequence &input) const override
Apply the spell transformation.
std::string description() const override
Get the spell's description.
ScriptFilter(std::vector< unicode::Script > scripts, bool remove=true)
Construct a ScriptFilter.
bool is_remove_mode() const noexcept
Check if this filter is in remove mode.
const std::vector< unicode::Script > & filtered_scripts() const noexcept
Get the filtered scripts.
std::string name() const override
Get the spell's name.
std::string description() const override
Get the spell's description.
RuneSequence operator()(const RuneSequence &input) const override
Apply the spell transformation.
RuneString RuneSequence
Backward compatibility alias for RuneString.
spell_base< RuneSequence > sequence_spell
Most common spell type: RuneSequence -> RuneSequence.