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