more refactoring, renaming, unifying

This commit is contained in:
Sumpfork 2015-11-19 10:31:18 -08:00
parent 1426214175
commit 489f467bce
3 changed files with 66 additions and 49 deletions

View File

@ -1,3 +1,3 @@
# main package
__version__ = '1.9.1'
__version__ = '2.0'

View File

@ -2,6 +2,7 @@ from optparse import OptionParser
import os
import codecs
import json
import sys
from reportlab.lib.pagesizes import LETTER, A4
from reportlab.lib.units import cm
@ -138,26 +139,15 @@ def generate_sample(options):
sample.save(filename='sample.png')
def generate(options, data_path, f):
size = options.size.upper()
if size == 'SLEEVED' or options.sleeved:
dominionCardWidth, dominionCardHeight = (9.4 * cm, 6.15 * cm)
print 'Using sleeved card size, %.2fcm x %.2fcm' % (dominionCardWidth / cm, dominionCardHeight / cm)
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:
dominionCardWidth, dominionCardHeight = parseDimensions(size)
print 'Using custom card size, %.2fcm x %.2fcm' % (dominionCardWidth / cm, dominionCardHeight / cm)
def parse_papersize(spec):
papersize = None
if not options.papersize:
if not spec:
if os.path.exists("/etc/papersize"):
papersize = open("/etc/papersize").readline().upper()
else:
papersize = 'LETTER'
else:
papersize = options.papersize.upper()
papersize = spec.upper()
if papersize == 'A4':
print "Using A4 sized paper."
@ -169,6 +159,33 @@ def generate(options, data_path, f):
paperwidth, paperheight = parseDimensions(papersize)
print 'Using custom paper size, %.2fcm x %.2fcm' % (paperwidth / cm, paperheight / cm)
return paperwidth, paperheight
def parse_cardsize(spec, sleeved):
spec = spec.upper()
if spec == 'SLEEVED' or sleeved:
dominionCardWidth, dominionCardHeight = (9.4 * cm, 6.15 * cm)
print 'Using sleeved card size, %.2fcm x %.2fcm' % (dominionCardWidth / cm,
dominionCardHeight / cm)
elif spec in ['NORMAL', 'UNSLEEVED']:
dominionCardWidth, dominionCardHeight = (9.1 * cm, 5.9 * cm)
print 'Using normal card size, %.2fcm x%.2fcm' % (dominionCardWidth / cm,
dominionCardHeight / cm)
else:
dominionCardWidth, dominionCardHeight = parseDimensions(spec)
print 'Using custom card size, %.2fcm x %.2fcm' % (dominionCardWidth / cm,
dominionCardHeight / cm)
return dominionCardWidth, dominionCardHeight
def generate(options, data_path, f):
add_opt(options, 'data_path', data_path)
dominionCardWidth, dominionCardHeight = parse_cardsize(options.size, options.sleeved)
paperwidth, paperheight = parse_papersize(options.papersize)
cardlist = None
if options.cardlist:
print options.cardlist
@ -178,9 +195,9 @@ def generate(options, data_path, f):
cardlist.add(line.strip())
if options.orientation == "vertical":
tabWidth, tabBaseHeight = dominionCardHeight, dominionCardWidth
dividerWidth, dividerBaseHeight = dominionCardHeight, dominionCardWidth
else:
tabWidth, tabBaseHeight = dominionCardWidth, dominionCardHeight
dividerWidth, dividerBaseHeight = dominionCardWidth, dominionCardHeight
if options.tab_name_align == "center":
options.tab_name_align = "centre"
@ -195,47 +212,46 @@ def generate(options, data_path, f):
# fixed for Avery 8867 for now
minmarginwidth = 0.86 * cm # was 0.76
minmarginheight = 1.37 * cm # was 1.27
tabLabelHeight = 1.07 * cm # was 1.27
tabLabelWidth = 4.24 * cm # was 4.44
labelHeight = 1.07 * cm # was 1.27
labelWidth = 4.24 * cm # was 4.44
horizontalBorderSpace = 0.96 * cm # was 0.76
verticalBorderSpace = 0.20 * cm # was 0.01
tabBaseHeight = 0
tabWidth = tabLabelWidth
dividerBaseHeight = 0
dividerWidth = labelWidth
fixedMargins = True
else:
minmarginwidth, minmarginheight = parseDimensions(
options.minmargin)
if options.tab_side == "full":
tabLabelWidth = tabWidth
labelWidth = dividerWidth
else:
tabLabelWidth = options.tabwidth * cm
tabLabelHeight = .9 * cm
labelWidth = options.tabwidth * cm
labelHeight = .9 * cm
horizontalBorderSpace = 0 * cm
verticalBorderSpace = 0 * cm
tabHeight = tabBaseHeight + tabLabelHeight
dividerHeight = dividerBaseHeight + labelHeight
# note: this is convenient, but somewhat inaccurate as the border space
# isn't actually part of the tab width
add_opt(options, 'dividerWidth', tabWidth)
add_opt(options, 'dividerHeight', tabHeight)
add_opt(options, 'totalTabWidth', tabWidth + horizontalBorderSpace)
add_opt(options, 'totalTabHeight', tabHeight + verticalBorderSpace)
add_opt(options, 'labelWidth', tabLabelWidth)
add_opt(options, 'labelHeight', tabLabelHeight)
add_opt(options, 'dividerWidth', dividerWidth)
add_opt(options, 'dividerHeight', dividerHeight)
add_opt(options, 'dividerWidthReserved', dividerWidth + horizontalBorderSpace)
add_opt(options, 'dividerHeightReserved', dividerHeight + verticalBorderSpace)
add_opt(options, 'labelWidth', labelWidth)
add_opt(options, 'labelHeight', labelHeight)
# as we don't draw anything in the final border, it shouldn't count towards how many tabs we can fit
# so it gets added back in to the page size here
numTabsVerticalP = int(
(paperheight - 2 * minmarginheight + verticalBorderSpace) / options.totalTabHeight)
(paperheight - 2 * minmarginheight + verticalBorderSpace) / options.dividerHeightReserved)
numTabsHorizontalP = int(
(paperwidth - 2 * minmarginwidth + horizontalBorderSpace) / options.totalTabWidth)
(paperwidth - 2 * minmarginwidth + horizontalBorderSpace) / options.dividerWidthReserved)
numTabsVerticalL = int(
(paperwidth - 2 * minmarginwidth + verticalBorderSpace) / options.totalTabHeight)
(paperwidth - 2 * minmarginwidth + verticalBorderSpace) / options.dividerHeightReserved)
numTabsHorizontalL = int(
(paperheight - 2 * minmarginheight + horizontalBorderSpace) / options.totalTabWidth)
(paperheight - 2 * minmarginheight + horizontalBorderSpace) / options.dividerWidthReserved)
if numTabsVerticalL * numTabsHorizontalL > numTabsVerticalP * numTabsHorizontalP and not fixedMargins:
if ((numTabsVerticalL * numTabsHorizontalL >
numTabsVerticalP * numTabsHorizontalP) and not fixedMargins):
add_opt(options, 'numTabsVertical', numTabsVerticalL)
add_opt(options, 'numTabsHorizontal', numTabsHorizontalL)
add_opt(options, 'paperheight', paperwidth)
@ -252,8 +268,8 @@ def generate(options, data_path, f):
print "Paper dimensions: {:.2f}cm (w) x {:.2f}cm (h)".format(options.paperwidth / cm,
options.paperheight / cm)
print "Tab dimensions: {:.2f}cm (w) x {:.2f}cm (h)".format(options.totalTabWidth / cm,
options.totalTabHeight / cm)
print "Tab dimensions: {:.2f}cm (w) x {:.2f}cm (h)".format(options.dividerWidthReserved / cm,
options.dividerHeightReserved / cm)
print '{} dividers horizontally, {} vertically'.format(options.numTabsHorizontal,
options.numTabsVertical)
@ -261,10 +277,10 @@ def generate(options, data_path, f):
# dynamically max margins
add_opt(options, 'horizontalMargin',
(options.paperwidth -
options.numTabsHorizontal * options.totalTabWidth) / 2)
options.numTabsHorizontal * options.dividerWidthReserved) / 2)
add_opt(options, 'verticalMargin',
(options.paperheight -
options.numTabsVertical * options.totalTabHeight) / 2)
options.numTabsVertical * options.dividerHeightReserved) / 2)
else:
add_opt(options, 'horizontalMargin', minmarginwidth)
add_opt(options, 'verticalMargin', minmarginheight)

