7 using System.Collections;
9 namespace Mono.Tools.LocaleBuilder {
13 // maps strings to indexes
14 static Hashtable hash;
15 static ArrayList string_order;
16 // idx 0 is reserved to indicate null
17 static int curpos = 1;
19 // serialize the strings in Hashtable.
20 public static string GetStrings () {
21 Console.WriteLine ("Total string data size: {0}", curpos);
22 if (curpos > UInt16.MaxValue)
23 throw new Exception ("need to increase idx size in culture-info.h");
24 StringBuilder ret = new StringBuilder ();
26 ret.Append ("\"\\0\"\n");
27 foreach (string s in string_order) {
30 ret.Append ("\\0\"\n");
32 return ret.ToString ();
35 hash = new Hashtable ();
36 string_order = new ArrayList ();
38 static int AddString (string s, int size) {
45 curpos += size + 1; // null terminator
52 internal static String EncodeStringIdx (string str)
57 StringBuilder ret = new StringBuilder ();
58 byte [] ba = new UTF8Encoding ().GetBytes (str);
60 foreach (byte b in ba) {
61 if (b > 127 || (in_hex && is_hex (b))) {
62 ret.AppendFormat ("\\x{0:x}", b);
67 ret.Append ((char) b);
71 int res = AddString (ret.ToString (), ba.Length);
72 return res.ToString ();
75 private static bool is_hex (int e)
77 return (e >= '0' && e <= '9') || (e >= 'A' && e <= 'F') || (e >= 'a' && e <= 'f');