private static void WriteIgnoreCaseBDD(StreamWriter sw) { sw.WriteLine(" /// <summary>Serialized BDD for mapping characters to their case-ignoring equivalence classes in the default (en-US) culture.</summary>"); var solver = new CharSetSolver(); Dictionary <char, BDD> ignoreCase = ComputeIgnoreCaseDictionary(solver, new CultureInfo(DefaultCultureName)); BDD ignorecase = solver.False; foreach (KeyValuePair <char, BDD> kv in ignoreCase) { BDD a = solver.CreateCharSetFromRange(kv.Key, kv.Key); BDD b = kv.Value; ignorecase = solver.Or(ignorecase, solver.And(solver.ShiftLeft(a, 16), b)); } sw.Write(" public static readonly long[] IgnoreCaseEnUsSerializedBDD = "); GeneratorHelper.WriteInt64ArrayInitSyntax(sw, ignorecase.Serialize()); sw.WriteLine(";"); }
private static void WriteSerializedBDDs(StreamWriter sw) { int maxChar = 0xFFFF; var catMap = new Dictionary <UnicodeCategory, Ranges>(); foreach (UnicodeCategory c in Enum.GetValues <UnicodeCategory>()) { catMap[c] = new Ranges(); } Ranges whitespace = new Ranges(); Ranges wordcharacter = new Ranges(); Regex whitespaceRegex = new(@"\s"); Regex wordcharRegex = new(@"\w"); for (int i = 0; i <= maxChar; i++) { char ch = (char)i; catMap[char.GetUnicodeCategory(ch)].Add(i); if (whitespaceRegex.IsMatch(ch.ToString())) { whitespace.Add(i); } if (wordcharRegex.IsMatch(ch.ToString())) { wordcharacter.Add(i); } } //generate bdd reprs for each of the category ranges BDD[] catBDDs = new BDD[catMap.Count]; CharSetSolver bddb = new CharSetSolver(); for (int c = 0; c < catBDDs.Length; c++) { catBDDs[c] = bddb.CreateBddForIntRanges(catMap[(UnicodeCategory)c].ranges); } BDD whitespaceBdd = bddb.CreateBddForIntRanges(whitespace.ranges); BDD wordCharBdd = bddb.CreateBddForIntRanges(wordcharacter.ranges); sw.WriteLine(" /// <summary>Serialized BDD representations of all the Unicode categories.</summary>"); sw.WriteLine(" public static readonly long[][] AllCategoriesSerializedBDD = new long[][]"); sw.WriteLine(" {"); for (int i = 0; i < catBDDs.Length; i++) { sw.WriteLine(" // {0}({1}):", (UnicodeCategory)i, i); sw.Write(" "); GeneratorHelper.WriteInt64ArrayInitSyntax(sw, catBDDs[i].Serialize()); sw.WriteLine(","); } sw.WriteLine(" };"); sw.WriteLine(); sw.WriteLine(" /// <summary>Serialized BDD representation of the set of all whitespace characters.</summary>"); sw.Write($" public static readonly long[] WhitespaceSerializedBDD = "); GeneratorHelper.WriteInt64ArrayInitSyntax(sw, whitespaceBdd.Serialize()); sw.WriteLine(";"); sw.WriteLine(); sw.WriteLine(" /// <summary>Serialized BDD representation of the set of all word characters</summary>"); sw.Write($" public static readonly long[] WordCharactersSerializedBDD = "); GeneratorHelper.WriteInt64ArrayInitSyntax(sw, wordCharBdd.Serialize()); sw.WriteLine(";"); }