View File

@ -62,7 +62,7 @@ class DividerDrawer(object):
self.canvas.save()
def add_inline_images(self, text, fontsize):
path = 'images'
path = os.path.join(self.options.data_path, '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)
@ -103,7 +103,7 @@ class DividerDrawer(object):
if cropmarksleft or cropmarksright:
self.canvas.line(-2 * cmw, 0, -cmw, 0)
self.canvas.line(-2 * cmw,
self.tabBaseHeight, -cmw, self.tabBaseHeight)
self.dividerHeight, -cmw, self.dividerHeight)
if y > 0:
self.canvas.line(-2 * cmw,
self.options.dividerHeight, -cmw, self.options.dividerHeight)
@ -150,10 +150,10 @@ class DividerDrawer(object):
potHeight = y - 3
potSize = 11
self.canvas.drawImage(os.path.join('images', 'coin_small.png'),
self.canvas.drawImage(os.path.join(self.options.data_path, 'images', 'coin_small.png'),
x, coinHeight, 16, 16, preserveAspectRatio=True, mask='auto')
if card.potcost:
self.canvas.drawImage(os.path.join('images', 'potion.png'), x + 17,
self.canvas.drawImage(os.path.join(self.options.data_path, 'images', 'potion.png'), x + 17,
potHeight, potSize, potSize, preserveAspectRatio=True,
mask=[255, 255, 255, 255, 255, 255])
width += potSize
@ -166,7 +166,7 @@ class DividerDrawer(object):
def drawSetIcon(self, setImage, x, y):
# set image
self.canvas.drawImage(
os.path.join('images', setImage), x, y, 14, 12, mask='auto')
os.path.join(self.options.data_path, 'images', setImage), x, y, 14, 12, mask='auto')
@classmethod
def nameWidth(self, name, fontSize):
@ -203,7 +203,7 @@ class DividerDrawer(object):
# draw banner
img = card.getType().getNoCoinTabImageFile()
if not self.options.no_tab_artwork and img:
self.canvas.drawImage(os.path.join('images', img), 1, 0,
self.canvas.drawImage(os.path.join(self.options.data_path, 'images', img), 1, 0,
self.options.labelWidth -
2, self.options.labelHeight - 1,
preserveAspectRatio=False, anchor='n', mask='auto')
@ -392,7 +392,8 @@ class DividerDrawer(object):
self.canvas.translate(self.options.horizontalMargin, self.options.verticalMargin)
if useExtra:
self.canvas.translate(self.options.back_offset, self.options.back_offset_height)
self.canvas.translate(x * self.options.totalTabWidth, y * self.options.totalTabHeight)
self.canvas.translate(x * self.options.dividerWidthReserved,
y * self.options.dividerHeightReserved)
# actual drawing
if not self.options.tabs_only: