def __init__(self, source_size, target_size, arguments): # pylint: disable=too-many-arguments if arguments.gap[0] is None: self.gap = papersize.parse_length("0") else: self.gap = arguments.gap[0] if arguments.margin[0] is None: self.margin = papersize.parse_length("0") else: self.margin = arguments.margin[0] if arguments.orientation == "landscape": self.grid = self._grid( source_size, papersize.rotate(target_size, papersize.LANDSCAPE)) elif arguments.orientation == "portrait": self.grid = self._grid( source_size, papersize.rotate(target_size, papersize.PORTRAIT)) else: self.grid = max( self._grid(source_size, target_size), self._grid(source_size, (target_size[1], target_size[0])), key=operator.attrgetter("pagenumber"), ) if self.pages_per_page == 0: raise errors.PdfautonupError( "Error: Format constraints too tight: Cannot fit any" "source page into destination page.") super().__init__(self.grid.target, arguments)
def testExceptions(self): """Test module exceptions""" try: papersize.parse_length("cm") except papersize.CouldNotParse as error: self.assertEqual(str(error), "Could not parse string 'cm'.") try: papersize.rotate((1, 2), "portrait") except papersize.UnknownOrientation as error: self.assertEqual( str(error), "'portrait' is not one of `papersize.PORTRAIT` or `papersize.LANDSCAPE`", )
def parse_lc_paper(string): """Parse LC_PAPER locale variable We assume units are milimeters. """ dimensions = {} for line in string.split("\n"): if line.startswith("width="): dimensions["width"] = papersize.parse_length("{}mm".format( line[6:])) if line.startswith("height="): dimensions["height"] = papersize.parse_length("{}mm".format( line[7:])) if len(dimensions) == 2: return (dimensions["width"], dimensions["height"]) raise errors.CouldNotParse(string)
def testParseLength(self): """Test :func:`papersize.parse_length`.""" for (args, result) in [(("10cm", "mm"), 100), (("10in", ), 722.7)]: self.assertAlmostEqual(papersize.parse_length(*args), Decimal(result)) self.assertRaises(papersize.CouldNotParse, papersize.parse_length, "cm")
def length_type(text): """Check type of length (number plus optional unit). Wrapper to :func:`papersize.parse_length`. """ try: return papersize.parse_length(text) except papersize.CouldNotParse as error: raise argparse.ArgumentTypeError(str(error))
dimorder = (1, 0, 2) d1neighbours = [getneighbours(col, dimorder[0]) for col in colors] d2neighbours = [[getneighbours(col, dimorder[1]) for col in sublist] for sublist in d1neighbours] d3neighbours = [[[getneighbours(col, dimorder[2]) for col in sublist] for sublist in mainlist] for mainlist in d2neighbours] # boxes along the x axis = 1st dimension * (2nd dimension + 1 for spacing) - 1 nx = (len(d3neighbours[0][0]) + 1) * len(d3neighbours[0][0][0]) - 1 # boxes along the y axis = ncolors * (3rd dimension + 1 for spacing) - 1 ny = (len(d3neighbours[0]) + 1) * len(colors) - 1 # all in pt size = papersize.parse_papersize(args.paper) if args.landscape: size = papersize.rotate(size, papersize.LANDSCAPE) margin = papersize.parse_length(args.margin) printsize = [s - 2*margin for s in size] boxwidth = printsize[0] / nx boxheight = printsize[1] / ny print(f'{nx}x{ny} fits {boxwidth}x{boxheight}') boxwidth = min(boxwidth, boxheight) boxheight = min(boxwidth, boxheight) print('box size: ' + str(boxheight/3) + ' mm') #boxsize = min(boxwidth, boxheight) # parse rectangle/square specs #def parserectanglespec(spec): # try: # return papersize.parse_papersize(spec)
def getpt(length): return mmtopt(float(papersize.parse_length(length, 'mm')))