From 6a5e1de6f3f7ebac72a6ed0966dbe09e93370afa Mon Sep 17 00:00:00 2001 From: Junegunn Choi <junegunn.c@gmail.com> Date: Sun, 17 Nov 2013 11:20:06 +0900 Subject: [PATCH] Fix missing NFD conversion in extended-search mode --- fzf | 12 ++++++------ fzf.gemspec | 2 +- test/test_fzf.rb | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/fzf b/fzf index 258d3679..cad57bf0 100755 --- a/fzf +++ b/fzf @@ -214,7 +214,7 @@ class FZF end class Matcher - def convert_query q + def query_chars q UConv.nfd(q).split(//) end end @@ -224,7 +224,7 @@ class FZF end class Matcher - def convert_query q + def query_chars q q.split(//) end end @@ -747,7 +747,7 @@ class FZF def fuzzy_regex q @regexp[q] ||= begin q = q.downcase if @rxflag != 0 - Regexp.new(convert_query(q).inject('') { |sum, e| + Regexp.new(query_chars(q).inject('') { |sum, e| e = Regexp.escape e sum << "#{e}[^#{e}]*?" }, @rxflag) @@ -804,13 +804,13 @@ class FZF nil when /^'/ w.length > 1 ? - Regexp.new(Regexp.escape(w[1..-1]), rxflag) : nil + Regexp.new(UConv.nfd(Regexp.escape(w[1..-1])), rxflag) : nil when /^\^/ w.length > 1 ? - Regexp.new('^' << Regexp.escape(w[1..-1]), rxflag) : nil + Regexp.new('^' << UConv.nfd(Regexp.escape(w[1..-1])), rxflag) : nil when /\$$/ w.length > 1 ? - Regexp.new(Regexp.escape(w[0..-2]) << '$', rxflag) : nil + Regexp.new(UConv.nfd(Regexp.escape(w[0..-2])) << '$', rxflag) : nil else fuzzy_regex w end, invert ] diff --git a/fzf.gemspec b/fzf.gemspec index 3f3d2bbb..a6845df4 100644 --- a/fzf.gemspec +++ b/fzf.gemspec @@ -1,7 +1,7 @@ # coding: utf-8 Gem::Specification.new do |spec| spec.name = 'fzf' - spec.version = '0.4.0' + spec.version = '0.4.1' spec.authors = ['Junegunn Choi'] spec.email = ['junegunn.c@gmail.com'] spec.description = %q{Fuzzy finder for your shell} diff --git a/test/test_fzf.rb b/test/test_fzf.rb index 6bff9449..7d0f4476 100644 --- a/test/test_fzf.rb +++ b/test/test_fzf.rb @@ -296,6 +296,21 @@ class TestFZF < MiniTest::Unit::TestCase assert_equal 6, nfd.length assert_equal NFD, nfd end + + def test_nfd_fuzzy_matcher + matcher = FZF::FuzzyMatcher.new 0 + match = matcher.match([NFD], '頃�', '', '') + assert_equal [[NFD, [[0, 6]]]], match + assert_equal ['頃滉竴', [[0, 2]]], FZF::UConv.nfc(*match.first) + end + + def test_nfd_extended_fuzzy_matcher + matcher = FZF::ExtendedFuzzyMatcher.new 0 + assert_equal [], matcher.match([NFD], "'頃�", '', '') + match = matcher.match([NFD], "'頃滉竴", '', '') + assert_equal [[NFD, [[0, 6]]]], match + assert_equal ['頃滉竴', [[0, 2]]], FZF::UConv.nfc(*match.first) + end end def test_split -- GitLab