diff --git a/dominion_tabs.py b/dominion_tabs.py index 5d210ff..6190137 100644 --- a/dominion_tabs.py +++ b/dominion_tabs.py @@ -104,12 +104,16 @@ class DominionTabs: 'envoy' : 'envoy_set.png' } + def __init__(self): + self.filedir = os.path.dirname(__file__) + def add_inline_images(self, text, fontsize): - replace = '' % (fontsize*1.2) + path = os.path.join(self.filedir,'images') + replace = '' % (path,fontsize*1.2) text = re.sub('(\d)\s(c|C)oin(s)?', replace,text) - replace = '' % (fontsize*1.2) + replace = '' % (path,fontsize*1.2) text = re.sub('\?\s(c|C)oin(s)?', replace,text) - replace = '' % (fontsize*1.5) + replace = '' % (path,fontsize*1.5) text = re.sub('\', replace,text) return text @@ -173,7 +177,7 @@ class DominionTabs: self.tabTotalHeight-self.tabLabelHeight) else: 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, preserveAspectRatio=False,anchor='n',mask='auto') @@ -201,12 +205,12 @@ class DominionTabs: # potSize = 11 # 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 textWidth = 85 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 textWidth -= potSize @@ -216,7 +220,7 @@ class DominionTabs: setImage = DominionTabs.promoImages.get(card.name.lower(), None) 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': print 'warning, no set image for set "%s" card "%s"' % (card.cardset, card.name) DominionTabs.setImages[card.cardset] = 0 @@ -310,7 +314,7 @@ class DominionTabs: extras[currentCard] = extra currentCard = m.groupdict()["name"] 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' else: extra += line @@ -339,7 +343,7 @@ class DominionTabs: else: card.description += line - def read_card_defs(self,fname): + def read_card_defs(self,fname,fileobject=None): cards = [] f = open(fname) carddef = re.compile("^\d+\t+(?P[\w\-'/ ]+)\t+(?P[\w ]+)\t+(?P[-\w ]+)\t+\$(?P\d+)( (?P\d)+P)?\t+(?P.*)") @@ -400,7 +404,8 @@ class DominionTabs: self.canvas.restoreState() self.canvas.showPage() - def main(self,argstring): + @staticmethod + def parse_opts(argstring): parser = OptionParser() 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") @@ -419,13 +424,22 @@ class DominionTabs: help="subset of dominion expansions to produce tabs for") parser.add_option("--cropmarks",action="store_true",dest="cropmarks", 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() if size == 'SLEEVED' or self.options.sleeved: dominionCardWidth, dominionCardHeight = (9.4*cm, 6.15*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) print 'Using normal card size, %.2fcm x%.2fcm' % (dominionCardWidth/cm,dominionCardHeight/cm) else: @@ -490,17 +504,19 @@ class DominionTabs: (0,self.tabBaseHeight,0,0)] try: - pdfmetrics.registerFont(TTFont('MinionPro-Regular','fonts/MinionPro-Regular.ttf')) - pdfmetrics.registerFont(TTFont('MinionPro-Bold','fonts/MinionPro-Bold.ttf')) + dirn = os.path.join(self.filedir,'fonts') + 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: + raise pdfmetrics.registerFont(TTFont('MinionPro-Regular','OptimusPrincepsSemiBold.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: 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.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) sets = {} types = {} @@ -510,11 +526,9 @@ class DominionTabs: #pprint.pprint(sets) #pprint.pprint(types) - if args: - fname = args[0] - else: - fname = "dominion_tabs.pdf" - self.canvas = canvas.Canvas(fname, pagesize=(self.paperwidth, self.paperheight)) + if not f: + f = "dominion_tabs.pdf" + self.canvas = canvas.Canvas(f, pagesize=(self.paperwidth, self.paperheight)) #pprint.pprint(self.canvas.getAvailableFonts()) self.drawCards(cards) self.canvas.save()