Files
AzooKeyKanaKanjiConverter/Sources/KanaKanjiConverterModule/Converter/CalendarCandidate.swift

205 lines
6.6 KiB
Swift

//
// CalendarCandidate.swift
// Keyboard
//
// Created by ensan on 2023/05/13.
// Copyright © 2023 ensan. All rights reserved.
//
import Foundation
import SwiftUtils
extension KanaKanjiConverter {
/// 西
/// - parameters:
/// - inputData:
/// - note:
///
func toSeirekiCandidates(_ inputData: ComposingText) -> [Candidate] {
let string = inputData.convertTarget.toKatakana()
let result = self.toSeireki(string)
return result.map {[Candidate(
text: $0,
value: -15,
correspondingCount: inputData.input.count,
lastMid: MIDData..mid,
data: [DicdataElement(word: $0, ruby: string, cid: CIDData..cid, mid: MIDData..mid, value: -15)]
)]} ?? []
}
/// 西
/// - parameters:
/// - string:
private func toSeireki(_ string: String) -> String? {
let katakanaStringCount = string.count
if string == "メイジガンネン"{
return "1868年"
}
if string == "タイショウガンネン"{
return "1912年"
}
if string == "ショウワガンネン"{
return "1926年"
}
if string == "ヘイセイガンネン"{
return "1989年"
}
if string == "レイワガンネン"{
return "2019年"
}
var string = string[...]
// drop
guard string.hasSuffix("ネン") else {
return nil
}
string = string.dropLast(2)
if string.hasPrefix("ショウワ") {
// drop
string = string.dropFirst(4)
//
if katakanaStringCount == 8, let year = Int(string) {
return "\(year + 1925)"
}
if katakanaStringCount == 7, let year = Int(string) {
return "\(year + 1925)"
}
} else if string.hasPrefix("ヘイセイ") {
// drop
string = string.dropFirst(4)
//
if katakanaStringCount == 8, let year = Int(string) {
return "\(year + 1988)"
}
if katakanaStringCount == 7, let year = Int(string) {
return "\(year + 1988)"
}
} else if string.hasPrefix("レイワ") {
// drop
string = string.dropFirst(3)
//
if katakanaStringCount == 7, let year = Int(string) {
return "\(year + 2018)"
}
if katakanaStringCount == 6, let year = Int(string) {
return "\(year + 2018)"
}
} else if string.hasPrefix("メイジ") {
// drop
string = string.dropFirst(3)
//
if katakanaStringCount == 7, let year = Int(string) {
return "\(year + 1867)"
}
if katakanaStringCount == 6, let year = Int(string) {
return "\(year + 1867)"
}
} else if string.hasPrefix("タイショウ") {
// drop
string = string.dropFirst(5)
//
if katakanaStringCount == 9, let year = Int(string) {
return "\(year + 1911)"
}
if katakanaStringCount == 8, let year = Int(string) {
return "\(year + 1911)"
}
}
return nil
}
/// 西
/// - parameters:
/// - string:
func toWarekiCandidates(_ inputData: ComposingText) -> [Candidate] {
let string = inputData.convertTarget.toKatakana()
let makeResult0: (String) -> Candidate = {
Candidate(
text: $0,
value: -18,
correspondingCount: inputData.input.count,
lastMid: MIDData..mid,
data: [DicdataElement(word: $0, ruby: string, cid: CIDData..cid, mid: MIDData..mid, value: -18)]
)
}
let makeResult1: (String) -> Candidate = {
Candidate(
text: $0,
value: -19,
correspondingCount: inputData.input.count,
lastMid: MIDData..mid,
data: [DicdataElement(word: $0, ruby: string, cid: CIDData..cid, mid: MIDData..mid, value: -19)]
)
}
guard let seireki = Int(string.prefix(4)) else {
return []
}
if !string.hasSuffix("ネン") {
return []
}
if seireki == 1989 {
return [
makeResult0("平成元年"),
makeResult1("昭和64年")
]
}
if seireki == 2019 {
return [
makeResult0("令和元年"),
makeResult1("平成31年")
]
}
if seireki == 1926 {
return [
makeResult0("昭和元年"),
makeResult1("大正15年")
]
}
if seireki == 1912 {
return [
makeResult0("大正元年"),
makeResult1("明治45年")
]
}
if seireki == 1868 {
return [
makeResult0("明治元年"),
makeResult1("慶應4年")
]
}
if (1990...2018).contains(seireki) {
let i = seireki - 1988
return [
makeResult0("平成\(i)")
]
}
if (1927...1988).contains(seireki) {
let i = seireki - 1925
return [
makeResult0("昭和\(i)")
]
}
if (1869...1911).contains(seireki) {
let i = seireki - 1967
return [
makeResult0("明治\(i)")
]
}
if (1912...1926).contains(seireki) {
let i = seireki - 1911
return [
makeResult0("大正\(i)")
]
}
if 2020 <= seireki {
let i = seireki - 2018
return [
makeResult0("令和\(i)")
]
}
return []
}
}