changes/cleanup to support online version

This commit is contained in:
Sumpfork 2013-01-30 16:53:57 -08:00
parent 24e79f5699
commit 8dcfcc08f1

View File

@ -104,12 +104,16 @@ class DominionTabs:
'envoy' : 'envoy_set.png' 'envoy' : 'envoy_set.png'
} }
def __init__(self):
self.filedir = os.path.dirname(__file__)
def add_inline_images(self, text, fontsize): def add_inline_images(self, text, fontsize):
replace = '<img src='"'images/coin_small_\\1.png'"' width=%d height='"'100%%'"' valign='"'middle'"'/>' % (fontsize*1.2) path = os.path.join(self.filedir,'images')
replace = '<img src='"'%s/coin_small_\\1.png'"' width=%d height='"'100%%'"' valign='"'middle'"'/>' % (path,fontsize*1.2)
text = re.sub('(\d)\s(c|C)oin(s)?', replace,text) text = re.sub('(\d)\s(c|C)oin(s)?', replace,text)
replace = '<img src='"'images/coin_small_question.png'"' width=%d height='"'100%%'"' valign='"'middle'"'/>' % (fontsize*1.2) replace = '<img src='"'%s/coin_small_question.png'"' width=%d height='"'100%%'"' valign='"'middle'"'/>' % (path,fontsize*1.2)
text = re.sub('\?\s(c|C)oin(s)?', replace,text) text = re.sub('\?\s(c|C)oin(s)?', replace,text)
replace = '<img src='"'images/victory_emblem.png'"' width=%d height='"'120%%'"' valign='"'middle'"'/>' % (fontsize*1.5) replace = '<img src='"'%s/victory_emblem.png'"' width=%d height='"'120%%'"' valign='"'middle'"'/>' % (path,fontsize*1.5)
text = re.sub('\<VP\>', replace,text) text = re.sub('\<VP\>', replace,text)
return text return text
@ -173,7 +177,7 @@ class DominionTabs:
self.tabTotalHeight-self.tabLabelHeight) self.tabTotalHeight-self.tabLabelHeight)
else: else:
self.canvas.translate(0,self.tabTotalHeight-self.tabLabelHeight) self.canvas.translate(0,self.tabTotalHeight-self.tabLabelHeight)
self.canvas.drawImage(os.path.join('images',card.getType().getNoCoinTabImageFile()),1,0, self.canvas.drawImage(os.path.join(self.filedir,'images',card.getType().getNoCoinTabImageFile()),1,0,
self.tabLabelWidth-2,self.tabLabelHeight-1, self.tabLabelWidth-2,self.tabLabelHeight-1,
preserveAspectRatio=False,anchor='n',mask='auto') preserveAspectRatio=False,anchor='n',mask='auto')
@ -201,12 +205,12 @@ class DominionTabs:
# potSize = 11 # potSize = 11
# potHeight = 2 # potHeight = 2
self.canvas.drawImage("images/coin_small.png",4,costHeight-5,16,16,preserveAspectRatio=True,mask='auto') self.canvas.drawImage(os.path.join(self.filedir,'images','coin_small.png'),4,costHeight-5,16,16,preserveAspectRatio=True,mask='auto')
textInset = 22 textInset = 22
textWidth = 85 textWidth = 85
if card.potcost: if card.potcost:
self.canvas.drawImage("images/potion.png",21,potHeight,potSize,potSize,preserveAspectRatio=True,mask=[255,255,255,255,255,255]) self.canvas.drawImage(os.path.join(self.filedir,'images','potion.png'),21,potHeight,potSize,potSize,preserveAspectRatio=True,mask=[255,255,255,255,255,255])
textInset += potSize textInset += potSize
textWidth -= potSize textWidth -= potSize
@ -216,7 +220,7 @@ class DominionTabs:
setImage = DominionTabs.promoImages.get(card.name.lower(), None) setImage = DominionTabs.promoImages.get(card.name.lower(), None)
if setImage: if setImage:
self.canvas.drawImage(os.path.join('images',setImage), self.tabLabelWidth-20, potHeight, 14, 12, mask='auto') self.canvas.drawImage(os.path.join(self.filedir,'images',setImage), self.tabLabelWidth-20, potHeight, 14, 12, mask='auto')
elif setImage == None and card.cardset != 'common': elif setImage == None and card.cardset != 'common':
print 'warning, no set image for set "%s" card "%s"' % (card.cardset, card.name) print 'warning, no set image for set "%s" card "%s"' % (card.cardset, card.name)
DominionTabs.setImages[card.cardset] = 0 DominionTabs.setImages[card.cardset] = 0
@ -310,7 +314,7 @@ class DominionTabs:
extras[currentCard] = extra extras[currentCard] = extra
currentCard = m.groupdict()["name"] currentCard = m.groupdict()["name"]
extra = "" extra = ""
if 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
@ -339,7 +343,7 @@ class DominionTabs:
else: else:
card.description += line card.description += line
def read_card_defs(self,fname): def read_card_defs(self,fname,fileobject=None):
cards = [] cards = []
f = open(fname) f = open(fname)
carddef = re.compile("^\d+\t+(?P<name>[\w\-'/ ]+)\t+(?P<set>[\w ]+)\t+(?P<type>[-\w ]+)\t+\$(?P<cost>\d+)( (?P<potioncost>\d)+P)?\t+(?P<description>.*)") carddef = re.compile("^\d+\t+(?P<name>[\w\-'/ ]+)\t+(?P<set>[\w ]+)\t+(?P<type>[-\w ]+)\t+\$(?P<cost>\d+)( (?P<potioncost>\d)+P)?\t+(?P<description>.*)")
@ -400,7 +404,8 @@ class DominionTabs:
self.canvas.restoreState() self.canvas.restoreState()
self.canvas.showPage() self.canvas.showPage()
def main(self,argstring): @staticmethod
def parse_opts(argstring):
parser = OptionParser() parser = OptionParser()
parser.add_option("--back_offset",type="int",dest="back_offset",default=0, parser.add_option("--back_offset",type="int",dest="back_offset",default=0,
help="Points to offset the back page to the right; needed for some printers") help="Points to offset the back page to the right; needed for some printers")
@ -419,13 +424,22 @@ 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")
(self.options,args) = parser.parse_args(argstring) return parser.parse_args(argstring)
def main(self,argstring):
options,args = DominionTabs.parse_opts(argstring)
fname = None
if args:
fname = args[0]
return self.generate(options,fname)
def generate(self,options,f):
self.options = options
size = self.options.size.upper() size = self.options.size.upper()
if size == 'SLEEVED' or self.options.sleeved: if size == 'SLEEVED' or self.options.sleeved:
dominionCardWidth, dominionCardHeight = (9.4*cm, 6.15*cm) dominionCardWidth, dominionCardHeight = (9.4*cm, 6.15*cm)
print 'Using sleeved card size, %.2fcm x %.2fcm' % (dominionCardWidth/cm,dominionCardHeight/cm) print 'Using sleeved card size, %.2fcm x %.2fcm' % (dominionCardWidth/cm,dominionCardHeight/cm)
elif size == 'NORMAL': elif size in ['NORMAL','UNSLEEVED']:
dominionCardWidth, dominionCardHeight = (9.1*cm, 5.9*cm) dominionCardWidth, dominionCardHeight = (9.1*cm, 5.9*cm)
print 'Using normal card size, %.2fcm x%.2fcm' % (dominionCardWidth/cm,dominionCardHeight/cm) print 'Using normal card size, %.2fcm x%.2fcm' % (dominionCardWidth/cm,dominionCardHeight/cm)
else: else:
@ -490,17 +504,19 @@ class DominionTabs:
(0,self.tabBaseHeight,0,0)] (0,self.tabBaseHeight,0,0)]
try: try:
pdfmetrics.registerFont(TTFont('MinionPro-Regular','fonts/MinionPro-Regular.ttf')) dirn = os.path.join(self.filedir,'fonts')
pdfmetrics.registerFont(TTFont('MinionPro-Bold','fonts/MinionPro-Bold.ttf')) pdfmetrics.registerFont(TTFont('MinionPro-Regular',os.path.join(dirn,'MinionPro-Regular.ttf')))
pdfmetrics.registerFont(TTFont('MinionPro-Bold',os.path.join(dirn,'MinionPro-Bold.ttf')))
except: except:
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'))
cards = self.read_card_defs("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("dominion_card_extras.txt",cards) extras = 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 = {}
@ -510,11 +526,9 @@ class DominionTabs:
#pprint.pprint(sets) #pprint.pprint(sets)
#pprint.pprint(types) #pprint.pprint(types)
if args: if not f:
fname = args[0] f = "dominion_tabs.pdf"
else: self.canvas = canvas.Canvas(f, pagesize=(self.paperwidth, self.paperheight))
fname = "dominion_tabs.pdf"
self.canvas = canvas.Canvas(fname, pagesize=(self.paperwidth, self.paperheight))
#pprint.pprint(self.canvas.getAvailableFonts()) #pprint.pprint(self.canvas.getAvailableFonts())
self.drawCards(cards) self.drawCards(cards)
self.canvas.save() self.canvas.save()