/// <summary> /// NFDにして返す /// </summary> /// <param name="s"></param> /// <param name="option">オプション</param> /// <returns>文字列</returns> public static string ToMac(this string s, MacStringOption option = MacStringOption.Default) { if (s.Length == 1) { return(InnovativeString.ToMac(s[0], option)); } return(InnovativeString.ToMac(s, option)); }
/// <summary> /// 読み込む /// </summary> /// <param name="reader">ローダー</param> /// <param name="option">オプション</param> /// <return></return> public static string ReadMac(this StreamReader reader, MacStringOption option = MacStringOption.Default) { var r = reader.Read(); if (r < 0) { return(null); } return(((char)r).ToMac(option)); }
/// <summary> /// charをNFDにする /// </summary> /// <param name="s"></param> /// <param name="option"></param> /// <returns></returns> public static string ToMac(char s, MacStringOption option) { if (!MacCharTable.むあすつ.ContainsKey(s)) { return(s.ToString()); } var str = new char[2]; var mu = MacCharTable.むあすつ[s]; str[0] = (char)(s - mu.Axis); str[1] = 結合文字(mu.CCID, option); return(new string(str)); }
/// <summary> /// 文字列をNFDにする /// </summary> /// <param name="s"></param> /// <param name="option"></param> /// <returns></returns> public static string ToMac(string s, MacStringOption option = 0) { if (s.Length == 1) { return(ToMac(s[0], option)); } var mc = MacCharTable.超絶正規表現.Matches(s); if (mc.Count == 0) { if (option.HasFlag(MacStringOption.NormalizeLineBreak)) { return(改行.Replace(s, MacConstant.NewLine.ToString())); } return(s); } int 前 = 0; var sb = new StringBuilder(); foreach (Match m in mc) { if (m.Index != 0) { sb.Append(s.Substring(前, m.Index - 前)); } var mu = MacCharTable.むあすつ[s[m.Index]]; sb.Append((char)(s[m.Index] - mu.Axis)); sb.Append(結合文字(mu.CCID, option)); 前 = m.Index + m.Length; } if (前 != s.Length) { sb.Append(s.Substring(前)); } if (option.HasFlag(MacStringOption.NormalizeLineBreak)) { return(改行.Replace(sb.ToString(), MacConstant.NewLine.ToString())); } return(sb.ToString()); }
/// <summary> /// NFD化して追記 /// </summary> /// <param name="builder">ビルダー</param> /// <param name="value">値</param> /// <param name="option">オプション</param> /// <returns></returns> public static StringBuilder AppendMac(this StringBuilder builder, char value, MacStringOption option = MacStringOption.Default) => builder.Append(value.ToMac(option));
/// <summary> /// 読み込む /// </summary> /// <param name="reader">ローダー</param> /// <param name="option">オプション</param> /// <return></return> public static string ReadToEndMac(this StreamReader reader, MacStringOption option = MacStringOption.Default) => reader.ReadToEnd()?.ToMac(option);
/// <summary> /// NFDで書き込む /// </summary> /// <param name="writer">ライター</param> /// <param name="value">値</param> /// <param name="option">オプション</param> public static void WriteMac(this StreamWriter writer, char value, MacStringOption option = MacStringOption.Default) => writer.Write(value.ToMac(option));
/// <summary> /// NFD+改行で書き込む /// </summary> /// <param name="writer">ライター</param> /// <param name="value">値</param> /// <param name="option">オプション</param> public static void WriteLineMac(this StreamWriter writer, string value, MacStringOption option = MacStringOption.Default) => writer.Write((value + System.Environment.NewLine).ToMac(option));
/// <summary> /// 結合文字を返す /// </summary> /// <param name="id"></param> /// <param name="option"></param> /// <returns></returns> private static char 結合文字(int id, MacStringOption option) => option.HasFlag(MacStringOption.InnovativeCombining) ? MacCharTable.革新的結合文字[id] : MacCharTable.結合文字[id];
/// <summary> /// NFDにして返す /// </summary> /// <param name="s"></param> /// <returns>文字列</returns> public static string ToMac(this char s, MacStringOption option = MacStringOption.Default) => InnovativeString.ToMac(s, option);