Merge pull request #2898 from gaulrobe/altcalendars-cleanup

Improvements to AltCalendars IA
master
Zaahir Moolla 2016-06-07 11:18:45 -04:00
commit 61d49035d7
3 changed files with 128 additions and 53 deletions

View File

@ -2,46 +2,59 @@ package DDG::Goodie::AltCalendars;
# ABSTRACT: Convert non-Gregorian years to the Gregorian calendar
use strict;
use DDG::Goodie;
triggers any => 'juche', 'minguo', 'meiji', 'taisho', 'taishou', 'showa', 'shouwa', 'heisei';
use DateTime;
use DDG::Goodie;
use JSON;
my $base_wiki_link = "https://en.wikipedia.org/wiki/";
my $definitions_json = share('definitions.json')->slurp();
my $year_definitions = decode_json($definitions_json);
my %year_map_with_aliases = map {
my $name = $_;
map { $_ => $name } ($name, @{$year_definitions->{$name}->{'aliases'} // []})
} (keys $year_definitions);
triggers any => keys %year_map_with_aliases;
zci answer_type => 'date_conversion';
zci is_cached => 1;
my %eras = (
'Meiji' => [1867, 'Meiji_period'], # Japanese Meiji era
'Taisho' => [1911, 'Taisho_period'], # Japanese Taisho era
'Taishou' => [1911, 'Taisho_period'], # Alternative spelling of "Taisho"
'Showa' => [1925, 'Showa_period'], # Japanese Showa era
'Shouwa' => [1925, 'Showa_period'], # Alternative spelling of "Showa"
'Heisei' => [1988, 'Heisei_period'], # Japanese Heisei era
'Juche' => [1911, 'North_Korean_calendar'], # North Korean Juche era
'Minguo' => [1911, 'Minguo_calendar'], # ROC (Taiwanese) Minguo era
);
handle query_parts => sub {
# Ignore single word queries
return unless scalar(@_) > 1;
if ($_ =~ /^(.*\b)(meiji|taisho|taishou|showa|shouwa|heisei|juche|minguo)\s+(\d*[1-9]\d*)(\b.*)$/i) {
my $era_name = ucfirst($2);
my $era_year = $3;
my $year = $eras{$era_name}[0] + $era_year;
my $result = $1.$year.$4;
my $wiki = 'https://en.wikipedia.org/wiki/';
if ($_ =~ /^([A-Za-z]+)\s+(\d*[1-9]\d*)$/) {
my $era_name = lc($1);
my $era_year = $2;
my $parent_era = $year_map_with_aliases{$era_name};
return unless $parent_era;
my $era_hash = $year_definitions->{$parent_era};
my $gregorian_year_started = $era_hash->{'gregorian_year_started'};
my $wiki_page = $era_hash->{'wikipedia_page'};
my $year = $gregorian_year_started + $era_year;
my $era = DateTime->now->set_year($year)->era;
$era_name = ucfirst($era_name);
$year = abs($year);
my $answer = "$era_name $era_year is equivalent to $year in the Gregorian Calendar";
my $answer = "$era_name $era_year is equivalent to $year $era in the Gregorian Calendar";
return $answer,
structured_answer => {
data => {
title => $year,
subtitle => "$era_name $era_year - Equivalent Gregorian Year"
title => "$year $era",
subtitle => "$era_name Year $era_year"
},
meta => {
sourceName => "Wikipedia",
sourceUrl => "$wiki$eras{$era_name}[1]"
sourceUrl => "$base_wiki_link$wiki_page"
},
templates => {
group => 'info',

View File

@ -0,0 +1,58 @@
{
"meiji": {
"gregorian_year_started": 1867,
"wikipedia_page": "Meiji_period"
},
"taisho": {
"gregorian_year_started": 1911,
"aliases": ["taishou"],
"wikipedia_page": "Taisho_period"
},
"showa": {
"gregorian_year_started": 1925,
"aliases": ["shouwa"],
"wikipedia_page": "Showa_period"
},
"heisei": {
"gregorian_year_started": 1988,
"wikipedia_page": "Heisei_period"
},
"juche": {
"gregorian_year_started": 1911,
"wikipedia_page": "North_Korean_calendar"
},
"minguo": {
"gregorian_year_started": 1911,
"wikipedia_page": "Minguo_calendar"
},
"pisan": {
"gregorian_year_started": -1,
"wikipedia_page": "Pisan_calendar"
},
"bengali": {
"gregorian_year_started": 593,
"aliases": ["bangla"],
"wikipedia_page": "Bengali_calendar"
},
"rumi": {
"gregorian_year_started": 584,
"wikipedia_page": "Rumi_calendar"
},
"suriyakhati": {
"gregorian_year_started": -543,
"wikipedia_page": "Thai_solar_calendar"
},
"saka": {
"gregorian_year_started": 78,
"wikipedia_page": "Indian_national_calendar"
},
"discordian": {
"gregorian_year_started": -1166,
"aliases": ["erisian"],
"wikipedia_page": "Discordian_calendar"
},
"nanakshahi": {
"gregorian_year_started": 1468,
"wikipedia_page": "Nanakshahi_calendar"
}
}

View File

@ -18,59 +18,63 @@ my %eras = (
'Heisei' => 'Heisei_period',
'Juche' => 'North_Korean_calendar',
'Minguo' => 'Minguo_calendar',
'Discordian' => 'Discordian_calendar',
'Suriyakhati' => 'Thai_solar_calendar'
);
ddg_goodie_test(
[qw( DDG::Goodie::AltCalendars )],
'heisei 25' => test_zci(
'Heisei 25 is equivalent to 2013 in the Gregorian Calendar',
make_structured_answer('Heisei', '25', '2013')
'Heisei 25 is equivalent to 2013 AD in the Gregorian Calendar',
make_structured_answer('Heisei', '25', '2013', 'AD')
),
'shouwa 39' => test_zci(
'Shouwa 39 is equivalent to 1964 in the Gregorian Calendar',
make_structured_answer('Shouwa', '39', '1964')
'Shouwa 39 is equivalent to 1964 AD in the Gregorian Calendar',
make_structured_answer('Shouwa', '39', '1964', 'AD')
),
'taisho 11' => test_zci(
'Taisho 11 is equivalent to 1922 in the Gregorian Calendar',
make_structured_answer('Taisho', '11', '1922')
'Taisho 11 is equivalent to 1922 AD in the Gregorian Calendar',
make_structured_answer('Taisho', '11', '1922', 'AD')
),
'meiji 1' => test_zci(
'Meiji 1 is equivalent to 1868 in the Gregorian Calendar',
make_structured_answer('Meiji', '1', '1868')
'Meiji 1 is equivalent to 1868 AD in the Gregorian Calendar',
make_structured_answer('Meiji', '1', '1868', 'AD')
),
'minguo 50' => test_zci(
'Minguo 50 is equivalent to 1961 in the Gregorian Calendar',
make_structured_answer('Minguo', '50', '1961')
'Minguo 50 is equivalent to 1961 AD in the Gregorian Calendar',
make_structured_answer('Minguo', '50', '1961', 'AD')
),
'juche 07' => test_zci(
'Juche 07 is equivalent to 1918 in the Gregorian Calendar',
make_structured_answer('Juche', '07', '1918')
),
'Heisei 12 was a leap year' => test_zci(
'Heisei 12 is equivalent to 2000 in the Gregorian Calendar',
make_structured_answer('Heisei', '12', '2000')
),
'it\'s heisei 25 now' => test_zci(
'Heisei 25 is equivalent to 2013 in the Gregorian Calendar',
make_structured_answer('Heisei', '25', '2013')
),
'January 1st Meiji 33' => test_zci(
'Meiji 33 is equivalent to 1900 in the Gregorian Calendar',
make_structured_answer('Meiji', '33', '1900')
'Juche 07 is equivalent to 1918 AD in the Gregorian Calendar',
make_structured_answer('Juche', '07', '1918', 'AD')
),
'heisei 24' => test_zci(
'Heisei 24 is equivalent to 2012 in the Gregorian Calendar',
make_structured_answer('Heisei', '24', '2012')
)
'Heisei 24 is equivalent to 2012 AD in the Gregorian Calendar',
make_structured_answer('Heisei', '24', '2012', 'AD')
),
'suriyakhati 543' => test_zci(
'Suriyakhati 543 is equivalent to 0 BC in the Gregorian Calendar',
make_structured_answer('Suriyakhati', '543', '0', 'BC')
),
'suriyakhati 43' => test_zci(
'Suriyakhati 43 is equivalent to 500 BC in the Gregorian Calendar',
make_structured_answer('Suriyakhati', '43', '500', 'BC')
),
'was Heisei 12 was a leap year' => undef,
'it\'s heisei 25 now' => undef,
'January 1st Meiji 33' => undef,
'when was Discordian 2000' => undef,
'meiji 2 45645' => undef,
'bengali calendar 423' => undef
);
sub make_structured_answer {
my ($era_name, $era_year, $gregorian_year) = @_;
my ($era_name, $era_year, $gregorian_year, $era) = @_;
return structured_answer => {
data => {
title => $gregorian_year,
subtitle => "$era_name $era_year - Equivalent Gregorian Year"
title => "$gregorian_year $era",
subtitle => "$era_name Year $era_year"
},
meta => {
sourceName => "Wikipedia",