// 特定の範囲に対するカテゴリの分類コードを出力します。 public static void SwitchCase(char start, char end) { System.IO.TextWriter stdout = System.Console.Out; stdout.WriteLine("Range {0} - {1}", (int)start, (int)end); // 方法一: 連続する部分を不等号で判定 MapCategories dic10 = SwitchCase_hojo(start, (char)(end - 1), 1, 0); int weight1 = dic10.EvalWeight; // 方法二: 大文字小文字など交互になっている部分に対応 MapCategories dic20 = SwitchCase_hojo(start, (char)(end - 1), 2, 0); MapCategories dic21 = SwitchCase_hojo(start, (char)(end - 1), 2, 1); int weight2 = dic20.EvalWeight + dic21.EvalWeight + 1; if (20 < weight1 && 20 < weight2) { // 方法零: テーブル } else if (weight1 <= weight2) { stdout.WriteLine("EvalWeight: {0}", weight1); stdout.WriteLine(dic10.ToString()); } else { stdout.WriteLine("EvalWeight: {0}", weight2); stdout.WriteLine("** mod. == 0 **"); stdout.WriteLine(dic20.ToString()); stdout.WriteLine("** mod. == 1 **"); stdout.WriteLine(dic21.ToString()); } }
public static void SelectMethod(System.IO.TextWriter w, char start, char end_inclusive) { w.WriteLine("==== Charcode-Range {0:X4} - {1:X4} ====", (int)start, (int)end_inclusive); // 方法一: 連続する部分を不等号で判定 MapCategories dic10 = SwitchCase_hojo(start, end_inclusive, 1, 0); int weight1 = dic10.EvalWeight; // 方法二: 大文字小文字など交互になっている部分に対応 MapCategories dic20 = SwitchCase_hojo(start, end_inclusive, 2, 0); MapCategories dic21 = SwitchCase_hojo(start, end_inclusive, 2, 1); int weight2 = dic20.EvalWeight + dic21.EvalWeight + 1; // 出力 if (20 < weight1 && 20 < weight2) { // 方法零: テーブル const string SEP = ","; const string ENDL = ",\r\n"; int i = start; foreach (string[] dat in enum_chars(delegate(string[] d) { char c = d[0][0]; return(start <= c && c <= end_inclusive); })) { int c = dat[0][0]; // 空白のコード (割り当てられていない文字) while (i < c) { w.Write("Cn"); w.Write(++i % 16 == 0?ENDL:SEP); } // 文字 w.Write(dat[2]); w.Write(++i % 16 == 0?ENDL:SEP); } // 空白のコード (割り当てられていない文字) while (i < end_inclusive + 1) { w.Write("Cn"); w.Write(++i % 16 == 0?ENDL:SEP); } if (i % 16 != 0) { w.Write(ENDL); } } else if (weight1 <= weight2) { // 方法一: w.WriteLine(dic10.ToString('#')); } else { // 方法二: w.WriteLine(":: if(c%2==0) ::"); w.WriteLine(dic20.ToString('#')); w.WriteLine(":: if(c%2==1) ::"); w.WriteLine(dic21.ToString('#')); } }