public static string ToKatakana(string input, WanaKanaOptions?options = null) { if (input is null) { throw new ArgumentNullException(nameof(input)); } options ??= new WanaKanaOptions(); if (input.Length == 0) { return(string.Empty); } if (options.PassRomaji) { return(KanaConverters.HiraganaToKatakana(input)); } if (MixedChecker.IsMixed(input) || RomajiChecker.IsRomaji(input) || SpecialCharacterChecker.IsEnglishPunctuation(input[0])) { var hiragana = KanaConverters.ToKana(input.ToLowerInvariant(), options); return(KanaConverters.HiraganaToKatakana(hiragana)); } return(KanaConverters.HiraganaToKatakana(input)); }
private static SplitToken[] SplitIntoRomaji(string input, WanaKanaOptions options) { var map = KanaToRomajiMap.GetKanaToRomajiTree(options); if (options.CustomRomajiMapping != null) { map = map.Clone(); map.AddRange(options.CustomRomajiMapping); } return(TrieHelpers.ApplyTrie(KanaConverters.KatakanaToHiragana(input, true), map, options.ImeMode == ImeMode.None)); }