def parseRaw(data, node): """Parse and process a simple DSL to handle creation of flowables. Supported (can add others on request): * PageBreak * EvenPageBreak * OddPageBreak * FrameBreak * Spacer width, height * Transition * SetPageCounter * TextAnnotation "text of annotation" x_begin=-1 y_begin=-1 x_end=-1 y_end=-1 """ elements = [] lines = data.splitlines() for line in lines: lexer = shlex.shlex(line) lexer.whitespace += ',' tokens = list(lexer) if not tokens: continue # Empty line command = tokens[0] if command == 'PageBreak': if len(tokens) == 1: elements.append(MyPageBreak()) else: elements.append(MyPageBreak(tokens[1])) elif command == 'EvenPageBreak': if len(tokens) == 1: elements.append(MyPageBreak(breakTo='even')) else: elements.append(MyPageBreak(tokens[1], breakTo='even')) elif command == 'OddPageBreak': if len(tokens) == 1: elements.append(MyPageBreak(breakTo='odd')) else: elements.append(MyPageBreak(tokens[1], breakTo='odd')) elif command == 'FrameBreak': if len(tokens) == 1: elements.append(CondPageBreak(99999)) else: elements.append(CondPageBreak(float(tokens[1]))) elif command == 'Spacer': elements.append( MySpacer(adjustUnits(tokens[1]), adjustUnits(tokens[2]))) elif command == 'Transition': elements.append(Transition(*tokens[1:])) elif command == 'SetPageCounter': elements.append(flowables.PageCounter(*tokens[1:])) elif command == 'TextAnnotation': elements.append(TextAnnotation(*tokens[1:])) else: log.error('Unknown command %s in raw pdf directive [%s]' % (command, nodeid(node))) return elements
def parseRaw(data, node): """Parse and process a simple DSL to handle creation of flowables. Supported (can add others on request): * PageBreak * Spacer width, height """ elements = [] lines = data.splitlines() for line in lines: lexer = shlex.shlex(line) lexer.whitespace += ',' tokens = list(lexer) if not tokens: continue # Empty line command = tokens[0] if command == 'PageBreak': if len(tokens) == 1: elements.append(MyPageBreak()) else: elements.append(MyPageBreak(tokens[1])) elif command == 'EvenPageBreak': if len(tokens) == 1: elements.append(MyPageBreak(breakTo='even')) else: elements.append(MyPageBreak(tokens[1],breakTo='even')) elif command == 'OddPageBreak': if len(tokens) == 1: elements.append(MyPageBreak(breakTo='odd')) else: elements.append(MyPageBreak(tokens[1],breakTo='odd')) elif command == 'FrameBreak': if len(tokens) == 1: elements.append(CondPageBreak(99999)) else: elements.append(CondPageBreak(float(tokens[1]))) elif command == 'Spacer': elements.append(MySpacer(adjustUnits(tokens[1]), adjustUnits(tokens[2]))) elif command == 'Transition': elements.append(Transition(*tokens[1:])) elif command == 'SetPageCounter': elements.append(flowables.PageCounter(*tokens[1:])) else: log.error('Unknown command %s in raw pdf directive [%s]'%(command,nodeid(node))) return elements
def wrap(self, availWidth, availHeight): """If we need more width than we have, complain, keep a scale""" if self.style: bp = self.style.__dict__.get("borderPadding", 0) bw = self.style.__dict__.get("borderWidth", 0) if isinstance(bp,list): self.pad = [bp[0] + bw + .1, bp[1] + bw + .1, bp[2] + bw + .1, bp[3] + bw + .1] else: self.pad = [bp + bw + .1, bp + bw + .1, bp + bw + .1, bp + bw + .1] else: self.pad = [0,0,0,0] maxWidth = float(min( styles.adjustUnits(self.maxWidth, availWidth) or availWidth, availWidth)) self.maxWidth = maxWidth maxWidth -= (self.pad[1]+self.pad[3]) self.width, self.height = _listWrapOn(self.content, maxWidth, None) self.scale = 1.0 if self.width > maxWidth: if self.mode <> 'shrink': log.warning("BoundByWidth too wide to fit in frame (%s > %s): %s", self.width,maxWidth,self.identity()) if self.mode == 'shrink': self.scale = (maxWidth + self.pad[1]+self.pad[3])/\ (self.width + self.pad[1]+self.pad[3]) self.height *= self.scale return self.width, self.height + (self.pad[0]+self.pad[2])*self.scale
def wrap(self, availWidth, availHeight): """If we need more width than we have, complain, keep a scale""" self.pad = self.border_padding(True, 0.1) maxWidth = float( min( styles.adjustUnits(self.maxWidth, availWidth) or availWidth, availWidth)) self.maxWidth = maxWidth maxWidth -= (self.pad[1] + self.pad[3]) self.width, self.height = _listWrapOn(self.content, maxWidth, None) if self.width > maxWidth: if self.mode <> 'shrink': self.scale = 1.0 log.warning( "BoundByWidth too wide to fit in frame (%s > %s): %s", self.width, maxWidth, self.identity()) if self.mode == 'shrink' and not self.scale: self.scale = (maxWidth + self.pad[1]+self.pad[3])/\ (self.width + self.pad[1]+self.pad[3]) else: self.scale = 1.0 self.height *= self.scale self.width *= self.scale return self.width, self.height + (self.pad[0] + self.pad[2]) * self.scale
def parseRaw(data): """Parse and process a simple DSL to handle creation of flowables. Supported (can add others on request): * PageBreak * Spacer width, height """ elements = [] lines = data.splitlines() for line in lines: lexer = shlex.shlex(line) lexer.whitespace += ',' tokens = list(lexer) command = tokens[0] if command == 'PageBreak': if len(tokens) == 1: elements.append(MyPageBreak()) else: elements.append(MyPageBreak(tokens[1])) elif command == 'EvenPageBreak': if len(tokens) == 1: elements.append(MyPageBreak(breakTo='even')) else: elements.append(MyPageBreak(tokens[1], breakTo='even')) elif command == 'OddPageBreak': if len(tokens) == 1: elements.append(MyPageBreak(breakTo='odd')) else: elements.append(MyPageBreak(tokens[1], breakTo='odd')) elif command == 'Spacer': elements.append( Spacer(adjustUnits(tokens[1]), adjustUnits(tokens[2]))) elif command == 'Transition': elements.append(Transition(*tokens[1:])) elif command == 'SetPageCounter': elements.append(flowables.PageCounter(*tokens[1:])) else: log.error('Unknown command %s in raw pdf directive' % command) return elements
def wrap(self, availWidth, availHeight): """If we need more width than we have, complain, keep a scale""" self.pad = self.border_padding(True, 0.1) maxWidth = float(min( styles.adjustUnits(self.maxWidth, availWidth) or availWidth, availWidth)) self.maxWidth = maxWidth maxWidth -= (self.pad[1]+self.pad[3]) self.width, self.height = _listWrapOn(self.content, maxWidth, None) if self.width > maxWidth: if self.mode <> 'shrink': self.scale = 1.0 log.warning("BoundByWidth too wide to fit in frame (%s > %s): %s", self.width,maxWidth,self.identity()) if self.mode == 'shrink' and not self.scale: self.scale = (maxWidth + self.pad[1]+self.pad[3])/\ (self.width + self.pad[1]+self.pad[3]) else: self.scale = 1.0 self.height *= self.scale self.width *= self.scale return self.width, self.height + (self.pad[0]+self.pad[2])*self.scale
def adjust(*args, **kwargs): kwargs['total']=w return styles.adjustUnits(*args, **kwargs)