#!/usr/bin/env python # -*- mode: python; coding: koi8-r; -*- # import sys, os, re, time from pprint import pprint os.environ['LANG'] = 'C' import __builtin__ __builtin__.__dict__['_'] = lambda x: x __builtin__.__dict__['n_'] = lambda x: x pysollib_path = os.path.join(sys.path[0], '..') sys.path[0] = os.path.normpath(pysollib_path) rules_dir = os.path.normpath(os.path.join(pysollib_path, 'data/html/rules')) #pprint(sys.path) #print rules_dir import pysollib.games import pysollib.games.special import pysollib.games.ultra import pysollib.games.mahjongg from pysollib.gamedb import GAME_DB from pysollib.gamedb import GI from pysollib.mfxutil import latin1_to_ascii from pysollib.resource import CSI def getGameRulesFilename(n): if n.startswith('Mahjongg'): return 'mahjongg.html' ##n = re.sub(r"[\[\(].*$", "", n) n = latin1_to_ascii(n) n = re.sub(r"[^\w]", "", n) n = n.lower() + ".html" return n GAME_BY_TYPE = { GI.GT_BAKERS_DOZEN: "Baker's Dozen", GI.GT_BELEAGUERED_CASTLE: "Beleaguered Castle", GI.GT_CANFIELD: "Canfield", GI.GT_FAN_TYPE: "Fan", GI.GT_FORTY_THIEVES: "Forty Thieves", GI.GT_FREECELL: "FreeCell", GI.GT_GOLF: "Golf", GI.GT_GYPSY: "Gypsy", GI.GT_KLONDIKE: "Klondike", GI.GT_MONTANA: "Montana", GI.GT_NAPOLEON: "Napoleon", GI.GT_NUMERICA: "Numerica", GI.GT_PAIRING_TYPE: "Pairing", GI.GT_RAGLAN: "Raglan", GI.GT_SIMPLE_TYPE: "Simple game", GI.GT_SPIDER: "Spider", GI.GT_TERRACE: "Terrace", GI.GT_YUKON: "Yukon", GI.GT_1DECK_TYPE: "One-Deck game", GI.GT_2DECK_TYPE: "Two-Deck game", GI.GT_3DECK_TYPE: "Three-Deck game", GI.GT_4DECK_TYPE: "Four-Deck game", GI.GT_MATRIX: "Matrix", GI.GT_MEMORY: "Memory", GI.GT_POKER_TYPE: "Poker", GI.GT_PUZZLE_TYPE: "Puzzle", GI.GT_TAROCK: "Tarock", GI.GT_HEXADECK: "Hex A Deck", GI.GT_HANAFUDA: "Hanafuda", GI.GT_DASHAVATARA_GANJIFA: "Dashavatara Ganjifa", GI.GT_MAHJONGG: "Mahjongg", GI.GT_MUGHAL_GANJIFA:"Mughal Ganjifa", GI.GT_SHISEN_SHO:"Shisen-Sho", } def by_category(): games = GAME_DB.getGamesIdSortedById() games_by_cat = {} for id in games: gi = GAME_DB.get(id) gt = CSI.TYPE_NAME[gi.category] if games_by_cat.has_key(gt): games_by_cat[gt] += 1 else: games_by_cat[gt] = 1 games_by_cat_list = [(i, j) for i, j in games_by_cat.items()] games_by_cat_list.sort(lambda i, j: cmp(j[1], i[1])) ## print '<table border="2"><tr><th>Name</th><th>Number</th></tr>' ## for i in games_by_cat_list: ## print '<tr><td>%s</td><td>%s</td></tr>' % i ## print '</table>' print '<ul>' for i in games_by_cat_list: print '<li>%s (%s games)</li>' % i print '</ul>' return def by_type(): games = GAME_DB.getGamesIdSortedById() games_by_type = {} for id in games: gi = GAME_DB.get(id) if not GAME_BY_TYPE.has_key(gi.si.game_type): print gi.si.game_type continue gt = GAME_BY_TYPE[gi.si.game_type] if games_by_type.has_key(gt): games_by_type[gt] += 1 else: games_by_type[gt] = 1 games_by_type_list = games_by_type.items() games_by_type_list.sort(lambda i, j: cmp(i[0], j[0])) ## print '<table border="2"><tr><th>Name</th><th>Number</th></tr>' ## for i in games_by_type_list: ## print '<tr><td>%s</td><td>%s</td></tr>' % i ## print '</table>' print '<ul>' for i in games_by_type_list: print '<li>%s (%s games)</li>' % i print '</ul>' return def all_games(sort_by='id'): #rules_dir = 'rules' print '''<table border="2"> <tr><th>ID</th><th>Name</th><th>Alternate names</th><th>Type</th></tr> ''' if sort_by == 'id': get_games_func = GAME_DB.getGamesIdSortedById else: get_games_func = GAME_DB.getGamesIdSortedByName for id in get_games_func(): gi = GAME_DB.get(id) if not gi.rules_filename: rules_fn = getGameRulesFilename(gi.name) else: rules_fn = gi.rules_filename gt = CSI.TYPE_NAME[gi.category] if gt == 'French': gt = 'French (%s)' % GAME_BY_TYPE[gi.si.game_type] name = gi.name.encode('utf-8') altnames = '<br>'.join(gi.altnames).encode('utf-8') fn = os.path.join(rules_dir, rules_fn) if 1 and os.path.exists(fn): print '''<tr><td>%s</td><td> <a href="%s" title="Rules for this game">%s</a> </td><td>%s</td><td>%s</td></tr> ''' % (id, fn, name, altnames, gt) else: print '''<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr> ''' % (id, name, altnames, gt) print '</table>' def create_html(sort_by): print '''<html> <head> <title>PySolFC - List of solitaire games</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> ''' print '<b>Total games: %d</b>' % len(GAME_DB.getGamesIdSortedById()) print '<h2>Categories</h2>' by_category() print '<h2>Types</h2>' by_type() #print '<h2>All games</h2>' all_games(sort_by) print '</body></html>' def get_text(): #get_games_func = GAME_DB.getGamesIdSortedById get_games_func = GAME_DB.getGamesIdSortedByName games_list = {} # for unique for id in get_games_func(): gi = GAME_DB.get(id) games_list[gi.name] = '' if gi.name != gi.short_name: games_list[gi.short_name] = '' for n in gi.altnames: games_list[n] = '' games_list = games_list.keys() games_list.sort() print '''\ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: PySol 0.0.1\\n" "POT-Creation-Date: %s\\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n" "Language-Team: LANGUAGE <LL@li.org>\\n" "MIME-Version: 1.0\\n" "Content-Type: text/plain; charset=CHARSET\\n" "Content-Transfer-Encoding: ENCODING\\n" "Generated-By: %s 0.1\\n" ''' % (time.asctime(), sys.argv[0]) for g in games_list: print 'msgid "%s"\nmsgstr ""\n' % g.encode('utf-8') def old_plain_text(): #get_games_func = GAME_DB.getGamesIdSortedById get_games_func = GAME_DB.getGamesIdSortedByName games_list = {} # for unique for id in get_games_func(): gi = GAME_DB.get(id) games_list[gi.name] = '' #if gi.name != gi.short_name: # games_list[gi.short_name] = '' for n in gi.altnames: games_list[n] = '' games_list = games_list.keys() games_list.sort() for g in games_list: print g.encode('utf-8') def plain_text(): get_games_func = GAME_DB.getGamesIdSortedByName for id in get_games_func(): gi = GAME_DB.get(id) if gi.category == GI.GC_FRENCH: ##print str(gi.gameclass) ##gc = gi.gameclass ##h = gc.Hint_Class is None and 'None' or gc.Hint_Class.__name__ ##print gi.name.encode('utf-8'), h print gi.name.encode('utf-8') for n in gi.altnames: print n.encode('utf-8') ##name = gi.name.lower() ##name = re.sub('\W', '', name) ##print id, name #, gi.si.game_type, gi.si.game_type == GI.GC_FRENCH ## if len(sys.argv) < 2 or sys.argv[1] == 'html': sort_by = 'id' if len(sys.argv) > 2: sort_by = sys.argv[2] if len(sys.argv) > 3: rules_dir = sys.argv[3] create_html(sort_by) elif sys.argv[1] == 'gettext': get_text() elif sys.argv[1] == 'text': plain_text() else: sys.exit('invalid argument')