new format card definitions in yaml, optionally read/write this file

This commit is contained in:
sumpfork@mailmight.com 2013-06-24 16:33:43 -07:00
parent d4fb865498
commit dbe0a9861c
2 changed files with 4233 additions and 21 deletions

4196
cards.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,11 @@
import re,pprint import re
from optparse import OptionParser from optparse import OptionParser
import os.path import os.path
from reportlab.pdfgen import canvas from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import LETTER,A4,portrait,landscape from reportlab.lib.pagesizes import LETTER,A4
from reportlab.lib.units import cm,inch from reportlab.lib.units import cm
from reportlab.platypus import Frame,Paragraph from reportlab.platypus import Paragraph
from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.styles import getSampleStyleSheet
from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase import pdfmetrics
@ -276,6 +276,9 @@ class DominionTabs:
#draw text #draw text
if useExtra and card.extra: if useExtra and card.extra:
descriptions = (card.extra,) descriptions = (card.extra,)
else:
if self.options.read_yaml:
descriptions = re.split("\n",card.description)
else: else:
descriptions = re.split("--+",card.description) descriptions = re.split("--+",card.description)
@ -318,7 +321,7 @@ class DominionTabs:
if not self.options.expansions and currentCard and (currentCard not in (c.name for c in cards)): if not self.options.expansions and currentCard and (currentCard not in (c.name for c in cards)):
print currentCard + ' has extra description, but is not in cards' print currentCard + ' has extra description, but is not in cards'
else: else:
extra += line extra += line.strip()
if currentCard and extra: if currentCard and extra:
extras[currentCard] = extra.strip() extras[currentCard] = extra.strip()
for c in cards: for c in cards:
@ -347,8 +350,6 @@ class DominionTabs:
card.description += '----' + line card.description += '----' + line
else: else:
card.description += line card.description += line
if card.name == 'Curse':
print card.description
def read_card_defs(self,fname,fileobject=None): def read_card_defs(self,fname,fileobject=None):
cards = [] cards = []
@ -431,6 +432,10 @@ class DominionTabs:
help="subset of dominion expansions to produce tabs for") help="subset of dominion expansions to produce tabs for")
parser.add_option("--cropmarks",action="store_true",dest="cropmarks", parser.add_option("--cropmarks",action="store_true",dest="cropmarks",
help="print crop marks on both sides, rather than tab outlines on one") help="print crop marks on both sides, rather than tab outlines on one")
parser.add_option("--read_yaml", action="store_true",dest="read_yaml",
help="read yaml version of card definitions and extras")
parser.add_option("--write_yaml", action="store_true",dest="write_yaml",
help="write yaml version of card definitions and extras")
return parser.parse_args(argstring) return parser.parse_args(argstring)
def main(self,argstring): def main(self,argstring):
@ -518,18 +523,29 @@ class DominionTabs:
raise raise
pdfmetrics.registerFont(TTFont('MinionPro-Regular','OptimusPrincepsSemiBold.ttf')) pdfmetrics.registerFont(TTFont('MinionPro-Regular','OptimusPrincepsSemiBold.ttf'))
pdfmetrics.registerFont(TTFont('MinionPro-Bold','OptimusPrinceps.ttf')) pdfmetrics.registerFont(TTFont('MinionPro-Bold','OptimusPrinceps.ttf'))
if options.read_yaml:
import yaml
cardfile = open("cards.yaml","r")
cards = yaml.load(cardfile)
else:
cards = self.read_card_defs(os.path.join(self.filedir,"dominion_cards.txt")) cards = self.read_card_defs(os.path.join(self.filedir,"dominion_cards.txt"))
if self.options.expansions: if self.options.expansions:
self.options.expansions = [o.lower() for o in self.options.expansions] self.options.expansions = [o.lower() for o in self.options.expansions]
cards=[c for c in cards if c.cardset in self.options.expansions] cards=[c for c in cards if c.cardset in self.options.expansions]
cards.sort(cmp=lambda x,y: cmp((x.cardset,x.name),(y.cardset,y.name))) cards.sort(cmp=lambda x,y: cmp((x.cardset,x.name),(y.cardset,y.name)))
extras = self.read_card_extras(os.path.join(self.filedir,"dominion_card_extras.txt"),cards) self.read_card_extras(os.path.join(self.filedir,"dominion_card_extras.txt"),cards)
#print '%d cards read' % len(cards) #print '%d cards read' % len(cards)
sets = {} sets = {}
types = {} types = {}
for c in cards: for c in cards:
sets[c.cardset] = sets.get(c.cardset,0) + 1 sets[c.cardset] = sets.get(c.cardset,0) + 1
types[c.types] = types.get(c.types,0) + 1 types[c.types] = types.get(c.types,0) + 1
c.description = re.sub('----+','\n',c.description)
c.description = re.sub('\n\s*\n','\n',c.description)
if options.write_yaml:
import yaml
out = yaml.dump(cards)
open('cards.yaml','w').write(out)
#pprint.pprint(sets) #pprint.pprint(sets)
#pprint.pprint(types) #pprint.pprint(types)