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