From 24efda31b0789451e5bbf352ed88693f9cdfc256 Mon Sep 17 00:00:00 2001 From: kyokomi Date: Thu, 3 Mar 2016 10:12:03 +0900 Subject: [PATCH] bugfix Colon followed by emoji fails https://github.com/kyokomi/emoji/issues/6 --- emoji.go | 21 +++++++++------------ emoji_test.go | 13 +++++++++++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/emoji.go b/emoji.go index eda7178..47dbed2 100644 --- a/emoji.go +++ b/emoji.go @@ -30,29 +30,26 @@ func emojize(x string) string { } func replaseEmoji(input *bytes.Buffer) string { - r := "" emoji := bytes.NewBufferString(":") for { i, _, err := input.ReadRune() if err != nil { // not replase - r = emoji.String() - break + return emoji.String() } - emoji.WriteRune(i) - - if unicode.IsSpace(i) { - r = emoji.String() - break + if i == ':' && emoji.Len() == 1 { + return emoji.String() + replaseEmoji(input) } - if i == ':' { - r = emojize(emoji.String()) - break + emoji.WriteRune(i) + switch { + case unicode.IsSpace(i): + return emoji.String() + case i == ':': + return emojize(emoji.String()) } } - return r } func compile(x string) string { diff --git a/emoji_test.go b/emoji_test.go index 25b2701..d9cfe7b 100644 --- a/emoji_test.go +++ b/emoji_test.go @@ -27,6 +27,19 @@ func TestMultiColons(t *testing.T) { } } +func TestContinuityColons(t *testing.T) { + var buf bytes.Buffer + _, err := Fprint(&buf, "::smile:") + if err != nil { + t.Error("Fprint ", err) + } + + testCase := ":" + emojize(":smile:") + if buf.String() != testCase { + t.Error("Fprint ", buf.String(), "!=", testCase) + } +} + func TestCodeMap(t *testing.T) { m := CodeMap() if &emojiCodeMap == &m {