support for cornucopia; option to subselect particular expansions

This commit is contained in:
sumpfork@mailmight.com 2011-06-13 12:13:42 +02:00
parent 349ea5f744
commit 06e2af8498

View File

@ -13,12 +13,15 @@ from reportlab.pdfbase import pdfmetrics
labelImages = { labelImages = {
('Action',) : 'action.png', ('Action',) : 'action.png',
('Action','Attack') : 'action.png', ('Action','Attack') : 'action.png',
('Action','Attack','Prize') : 'action.png',
('Action','Reaction') : 'reaction.png', ('Action','Reaction') : 'reaction.png',
('Action','Victory') : 'action-victory.png', ('Action','Victory') : 'action-victory.png',
('Action','Duration') : 'duration.png', ('Action','Duration') : 'duration.png',
('Action','Prize') : 'action.png',
('Reaction',) : 'reaction.png', ('Reaction',) : 'reaction.png',
('Treasure',) : 'treasure.png', ('Treasure',) : 'treasure.png',
('Treasure','Victory') : 'treasure-victory.png', ('Treasure','Victory') : 'treasure-victory.png',
('Treasure','Prize') : 'treasure.png',
('Victory',) : 'victory.png', ('Victory',) : 'victory.png',
('Curse',) : 'curse.png' ('Curse',) : 'curse.png'
} }
@ -40,7 +43,7 @@ def drawTab(card,x,y,useExtra=False):
if not useExtra: if not useExtra:
c.saveState() c.saveState()
c.setLineWidth(0.1) c.setLineWidth(0.1)
if rightSide: if rightSide and not options.sameside:
c.translate(tabWidth,0) c.translate(tabWidth,0)
c.scale(-1,1) c.scale(-1,1)
c.lines(tabOutline) c.lines(tabOutline)
@ -48,14 +51,14 @@ def drawTab(card,x,y,useExtra=False):
#draw tab flap #draw tab flap
c.saveState() c.saveState()
if not rightSide: if not rightSide or options.sameside:
c.translate(tabWidth-tabLabelWidth,tabTotalHeight-tabLabelHeight) c.translate(tabWidth-tabLabelWidth,tabTotalHeight-tabLabelHeight)
else: else:
c.translate(0,tabTotalHeight-tabLabelHeight) c.translate(0,tabTotalHeight-tabLabelHeight)
c.drawImage(labelImages[card.types],1,0, c.drawImage(labelImages[card.types],1,0,
tabLabelWidth-2,tabLabelHeight-1, tabLabelWidth-2,tabLabelHeight-1,
preserveAspectRatio=False,anchor='n') preserveAspectRatio=False,anchor='n')
if card.types == ('Treasure',) or card.types == ('Curse',): if card.types[0] == 'Treasure' or card.types == ('Curse',):
textHeight = tabLabelHeight/2-4 textHeight = tabLabelHeight/2-4
costHeight = textHeight costHeight = textHeight
potSize = 12 potSize = 12
@ -75,7 +78,10 @@ def drawTab(card,x,y,useExtra=False):
textWidth -= potSize textWidth -= potSize
c.setFont('MinionPro-Bold',12) c.setFont('MinionPro-Bold',12)
c.drawCentredString(12,costHeight,str(card.cost)) cost = str(card.cost)
if 'Prize' in card.types:
cost += '*'
c.drawCentredString(12,costHeight,cost)
fontSize = 12 fontSize = 12
name = card.name.upper() name = card.name.upper()
name_parts = name.split() name_parts = name.split()
@ -124,7 +130,7 @@ def drawTab(card,x,y,useExtra=False):
s = getSampleStyleSheet()['BodyText'] s = getSampleStyleSheet()['BodyText']
s.fontName = "Times-Roman" s.fontName = "Times-Roman"
p = Paragraph(d,s) p = Paragraph(d,s)
textHeight = tabTotalHeight - tabLabelHeight + 0.3*cm textHeight = tabTotalHeight - tabLabelHeight + 0.2*cm
textWidth = tabWidth - cm textWidth = tabWidth - cm
w,h = p.wrap(textWidth,textHeight) w,h = p.wrap(textWidth,textHeight)
@ -193,7 +199,7 @@ def read_card_defs(fname):
else: else:
potcost = 0 potcost = 0
currentCard = Card(m.groupdict()["name"], currentCard = Card(m.groupdict()["name"],
m.groupdict()["set"], m.groupdict()["set"].lower(),
tuple([t.strip() for t in m.groupdict()["type"].split("-")]), tuple([t.strip() for t in m.groupdict()["type"].split("-")]),
int(m.groupdict()["cost"]), int(m.groupdict()["cost"]),
m.groupdict()["description"], m.groupdict()["description"],
@ -255,7 +261,10 @@ if __name__=='__main__':
help="'<%f>x<%f>' (size in cm, left/right, top/bottom), default: 1x1") help="'<%f>x<%f>' (size in cm, left/right, top/bottom), default: 1x1")
parser.add_option("--papersize",type="string",dest="papersize",default=None, parser.add_option("--papersize",type="string",dest="papersize",default=None,
help="'<%f>x<%f>' (size in cm), or 'A4', or 'LETTER'") help="'<%f>x<%f>' (size in cm), or 'A4', or 'LETTER'")
parser.add_option("--samesidelabels",action="store_true",dest="sameside",
help="force all label tabs to be on the same side")
parser.add_option("--expansions",action="append",type="string",
help="subset of dominion expansions to produce tabs for")
(options,args) = parser.parse_args() (options,args) = parser.parse_args()
size = options.size.upper() size = options.size.upper()
@ -326,6 +335,9 @@ if __name__=='__main__':
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'))
cards = read_card_defs("dominion_cards.txt") cards = read_card_defs("dominion_cards.txt")
if options.expansions:
options.expansions = [o.lower() for o in options.expansions]
cards=[c for c in cards if c.cardset in 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 = read_card_extras("dominion_card_extras.txt",cards) extras = read_card_extras("dominion_card_extras.txt",cards)
print '%d cards read' % len(cards) print '%d cards read' % len(cards)