From f3add81d7c3790c383da35f12967125056f2b2fa Mon Sep 17 00:00:00 2001 From: xintongmi Date: Wed, 11 Jun 2025 11:19:45 -0700 Subject: [PATCH 1/4] remove the extra non-capturing group that causes nested repeat operator warnings --- lib/language_filter.rb | 44 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/language_filter.rb b/lib/language_filter.rb index e48b1d5..e360938 100644 --- a/lib/language_filter.rb +++ b/lib/language_filter.rb @@ -186,28 +186,28 @@ def use_creative_letters(text) if last_char != '\\' # new_text += '[\\-_\\s\\*\\.\\,\\`\\:\\\']*' if last_char != "" and char =~ /[A-Za-z]/ and first_char_done new_text += case char.downcase - when 'a' then first_char_done = true; '(?:(?:a|@|4|\\^|/\\\\|/\\-\\\\|aye?)+)' - when 'b' then first_char_done = true; '(?:(?:b|i3|l3|13|\\|3|/3|\\\\3|3|8|6|\\u00df|p\\>|\\|\\:|[^a-z]bee+[^a-z])+)' - when 'c','k' then first_char_done = true; '(?:(?:c|\\u00a9|\\u00a2|\\(|\\[|[^a-z]cee+[^a-z]|[^a-z]see+[^a-z]|k|x|[\\|\\[\\]\\)\\(li1\\!\\u00a1][\\<\\{\\(]|[^a-z][ck]ay+[^a-z])+)' - when 'd' then first_char_done = true; '(?:(?:d|\\)|\\|\\)|\\[\\)|\\?|\\|\\>|\\|o|[^a-z]dee+[^a-z])+)' - when 'e' then first_char_done = true; '(?:(?:e|3|\\&|\\u20ac|\\u00eb|\\[\\-)+)' - when 'f' then first_char_done = true; '(?:(?:f|ph|\\u0192|[\\|\\}\\{\\\\/\\(\\)\\[\\]1il\\!][\\=\\#]|[^a-z]ef+[^a-z])+)' - when 'g' then first_char_done = true; '(?:(?:g|6|9|\\&|c\\-|\\(_\\+|[^a-z]gee+[^a-z])+)' - when 'h' then first_char_done = true; '(?:(?:h|\\#|[\\|\\}\\{\\\\/\\(\\)\\[\\]]\\-?[\\|\\}\\{\\\\/\\(\\)\\[\\]])+)' - when 'i','l' then first_char_done = true; '(?:(?:i|l|1|\\!|\\u00a1|\\||\\]|\\[|\\\\|/|[^a-z]eye[^a-z]|\\u00a3|[\\|li1\\!\\u00a1\\[\\]\\(\\)\\{\\}]_|\\u00ac|[^a-z]el+[^a-z]))' - when 'j' then first_char_done = true; '(?:(?:j|\\]|\\u00bf|_\\||_/|\\]\\\\[\\|/\\[\\]\\<\\>]|/v|\\^/|[^a-z]en+[^a-z])+)' - when 'o' then first_char_done = true; '(?:(?:o|0|\\(\\)|\\[\\]|\\u00b0|[^a-z]oh+[^a-z])+)' - when 'p' then first_char_done = true; '(?:(?:p|\\u00b6|[\\|li1\\[\\]\\!\\u00a1/\\\\][\\*o\\u00b0\\"\\>7\\^]|[^a-z]pee+[^a-z])+)' - when 'q' then first_char_done = true; '(?:(?:q|9|(?:0|\\(\\)|\\[\\])_|\\(_\\,\\)|\\<\\||[^a-z][ck]ue*|qu?eue*[^a-z])+)' - when 'r' then first_char_done = true; '(?:(?:r|[/1\\|li]?[2\\^\\?z]|\\u00ae|[^a-z]ar+[^a-z])+)' - when 's','z' then first_char_done = true; '(?:(?:s|\\$|5|\\u00a7|[^a-z]es+[^a-z]|z|2|7_|\\~/_|\\>_|\\%|[^a-z]zee+[^a-z])+)' - when 't' then first_char_done = true; '(?:(?:t|7|\\+|\\u2020|\\-\\|\\-|\\\'\\]\\[\\\')+)' - when 'u','v' then first_char_done = true; '(?:(?:u|v|\\u00b5|[\\|\\(\\)\\[\\]\\{\\}]_[\\|\\(\\)\\[\\]\\{\\}]|\\L\\||\\/|[^a-z]you[^a-z]|[^a-z]yoo+[^a-z]|[^a-z]vee+[^a-z]))' - when 'w' then first_char_done = true; '(?:(?:w|vv|\\\\/\\\\/|\\\\\\|/|\\\\\\\\\\\'|\\\'//|\\\\\\^/|\\(n\\)|[^a-z]do?u+b+l+e*[^a-z]?(?:u+|you|yoo+)[^a-z])+)' - when 'x' then first_char_done = true; '(?:(?:x|\\>\\<|\\%|\\*|\\}\\{|\\)\\(|[^a-z]e[ck]+s+[^a-z]|[^a-z]ex+[^a-z])+)' - when 'y' then first_char_done = true; '(?:(?:y|\\u00a5|j|\\\'/|[^a-z]wh?(?:y+|ie+)[^a-z])+)' + when 'a' then first_char_done = true; '(?:a|@|4|\\^|/\\\\|/\\-\\\\|aye?)' + when 'b' then first_char_done = true; '(?:b|i3|l3|13|\\|3|/3|\\\\3|3|8|6|\\u00df|p\\>|\\|\\:|[^a-z]bee+[^a-z])' + when 'c','k' then first_char_done = true; '(?:c|\\u00a9|\\u00a2|\\(|\\[|[^a-z]cee+[^a-z]|[^a-z]see+[^a-z]|k|x|[\\|\\[\\]\\)\\(li1\\!\\u00a1][\\<\\{\\(]|[^a-z][ck]ay+[^a-z])' + when 'd' then first_char_done = true; '(?:d|\\)|\\|\\)|\\[\\)|\\?|\\|\\>|\\|o|[^a-z]dee+[^a-z])' + when 'e' then first_char_done = true; '(?:e|3|\\&|\\u20ac|\\u00eb|\\[\\-)' + when 'f' then first_char_done = true; '(?:f|ph|\\u0192|[\\|\\}\\{\\\\/\\(\\)\\[\\]1il\\!][\\=\\#]|[^a-z]ef+[^a-z])' + when 'g' then first_char_done = true; '(?:g|6|9|\\&|c\\-|\\(_\\+|[^a-z]gee+[^a-z])' + when 'h' then first_char_done = true; '(?:h|\\#|[\\|\\}\\{\\\\/\\(\\)\\[\\]]\\-?[\\|\\}\\{\\\\/\\(\\)\\[\\]])' + when 'i','l' then first_char_done = true; '(?:i|l|1|\\!|\\u00a1|\\||\\]|\\[|\\\\|/|[^a-z]eye[^a-z]|\\u00a3|[\\|li1\\!\\u00a1\\[\\]\\(\\)\\{\\}]_|\\u00ac|[^a-z]el+[^a-z])' + when 'j' then first_char_done = true; '(?:j|\\]|\\u00bf|_\\||_/|\\]\\\\[\\|/\\[\\]\\<\\>]|/v|\\^/|[^a-z]en+[^a-z])' + when 'o' then first_char_done = true; '(?:o|0|\\(\\)|\\[\\]|\\u00b0|[^a-z]oh+[^a-z])' + when 'p' then first_char_done = true; '(?:p|\\u00b6|[\\|li1\\[\\]\\!\\u00a1/\\\\][\\*o\\u00b0\\"\\>7\\^]|[^a-z]pee+[^a-z])' + when 'q' then first_char_done = true; '(?:q|9|(?:0|\\(\\)|\\[\\])_|\\(_\\,\\)|\\<\\||[^a-z][ck]ue*|qu?eue*[^a-z])' + when 'r' then first_char_done = true; '(?:r|[/1\\|li]?[2\\^\\?z]|\\u00ae|[^a-z]ar+[^a-z])' + when 's','z' then first_char_done = true; '(?:s|\\$|5|\\u00a7|[^a-z]es+[^a-z]|z|2|7_|\\~/_|\\>_|\\%|[^a-z]zee+[^a-z])' + when 't' then first_char_done = true; '(?:t|7|\\+|\\u2020|\\-\\|\\-|\\\'\\]\\[\\\')' + when 'u','v' then first_char_done = true; '(?:u|v|\\u00b5|[\\|\\(\\)\\[\\]\\{\\}]_[\\|\\(\\)\\[\\]\\{\\}]|\\L\\||\\/|[^a-z]you[^a-z]|[^a-z]yoo+[^a-z]|[^a-z]vee+[^a-z])' + when 'w' then first_char_done = true; '(?:w|vv|\\\\/\\\\/|\\\\\\|/|\\\\\\\\\\\'|\\\'//|\\\\\\^/|\\(n\\)|[^a-z]do?u+b+l+e*[^a-z]?(?:u+|you|yoo+)[^a-z])' + when 'x' then first_char_done = true; '(?:x|\\>\\<|\\%|\\*|\\}\\{|\\)\\(|[^a-z]e[ck]+s+[^a-z]|[^a-z]ex+[^a-z])' + when 'y' then first_char_done = true; '(?:y|\\u00a5|j|\\\'/|[^a-z]wh?(?:y+|ie+)[^a-z])' else char end elsif char.downcase == 'w' then From 48b6067aa97dd26ba63b1eb14fa8375a777c9cc3 Mon Sep 17 00:00:00 2001 From: xintongmi Date: Wed, 11 Jun 2025 16:36:09 -0700 Subject: [PATCH 2/4] move the fix into a separate module --- lib/language_filter.rb | 47 ++++++++++++++------------- lib/use_createive_letters_patch.rb | 52 ++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 22 deletions(-) create mode 100644 lib/use_createive_letters_patch.rb diff --git a/lib/language_filter.rb b/lib/language_filter.rb index e360938..873341e 100644 --- a/lib/language_filter.rb +++ b/lib/language_filter.rb @@ -3,9 +3,12 @@ require 'pathname' require 'language_filter/error' require 'language_filter/version' +require_relative "language_filter/use_creative_letters_patch" module LanguageFilter class Filter + prepend UseCreativeLettersPatch + attr_accessor :matchlist, :exceptionlist, :replacement, :creative_letters attr_reader :creative_matchlist @@ -186,28 +189,28 @@ def use_creative_letters(text) if last_char != '\\' # new_text += '[\\-_\\s\\*\\.\\,\\`\\:\\\']*' if last_char != "" and char =~ /[A-Za-z]/ and first_char_done new_text += case char.downcase - when 'a' then first_char_done = true; '(?:a|@|4|\\^|/\\\\|/\\-\\\\|aye?)' - when 'b' then first_char_done = true; '(?:b|i3|l3|13|\\|3|/3|\\\\3|3|8|6|\\u00df|p\\>|\\|\\:|[^a-z]bee+[^a-z])' - when 'c','k' then first_char_done = true; '(?:c|\\u00a9|\\u00a2|\\(|\\[|[^a-z]cee+[^a-z]|[^a-z]see+[^a-z]|k|x|[\\|\\[\\]\\)\\(li1\\!\\u00a1][\\<\\{\\(]|[^a-z][ck]ay+[^a-z])' - when 'd' then first_char_done = true; '(?:d|\\)|\\|\\)|\\[\\)|\\?|\\|\\>|\\|o|[^a-z]dee+[^a-z])' - when 'e' then first_char_done = true; '(?:e|3|\\&|\\u20ac|\\u00eb|\\[\\-)' - when 'f' then first_char_done = true; '(?:f|ph|\\u0192|[\\|\\}\\{\\\\/\\(\\)\\[\\]1il\\!][\\=\\#]|[^a-z]ef+[^a-z])' - when 'g' then first_char_done = true; '(?:g|6|9|\\&|c\\-|\\(_\\+|[^a-z]gee+[^a-z])' - when 'h' then first_char_done = true; '(?:h|\\#|[\\|\\}\\{\\\\/\\(\\)\\[\\]]\\-?[\\|\\}\\{\\\\/\\(\\)\\[\\]])' - when 'i','l' then first_char_done = true; '(?:i|l|1|\\!|\\u00a1|\\||\\]|\\[|\\\\|/|[^a-z]eye[^a-z]|\\u00a3|[\\|li1\\!\\u00a1\\[\\]\\(\\)\\{\\}]_|\\u00ac|[^a-z]el+[^a-z])' - when 'j' then first_char_done = true; '(?:j|\\]|\\u00bf|_\\||_/|\\]\\\\[\\|/\\[\\]\\<\\>]|/v|\\^/|[^a-z]en+[^a-z])' - when 'o' then first_char_done = true; '(?:o|0|\\(\\)|\\[\\]|\\u00b0|[^a-z]oh+[^a-z])' - when 'p' then first_char_done = true; '(?:p|\\u00b6|[\\|li1\\[\\]\\!\\u00a1/\\\\][\\*o\\u00b0\\"\\>7\\^]|[^a-z]pee+[^a-z])' - when 'q' then first_char_done = true; '(?:q|9|(?:0|\\(\\)|\\[\\])_|\\(_\\,\\)|\\<\\||[^a-z][ck]ue*|qu?eue*[^a-z])' - when 'r' then first_char_done = true; '(?:r|[/1\\|li]?[2\\^\\?z]|\\u00ae|[^a-z]ar+[^a-z])' - when 's','z' then first_char_done = true; '(?:s|\\$|5|\\u00a7|[^a-z]es+[^a-z]|z|2|7_|\\~/_|\\>_|\\%|[^a-z]zee+[^a-z])' - when 't' then first_char_done = true; '(?:t|7|\\+|\\u2020|\\-\\|\\-|\\\'\\]\\[\\\')' - when 'u','v' then first_char_done = true; '(?:u|v|\\u00b5|[\\|\\(\\)\\[\\]\\{\\}]_[\\|\\(\\)\\[\\]\\{\\}]|\\L\\||\\/|[^a-z]you[^a-z]|[^a-z]yoo+[^a-z]|[^a-z]vee+[^a-z])' - when 'w' then first_char_done = true; '(?:w|vv|\\\\/\\\\/|\\\\\\|/|\\\\\\\\\\\'|\\\'//|\\\\\\^/|\\(n\\)|[^a-z]do?u+b+l+e*[^a-z]?(?:u+|you|yoo+)[^a-z])' - when 'x' then first_char_done = true; '(?:x|\\>\\<|\\%|\\*|\\}\\{|\\)\\(|[^a-z]e[ck]+s+[^a-z]|[^a-z]ex+[^a-z])' - when 'y' then first_char_done = true; '(?:y|\\u00a5|j|\\\'/|[^a-z]wh?(?:y+|ie+)[^a-z])' + when 'a' then first_char_done = true; '(?:(?:a|@|4|\\^|/\\\\|/\\-\\\\|aye?)+)' + when 'b' then first_char_done = true; '(?:(?:b|i3|l3|13|\\|3|/3|\\\\3|3|8|6|\\u00df|p\\>|\\|\\:|[^a-z]bee+[^a-z])+)' + when 'c','k' then first_char_done = true; '(?:(?:c|\\u00a9|\\u00a2|\\(|\\[|[^a-z]cee+[^a-z]|[^a-z]see+[^a-z]|k|x|[\\|\\[\\]\\)\\(li1\\!\\u00a1][\\<\\{\\(]|[^a-z][ck]ay+[^a-z])+)' + when 'd' then first_char_done = true; '(?:(?:d|\\)|\\|\\)|\\[\\)|\\?|\\|\\>|\\|o|[^a-z]dee+[^a-z])+)' + when 'e' then first_char_done = true; '(?:(?:e|3|\\&|\\u20ac|\\u00eb|\\[\\-)+)' + when 'f' then first_char_done = true; '(?:(?:f|ph|\\u0192|[\\|\\}\\{\\\\/\\(\\)\\[\\]1il\\!][\\=\\#]|[^a-z]ef+[^a-z])+)' + when 'g' then first_char_done = true; '(?:(?:g|6|9|\\&|c\\-|\\(_\\+|[^a-z]gee+[^a-z])+)' + when 'h' then first_char_done = true; '(?:(?:h|\\#|[\\|\\}\\{\\\\/\\(\\)\\[\\]]\\-?[\\|\\}\\{\\\\/\\(\\)\\[\\]])+)' + when 'i','l' then first_char_done = true; '(?:(?:i|l|1|\\!|\\u00a1|\\||\\]|\\[|\\\\|/|[^a-z]eye[^a-z]|\\u00a3|[\\|li1\\!\\u00a1\\[\\]\\(\\)\\{\\}]_|\\u00ac|[^a-z]el+[^a-z]))' + when 'j' then first_char_done = true; '(?:(?:j|\\]|\\u00bf|_\\||_/|\\]\\\\[\\|/\\[\\]\\<\\>]|/v|\\^/|[^a-z]en+[^a-z])+)' + when 'o' then first_char_done = true; '(?:(?:o|0|\\(\\)|\\[\\]|\\u00b0|[^a-z]oh+[^a-z])+)' + when 'p' then first_char_done = true; '(?:(?:p|\\u00b6|[\\|li1\\[\\]\\!\\u00a1/\\\\][\\*o\\u00b0\\"\\>7\\^]|[^a-z]pee+[^a-z])+)' + when 'q' then first_char_done = true; '(?:(?:q|9|(?:0|\\(\\)|\\[\\])_|\\(_\\,\\)|\\<\\||[^a-z][ck]ue*|qu?eue*[^a-z])+)' + when 'r' then first_char_done = true; '(?:(?:r|[/1\\|li]?[2\\^\\?z]|\\u00ae|[^a-z]ar+[^a-z])+)' + when 's','z' then first_char_done = true; '(?:(?:s|\\$|5|\\u00a7|[^a-z]es+[^a-z]|z|2|7_|\\~/_|\\>_|\\%|[^a-z]zee+[^a-z])+)' + when 't' then first_char_done = true; '(?:(?:t|7|\\+|\\u2020|\\-\\|\\-|\\\'\\]\\[\\\')+)' + when 'u','v' then first_char_done = true; '(?:(?:u|v|\\u00b5|[\\|\\(\\)\\[\\]\\{\\}]_[\\|\\(\\)\\[\\]\\{\\}]|\\L\\||\\/|[^a-z]you[^a-z]|[^a-z]yoo+[^a-z]|[^a-z]vee+[^a-z]))' + when 'w' then first_char_done = true; '(?:(?:w|vv|\\\\/\\\\/|\\\\\\|/|\\\\\\\\\\\'|\\\'//|\\\\\\^/|\\(n\\)|[^a-z]do?u+b+l+e*[^a-z]?(?:u+|you|yoo+)[^a-z])+)' + when 'x' then first_char_done = true; '(?:(?:x|\\>\\<|\\%|\\*|\\}\\{|\\)\\(|[^a-z]e[ck]+s+[^a-z]|[^a-z]ex+[^a-z])+)' + when 'y' then first_char_done = true; '(?:(?:y|\\u00a5|j|\\\'/|[^a-z]wh?(?:y+|ie+)[^a-z])+)' else char end elsif char.downcase == 'w' then diff --git a/lib/use_createive_letters_patch.rb b/lib/use_createive_letters_patch.rb new file mode 100644 index 0000000..6989a42 --- /dev/null +++ b/lib/use_createive_letters_patch.rb @@ -0,0 +1,52 @@ +# encoding: utf-8 + +require 'pathname' +require 'language_filter/error' +require 'language_filter/version' + +module LanguageFilter + module UseCreativeLettersPatch + + def use_creative_letters(text) + new_text = "" + last_char = "" + first_char_done = false + text.each_char do |char| + if last_char != '\\' + # new_text += '[\\-_\\s\\*\\.\\,\\`\\:\\\']*' if last_char != "" and char =~ /[A-Za-z]/ and first_char_done + new_text += case char.downcase + when 'a' then first_char_done = true; '(?:a|@|4|\\^|/\\\\|/\\-\\\\|aye?)' + when 'b' then first_char_done = true; '(?:b|i3|l3|13|\\|3|/3|\\\\3|3|8|6|\\u00df|p\\>|\\|\\:|[^a-z]bee+[^a-z])' + when 'c','k' then first_char_done = true; '(?:c|\\u00a9|\\u00a2|\\(|\\[|[^a-z]cee+[^a-z]|[^a-z]see+[^a-z]|k|x|[\\|\\[\\]\\)\\(li1\\!\\u00a1][\\<\\{\\(]|[^a-z][ck]ay+[^a-z])' + when 'd' then first_char_done = true; '(?:d|\\)|\\|\\)|\\[\\)|\\?|\\|\\>|\\|o|[^a-z]dee+[^a-z])' + when 'e' then first_char_done = true; '(?:e|3|\\&|\\u20ac|\\u00eb|\\[\\-)' + when 'f' then first_char_done = true; '(?:f|ph|\\u0192|[\\|\\}\\{\\\\/\\(\\)\\[\\]1il\\!][\\=\\#]|[^a-z]ef+[^a-z])' + when 'g' then first_char_done = true; '(?:g|6|9|\\&|c\\-|\\(_\\+|[^a-z]gee+[^a-z])' + when 'h' then first_char_done = true; '(?:h|\\#|[\\|\\}\\{\\\\/\\(\\)\\[\\]]\\-?[\\|\\}\\{\\\\/\\(\\)\\[\\]])' + when 'i','l' then first_char_done = true; '(?:i|l|1|\\!|\\u00a1|\\||\\]|\\[|\\\\|/|[^a-z]eye[^a-z]|\\u00a3|[\\|li1\\!\\u00a1\\[\\]\\(\\)\\{\\}]_|\\u00ac|[^a-z]el+[^a-z])' + when 'j' then first_char_done = true; '(?:j|\\]|\\u00bf|_\\||_/|\\]\\\\[\\|/\\[\\]\\<\\>]|/v|\\^/|[^a-z]en+[^a-z])' + when 'o' then first_char_done = true; '(?:o|0|\\(\\)|\\[\\]|\\u00b0|[^a-z]oh+[^a-z])' + when 'p' then first_char_done = true; '(?:p|\\u00b6|[\\|li1\\[\\]\\!\\u00a1/\\\\][\\*o\\u00b0\\"\\>7\\^]|[^a-z]pee+[^a-z])' + when 'q' then first_char_done = true; '(?:q|9|(?:0|\\(\\)|\\[\\])_|\\(_\\,\\)|\\<\\||[^a-z][ck]ue*|qu?eue*[^a-z])' + when 'r' then first_char_done = true; '(?:r|[/1\\|li]?[2\\^\\?z]|\\u00ae|[^a-z]ar+[^a-z])' + when 's','z' then first_char_done = true; '(?:s|\\$|5|\\u00a7|[^a-z]es+[^a-z]|z|2|7_|\\~/_|\\>_|\\%|[^a-z]zee+[^a-z])' + when 't' then first_char_done = true; '(?:t|7|\\+|\\u2020|\\-\\|\\-|\\\'\\]\\[\\\')' + when 'u','v' then first_char_done = true; '(?:u|v|\\u00b5|[\\|\\(\\)\\[\\]\\{\\}]_[\\|\\(\\)\\[\\]\\{\\}]|\\L\\||\\/|[^a-z]you[^a-z]|[^a-z]yoo+[^a-z]|[^a-z]vee+[^a-z])' + when 'w' then first_char_done = true; '(?:w|vv|\\\\/\\\\/|\\\\\\|/|\\\\\\\\\\\'|\\\'//|\\\\\\^/|\\(n\\)|[^a-z]do?u+b+l+e*[^a-z]?(?:u+|you|yoo+)[^a-z])' + when 'x' then first_char_done = true; '(?:x|\\>\\<|\\%|\\*|\\}\\{|\\)\\(|[^a-z]e[ck]+s+[^a-z]|[^a-z]ex+[^a-z])' + when 'y' then first_char_done = true; '(?:y|\\u00a5|j|\\\'/|[^a-z]wh?(?:y+|ie+)[^a-z])' + else char + end + elsif char.downcase == 'w' then + new_text += 'S' + else + new_text += char + end + last_char = char + end + new_text + end + end +end \ No newline at end of file From 5303ddaed0cc89f879ed6d031ebb05d625f12edc Mon Sep 17 00:00:00 2001 From: xintongmi Date: Wed, 11 Jun 2025 16:39:24 -0700 Subject: [PATCH 3/4] fix import path --- lib/language_filter.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/language_filter.rb b/lib/language_filter.rb index 873341e..56a0274 100644 --- a/lib/language_filter.rb +++ b/lib/language_filter.rb @@ -3,12 +3,12 @@ require 'pathname' require 'language_filter/error' require 'language_filter/version' -require_relative "language_filter/use_creative_letters_patch" +require_relative "use_creative_letters_patch" module LanguageFilter class Filter prepend UseCreativeLettersPatch - + attr_accessor :matchlist, :exceptionlist, :replacement, :creative_letters attr_reader :creative_matchlist From a8efe1d5c6305ee740876fd7655207d5649316a1 Mon Sep 17 00:00:00 2001 From: xintongmi Date: Thu, 12 Jun 2025 09:30:44 -0700 Subject: [PATCH 4/4] fix typo in file name --- ...e_createive_letters_patch.rb => use_creative_letters_patch.rb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lib/{use_createive_letters_patch.rb => use_creative_letters_patch.rb} (100%) diff --git a/lib/use_createive_letters_patch.rb b/lib/use_creative_letters_patch.rb similarity index 100% rename from lib/use_createive_letters_patch.rb rename to lib/use_creative_letters_patch.rb