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

353 lines
12 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// RomanTypographys.swift
// Keyboard
//
// Created by ensan on 2020/11/04.
// Copyright © 2020 ensan. All rights reserved.
//
import Foundation
import SwiftUtils
private extension UnicodeScalar {
///
var isRomanUppercased: Bool {
("A"..."Z").contains(self)
}
///
var isRomanLowercased: Bool {
("a"..."z").contains(self)
}
///
var isRomanNumber: Bool {
("0"..."9").contains(self)
}
}
extension KanaKanjiConverter {
///
/// - parameters:
/// - text:
/// - note:
///
func typographicalCandidates(_ inputData: ComposingText) -> [Candidate] {
let string = inputData.convertTarget.toKatakana()
let strings = self.typographicalLetters(from: string)
return strings.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:
/// - text:
private func typographicalLetters(from text: String) -> [String] {
if !text.onlyRomanAlphabetOrNumber {
return []
}
let onlyRomanAlphabet = text.onlyRomanAlphabet
var strings: [String] = []
/// 𝐁𝐎𝐋𝐃
do {
let bold = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 119743)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 119737)!
return String(scalar)
}
if $0.isRomanNumber {
let scalar = UnicodeScalar($0.value + 120734)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(bold)
}
/// 𝐼𝑇𝐴𝐿𝐼𝐶
if onlyRomanAlphabet {
let italic = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 119795)!
return String(scalar)
}
if $0.isRomanLowercased {
if $0 == "h"{
return ""
}
let scalar = UnicodeScalar($0.value + 119789)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(italic)
}
/// 𝑩𝑶𝑳𝑫𝑰𝑻𝑨𝑳𝑰𝑪
if onlyRomanAlphabet {
let boldItalic = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 119847)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 119841)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(boldItalic)
}
/// 𝒮𝒸𝓇𝒾𝓅𝓉
if onlyRomanAlphabet {
let script = text.unicodeScalars.map {
if $0.isRomanUppercased {
switch $0 {
case "B":
return ""
case "E":
return ""
case "F":
return ""
case "H":
return ""
case "I":
return ""
case "L":
return ""
case "M":
return ""
case "R":
return ""
default:
break
}
let scalar = UnicodeScalar($0.value + 119899)!
return String(scalar)
}
if $0.isRomanLowercased {
switch $0 {
case "e":
return ""
case "g":
return ""
case "o":
return ""
default: break
}
let scalar = UnicodeScalar($0.value + 119893)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(script)
}
/// 𝓑𝓸𝓵𝓭𝓢𝓬𝓻𝓲𝓹𝓽
if onlyRomanAlphabet {
let boldScript = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 119951)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 119945)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(boldScript)
}
/// 𝔉𝔯𝔞𝔨𝔱𝔲𝔯
if onlyRomanAlphabet {
let fraktur = text.unicodeScalars.map {
if $0.isRomanUppercased {
switch $0 {
case "C":
return ""
case "H":
return ""
case "I":
return ""
case "R":
return ""
case "Z":
return ""
default: break
}
let scalar = UnicodeScalar($0.value + 120003)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 119997)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(fraktur)
}
/// 𝕕𝕠𝕦𝕓𝕝𝕖𝕊𝕥𝕣𝕦𝕔𝕜
do {
let doubleStruck = text.unicodeScalars.map {
if $0.isRomanUppercased {
switch $0 {
case "C":
return ""
case "H":
return ""
case "N":
return ""
case "P":
return ""
case "Q":
return ""
case "R":
return ""
case "Z":
return ""
default: break
}
let scalar = UnicodeScalar($0.value + 120055)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 120049)!
return String(scalar)
}
if $0.isRomanNumber {
let scalar = UnicodeScalar($0.value + 120744)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(doubleStruck)
}
/// 𝕭𝖔𝖑𝖉𝕱𝖗𝖆𝖐𝖙𝖚𝖗
if onlyRomanAlphabet {
let boldFraktur = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 120107)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 120101)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(boldFraktur)
}
/// 𝖲𝖺𝗇𝗌𝖲𝖾𝗋𝗂𝖿
do {
let sansSerif = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 120159)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 120153)!
return String(scalar)
}
if $0.isRomanNumber {
let scalar = UnicodeScalar($0.value + 120754)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(sansSerif)
}
/// 𝗦𝗮𝗻𝘀𝗦𝗲𝗿𝗶𝗳𝗕𝗼𝗹𝗱
do {
let sansSerifBold = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 120211)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 120205)!
return String(scalar)
}
if $0.isRomanNumber {
let scalar = UnicodeScalar($0.value + 120764)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(sansSerifBold)
}
/// 𝘚𝘢𝘯𝘴𝘚𝘦𝘳𝘪𝘧𝘐𝘵𝘢𝘭𝘪𝘤
if onlyRomanAlphabet {
let sansSerifItalic = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 120263)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 120257)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(sansSerifItalic)
}
/// 𝙎𝙖𝙣𝙨𝙎𝙚𝙧𝙞𝙛𝘽𝙤𝙡𝙙𝙄𝙩𝙖𝙡𝙞𝙘
if onlyRomanAlphabet {
let sansSerifBoldItalic = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 120315)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 120309)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(sansSerifBoldItalic)
}
/// 𝙼𝚘𝚗𝚘𝚜𝚙𝚊𝚌𝚎
do {
let monospace = text.unicodeScalars.map {
if $0.isRomanUppercased {
let scalar = UnicodeScalar($0.value + 120367)!
return String(scalar)
}
if $0.isRomanLowercased {
let scalar = UnicodeScalar($0.value + 120361)!
return String(scalar)
}
if $0.isRomanNumber {
let scalar = UnicodeScalar($0.value + 120774)!
return String(scalar)
}
return String($0)
}.joined()
strings.append(monospace)
}
return strings
}
}