autocomplete: fix highlighting of words surrounded by punctuation.
Fix a bug where the word `lazy` wasn't highlighted in `don't_say_"lazy"` when searching for `lazy`. The bug was that punctuation surrounding words wasn't properly split from the word.
This commit is contained in:
@@ -243,14 +243,15 @@ class Tag < ApplicationRecord
|
||||
|
||||
concerning :WordMethods do
|
||||
# Characters that delimit words in tags.
|
||||
WORD_DELIMITERS = " _+:;!.\/()-"
|
||||
WORD_DELIMITER_REGEX = /([#{WORD_DELIMITERS}]+)/
|
||||
WORD_DELIMITERS = " _+:;!./()-"
|
||||
WORD_DELIMITER_REGEX = /([#{WORD_DELIMITERS}]+[^a-zA-Z0-9]*|[^a-zA-Z0-9]*[#{WORD_DELIMITERS}]+|\A[^[a-zA-Z0-9]]+|[^[a-zA-Z0-9]]+\z)/
|
||||
|
||||
class_methods do
|
||||
# Split the tag at word boundaries.
|
||||
#
|
||||
# Tag.split_words("jeanne_d'arc_alter_(fate)") => ["jeanne", "_", "d'arc", "_", "alter", "_(", "fate", ")"]
|
||||
# Tag.split_words("k-on!") => ["k", "-", "on!"]
|
||||
# Tag.split_words(%q{don't_say_"lazy"}) => ["don't", "_", "say", '_"', "lazy", '"']
|
||||
# Tag.split_words("jack-o'-lantern") => ["jack", "-", "o", "'-", "lantern"]
|
||||
# Tag.split_words("<o>_<o>") => ["<o>_<o>"]
|
||||
def split_words(name)
|
||||
return [name] if !parsable_into_words?(name)
|
||||
@@ -261,7 +262,8 @@ class Tag < ApplicationRecord
|
||||
# Parse the tag into plain words, removing punctuation and delimiters.
|
||||
#
|
||||
# Tag.parse_words("jeanne_d'arc_alter_(fate)") => ["jeanne", "d'arc", "alter", "fate"]
|
||||
# Tag.parse_words("k-on!") => ["k", "on"]
|
||||
# Tag.parse_words(%q{don't_say_"lazy"}) => ["don't", "say", "lazy"]
|
||||
# Tag.parse_words("jack-o'-lantern") => ["jack", "o", "lantern"]
|
||||
# Tag.parse_words("<o>_<o>") => ["<o>_<o>"]
|
||||
def parse_words(name)
|
||||
return [name] if !parsable_into_words?(name)
|
||||
|
||||
@@ -143,15 +143,41 @@ class TagTest < ActiveSupport::TestCase
|
||||
should "parse tag names into words" do
|
||||
assert_equal(%w[very long hair], Tag.new(name: "very_long_hair").words)
|
||||
|
||||
assert_equal(%w[k - on !], Tag.split_words("k-on!"))
|
||||
assert_equal(%w[. hack //], Tag.split_words(".hack//"))
|
||||
assert_equal(%w[re : zero], Tag.split_words("re:zero"))
|
||||
assert_equal(%w[# compass], Tag.split_words("#compass"))
|
||||
assert_equal(%w[. hack // g . u .], Tag.split_words(".hack//g.u."))
|
||||
assert_equal(%w[me ! me ! me !], Tag.split_words("me!me!me!"))
|
||||
assert_equal(%w[d . gray - man], Tag.split_words("d.gray-man"))
|
||||
assert_equal(%w[steins ; gate], Tag.split_words("steins;gate"))
|
||||
assert_equal(%w[tiger _&_ bunny], Tag.split_words("tiger_&_bunny"))
|
||||
assert_equal(%w[ssss . gridman], Tag.split_words("ssss.gridman"))
|
||||
assert_equal(%w[yu - gi - oh !_ 5d's], Tag.split_words("yu-gi-oh!_5d's"))
|
||||
assert_equal(%w[don't _ say _" lazy "], Tag.split_words(%q{don't_say_"lazy"}))
|
||||
assert_equal(%w[jack - o '- lantern], Tag.split_words("jack-o'-lantern"))
|
||||
assert_equal(%w[d . va _( overwatch )], Tag.split_words("d.va_(overwatch)"))
|
||||
assert_equal(%w[rosario + vampire], Tag.split_words("rosario+vampire"))
|
||||
assert_equal(%w[girls '_ frontline], Tag.split_words("girls'_frontline"))
|
||||
assert_equal(%w[fate / grand _ order], Tag.split_words("fate/grand_order"))
|
||||
assert_equal(%w[yorha _ no ._ 2 _ type _ b], Tag.split_words("yorha_no._2_type_b"))
|
||||
assert_equal(%w[love _ live !_ sunshine !!], Tag.split_words("love_live!_sunshine!!"))
|
||||
assert_equal(%w[jeanne _ d'arc _ alter _( ver ._ shinjuku _ 1999 )_( fate )], Tag.split_words("jeanne_d'arc_alter_(ver._shinjuku_1999)_(fate)"))
|
||||
assert_equal(%w[kaguya - sama _ wa _ kokurasetai _~ tensai - tachi _ no _ renai _ zunousen ~], Tag.split_words("kaguya-sama_wa_kokurasetai_~tensai-tachi_no_renai_zunousen~"))
|
||||
|
||||
assert_equal(%w[k on], Tag.new(name: "k-on!").words)
|
||||
assert_equal(%w[hack], Tag.new(name: ".hack//").words)
|
||||
assert_equal(%w[nyoro~n], Tag.new(name: "nyoro~n").words)
|
||||
assert_equal(%w[re zero], Tag.new(name: "re:zero").words)
|
||||
assert_equal(%w[compass], Tag.new(name: "#compass").words)
|
||||
assert_equal(%w[hack g u], Tag.new(name: ".hack//g.u.").words)
|
||||
assert_equal(%w[me me me], Tag.new(name: "me!me!me!").words)
|
||||
assert_equal(%w[d gray man], Tag.new(name: "d.gray-man").words)
|
||||
assert_equal(%w[steins gate], Tag.new(name: "steins;gate").words)
|
||||
assert_equal(%w[tiger bunny], Tag.new(name: "tiger_&_bunny").words)
|
||||
assert_equal(%w[ssss gridman], Tag.new(name: "ssss.gridman").words)
|
||||
assert_equal(%w[yu gi oh 5d's], Tag.new(name: "yu-gi-oh!_5d's").words)
|
||||
assert_equal(%w[don't say lazy], Tag.new(name: %q{don't_say_"lazy"}).words)
|
||||
assert_equal(%w[jack o lantern], Tag.new(name: "jack-o'-lantern").words)
|
||||
assert_equal(%w[d va overwatch], Tag.new(name: "d.va_(overwatch)").words)
|
||||
assert_equal(%w[rosario vampire], Tag.new(name: "rosario+vampire").words)
|
||||
@@ -160,6 +186,7 @@ class TagTest < ActiveSupport::TestCase
|
||||
assert_equal(%w[yorha no 2 type b], Tag.new(name: "yorha_no._2_type_b").words)
|
||||
assert_equal(%w[love live sunshine], Tag.new(name: "love_live!_sunshine!!").words)
|
||||
assert_equal(%w[jeanne d'arc alter ver shinjuku 1999 fate], Tag.new(name: "jeanne_d'arc_alter_(ver._shinjuku_1999)_(fate)").words)
|
||||
assert_equal(%w[kaguya sama wa kokurasetai tensai tachi no renai zunousen], Tag.new(name: "kaguya-sama_wa_kokurasetai_~tensai-tachi_no_renai_zunousen~").words)
|
||||
|
||||
assert_equal(%w[:o], Tag.new(name: ":o").words)
|
||||
assert_equal(%w[o_o], Tag.new(name: "o_o").words)
|
||||
|
||||
Reference in New Issue
Block a user