1# Usage:  python gen-icon-class.py
2
3
4import xml.etree.ElementTree as ET
5
6tree = ET.parse('data/icons/flat-color-icons/index.html')
7root = tree.getroot()
8
9categories   = []
10replacements = [
11  ["_az", "_(A->Z)"],
12  ["_za", "_(Z->A)"],
13  ["_12", "_(1->2)"],
14  ["_21", "_(2->1)"],
15  ["_asc", "_ascending"],
16  ["_desc", "_descending"],
17  ["Sms", "SMS"],
18  ["Mms", "MMS"],
19  ["Iphone", "iPhone"],
20  ["Ipad", "iPad"],
21  ["Faq", "FAQ"],
22  ["Ok", "OK"],
23  ["Vip", "VIP"],
24  ["Slr", "SLR"],
25  ["_", " "]]
26
27# Open the class file for writing
28cfile = open("src/StickerSet.vala", "w")
29
30cfile.write('/* This is a generated file.  Do not edit. */\n\n')
31cfile.write('using Gee;\n\n')
32cfile.write('public class StickerSet {\n\n')
33cfile.write('  public class StickerInfo {\n')
34cfile.write('    public string resource {set; get;}\n')
35cfile.write('    public string tooltip  {set; get;}\n')
36cfile.write('    public StickerInfo( string resource, string tooltip ) {\n')
37cfile.write('      this.resource = resource;\n')
38cfile.write('      this.tooltip  = tooltip;\n')
39cfile.write('    }\n')
40cfile.write('  }\n')
41cfile.write('  Array<string>                      categories;\n')
42cfile.write('  HashMap<string,Array<StickerInfo>> category_icons;\n\n')
43cfile.write('  public StickerSet() {\n')
44cfile.write('    categories     = new Array<string>();\n')
45cfile.write('    category_icons = new HashMap<string,Array<StickerInfo>>();\n')
46
47for h2 in root.iter('h2'):
48    cfile.write('    categories.append_val( _( "' + h2.text + '" ) );\n')
49    categories.append(h2.text)
50
51index = 0
52for p in root.iter('p'):
53    category = categories.pop(0)
54    variable = "array{}".format(index)
55    cfile.write('    var ' + variable + ' = new Array<StickerInfo>();\n' )
56    for img in p.iter('img'):
57        resource = img.get('title').split(".")[0]
58        title    = resource.capitalize()
59        for str, replace in replacements:
60           title = title.replace(str, replace)
61        cfile.write('    ' + variable + '.append_val( new StickerInfo( "' + resource + '", _( "' + title + '" ) ) );\n')
62    cfile.write('    category_icons.set( _( "' + category + '" ), ' + variable + ' );\n')
63    index = index + 1
64
65cfile.write('  }\n\n')
66cfile.write('  public Array<string> get_categories() {\n')
67cfile.write('    return( categories );\n')
68cfile.write('  }\n\n')
69cfile.write('  public Array<StickerInfo> get_category_icons( string category ) {\n')
70cfile.write('    return( category_icons.get( category ) );\n')
71cfile.write('  }\n')
72cfile.write('  public string get_icon_tooltip( string resource ) {\n')
73cfile.write('    for( int i=0; i<categories.length; i++ ) {\n')
74cfile.write('      var icons = category_icons.get( categories.index( i ) );\n')
75cfile.write('      for( int j=0; j<icons.length; j++ ) {\n')
76cfile.write('        if( icons.index( j ).resource == resource ) {\n')
77cfile.write('          return( icons.index( j ).tooltip );\n')
78cfile.write('        }\n')
79cfile.write('      }\n')
80cfile.write('    }\n')
81cfile.write('    return( "" );\n')
82cfile.write('  }\n')
83cfile.write('}\n')
84
85cfile.close()
86
87
88