// Copyright 2010-2015, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// Date comment style are following.
//  - If the input number converts strictly 2 character with padding, comment
//  format is like "HH" or "MM".
//   e.g.) "YYYY/MM/DD HH:MM" ->  "2011/01/30 03:20"
//  - If the input number converts string without padding, comment format is
//  like "H" or "M"
//   e.g.) "Y/M/D H:M" -> "645/2/3 9:2"

#include "rewriter/date_rewriter.h"

#include <algorithm>
#include <cstdio>
#include <ctime>
#include <string>
#include <vector>

#include "base/logging.h"
#include "base/number_util.h"
#include "base/util.h"
#include "composer/composer.h"
#include "composer/table.h"
#include "config/config.pb.h"
#include "config/config_handler.h"
#include "converter/conversion_request.h"
#include "converter/segments.h"
#include "session/commands.pb.h"

namespace mozc {

namespace {
struct DateData {
  const char *key;
  const char *value;
  const char *description;
  int diff;   // diff from the current time in day or month or year
};

const struct DateData kDateData[] = {
  {
    // きょう will show today's date
    "\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86",
    "\xE4\xBB\x8A\xE6\x97\xA5",
    "\xE4\xBB\x8A\xE6\x97\xA5\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    0
  }, {
    // あした will show tomorrow's date
    "\xE3\x81\x82\xE3\x81\x97\xE3\x81\x9F",
    "\xE6\x98\x8E\xE6\x97\xA5",
    "\xE6\x98\x8E\xE6\x97\xA5\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    1
  }, {
    // あす will show tomorrow's date
    "\xE3\x81\x82\xE3\x81\x99",
    "\xE6\x98\x8E\xE6\x97\xA5",
    "\xE6\x98\x8E\xE6\x97\xA5\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    1
  }, {
    // さくじつ will show yesterday's date
    "\xE3\x81\x95\xE3\x81\x8F\xE3\x81\x98\xE3\x81\xA4",
    "\xE6\x98\xA8\xE6\x97\xA5",
    "\xE6\x98\xA8\xE6\x97\xA5\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    -1
  }, {
    // きのう will show yesterday's date
    "\xE3\x81\x8D\xE3\x81\xAE\xE3\x81\x86",
    "\xE6\x98\xA8\xE6\x97\xA5",
    "\xE6\x98\xA8\xE6\x97\xA5\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    -1
  }, {
    // おととい will show the date of 2 days ago
    "\xE3\x81\x8A\xE3\x81\xA8\xE3\x81\xA8\xE3\x81\x84",
    "\xE4\xB8\x80\xE6\x98\xA8\xE6\x97\xA5",
    "2\xE6\x97\xA5\xE5\x89\x8D\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    -2
  }, {
    // おとつい will show the date of 2 days ago
    "\xE3\x81\x8A\xE3\x81\xA8\xE3\x81\xA4\xE3\x81\x84",
    "\xE4\xB8\x80\xE6\x98\xA8\xE6\x97\xA5",
    "2\xE6\x97\xA5\xE5\x89\x8D\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    -2
  }, {
    // いっさくじつ will show the date of 2 days ago
    "\xE3\x81\x84\xE3\x81\xA3\xE3\x81\x95\xE3\x81\x8F\xE3\x81\x98\xE3\x81\xA4",
    "\xE4\xB8\x80\xE6\x98\xA8\xE6\x97\xA5",
    "2\xE6\x97\xA5\xE5\x89\x8D\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    -2
  }, {
    // さきおととい will show the date of 3 days ago
    "\xe3\x81\x95\xe3\x81\x8d\xe3\x81\x8a\xe3\x81\xa8"
    "\xe3\x81\xa8\xe3\x81\x84",
    "\xe4\xb8\x80\xe6\x98\xa8\xe6\x98\xa8\xe6\x97\xa5",
    "3\xE6\x97\xA5\xE5\x89\x8D\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    -3
  }, {
    // あさって will show the date of 2 days from now
    "\xE3\x81\x82\xE3\x81\x95\xE3\x81\xA3\xE3\x81\xA6",
    "\xE6\x98\x8E\xE5\xBE\x8C\xE6\x97\xA5",
    "\xE6\x98\x8E\xE5\xBE\x8C\xE6\x97\xA5\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    2,
  }, {
    // みょうごにち will show the date of 2 days from now
    "\xE3\x81\xBF\xE3\x82\x87\xE3\x81\x86"
    "\xE3\x81\x94\xE3\x81\xAB\xE3\x81\xA1",
    "\xE6\x98\x8E\xE5\xBE\x8C\xE6\x97\xA5",
    "\xE6\x98\x8E\xE5\xBE\x8C\xE6\x97\xA5\xE3\x81\xAE\xE6\x97\xA5\xE4\xBB\x98",
    2
  }, {
    // しあさって will show the date of 3 days from now
    "\xE3\x81\x97\xE3\x81\x82\xE3\x81\x95"
    "\xE3\x81\xA3\xE3\x81\xA6",
    "\xE6\x98\x8E\xE6\x98\x8E\xE5\xBE\x8C\xE6\x97\xA5",
    "\xE6\x98\x8E\xE6\x98\x8E\xE5\xBE\x8C\xE6\x97\xA5\xE3\x81\xAE"
    "\xE6\x97\xA5\xE4\xBB\x98",
    3
  }
};

const struct DateData kWeekDayData[] = {
  {
    // "にちようび"
    "\xe3\x81\xab\xe3\x81\xa1\xe3\x82\x88\xe3\x81\x86\xe3\x81\xb3",
    "\xe6\x97\xa5\xe6\x9b\x9c\xe6\x97\xa5",
    "\xe6\xac\xa1\xe3\x81\xae\xe6\x97\xa5\xe6\x9b\x9c\xe6\x97\xa5",
    0
  }, {
    // "げつようび"
    "\xe3\x81\x92\xe3\x81\xa4\xe3\x82\x88\xe3\x81\x86\xe3\x81\xb3",
    "\xe6\x9c\x88\xe6\x9b\x9c\xe6\x97\xa5",
    "\xe6\xac\xa1\xe3\x81\xae\xe6\x9c\x88\xe6\x9b\x9c\xe6\x97\xa5",
    1
  }, {
    // "かようび"
    "\xe3\x81\x8b\xe3\x82\x88\xe3\x81\x86\xe3\x81\xb3",
    "\xe7\x81\xab\xe6\x9b\x9c\xe6\x97\xa5",
    "\xe6\xac\xa1\xe3\x81\xae\xe7\x81\xab\xe6\x9b\x9c\xe6\x97\xa5",
    2
  }, {
    // "すいようび"
    "\xe3\x81\x99\xe3\x81\x84\xe3\x82\x88\xe3\x81\x86\xe3\x81\xb3",
    "\xe6\xb0\xb4\xe6\x9b\x9c\xe6\x97\xa5",
    "\xe6\xac\xa1\xe3\x81\xae\xe6\xb0\xb4\xe6\x9b\x9c\xe6\x97\xa5",
    3
  }, {
    // "もくようび"
    "\xe3\x82\x82\xe3\x81\x8f\xe3\x82\x88\xe3\x81\x86\xe3\x81\xb3",
    "\xe6\x9c\xa8\xe6\x9b\x9c\xe6\x97\xa5",
    "\xe6\xac\xa1\xe3\x81\xae\xe6\x9c\xa8\xe6\x9b\x9c\xe6\x97\xa5",
    4
  }, {
    // "きんようび"
    "\xe3\x81\x8d\xe3\x82\x93\xe3\x82\x88\xe3\x81\x86\xe3\x81\xb3",
    "\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5",
    "\xe6\xac\xa1\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5",
    5
  }, {
    // "どようび"
    "\xe3\x81\xa9\xe3\x82\x88\xe3\x81\x86\xe3\x81\xb3",
    "\xe5\x9c\x9f\xe6\x9b\x9c\xe6\x97\xa5",
    "\xe6\xac\xa1\xe3\x81\xae\xe5\x9c\x9f\xe6\x9b\x9c\xe6\x97\xa5",
    6
  }, {
    // "にちよう"
    "\xE3\x81\xAB\xE3\x81\xA1\xE3\x82\x88\xE3\x81\x86",
    "\xE6\x97\xA5\xE6\x9B\x9C",
    "\xE6\xAC\xA1\xE3\x81\xAE\xE6\x97\xA5\xE6\x9B\x9C\xE6\x97\xA5",
    0
  }, {
    // "げつよう"
    "\xE3\x81\x92\xE3\x81\xA4\xE3\x82\x88\xE3\x81\x86",
    "\xE6\x9C\x88\xE6\x9B\x9C",
    "\xE6\xAC\xA1\xE3\x81\xAE\xE6\x9C\x88\xE6\x9B\x9C\xE6\x97\xA5",
    1
  }, {
    // "かよう"
    "\xE3\x81\x8B\xE3\x82\x88\xE3\x81\x86",
    "\xE7\x81\xAB\xE6\x9B\x9C",
    "\xE6\xAC\xA1\xE3\x81\xAE\xE7\x81\xAB\xE6\x9B\x9C\xE6\x97\xA5",
    2
  }, {
    // "すいよう"
    "\xE3\x81\x99\xE3\x81\x84\xE3\x82\x88\xE3\x81\x86",
    "\xE6\xB0\xB4\xE6\x9B\x9C",
    "\xE6\xAC\xA1\xE3\x81\xAE\xE6\xB0\xB4\xE6\x9B\x9C\xE6\x97\xA5",
    3
  }, {
    // "もくよう"
    "\xE3\x82\x82\xE3\x81\x8F\xE3\x82\x88\xE3\x81\x86",
    "\xE6\x9C\xA8\xE6\x9B\x9C",
    "\xE6\xAC\xA1\xE3\x81\xAE\xE6\x9C\xA8\xE6\x9B\x9C\xE6\x97\xA5",
    4
  }, {
    // "きんよう"
    "\xE3\x81\x8D\xE3\x82\x93\xE3\x82\x88\xE3\x81\x86",
    "\xE9\x87\x91\xE6\x9B\x9C",
    "\xE6\xAC\xA1\xE3\x81\xAE\xE9\x87\x91\xE6\x9B\x9C\xE6\x97\xA5",
    5
  }, {
    // "どよう"
    "\xE3\x81\xA9\xE3\x82\x88\xE3\x81\x86",
    "\xE5\x9C\x9F\xE6\x9B\x9C",
    "\xE6\xAC\xA1\xE3\x81\xAE\xE5\x9C\x9F\xE6\x9B\x9C\xE6\x97\xA5",
    6
  }
};

const struct DateData kYearData[] = {
  {
    // "ことし"
    "\xE3\x81\x93\xE3\x81\xA8\xE3\x81\x97",
    "\xE4\xBB\x8A\xE5\xB9\xB4",
    "\xE4\xBB\x8A\xE5\xB9\xB4",
    0
  }, {
    // "らいねん"
    "\xE3\x82\x89\xE3\x81\x84\xE3\x81\xAD\xE3\x82\x93",
    "\xE6\x9D\xA5\xE5\xB9\xB4",
    "\xE6\x9D\xA5\xE5\xB9\xB4",
    1
  }, {
    // "さくねん"
    "\xE3\x81\x95\xE3\x81\x8F\xE3\x81\xAD\xE3\x82\x93",
    "\xE6\x98\xA8\xE5\xB9\xB4",
    "\xE6\x98\xA8\xE5\xB9\xB4",
    -1
  }, {
    // "きょねん"
    "\xE3\x81\x8D\xE3\x82\x87\xE3\x81\xAD\xE3\x82\x93",
    "\xE5\x8E\xBB\xE5\xB9\xB4",
    "\xE5\x8E\xBB\xE5\xB9\xB4",
    -1
  }, {
    // "おととし"
    "\xE3\x81\x8A\xE3\x81\xA8\xE3\x81\xA8\xE3\x81\x97",
    "\xE4\xB8\x80\xE6\x98\xA8\xE5\xB9\xB4",
    "\xE4\xB8\x80\xE6\x98\xA8\xE5\xB9\xB4",
    -2
  }, {
    // "さらいねん"
    "\xE3\x81\x95\xE3\x82\x89\xE3\x81\x84\xE3\x81\xAD\xE3\x82\x93",
    "\xE5\x86\x8D\xE6\x9D\xA5\xE5\xB9\xB4",
    "\xE5\x86\x8D\xE6\x9D\xA5\xE5\xB9\xB4",
    2
  }
};

const struct DateData kMonthData[] = {
  {
    // "こんげつ"
    "\xE3\x81\x93\xE3\x82\x93\xE3\x81\x92\xE3\x81\xA4",
    "\xE4\xBB\x8A\xE6\x9C\x88",
    "\xE4\xBB\x8A\xE6\x9C\x88",
    0
  }, {
    // "らいげつ"
    "\xE3\x82\x89\xE3\x81\x84\xE3\x81\x92\xE3\x81\xA4",
    "\xE6\x9D\xA5\xE6\x9C\x88",
    "\xE6\x9D\xA5\xE6\x9C\x88",
    1
  }, {
    // "せんげつ"
    "\xE3\x81\x9B\xE3\x82\x93\xE3\x81\x92\xE3\x81\xA4",
    "\xE5\x85\x88\xE6\x9C\x88",
    "\xE5\x85\x88\xE6\x9C\x88",
    -1
  }, {
    // "せんせんげつ"
    "\xE3\x81\x9B\xE3\x82\x93\xE3\x81\x9B\xE3\x82\x93\xE3\x81\x92\xE3\x81\xA4",
    "\xE5\x85\x88\xE3\x80\x85\xE6\x9C\x88",
    "\xE5\x85\x88\xE3\x80\x85\xE6\x9C\x88",
    -2
  }, {
    // "さらいげつ"
    "\xE3\x81\x95\xE3\x82\x89\xE3\x81\x84\xE3\x81\x92\xE3\x81\xA4",
    "\xE5\x86\x8D\xE6\x9D\xA5\xE6\x9C\x88",
    "\xE5\x86\x8D\xE6\x9D\xA5\xE6\x9C\x88",
    2
  }
};

const struct DateData kCurrentTimeData[] = {
  {
    // "いま"
    "\xE3\x81\x84\xE3\x81\xBE",
    "\xE4\xBB\x8A",
    "\xE7\x8F\xBE\xE5\x9C\xA8\xE3\x81\xAE\xE6\x99\x82\xE5\x88\xBB",
    0
  }, {
    // "じこく"
    "\xE3\x81\x98\xE3\x81\x93\xE3\x81\x8F",
    "\xE6\x99\x82\xE5\x88\xBB",
    "\xE7\x8F\xBE\xE5\x9C\xA8\xE3\x81\xAE\xE6\x99\x82\xE5\x88\xBB",
    0
  }
};

const struct DateData kDateAndCurrentTimeData[] = {
  {
    // "にちじ"
    "\xE3\x81\xAB\xE3\x81\xA1\xE3\x81\x98",
    "\xE6\x97\xA5\xE6\x99\x82",
    "\xE7\x8F\xBE\xE5\x9C\xA8\xE3\x81\xAE\xE6\x97\xA5\xE6\x99\x82",
    0
  },
};

struct YearData {
  int ad;      // AD year
  const char *era;   // Japanese year a.k.a, GENGO
  const char *key;   // reading of the `era`
};

const YearData kEraData[] = {
  // "元徳", "建武" and "明徳" are used for both south and north courts.
  {
    // "大化" "たいか"
    645,
    "\xE5\xA4\xA7\xE5\x8C\x96",
    "\xE3\x81\x9F\xE3\x81\x84\xE3\x81\x8B",
  }, {
    // "白雉" "はくち"
    650,
    "\xE7\x99\xBD\xE9\x9B\x89",
    "\xE3\x81\xAF\xE3\x81\x8F\xE3\x81\xA1",
  }, {
    // "朱鳥" "しゅちょう"
    686,
    "\xE6\x9C\xB1\xE9\xB3\xA5",
    "\xE3\x81\x97\xE3\x82\x85\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "大宝" "たいほう"
    701,
    "\xE5\xA4\xA7\xE5\xAE\x9D",
    "\xE3\x81\x9F\xE3\x81\x84\xE3\x81\xBB\xE3\x81\x86",
  }, {
    // "慶雲" "けいうん"
    704,
    "\xE6\x85\xB6\xE9\x9B\xB2",
    "\xE3\x81\x91\xE3\x81\x84\xE3\x81\x86\xE3\x82\x93",
  }, {
    // "和銅" "わどう"
    708,
    "\xE5\x92\x8C\xE9\x8A\x85",
    "\xE3\x82\x8F\xE3\x81\xA9\xE3\x81\x86",
  }, {
    // "霊亀" "れいき"
    715,
    "\xE9\x9C\x8A\xE4\xBA\x80",
    "\xE3\x82\x8C\xE3\x81\x84\xE3\x81\x8D",
  }, {
    // "養老" "ようろう"
    717,
    "\xE9\xA4\x8A\xE8\x80\x81",
    "\xE3\x82\x88\xE3\x81\x86\xE3\x82\x8D\xE3\x81\x86",
  }, {
    // "神亀" "じんき"
    724,
    "\xE7\xA5\x9E\xE4\xBA\x80",
    "\xE3\x81\x98\xE3\x82\x93\xE3\x81\x8D",
  }, {
    // "天平" "てんぴょう"
    729,
    "\xE5\xA4\xA9\xE5\xB9\xB3",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xB4\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "天平感宝" "てんぴょうかんぽう"
    749,
    "\xE5\xA4\xA9\xE5\xB9\xB3\xE6\x84\x9F\xE5\xAE\x9D",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xB4\xE3\x82\x87\xE3\x81\x86"
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\xBD\xE3\x81\x86",
  }, {
    // "天平勝宝" "てんぴょうしょうほう"
    749,
    "\xE5\xA4\xA9\xE5\xB9\xB3\xE5\x8B\x9D\xE5\xAE\x9D",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xB4\xE3\x82\x87\xE3\x81\x86"
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\xBB\xE3\x81\x86",
  }, {
    // "天平宝字" "てんぴょうほうじ"
    757,
    "\xE5\xA4\xA9\xE5\xB9\xB3\xE5\xAE\x9D\xE5\xAD\x97",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xB4\xE3\x82\x87\xE3\x81\x86"
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x81\x98",
  }, {
    // "天平神護" "てんぴょうじんご"
    765,
    "\xE5\xA4\xA9\xE5\xB9\xB3\xE7\xA5\x9E\xE8\xAD\xB7",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xB4\xE3\x82\x87\xE3\x81\x86"
    "\xE3\x81\x98\xE3\x82\x93\xE3\x81\x94",
  }, {
    // "神護景雲" "じんごけいうん"
    767,
    "\xE7\xA5\x9E\xE8\xAD\xB7\xE6\x99\xAF\xE9\x9B\xB2",
    "\xE3\x81\x98\xE3\x82\x93\xE3\x81\x94"
    "\xE3\x81\x91\xE3\x81\x84\xE3\x81\x86\xE3\x82\x93",
  }, {
    // "宝亀" "ほうき"
    770,
    "\xE5\xAE\x9D\xE4\xBA\x80",
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x81\x8D",
  }, {
    // "天応" "てんおう"
    781,
    "\xE5\xA4\xA9\xE5\xBF\x9C",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "延暦" "えんりゃく"
    782,
    "\xE5\xBB\xB6\xE6\x9A\xA6",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "大同" "たいどう"
    806,
    "\xE5\xA4\xA7\xE5\x90\x8C",
    "\xE3\x81\x9F\xE3\x81\x84\xE3\x81\xA9\xE3\x81\x86",
  }, {
    // "弘仁" "こうにん"
    810,
    "\xE5\xBC\x98\xE4\xBB\x81",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\xAB\xE3\x82\x93",
  }, {
    // "天長" "てんちょう"
    824,
    "\xE5\xA4\xA9\xE9\x95\xB7",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "承和" "じょうわ"
    834,
    "\xE6\x89\xBF\xE5\x92\x8C",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "嘉祥" "かしょう"
    848,
    "\xE5\x98\x89\xE7\xA5\xA5",
    "\xE3\x81\x8B\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "仁寿" "にんじゅ"
    851,
    "\xE4\xBB\x81\xE5\xAF\xBF",
    "\xE3\x81\xAB\xE3\x82\x93\xE3\x81\x98\xE3\x82\x85",
  }, {
    // "斉衡" "さいこう"
    854,
    "\xE6\x96\x89\xE8\xA1\xA1",
    "\xE3\x81\x95\xE3\x81\x84\xE3\x81\x93\xE3\x81\x86",
  }, {
    // "天安" "てんなん"
    857,
    "\xE5\xA4\xA9\xE5\xAE\x89",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xAA\xE3\x82\x93",
  }, {
    // "貞観" "じょうかん"
    859,
    "\xE8\xB2\x9E\xE8\xA6\xB3",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8B\xE3\x82\x93",
  }, {
    // "元慶" "がんぎょう"
    877,
    "\xE5\x85\x83\xE6\x85\xB6",
    "\xE3\x81\x8C\xE3\x82\x93\xE3\x81\x8E\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "仁和" "にんな"
    885,
    "\xE4\xBB\x81\xE5\x92\x8C",
    "\xE3\x81\xAB\xE3\x82\x93\xE3\x81\xAA",
  }, {
    // "寛平" "かんぴょう"
    889,
    "\xE5\xAF\x9B\xE5\xB9\xB3",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\xB4\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "昌泰" "しょうたい"
    898,
    "\xE6\x98\x8C\xE6\xB3\xB0",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x9F\xE3\x81\x84",
  }, {
    // "延喜" "えんぎ"
    901,
    "\xE5\xBB\xB6\xE5\x96\x9C",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\x8E",
  }, {
    // "延長" "えんちょう"
    923,
    "\xE5\xBB\xB6\xE9\x95\xB7",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "承平" "じょうへい"
    931,
    "\xE6\x89\xBF\xE5\xB9\xB3",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\xB8\xE3\x81\x84",
  }, {
    // "天慶" "てんぎょう"
    938,
    "\xE5\xA4\xA9\xE6\x85\xB6",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x8E\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "天暦" "てんりゃく"
    947,
    "\xE5\xA4\xA9\xE6\x9A\xA6",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "天徳" "てんとく"
    957,
    "\xE5\xA4\xA9\xE5\xBE\xB3",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "応和" "おうわ"
    961,
    "\xE5\xBF\x9C\xE5\x92\x8C",
    "\xE3\x81\x8A\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "康保" "こうほう"
    964,
    "\xE5\xBA\xB7\xE4\xBF\x9D",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\xBB\xE3\x81\x86",
  }, {
    // "安和" "あんな"
    968,
    "\xE5\xAE\x89\xE5\x92\x8C",
    "\xE3\x81\x82\xE3\x82\x93\xE3\x81\xAA",
  }, {
    // "天禄" "てんろく"
    970,
    "\xE5\xA4\xA9\xE7\xA6\x84",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x82\x8D\xE3\x81\x8F",
  }, {
    // "天延" "てんえん"
    973,
    "\xE5\xA4\xA9\xE5\xBB\xB6",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x88\xE3\x82\x93",
  }, {
    // "貞元" "じょうげん"
    976,
    "\xE8\xB2\x9E\xE5\x85\x83",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "天元" "てんげん"
    978,
    "\xE5\xA4\xA9\xE5\x85\x83",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "永観" "えいかん"
    983,
    "\xE6\xB0\xB8\xE8\xA6\xB3",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\x8B\xE3\x82\x93",
  }, {
    // "寛和" "かんな"
    985,
    "\xE5\xAF\x9B\xE5\x92\x8C",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\xAA",
  }, {
    // "永延" "えいえん"
    987,
    "\xE6\xB0\xB8\xE5\xBB\xB6",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\x88\xE3\x82\x93",
  }, {
    // "永祚" "えいそ"
    989,
    "\xE6\xB0\xB8\xE7\xA5\x9A",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\x9D",
  }, {
    // "正暦" "しょうりゃく"
    990,
    "\xE6\xAD\xA3\xE6\x9A\xA6",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "長徳" "ちょうとく"
    995,
    "\xE9\x95\xB7\xE5\xBE\xB3",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "長保" "ちょうほう"
    999,
    "\xE9\x95\xB7\xE4\xBF\x9D",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x81\xBB\xE3\x81\x86",
  }, {
    // "寛弘" "かんこう"
    1004,
    "\xE5\xAF\x9B\xE5\xBC\x98",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x93\xE3\x81\x86",
  }, {
    // "長和" "ちょうわ"
    1012,
    "\xE9\x95\xB7\xE5\x92\x8C",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "寛仁" "かんにん"
    1017,
    "\xE5\xAF\x9B\xE4\xBB\x81",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\xAB\xE3\x82\x93",
  }, {
    // "治安" "じあん"
    1021,
    "\xE6\xB2\xBB\xE5\xAE\x89",
    "\xE3\x81\x98\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "万寿" "まんじゅ"
    1024,
    "\xE4\xB8\x87\xE5\xAF\xBF",
    "\xE3\x81\xBE\xE3\x82\x93\xE3\x81\x98\xE3\x82\x85",
  }, {
    // "長元" "ちょうげん"
    1028,
    "\xE9\x95\xB7\xE5\x85\x83",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "長暦" "ちょうりゃく"
    1037,
    "\xE9\x95\xB7\xE6\x9A\xA6",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "長久" "ちょうきゅう"
    1040,
    "\xE9\x95\xB7\xE4\xB9\x85",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "寛徳" "かんとく"
    1044,
    "\xE5\xAF\x9B\xE5\xBE\xB3",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "永承" "えいしょう"
    1046,
    "\xE6\xB0\xB8\xE6\x89\xBF",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "天喜" "てんき"
    1053,
    "\xE5\xA4\xA9\xE5\x96\x9C",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x8D",
  }, {
    // "康平" "こうへい"
    1058,
    "\xE5\xBA\xB7\xE5\xB9\xB3",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\xB8\xE3\x81\x84",
  }, {
    // "治暦" "じりゃく"
    1065,
    "\xE6\xB2\xBB\xE6\x9A\xA6",
    "\xE3\x81\x98\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "延久" "えんきゅう"
    1069,
    "\xE5\xBB\xB6\xE4\xB9\x85",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "承保" "じょうほう"
    1074,
    "\xE6\x89\xBF\xE4\xBF\x9D",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\xBB\xE3\x81\x86",
  }, {
    // "承暦" "じょうりゃく"
    1077,
    "\xE6\x89\xBF\xE6\x9A\xA6",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "永保" "えいほ"
    1081,
    "\xE6\xB0\xB8\xE4\xBF\x9D",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\xBB",
  }, {
    // "応徳" "おうとく"
    1084,
    "\xE5\xBF\x9C\xE5\xBE\xB3",
    "\xE3\x81\x8A\xE3\x81\x86\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "寛治" "かんじ"
    1087,
    "\xE5\xAF\x9B\xE6\xB2\xBB",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x98",
  }, {
    // "嘉保" "かほう"
    1094,
    "\xE5\x98\x89\xE4\xBF\x9D",
    "\xE3\x81\x8B\xE3\x81\xBB\xE3\x81\x86",
  }, {
    // "永長" "えいちょう"
    1096,
    "\xE6\xB0\xB8\xE9\x95\xB7",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "承徳" "じょうとく"
    1097,
    "\xE6\x89\xBF\xE5\xBE\xB3",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "康和" "こうわ"
    1099,
    "\xE5\xBA\xB7\xE5\x92\x8C",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "長治" "ちょうじ"
    1104,
    "\xE9\x95\xB7\xE6\xB2\xBB",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x81\x98",
  }, {
    // "嘉承" "かしょう"
    1106,
    "\xE5\x98\x89\xE6\x89\xBF",
    "\xE3\x81\x8B\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "天仁" "てんにん"
    1108,
    "\xE5\xA4\xA9\xE4\xBB\x81",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xAB\xE3\x82\x93",
  }, {
    // "天永" "てんえい"
    1110,
    "\xE5\xA4\xA9\xE6\xB0\xB8",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "永久" "えいきゅう"
    1113,
    "\xE6\xB0\xB8\xE4\xB9\x85",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "元永" "げんえい"
    1118,
    "\xE5\x85\x83\xE6\xB0\xB8",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "保安" "ほうあん"
    1120,
    "\xE4\xBF\x9D\xE5\xAE\x89",
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "天治" "てんじ"
    1124,
    "\xE5\xA4\xA9\xE6\xB2\xBB",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x98",
  }, {
    // "大治" "だいじ"
    1126,
    "\xE5\xA4\xA7\xE6\xB2\xBB",
    "\xE3\x81\xA0\xE3\x81\x84\xE3\x81\x98",
  }, {
    // "天承" "てんじょう"
    1131,
    "\xE5\xA4\xA9\xE6\x89\xBF",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "長承" "ちょうじょう"
    1132,
    "\xE9\x95\xB7\xE6\x89\xBF",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "保延" "ほうえん"
    1135,
    "\xE4\xBF\x9D\xE5\xBB\xB6",
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x81\x88\xE3\x82\x93",
  }, {
    // "永治" "えいじ"
    1141,
    "\xE6\xB0\xB8\xE6\xB2\xBB",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\x98",
  }, {
    // "康治" "こうじ"
    1142,
    "\xE5\xBA\xB7\xE6\xB2\xBB",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x98",
  }, {
    // "天養" "てんよう"
    1144,
    "\xE5\xA4\xA9\xE9\xA4\x8A",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x82\x88\xE3\x81\x86",
  }, {
    // "久安" "きゅうあん"
    1145,
    "\xE4\xB9\x85\xE5\xAE\x89",
    "\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "仁平" "にんぺい"
    1151,
    "\xE4\xBB\x81\xE5\xB9\xB3",
    "\xE3\x81\xAB\xE3\x82\x93\xE3\x81\xBA\xE3\x81\x84",
  }, {
    // "久寿" "きゅうじゅ"
    1154,
    "\xE4\xB9\x85\xE5\xAF\xBF",
    "\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86\xE3\x81\x98\xE3\x82\x85",
  }, {
    // "保元" "ほうげん"
    1156,
    "\xE4\xBF\x9D\xE5\x85\x83",
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "平治" "へいじ"
    1159,
    "\xE5\xB9\xB3\xE6\xB2\xBB",
    "\xE3\x81\xB8\xE3\x81\x84\xE3\x81\x98",
  }, {
    // "永暦" "えいりゃく"
    1160,
    "\xE6\xB0\xB8\xE6\x9A\xA6",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "応保" "おうほ"
    1161,
    "\xE5\xBF\x9C\xE4\xBF\x9D",
    "\xE3\x81\x8A\xE3\x81\x86\xE3\x81\xBB",
  }, {
    // "長寛" "ちょうかん"
    1163,
    "\xE9\x95\xB7\xE5\xAF\x9B",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8B\xE3\x82\x93",
  }, {
    // "永万" "えいまん"
    1165,
    "\xE6\xB0\xB8\xE4\xB8\x87",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\xBE\xE3\x82\x93",
  }, {
    // "仁安" "にんあん"
    1166,
    "\xE4\xBB\x81\xE5\xAE\x89",
    "\xE3\x81\xAB\xE3\x82\x93\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "嘉応" "かおう"
    1169,
    "\xE5\x98\x89\xE5\xBF\x9C",
    "\xE3\x81\x8B\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "承安" "しょうあん"
    1171,
    "\xE6\x89\xBF\xE5\xAE\x89",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "安元" "あんげん"
    1175,
    "\xE5\xAE\x89\xE5\x85\x83",
    "\xE3\x81\x82\xE3\x82\x93\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "治承" "じしょう"
    1177,
    "\xE6\xB2\xBB\xE6\x89\xBF",
    "\xE3\x81\x98\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "養和" "ようわ"
    1181,
    "\xE9\xA4\x8A\xE5\x92\x8C",
    "\xE3\x82\x88\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "寿永" "じゅえい"
    1182,
    "\xE5\xAF\xBF\xE6\xB0\xB8",
    "\xE3\x81\x98\xE3\x82\x85\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "元暦" "げんりゃく"
    1184,
    "\xE5\x85\x83\xE6\x9A\xA6",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "文治" "ぶんじ"
    1185,
    "\xE6\x96\x87\xE6\xB2\xBB",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x98",
  }, {
    // "建久" "けんきゅう"
    1190,
    "\xE5\xBB\xBA\xE4\xB9\x85",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "正治" "しょうじ"
    1199,
    "\xE6\xAD\xA3\xE6\xB2\xBB",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x98",
  }, {
    // "建仁" "けんにん"
    1201,
    "\xE5\xBB\xBA\xE4\xBB\x81",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x81\xAB\xE3\x82\x93",
  }, {
    // "元久" "げんきゅう"
    1204,
    "\xE5\x85\x83\xE4\xB9\x85",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "建永" "けんえい"
    1206,
    "\xE5\xBB\xBA\xE6\xB0\xB8",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "承元" "じょうげん"
    1207,
    "\xE6\x89\xBF\xE5\x85\x83",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "建暦" "けんりゃく"
    1211,
    "\xE5\xBB\xBA\xE6\x9A\xA6",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "建保" "けんぽう"
    1213,
    "\xE5\xBB\xBA\xE4\xBF\x9D",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x81\xBD\xE3\x81\x86",
  }, {
    // "承久" "しょうきゅう"
    1219,
    "\xE6\x89\xBF\xE4\xB9\x85",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "貞応" "じょうおう"
    1222,
    "\xE8\xB2\x9E\xE5\xBF\x9C",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "元仁" "げんにん"
    1224,
    "\xE5\x85\x83\xE4\xBB\x81",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\xAB\xE3\x82\x93",
  }, {
    // "嘉禄" "かろく"
    1225,
    "\xE5\x98\x89\xE7\xA6\x84",
    "\xE3\x81\x8B\xE3\x82\x8D\xE3\x81\x8F",
  }, {
    // "安貞" "あんてい"
    1227,
    "\xE5\xAE\x89\xE8\xB2\x9E",
    "\xE3\x81\x82\xE3\x82\x93\xE3\x81\xA6\xE3\x81\x84",
  }, {
    // "寛喜" "かんき"
    1229,
    "\xE5\xAF\x9B\xE5\x96\x9C",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x8D",
  }, {
    // "貞永" "じょうえい"
    1232,
    "\xE8\xB2\x9E\xE6\xB0\xB8",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "天福" "てんぷく"
    1233,
    "\xE5\xA4\xA9\xE7\xA6\x8F",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xB7\xE3\x81\x8F",
  }, {
    // "文暦" "ぶんりゃく"
    1234,
    "\xE6\x96\x87\xE6\x9A\xA6",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "嘉禎" "かてい"
    1235,
    "\xE5\x98\x89\xE7\xA6\x8E",
    "\xE3\x81\x8B\xE3\x81\xA6\xE3\x81\x84",
  }, {
    // "暦仁" "りゃくにん"
    1238,
    "\xE6\x9A\xA6\xE4\xBB\x81",
    "\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F\xE3\x81\xAB\xE3\x82\x93",
  }, {
    // "延応" "えんおう"
    1239,
    "\xE5\xBB\xB6\xE5\xBF\x9C",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "仁治" "にんじゅ"
    1240,
    "\xE4\xBB\x81\xE6\xB2\xBB",
    "\xE3\x81\xAB\xE3\x82\x93\xE3\x81\x98\xE3\x82\x85",
  }, {
    // "寛元" "かんげん"
    1243,
    "\xE5\xAF\x9B\xE5\x85\x83",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "宝治" "ほうじ"
    1247,
    "\xE5\xAE\x9D\xE6\xB2\xBB",
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x81\x98",
  }, {
    // "建長" "けんちょう"
    1249,
    "\xE5\xBB\xBA\xE9\x95\xB7",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "康元" "こうげん"
    1256,
    "\xE5\xBA\xB7\xE5\x85\x83",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "正嘉" "しょうか"
    1257,
    "\xE6\xAD\xA3\xE5\x98\x89",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8B",
  }, {
    // "正元" "しょうげん"
    1259,
    "\xE6\xAD\xA3\xE5\x85\x83",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "文応" "ぶんおう"
    1260,
    "\xE6\x96\x87\xE5\xBF\x9C",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "弘長" "こうちょう"
    1261,
    "\xE5\xBC\x98\xE9\x95\xB7",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "文永" "ぶんえい"
    1264,
    "\xE6\x96\x87\xE6\xB0\xB8",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "建治" "けんじ"
    1275,
    "\xE5\xBB\xBA\xE6\xB2\xBB",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x81\x98",
  }, {
    // "弘安" "こうあん"
    1278,
    "\xE5\xBC\x98\xE5\xAE\x89",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "正応" "しょうおう"
    1288,
    "\xE6\xAD\xA3\xE5\xBF\x9C",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "永仁" "えいにん"
    1293,
    "\xE6\xB0\xB8\xE4\xBB\x81",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\xAB\xE3\x82\x93",
  }, {
    // "正安" "しょうあん"
    1299,
    "\xE6\xAD\xA3\xE5\xAE\x89",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "乾元" "けんげん"
    1302,
    "\xE4\xB9\xBE\xE5\x85\x83",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "嘉元" "かげん"
    1303,
    "\xE5\x98\x89\xE5\x85\x83",
    "\xE3\x81\x8B\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "徳治" "とくじ"
    1306,
    "\xE5\xBE\xB3\xE6\xB2\xBB",
    "\xE3\x81\xA8\xE3\x81\x8F\xE3\x81\x98",
  }, {
    // "延慶" "えんぎょう"
    1308,
    "\xE5\xBB\xB6\xE6\x85\xB6",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\x8E\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "応長" "おうちょう"
    1311,
    "\xE5\xBF\x9C\xE9\x95\xB7",
    "\xE3\x81\x8A\xE3\x81\x86\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "正和" "しょうわ"
    1312,
    "\xE6\xAD\xA3\xE5\x92\x8C",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "文保" "ぶんぽう"
    1317,
    "\xE6\x96\x87\xE4\xBF\x9D",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\xBD\xE3\x81\x86",
  }, {
    // "元応" "げんおう"
    1319,
    "\xE5\x85\x83\xE5\xBF\x9C",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "元亨" "げんこう"
    1321,
    "\xE5\x85\x83\xE4\xBA\xA8",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\x93\xE3\x81\x86",
  }, {
    // "正中" "しょうちゅう"
    1324,
    "\xE6\xAD\xA3\xE4\xB8\xAD",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\xA1\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "嘉暦" "かりゃく"
    1326,
    "\xE5\x98\x89\xE6\x9A\xA6",
    "\xE3\x81\x8B\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "元徳" "げんとく"
    1329,
    "\xE5\x85\x83\xE5\xBE\xB3",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "元弘" "げんこう"
    1331,
    "\xE5\x85\x83\xE5\xBC\x98",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\x93\xE3\x81\x86",
  }, {
    // "建武" "けんむ"
    1334,
    "\xE5\xBB\xBA\xE6\xAD\xA6",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x82\x80",
  }, {
    // "延元" "えんげん"
    1336,
    "\xE5\xBB\xB6\xE5\x85\x83",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\x92\xE3\x82\x93",
  }, {
    // "興国" "こうこく"
    1340,
    "\xE8\x88\x88\xE5\x9B\xBD",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x93\xE3\x81\x8F",
  }, {
    // "正平" "しょうへい"
    1346,
    "\xE6\xAD\xA3\xE5\xB9\xB3",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\xB8\xE3\x81\x84",
  }, {
    // "建徳" "けんとく"
    1370,
    "\xE5\xBB\xBA\xE5\xBE\xB3",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "文中" "ぶんちゅう"
    1372,
    "\xE6\x96\x87\xE4\xB8\xAD",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\xA1\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "天授" "てんじゅ"
    1375,
    "\xE5\xA4\xA9\xE6\x8E\x88",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x98\xE3\x82\x85",
  }, {
    // "弘和" "こうわ"
    1381,
    "\xE5\xBC\x98\xE5\x92\x8C",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "元中" "げんちゅう"
    1384,
    "\xE5\x85\x83\xE4\xB8\xAD",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\xA1\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "明徳" "めいとく"
    1390,
    "\xE6\x98\x8E\xE5\xBE\xB3",
    "\xE3\x82\x81\xE3\x81\x84\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "応永" "おうえい"
    1394,
    "\xE5\xBF\x9C\xE6\xB0\xB8",
    "\xE3\x81\x8A\xE3\x81\x86\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "正長" "しょうちょう"
    1428,
    "\xE6\xAD\xA3\xE9\x95\xB7",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "永享" "えいきょう"
    1429,
    "\xE6\xB0\xB8\xE4\xBA\xAB",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "嘉吉" "かきつ"
    1441,
    "\xE5\x98\x89\xE5\x90\x89",
    "\xE3\x81\x8B\xE3\x81\x8D\xE3\x81\xA4",
  }, {
    // "文安" "ぶんあん"
    1444,
    "\xE6\x96\x87\xE5\xAE\x89",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "宝徳" "ほうとく"
    1449,
    "\xE5\xAE\x9D\xE5\xBE\xB3",
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "享徳" "きょうとく"
    1452,
    "\xE4\xBA\xAB\xE5\xBE\xB3",
    "\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "康正" "こうしょう"
    1455,
    "\xE5\xBA\xB7\xE6\xAD\xA3",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "長禄" "ちょうろく"
    1457,
    "\xE9\x95\xB7\xE7\xA6\x84",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8D\xE3\x81\x8F",
  }, {
    // "寛正" "かんしょう"
    1460,
    "\xE5\xAF\x9B\xE6\xAD\xA3",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "文正" "ぶんしょう"
    1466,
    "\xE6\x96\x87\xE6\xAD\xA3",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "応仁" "おうにん"
    1467,
    "\xE5\xBF\x9C\xE4\xBB\x81",
    "\xE3\x81\x8A\xE3\x81\x86\xE3\x81\xAB\xE3\x82\x93",
  }, {
    // "文明" "ぶんめい"
    1469,
    "\xE6\x96\x87\xE6\x98\x8E",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x82\x81\xE3\x81\x84",
  }, {
    // "長享" "ちょうきょう"
    1487,
    "\xE9\x95\xB7\xE4\xBA\xAB",
    "\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "延徳" "えんとく"
    1489,
    "\xE5\xBB\xB6\xE5\xBE\xB3",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "明応" "めいおう"
    1492,
    "\xE6\x98\x8E\xE5\xBF\x9C",
    "\xE3\x82\x81\xE3\x81\x84\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "文亀" "ぶんき"
    1501,
    "\xE6\x96\x87\xE4\xBA\x80",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x8D",
  }, {
    // "永正" "えいしょう"
    1504,
    "\xE6\xB0\xB8\xE6\xAD\xA3",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "大永" "だいえい"
    1521,
    "\xE5\xA4\xA7\xE6\xB0\xB8",
    "\xE3\x81\xA0\xE3\x81\x84\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "享禄" "きょうろく"
    1528,
    "\xE4\xBA\xAB\xE7\xA6\x84",
    "\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8D\xE3\x81\x8F",
  }, {
    // "天文" "てんぶん"
    1532,
    "\xE5\xA4\xA9\xE6\x96\x87",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xB6\xE3\x82\x93",
  }, {
    // "弘治" "こうじ"
    1555,
    "\xE5\xBC\x98\xE6\xB2\xBB",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x98",
  }, {
    // "永禄" "えいろく"
    1558,
    "\xE6\xB0\xB8\xE7\xA6\x84",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x82\x8D\xE3\x81\x8F",
  }, {
    // "元亀" "げんき"
    1570,
    "\xE5\x85\x83\xE4\xBA\x80",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\x8D",
  }, {
    // "天正" "てんしょう"
    1573,
    "\xE5\xA4\xA9\xE6\xAD\xA3",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "文禄" "ぶんろく"
    1592,
    "\xE6\x96\x87\xE7\xA6\x84",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x82\x8D\xE3\x81\x8F",
  }, {
    // "慶長" "けいちょう"
    1596,
    "\xE6\x85\xB6\xE9\x95\xB7",
    "\xE3\x81\x91\xE3\x81\x84\xE3\x81\xA1\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "元和" "げんな"
    1615,
    "\xE5\x85\x83\xE5\x92\x8C",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\xAA",
  }, {
    // "寛永" "かんえい"
    1624,
    "\xE5\xAF\x9B\xE6\xB0\xB8",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "正保" "しょうほう"
    1644,
    "\xE6\xAD\xA3\xE4\xBF\x9D",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\xBB\xE3\x81\x86",
  }, {
    // "慶安" "けいあん"
    1648,
    "\xE6\x85\xB6\xE5\xAE\x89",
    "\xE3\x81\x91\xE3\x81\x84\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "承応" "じょうおう"
    1652,
    "\xE6\x89\xBF\xE5\xBF\x9C",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "明暦" "めいれき"
    1655,
    "\xE6\x98\x8E\xE6\x9A\xA6",
    "\xE3\x82\x81\xE3\x81\x84\xE3\x82\x8C\xE3\x81\x8D",
  }, {
    // "万治" "まんじ"
    1658,
    "\xE4\xB8\x87\xE6\xB2\xBB",
    "\xE3\x81\xBE\xE3\x82\x93\xE3\x81\x98",
  }, {
    // "寛文" "かんぶん"
    1661,
    "\xE5\xAF\x9B\xE6\x96\x87",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\xB6\xE3\x82\x93",
  }, {
    // "延宝" "えんぽう"
    1673,
    "\xE5\xBB\xB6\xE5\xAE\x9D",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\xBD\xE3\x81\x86",
  }, {
    // "天和" "てんな"
    1681,
    "\xE5\xA4\xA9\xE5\x92\x8C",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xAA",
  }, {
    // "貞享" "じょうきょう"
    1684,
    "\xE8\xB2\x9E\xE4\xBA\xAB",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "元禄" "げんろく"
    1688,
    "\xE5\x85\x83\xE7\xA6\x84",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x82\x8D\xE3\x81\x8F",
  }, {
    // "宝永" "ほうえい"
    1704,
    "\xE5\xAE\x9D\xE6\xB0\xB8",
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "正徳" "しょうとく"
    1711,
    "\xE6\xAD\xA3\xE5\xBE\xB3",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "享保" "きょうほ"
    1716,
    "\xE4\xBA\xAB\xE4\xBF\x9D",
    "\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86\xE3\x81\xBB",
  }, {
    // "元文" "げんぶん"
    1736,
    "\xE5\x85\x83\xE6\x96\x87",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\xB6\xE3\x82\x93",
  }, {
    // "寛保" "かんぽ"
    1741,
    "\xE5\xAF\x9B\xE4\xBF\x9D",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\xBD",
  }, {
    // "延享" "えんきょう"
    1744,
    "\xE5\xBB\xB6\xE4\xBA\xAB",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "寛延" "かんえん"
    1748,
    "\xE5\xAF\x9B\xE5\xBB\xB6",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x88\xE3\x82\x93",
  }, {
    // "宝暦" "ほうれき"
    1751,
    "\xE5\xAE\x9D\xE6\x9A\xA6",
    "\xE3\x81\xBB\xE3\x81\x86\xE3\x82\x8C\xE3\x81\x8D",
  }, {
    // "明和" "めいわ"
    1764,
    "\xE6\x98\x8E\xE5\x92\x8C",
    "\xE3\x82\x81\xE3\x81\x84\xE3\x82\x8F",
  }, {
    // "安永" "あんえい"
    1772,
    "\xE5\xAE\x89\xE6\xB0\xB8",
    "\xE3\x81\x82\xE3\x82\x93\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "天明" "てんめい"
    1781,
    "\xE5\xA4\xA9\xE6\x98\x8E",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x82\x81\xE3\x81\x84",
  }, {
    // "寛政" "かんせい"
    1789,
    "\xE5\xAF\x9B\xE6\x94\xBF",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x9B\xE3\x81\x84",
  }, {
    // "享和" "きょうわ"
    1801,
    "\xE4\xBA\xAB\xE5\x92\x8C",
    "\xE3\x81\x8D\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "文化" "ぶんか"
    1804,
    "\xE6\x96\x87\xE5\x8C\x96",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x8B",
  }, {
    // "文政" "ぶんせい"
    1818,
    "\xE6\x96\x87\xE6\x94\xBF",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x9B\xE3\x81\x84",
  }, {
    // "天保" "てんぽう"
    1830,
    "\xE5\xA4\xA9\xE4\xBF\x9D",
    "\xE3\x81\xA6\xE3\x82\x93\xE3\x81\xBD\xE3\x81\x86",
  }, {
    // "弘化" "こうか"
    1844,
    "\xE5\xBC\x98\xE5\x8C\x96",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x8B",
  }, {
    // "嘉永" "かえい"
    1848,
    "\xE5\x98\x89\xE6\xB0\xB8",
    "\xE3\x81\x8B\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "安政" "あんせい"
    1854,
    "\xE5\xAE\x89\xE6\x94\xBF",
    "\xE3\x81\x82\xE3\x82\x93\xE3\x81\x9B\xE3\x81\x84",
  }, {
    // "万延" "まんえん"
    1860,
    "\xE4\xB8\x87\xE5\xBB\xB6",
    "\xE3\x81\xBE\xE3\x82\x93\xE3\x81\x88\xE3\x82\x93",
  }, {
    // "文久" "ぶんきゅう"
    1861,
    "\xE6\x96\x87\xE4\xB9\x85",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x81\x8D\xE3\x82\x85\xE3\x81\x86",
  }, {
    // "元治" "げんじ"
    1864,
    "\xE5\x85\x83\xE6\xB2\xBB",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\x98",
  }, {
    // "慶応" "けいおう"
    1865,
    "\xE6\x85\xB6\xE5\xBF\x9C",
    "\xE3\x81\x91\xE3\x81\x84\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "明治" "めいじ"
    1868,
    "\xE6\x98\x8E\xE6\xB2\xBB",
    "\xE3\x82\x81\xE3\x81\x84\xE3\x81\x98",
  }, {
    // "大正" "たいしょう"
    1912,
    "\xE5\xA4\xA7\xE6\xAD\xA3",
    "\xE3\x81\x9F\xE3\x81\x84\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86",
  }, {
    // "昭和" "しょうわ"
    1926,
    "\xE6\x98\xAD\xE5\x92\x8C",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "平成" "へいせい"
    1989,
    "\xE5\xB9\xB3\xE6\x88\x90",
    "\xE3\x81\xB8\xE3\x81\x84\xE3\x81\x9B\xE3\x81\x84",
  }
};

const YearData kNorthEraData[] = {
  // "元徳", "建武" and "明徳" are used for both south and north courts.
  {
    // "元徳" "げんとく"
    1329,
    "\xE5\x85\x83\xE5\xBE\xB3",
    "\xE3\x81\x92\xE3\x82\x93\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "正慶" "しょうけい"
    1332,
    "\xE6\xAD\xA3\xE6\x85\xB6",
    "\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x81\x91\xE3\x81\x84",
  }, {
    // "建武" "けんむ"
    1334,
    "\xE5\xBB\xBA\xE6\xAD\xA6",
    "\xE3\x81\x91\xE3\x82\x93\xE3\x82\x80",
  }, {
    // "暦応" "りゃくおう"
    1338,
    "\xE6\x9A\xA6\xE5\xBF\x9C",
    "\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "康永" "こうえい"
    1342,
    "\xE5\xBA\xB7\xE6\xB0\xB8",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x88\xE3\x81\x84",
  }, {
    // "貞和" "じょうわ"
    1345,
    "\xE8\xB2\x9E\xE5\x92\x8C",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x82\x8F",
  }, {
    // "観応" "かんおう"
    1350,
    "\xE8\xA6\xB3\xE5\xBF\x9C",
    "\xE3\x81\x8B\xE3\x82\x93\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "文和" "ぶんわ"
    1352,
    "\xE6\x96\x87\xE5\x92\x8C",
    "\xE3\x81\xB6\xE3\x82\x93\xE3\x82\x8F",
  }, {
    // "延文" "えんぶん"
    1356,
    "\xE5\xBB\xB6\xE6\x96\x87",
    "\xE3\x81\x88\xE3\x82\x93\xE3\x81\xB6\xE3\x82\x93",
  }, {
    // "康安" "こうあん"
    1361,
    "\xE5\xBA\xB7\xE5\xAE\x89",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "貞治" "じょうじ"
    1362,
    "\xE8\xB2\x9E\xE6\xB2\xBB",
    "\xE3\x81\x98\xE3\x82\x87\xE3\x81\x86\xE3\x81\x98",
  }, {
    // "応安" "おうあん"
    1368,
    "\xE5\xBF\x9C\xE5\xAE\x89",
    "\xE3\x81\x8A\xE3\x81\x86\xE3\x81\x82\xE3\x82\x93",
  }, {
    // "永和" "えいわ"
    1375,
    "\xE6\xB0\xB8\xE5\x92\x8C",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x82\x8F",
  }, {
    // "康暦" "こうりゃく"
    1379,
    "\xE5\xBA\xB7\xE6\x9A\xA6",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x82\x8A\xE3\x82\x83\xE3\x81\x8F",
  }, {
    // "永徳" "えいとく"
    1381,
    "\xE6\xB0\xB8\xE5\xBE\xB3",
    "\xE3\x81\x88\xE3\x81\x84\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "至徳" "しとく"
    1384,
    "\xE8\x87\xB3\xE5\xBE\xB3",
    "\xE3\x81\x97\xE3\x81\xA8\xE3\x81\x8F",
  }, {
    // "嘉慶" "かけい"
    1387,
    "\xE5\x98\x89\xE6\x85\xB6",
    "\xE3\x81\x8B\xE3\x81\x91\xE3\x81\x84",
  }, {
    // "康応" "こうおう"
    1389,
    "\xE5\xBA\xB7\xE5\xBF\x9C",
    "\xE3\x81\x93\xE3\x81\x86\xE3\x81\x8A\xE3\x81\x86",
  }, {
    // "明徳" "めいとく"
    1390,
    "\xE6\x98\x8E\xE5\xBE\xB3",
    "\xE3\x82\x81\xE3\x81\x84\xE3\x81\xA8\xE3\x81\x8F",
  }
};

const char *kWeekDayString[] = {
  "\xE6\x97\xA5",   // "日"
  "\xE6\x9C\x88",   // "月"
  "\xE7\x81\xAB",   // "火"
  "\xE6\xB0\xB4",   // "水"
  "\xE6\x9C\xA8",   // "木"
  "\xE9\x87\x91",   // "金"
  "\xE5\x9C\x9F",   // "土"
};

// Converts a prefix and year number to Japanese Kanji Representation
// arguments :
//      - input "prefix" : a japanese style year counter prefix.
//      - input "year" : represent integer must be smaller than 100.
//      - output "result" : will be stored candidate strings
// If the input year is invalid ( accept only [ 1 - 99 ] ) , this function
// returns false and clear output vector.
bool ExpandYear(const string &prefix, int year, vector<string> *result) {
  DCHECK(result);
  if (year <= 0 || year >= 100) {
    result->clear();
    return false;
  }

  if (year == 1) {
    //  "元年"
    result->push_back(prefix + "\xE5\x85\x83");
    return true;
  }

  result->push_back(prefix + NumberUtil::SimpleItoa(year));

  string arabic = NumberUtil::SimpleItoa(year);

  vector<NumberUtil::NumberString> output;

  NumberUtil::ArabicToKanji(arabic, &output);

  for (int i = 0; i < output.size(); i++) {
    if (output[i].style == NumberUtil::NumberString::NUMBER_KANJI) {
      result->push_back(prefix + output[i].value);
    }
  }

  return true;
}

void Insert(const Segment::Candidate &base_candidate,
            int position,
            const string &value,
            const char *description,
            Segment *segment) {
  Segment::Candidate *c = segment->insert_candidate(position);
  DCHECK(c);
  c->Init();
  c->lid = base_candidate.lid;
  c->rid = base_candidate.rid;
  c->cost = base_candidate.cost;
  c->value = value;
  c->key = base_candidate.key;
  c->content_key = base_candidate.content_key;
  c->attributes |= Segment::Candidate::NO_LEARNING;
  c->attributes |= Segment::Candidate::NO_VARIANTS_EXPANSION;
  if (description != NULL) {
    c->description = description;
  }
}

enum {
  REWRITE_YEAR,
  REWRITE_DATE,
  REWRITE_MONTH,
  REWRITE_CURRENT_TIME,
  REWRITE_DATE_AND_CURRENT_TIME
};

bool AdToEraForCourt(const YearData *data, int size,
                     int year, vector<string> *results) {
  for (int i = size - 1; i >= 0; --i) {
    if (i == size - 1 && year > data[i].ad) {
      ExpandYear(data[i].era, year - data[i].ad + 1, results);
      return true;
    } else if (i > 0 && data[i-1].ad < year && year <= data[i].ad) {
      // have two representations:
      // 1989 -> "昭和64" and "平成元"
      if (year == data[i].ad) {
        ExpandYear(data[i].era, 1, results);
      }
      ExpandYear(data[i - 1].era, year - data[i - 1].ad + 1, results);
      return true;
    } else if (i == 0 && data[i].ad <= year) {
      if (year == data[i].ad) {
        ExpandYear(data[i].era, 1, results);
      } else {
        ExpandYear(data[i - 1].era, year - data[i - 1].ad + 1, results);
      }
      return true;
    }
  }

  return false;
}

// "ねん"
const char kNenKey[] = "\xE3\x81\xAD\xE3\x82\x93";
// "年"
const char kNenValue[] = "\xE5\xB9\xB4";

bool ExtractYearFromKey(const YearData &year_data,
                        const string &key,
                        int *year,
                        string *description) {
  // "がん"
  const char kGanKey[] = "\xE3\x81\x8C\xE3\x82\x93";
  // "元"
  const char kGanValue[] = "\xE5\x85\x83";

  // Util::EndsWith(key, kNenKey) is expected to always return true
  DCHECK(Util::EndsWith(key, kNenKey));
  if (!Util::StartsWith(key, year_data.key)) {
    return false;
  }
  // key="しょうわ59ねん" -> era_year_str="59"
  // key="へいせいがんねん" -> era_year_str="がん"
  const size_t year_start = Util::CharsLen(year_data.key);
  const size_t year_length = Util::CharsLen(key) -
      year_start - Util::CharsLen(kNenKey);
  string era_year_str(Util::SubString(key, year_start, year_length));

  // "元年"
  if (era_year_str == kGanKey) {
    *year = 1;
    description->assign(year_data.era).append(kGanValue).append(kNenValue);
    return true;
  }

  if (!NumberUtil::IsArabicNumber(era_year_str)) {
    return false;
  }
  *year = atoi32(era_year_str.c_str());
  if (*year <= 0) {
    return false;
  }
  *description = year_data.era + era_year_str + kNenValue;

  return true;
}

bool EraToAdForCourt(const YearData *data, size_t size, const string &key,
                     vector<string> *results, vector<string> *descriptions) {
  if (!Util::EndsWith(key, kNenKey)) {
    return false;
  }

  bool modified = false;
  for (size_t i = 0; i < size; ++i) {
    const YearData &year_data = data[i];
    if (!Util::StartsWith(key, year_data.key)) {
      continue;
    }

    // key="しょうわ59ねん" -> era_year=59, description="昭和59年"
    // key="へいせいがんねん" -> era_year=1, description="平成元年"
    int era_year = 0;
    string description = "";
    if (!ExtractYearFromKey(year_data, key, &era_year, &description)) {
      continue;
    }
    const int ad_year = era_year + year_data.ad - 1;

    // Get wide arabic numbers
    // e.g.) 1989 -> "１９８９", "一九八九"
    vector<NumberUtil::NumberString> output;
    const string ad_year_str(NumberUtil::SimpleItoa(ad_year));
    NumberUtil::ArabicToWideArabic(ad_year_str, &output);
    // add half-width arabic number to `output` (e.g. "1989")
    output.push_back(NumberUtil::NumberString(
        ad_year_str,
        "",
        NumberUtil::NumberString::DEFAULT_STYLE));

    for (size_t j = 0; j < output.size(); ++j) {
      // "元徳", "建武" and "明徳" require dedupe
      const string value(output[j].value + kNenValue);
      vector<string>::const_iterator found = find(results->begin(),
                                                  results->end(),
                                                  value);
      if (found != results->end()) {
        continue;
      }
      results->push_back(value);
      descriptions->push_back(description);
    }
    modified = true;
  }
  return modified;
}

// Checkes given date is valid or not.
// Over 24 hour expression is allowed in this function.
// Acceptable hour is between 0 and 29.
bool IsValidTime(uint32 hour, uint32 minute) {
  if (hour >= 30 || minute >= 60) {
    return false;
  } else {
    return true;
  }
}

// Returns February last day.
// This function deals with leap year with Gregorian calendar.
uint32 GetFebruaryLastDay(uint32 year) {
  uint32 february_end = (year % 4 == 0) ? 29 : 28;
  if (year % 100 == 0 && year % 400 != 0) {
    february_end = 28;
  }
  return february_end;
}

// Checkes given date is valid or not.
bool IsValidDate(uint32 year, uint32 month, uint32 day) {
  if (day < 1) {
    return false;
  }

  if (year == 0 || year > 2100) {
    return false;
  }

  switch (month) {
    case 2: {
      if (day > GetFebruaryLastDay(year)) {
        return false;
      } else {
        return true;
      }
    }
    case 4: case 6: case 9: case 11: {
      if (day > 30) {
        return false;
      } else {
        return true;
      }
    }
    case 1: case 3: case 5: case 7: case 8: case 10: case 12: {
      if (day > 31) {
        return false;
      } else {
        return true;
      }
    }
    default: {
      return false;
    }
  }
}

// Checks given date is valid or not in this year
bool IsValidDateInThisYear(uint32 month, uint32 day) {
  struct tm t_st;
  if (!Util::GetTmWithOffsetSecond(&t_st, 0)) {
    LOG(ERROR) << "GetTmWithOffsetSecond() failed";
    return false;
  }
  return IsValidDate(t_st.tm_year + 1900, month, day);
}
}  // namespace

// convert AD to Japanese ERA.
// The results will have multiple variants.
bool DateRewriter::AdToEra(int year, vector<string> *results) const {
  if (year < 645 || year > 2050) {    // TODO(taku) is it enough?
    return false;
  }

  // The order is south to north.
  vector<string> eras;
  bool r = false;
  r = AdToEraForCourt(kEraData, arraysize(kEraData), year, &eras);
  if (year > 1331 && year < 1393) {
    r |= AdToEraForCourt(kNorthEraData, arraysize(kNorthEraData),
                          year, &eras);
  }
  // 1334 requires dedupe
  for (int i = 0; i < eras.size(); ++i) {
    bool found = false;
    for (int j = 0; j < i; ++j) {
      if (eras[j] == eras[i]) {
        found = true;
      }
    }
    if (!found) {
      results->push_back(eras[i]);
    }
  }
  return r;
}

bool DateRewriter::EraToAd(const string &key,
                           vector<string> *results,
                           vector<string> *descritions) const {
  bool ret = false;
  // The order is south to north, older to newer
  ret |= EraToAdForCourt(kEraData, arraysize(kEraData),
                         key, results, descritions);
  ret |= EraToAdForCourt(kNorthEraData, arraysize(kNorthEraData),
                         key, results, descritions);
  return ret;
}

bool DateRewriter::ConvertTime(uint32 hour, uint32 min,
                               vector<string> *results) const {
  DCHECK(results);
  if (!IsValidTime(hour, min)) {
    return false;
  }

  results->push_back(Util::StringPrintf("%d:%2.2d", hour, min));

  // "H時MM分"
  results->push_back(Util::StringPrintf("%d\xE6\x99\x82%2.2d\xE5\x88\x86",
                                        hour, min));

  if (min == 30) {
    // "H時半"
    results->push_back(Util::StringPrintf("%d\xE6\x99\x82\xE5\x8D\x8A", hour));
  }

  if ((hour % 24) * 60 + min < 720) {   // 0:00 -- 11:59
    // "午前H時MM分"
    results->push_back(Util::StringPrintf(
        "\xE5\x8D\x88\xE5\x89\x8D%d\xE6\x99\x82%d\xE5\x88\x86",
        hour % 24, min));

    if (min == 30) {
      // "午前H時半"
      results->push_back(Util::StringPrintf(
          "\xE5\x8D\x88\xE5\x89\x8D%d\xE6\x99\x82\xE5\x8D\x8A",
          hour % 24));
    }
  } else {
    // "午後H時MM分"
    results->push_back(Util::StringPrintf(
        "\xE5\x8D\x88\xE5\xBE\x8C%d\xE6\x99\x82%d\xE5\x88\x86",
        (hour - 12) % 24, min));

    if (min == 30) {
      // "午後H時半"
      results->push_back(Util::StringPrintf(
          "\xE5\x8D\x88\xE5\xBE\x8C%d\xE6\x99\x82\xE5\x8D\x8A",
          (hour - 12) % 24));
    }
  }

  return true;
}

bool DateRewriter::ConvertDateWithYear(uint32 year, uint32 month, uint32 day,
                                       vector<string> *results) const {
    DCHECK(results);
    if (!IsValidDate(year, month, day)) {
      return false;
    }

    // "Y/MM/DD"
    results->push_back(Util::StringPrintf("%d/%2.2d/%2.2d", year, month, day));

    // "Y-MM-DD"
    results->push_back(Util::StringPrintf("%d-%2.2d-%2.2d", year, month, day));

    // "Y年M月D日"
    results->push_back(Util::StringPrintf(
        "%d" "\xE5\xB9\xB4" "%d" "\xE6\x9C\x88" "%d" "\xE6\x97\xA5",
        year, month, day));

    return true;
}

bool DateRewriter::ConvertDateWithoutYear(uint32 month, uint32 day,
                                          vector<string> *results) const {
    DCHECK(results);
    if (!IsValidDateInThisYear(month, day)) {
      return false;
    }

    // "MM/DD"
    results->push_back(Util::StringPrintf("%2.2d/%2.2d", month, day));

    // "M月D日"
    results->push_back(Util::StringPrintf("%d\xE6\x9C\x88%d\xE6\x97\xA5",
                                          month, day));

    return true;
}

bool DateRewriter::RewriteTime(Segment *segment,
                               const char *key,
                               const char *value,
                               const char *description,
                               int type, int diff) const {
  if (segment->key() != key) {   // only exact match
    return false;
  }

  const size_t kMinSize = 10;
  const size_t size = min(kMinSize, segment->candidates_size());

  for (size_t cand_idx = 0; cand_idx < size; ++cand_idx) {
    const Segment::Candidate &cand = segment->candidate(cand_idx);
    if (cand.value != value) {
      continue;
    }
    // Date candidates are too many, therefore highest candidate show at most
    // 3rd.
    // TODO(nona): learn date candidate even if the date is changed.
    const size_t kMinimumDateCandidateIdx = 3;
    const size_t insert_idx = (size < kMinimumDateCandidateIdx) ?
        size : max(cand_idx + 1, kMinimumDateCandidateIdx);

    struct tm t_st;
    vector<string> era;
    switch (type) {
      case REWRITE_DATE: {
        if (!Util::GetTmWithOffsetSecond(&t_st, diff * 86400)) {
          LOG(ERROR) << "GetTmWithOffsetSecond() failed";
          return false;
        }
        vector<string> results;
        ConvertDateWithYear(t_st.tm_year + 1900, t_st.tm_mon + 1, t_st.tm_mday,
                            &results);
        if (AdToEra(t_st.tm_year + 1900, &era) && !era.empty()) {
          // "平成Y年M月D日"
          results.push_back(Util::StringPrintf(
              "%s" "\xE5\xB9\xB4" "%d" "\xE6\x9C\x88" "%d" "\xE6\x97\xA5",
              era[0].c_str(), t_st.tm_mon + 1, t_st.tm_mday));
        }
        // "WDAY曜日"
        results.push_back(Util::StringPrintf("%s" "\xE6\x9B\x9C\xE6\x97\xA5",
                                             kWeekDayString[t_st.tm_wday]));

        for (vector<string>::reverse_iterator rit = results.rbegin();
             rit != results.rend(); ++rit) {
          Insert(cand, insert_idx , *rit, description, segment);
        }
        return true;
      }

      case REWRITE_MONTH: {
        if (!Util::GetCurrentTm(&t_st)) {
          LOG(ERROR) << "GetCurrentTm failed";
          return false;
        }
        const int month = (t_st.tm_mon + diff + 12) % 12 + 1;
        // "月"
        Insert(cand, insert_idx, Util::StringPrintf("%d\xE6\x9C\x88", month),
               description, segment);
        Insert(cand, insert_idx, Util::StringPrintf("%d", month), description,
               segment);
        return true;
      }

      case REWRITE_YEAR: {
        if (!Util::GetCurrentTm(&t_st)) {
          LOG(ERROR) << "GetCurrentTm failed";
          return false;
        }
        const int year = (t_st.tm_year + diff + 1900);
        if (AdToEra(year, &era) && !era.empty()) {
          // "年"
          Insert(cand, insert_idx,
                 Util::StringPrintf("%s\xE5\xB9\xB4", era[0].c_str()),
                 description, segment);
        }
        // "年"
        Insert(cand, insert_idx, Util::StringPrintf("%d\xE5\xB9\xB4", year),
               description, segment);
        Insert(cand, insert_idx, Util::StringPrintf("%d", year), description,
               segment);
        return true;
      }

      case REWRITE_CURRENT_TIME: {
        if (!Util::GetCurrentTm(&t_st)) {
          LOG(ERROR) << "GetCurrentTm failed";
          return false;
        }
        vector<string> times;
        ConvertTime(t_st.tm_hour, t_st.tm_min, &times);
        for (vector<string>::reverse_iterator rit = times.rbegin();
             rit != times.rend(); ++rit) {
          Insert(cand, insert_idx, *rit, description, segment);
        }
        return true;
      }

      case REWRITE_DATE_AND_CURRENT_TIME: {
        if (!Util::GetCurrentTm(&t_st)) {
          LOG(ERROR) << "GetCurrentTm failed";
          return false;
        }
        // Y/MM/DD H:MM
        const string ymmddhmm = Util::StringPrintf("%d/%2.2d/%2.2d %2d:%2.2d",
                                                   t_st.tm_year + 1900,
                                                   t_st.tm_mon + 1,
                                                   t_st.tm_mday,
                                                   t_st.tm_hour,
                                                   t_st.tm_min);
        Insert(cand, insert_idx, ymmddhmm, description, segment);
        return true;
      }
    }
  }

  return false;
}

bool DateRewriter::RewriteDate(Segment *segment) const {
  for (size_t i = 0; i < arraysize(kDateData); ++i) {
    if (RewriteTime(segment,
                    kDateData[i].key, kDateData[i].value,
                    kDateData[i].description,
                    REWRITE_DATE,
                    kDateData[i].diff)) {
      VLOG(1) << "RewriteDate: "
              << kDateData[i].key << " " << kDateData[i].value;
      return true;
    }
  }
  return false;
}

bool DateRewriter::RewriteMonth(Segment *segment) const {
  for (size_t i = 0; i < arraysize(kMonthData); ++i) {
    if (RewriteTime(segment,
                    kMonthData[i].key, kMonthData[i].value,
                    kMonthData[i].description,
                    REWRITE_MONTH,
                    kMonthData[i].diff)) {
      VLOG(1) << "RewriteMonth: "
              << kMonthData[i].key << " " << kMonthData[i].value;
      return true;
    }
  }
  return false;
}

bool DateRewriter::RewriteYear(Segment *segment) const {
  for (size_t i = 0; i < arraysize(kYearData); ++i) {
    if (RewriteTime(segment,
                    kYearData[i].key, kYearData[i].value,
                    kYearData[i].description,
                    REWRITE_YEAR,
                    kYearData[i].diff)) {
      VLOG(1) << "RewriteYear: "
              << kYearData[i].key << " " << kYearData[i].value;
      return true;
    }
  }
  return false;
}

bool DateRewriter::RewriteWeekday(Segment *segment) const {
  struct tm t_st;
  if (!Util::GetCurrentTm(&t_st)) {
    LOG(ERROR) << "GetCurrentTm failed";
    return false;
  }

  for (size_t i = 0; i < arraysize(kWeekDayData); ++i) {
    const int weekday = kWeekDayData[i].diff % 7;
    const int additional_dates = (weekday + 7 - t_st.tm_wday) % 7;
    if (RewriteTime(segment,
                    kWeekDayData[i].key, kWeekDayData[i].value,
                    kWeekDayData[i].description,
                    REWRITE_DATE,
                    additional_dates)) {
      VLOG(1) << "RewriteWeekday: "
              << kWeekDayData[i].key << " " << kWeekDayData[i].value;
      return true;
    }
  }

  return false;
}

bool DateRewriter::RewriteCurrentTime(Segment *segment) const {
  for (size_t i = 0; i < arraysize(kCurrentTimeData); ++i) {
    if (RewriteTime(segment,
                    kCurrentTimeData[i].key, kCurrentTimeData[i].value,
                    kCurrentTimeData[i].description,
                    REWRITE_CURRENT_TIME,
                    0)) {
      VLOG(1) << "RewriteCurrentTime: "
              << kCurrentTimeData[i].key << " "
              << kCurrentTimeData[i].value;
      return true;
    }
  }
  return false;
}

bool DateRewriter::RewriteDateAndCurrentTime(Segment *segment) const {
  for (size_t i = 0; i < arraysize(kDateAndCurrentTimeData); ++i) {
    if (RewriteTime(segment,
                    kDateAndCurrentTimeData[i].key,
                    kDateAndCurrentTimeData[i].value,
                    kDateAndCurrentTimeData[i].description,
                    REWRITE_DATE_AND_CURRENT_TIME,
                    0)) {
      VLOG(1) << "RewriteDateAndCurrentTime: "
              << kDateAndCurrentTimeData[i].key << " "
              << kDateAndCurrentTimeData[i].value;
      return true;
    }
  }
  return false;
}

bool DateRewriter::RewriteEra(Segment *current_segment,
                              const Segment &next_segment) const {
  if (current_segment->candidates_size() <= 0 ||
      next_segment.candidates_size() <= 0) {
    LOG(ERROR) << "Candidate size is 0";
    return false;
  }

  const string &current_key = current_segment->key();
  const string &next_value = next_segment.candidate(0).value;

  // "年"
  if (next_value != "\xE5\xB9\xB4") {
    return false;
  }

  if (Util::GetScriptType(current_key) != Util::NUMBER) {
    return false;
  }

  const size_t len = Util::CharsLen(current_key);
  if (len < 3 || len > 4) {
    LOG(WARNING) << "Too long year";
    return false;
  }

  string year_str;
  Util::FullWidthAsciiToHalfWidthAscii(current_key, &year_str);

  const uint32 year = atoi32(year_str.c_str());

  vector<string> results;
  if (!AdToEra(year, &results)) {
    return false;
  }

  const int kInsertPosition = 2;
  const int position
      = min(kInsertPosition,
            static_cast<int>(current_segment->candidates_size()));

  // "和暦"
  const char kDescription[] = "\xE5\x92\x8C\xE6\x9A\xA6";
  for (int i = static_cast<int>(results.size()) - 1; i >= 0; --i) {
    Insert(current_segment->candidate(0),
           position,
           results[i],
           kDescription,
           current_segment);
    current_segment->mutable_candidate(position)->attributes
        &= ~Segment::Candidate::NO_VARIANTS_EXPANSION;
  }

  return true;
}

bool DateRewriter::RewriteAd(Segment *segment) const {
  const string &key = segment->key();
  if (!Util::EndsWith(key, kNenKey)) {
    return false;
  }
  if (segment->candidates_size() == 0) {
    VLOG(2) << "No candidates are found";
    return false;
  }
  vector<string> results, descriptions;
  const bool ret = EraToAd(key, &results, &descriptions);

  // Insert position is the last of candidates
  const int position = static_cast<int>(segment->candidates_size());
  for (size_t i = 0; i < results.size(); ++i)  {
    Insert(segment->candidate(0),
           position,
           results[i],
           descriptions[i].c_str(),
           segment);
  }
  return ret;
}

namespace {
bool IsFourDigits(const string &value) {
  return Util::CharsLen(value) == 4 &&
         Util::GetScriptType(value) == Util::NUMBER;
}

// Gets four digits if possible.
// Following trials will be performed in this order.
// 1. Checks segment's key.
// 2. Checks all the meta candidates.
// 3. Checks raw input.
//      This is mainly for mobile.
//      On 12keys-toggle-alphabet mode, a user types "2223" to get "cd".
//      In this case,
//      - Segment's key is "cd".
//      - All the meta candidates are based on "cd" (e.g. "CD", "Cd").
//      Therefore to get "2223" we should access the raw input.
// Prerequisit: |segments| has only one conversion segment.
const bool GetFourDigits(const composer::Composer &composer,
                         const Segments &segments,
                         string *output) {
  DCHECK(output);
  DCHECK_EQ(1, segments.conversion_segments_size());
  const Segment &segment = segments.conversion_segment(0);

  // 1. Segment's key
  if (IsFourDigits(segment.key())) {
    *output = segment.key();
    return true;
  }

  // 2. Meta candidates
  for (size_t i = 0; i < segment.meta_candidates_size(); ++i) {
    if (IsFourDigits(segment.meta_candidate(i).value)) {
      *output = segment.meta_candidate(i).value;
      return true;
    }
  }

  // 3. Raw input
  string raw;
  // Note that only one segment is in the Segments, but sometimes like
  // on partial conversion, segment.key() is different from the size of
  // the whole composition.
  composer.GetRawSubString(0, Util::CharsLen(segment.key()), &raw);
  if (IsFourDigits(raw)) {
    *output = raw;
    return true;
  }

  // No trials succeeded.
  return false;
}
}  // namespace

bool DateRewriter::RewriteFourDigits(const composer::Composer &composer,
                                     Segments *segments) const {
  if (segments->conversion_segments_size() != 1) {
    // This method rewrites a segment only when the segments has only
    // one conversion segment.
    // This is spec matter.
    // Rewriting multiple segments will not make users happier.
    return false;
  }

  string key;
  if (!GetFourDigits(composer, *segments, &key)) {
    // No four digit key is available.
    return false;
  }

  Segment *segment = segments->mutable_conversion_segment(0);

  string number_str;
  Util::FullWidthAsciiToHalfWidthAscii(key, &number_str);

  const uint32 number = atoi32(number_str.c_str());
  const uint32 upper_number = number / 100;
  const uint32 lower_number = number % 100;

  if (segment->candidates_size() == 0 &&
      segment->meta_candidates_size() == 0) {
    VLOG(2) << "No (meta) candidates are found";
    return false;
  }

  const Segment::Candidate &cand = (segment->candidates_size() > 0) ?
      segment->candidate(0) : segment->meta_candidate(0);

  bool is_modified = false;
  vector<string> result;
  is_modified |= ConvertDateWithoutYear(upper_number, lower_number, &result);

  for (size_t i = 0; i < result.size(); ++i) {
    // Always insert after last candidate.
    const int position = static_cast<int>(segment->candidates_size());
    // "日付"
    Insert(cand, position, result[i], "\xE6\x97\xA5\xE4\xBB\x98",
           segment);
  }

  result.clear();
  is_modified |= ConvertTime(upper_number, lower_number, &result);

  for (size_t i = 0; i < result.size(); ++i) {
    // Always insert after last candidate.
    const int position = static_cast<int>(segment->candidates_size());
    // "時刻"
    Insert(cand, position, result[i], "\xE6\x99\x82\xE5\x88\xBB",
           segment);
  }
  return is_modified;
}

DateRewriter::DateRewriter() {}
DateRewriter::~DateRewriter() {}

int DateRewriter::capability(const ConversionRequest &request) const {
  if (request.request().mixed_conversion()) {
    return RewriterInterface::ALL;
  }
  return RewriterInterface::CONVERSION;
}

bool DateRewriter::Rewrite(const ConversionRequest &request,
                           Segments *segments) const {
  if (!GET_CONFIG(use_date_conversion)) {
    VLOG(2) << "no use_date_conversion";
    return false;
  }

  bool modified = false;

  // Japanese ERA to AD works for resegmented input only
  if (segments->conversion_segments_size() == 1) {
    Segment *seg = segments->mutable_segment(0);
    if (RewriteAd(seg)) {
      return true;
    }
  }

  for (size_t i = segments->history_segments_size();
       i < segments->segments_size(); ++i) {
    Segment *seg = segments->mutable_segment(i);
    if (seg == NULL) {
      LOG(ERROR) << "Segment is NULL";
      return false;
    }

    if (RewriteDate(seg) || RewriteWeekday(seg) ||
        RewriteMonth(seg) || RewriteYear(seg) ||
        RewriteCurrentTime(seg) ||
        RewriteDateAndCurrentTime(seg)) {
      modified = true;
    } else if (i + 1 < segments->segments_size() &&
               RewriteEra(seg, segments->segment(i + 1))) {
      modified = true;
      ++i;  // skip one more
    }
  }

  if (request.has_composer()) {
    modified |= RewriteFourDigits(request.composer(), segments);
  }

  return modified;
}
}  // namespace mozc
