示例#1
0
 /// <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));
 }
示例#2
0
        /// <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));
        }
示例#3
0
        /// <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));
        }
示例#4
0
        /// <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));
示例#6
0
 /// <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);
示例#7
0
 /// <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));
示例#8
0
 /// <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));
示例#9
0
 /// <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];
示例#10
0
 /// <summary>
 /// NFDにして返す
 /// </summary>
 /// <param name="s"></param>
 /// <returns>文字列</returns>
 public static string ToMac(this char s, MacStringOption option = MacStringOption.Default) => InnovativeString.ToMac(s, option);