renamed goodie, upgraded the code and made a test file
parent
75e4bae8f0
commit
a2bd031f44
|
@ -1,4 +1,4 @@
|
||||||
package DDG::Goodie::UnicodeReverse;
|
package DDG::Goodie::UnicodeFuzzySearch;
|
||||||
# ABSTRACT: returns unicode symbols matching the input
|
# ABSTRACT: returns unicode symbols matching the input
|
||||||
|
|
||||||
use DDG::Goodie;
|
use DDG::Goodie;
|
||||||
|
@ -6,7 +6,6 @@ use DDG::Goodie;
|
||||||
triggers startend => "unicode";
|
triggers startend => "unicode";
|
||||||
|
|
||||||
zci is_cached => 1;
|
zci is_cached => 1;
|
||||||
# zci answer_type => "convert_to_ascii";
|
|
||||||
|
|
||||||
attribution
|
attribution
|
||||||
github => "konr",
|
github => "konr",
|
||||||
|
@ -23,10 +22,22 @@ topics 'programming';
|
||||||
|
|
||||||
handle remainder => sub {
|
handle remainder => sub {
|
||||||
return unless $_;
|
return unless $_;
|
||||||
|
|
||||||
my $pattern = uc join('.*', $_);
|
my $pattern = uc join('.*', $_);
|
||||||
|
|
||||||
|
# UnicodeData.txt is a semicolon-separated file.
|
||||||
|
# Uploaded file version: 6.3.0, obtained from
|
||||||
|
# ftp://ftp.unicode.org/Public/6.3.0/ucd/
|
||||||
my @lines = split /\n/, share("UnicodeData.txt")->slurp;
|
my @lines = split /\n/, share("UnicodeData.txt")->slurp;
|
||||||
my @matches = grep { /^[^;]*;?[^;]*$pattern/ } @lines;
|
|
||||||
|
# 1st column = number ; 2nd column = name. See
|
||||||
|
# http://www.unicode.org/draft/ucd/UnicodeData.html
|
||||||
|
my @matches;
|
||||||
|
|
||||||
|
# AS FUZZY AS POSSIBLE BUT NOT MORE - It's either (a) number (no ';'
|
||||||
|
# before) or (b) part of the name or, when there are way too many
|
||||||
|
# matches for the result to be helpful, (c) isolated words.
|
||||||
|
@matches = grep { /^[^;]*;?[^;]*$pattern/ } @lines;
|
||||||
|
@matches = grep { /\b$pattern\b/ } @lines if (scalar @matches >= 50);
|
||||||
|
|
||||||
return unless (scalar @matches > 0 && scalar @matches < 50);
|
return unless (scalar @matches > 0 && scalar @matches < 50);
|
||||||
|
|
||||||
|
@ -37,7 +48,6 @@ handle remainder => sub {
|
||||||
name => $name};
|
name => $name};
|
||||||
} @matches;
|
} @matches;
|
||||||
|
|
||||||
|
|
||||||
my @results = map {sprintf('%s: %s (U+%s)', @{$_}{qw/name symbol code/})} @matches;
|
my @results = map {sprintf('%s: %s (U+%s)', @{$_}{qw/name symbol code/})} @matches;
|
||||||
|
|
||||||
return join("\n", @results), html => join("<br>", @results);
|
return join("\n", @results), html => join("<br>", @results);
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
#use encoding "utf8";
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Test::More;
|
||||||
|
use DDG::Test::Goodie;
|
||||||
|
|
||||||
|
zci is_cached => 1;
|
||||||
|
zci answer_type => "unicodefuzzysearch";
|
||||||
|
|
||||||
|
ddg_goodie_test(
|
||||||
|
[qw(
|
||||||
|
DDG::Goodie::UnicodeFuzzySearch
|
||||||
|
)],
|
||||||
|
# ------
|
||||||
|
"unicode white heart" => test_zci("WHITE HEART SUIT: \x{2661} (U+2661)", html => "WHITE HEART SUIT: \x{2661} (U+2661)"),
|
||||||
|
"0f00 unicode" => test_zci("TIBETAN SYLLABLE OM: \x{0f00} (U+0F00)", html => ("TIBETAN SYLLABLE OM: \x{0f00} (U+0F00)")),
|
||||||
|
# ------
|
||||||
|
"unicode snowman" =>
|
||||||
|
test_zci("SNOWMAN: \x{2603} (U+2603)
|
||||||
|
SNOWMAN WITHOUT SNOW: \x{26c4} (U+26C4)
|
||||||
|
BLACK SNOWMAN: \x{26c7} (U+26C7)",
|
||||||
|
html => "SNOWMAN: \x{2603} (U+2603)<br>SNOWMAN WITHOUT SNOW: \x{26c4} (U+26C4)<br>BLACK SNOWMAN: \x{26c7} (U+26C7)"),
|
||||||
|
# ------
|
||||||
|
"sharp s unicode" =>
|
||||||
|
test_zci("LATIN SMALL LETTER SHARP S: \x{00df} (U+00DF)
|
||||||
|
LATIN CAPITAL LETTER SHARP S: \x{1e9e} (U+1E9E)
|
||||||
|
MUSIC SHARP SIGN: \x{266f} (U+266F)",
|
||||||
|
html => "LATIN SMALL LETTER SHARP S: \x{00df} (U+00DF)<br>LATIN CAPITAL LETTER SHARP S: \x{1e9e} (U+1E9E)<br>MUSIC SHARP SIGN: \x{266f} (U+266F)"),
|
||||||
|
);
|
||||||
|
|
||||||
|
done_testing;
|
Loading…
Reference in New Issue