diff options
| author | Stephane Wirtel <stephane@tinyerp.com> | 2008-11-14 16:06:02 +0100 |
|---|---|---|
| committer | Stephane Wirtel <stephane@tinyerp.com> | 2008-11-14 16:06:02 +0100 |
| commit | 3dae09ac14990a82aa9ef8afc2a0429b877ab123 (patch) | |
| tree | fd4e64f6f37c8f23f54119197fad7ea69de418e2 /bin/reportlab/tools/pythonpoint/stdparser.py | |
| parent | 882cd7027feca65405cfdf1337064aa676830d4b (diff) | |
Remove pydot, pychart and reportlab.
bzr revid: stephane@tinyerp.com-20081114150602-cpp1eeo3d0837fev
Diffstat (limited to 'bin/reportlab/tools/pythonpoint/stdparser.py')
| -rw-r--r-- | bin/reportlab/tools/pythonpoint/stdparser.py | 813 |
1 files changed, 0 insertions, 813 deletions
diff --git a/bin/reportlab/tools/pythonpoint/stdparser.py b/bin/reportlab/tools/pythonpoint/stdparser.py deleted file mode 100644 index aaca2df2000..00000000000 --- a/bin/reportlab/tools/pythonpoint/stdparser.py +++ /dev/null @@ -1,813 +0,0 @@ -""" -Parser for PythonPoint using the xmllib.py in the standard Python -distribution. Slow, but always present. We intend to add new parsers -as Python 2.x and the XML package spread in popularity and stabilise. - -The parser has a getPresentation method; it is called from -pythonpoint.py. -""" - -import string, imp, sys, os, copy -from reportlab.lib.utils import SeqTypes -from reportlab.lib import xmllib -from reportlab.lib import colors -from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY -from reportlab.lib.utils import recursiveImport -from reportlab.tools.pythonpoint import pythonpoint -from reportlab.platypus import figures - - -def getModule(modulename,fromPath='reportlab.tools.pythonpoint.styles'): - """Get a module containing style declarations. - - Search order is: - reportlab/tools/pythonpoint/ - reportlab/tools/pythonpoint/styles/ - ./ - """ - - try: - exec 'from reportlab.tools.pythonpoint import '+modulename - return eval(modulename) - except ImportError: - try: - exec 'from reportlab.tools.pythonpoint.styles import '+modulename - return eval(modulename) - except ImportError: - exec 'import '+modulename - return eval(modulename) - - -class PPMLParser(xmllib.XMLParser): - attributes = { - #this defines the available attributes for all objects, - #and their default values. Although these don't have to - #be strings, the ones parsed from the XML do, so - #everything is a quoted string and the parser has to - #convert these to numbers where appropriate. - 'stylesheet': { - 'path':'None', - 'module':'None', - 'function':'getParagraphStyles' - }, - 'frame': { - 'x':'0', - 'y':'0', - 'width':'0', - 'height':'0', - 'border':'false', - 'leftmargin':'0', #this is ignored - 'topmargin':'0', #this is ignored - 'rightmargin':'0', #this is ignored - 'bottommargin':'0', #this is ignored - }, - 'slide': { - 'id':'None', - 'title':'None', - 'effectname':'None', # Split, Blinds, Box, Wipe, Dissolve, Glitter - 'effectdirection':'0', # 0,90,180,270 - 'effectdimension':'H', # H or V - horizontal or vertical - 'effectmotion':'I', # Inwards or Outwards - 'effectduration':'1', #seconds, - 'outlineentry':'None', - 'outlinelevel':'0' # 1 is a child, 2 is a grandchild etc. - }, - 'para': { - 'style':'Normal', - 'bullettext':'', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'image': { - 'filename':'', - 'width':'None', - 'height':'None', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'table': { - 'widths':'None', - 'heights':'None', - 'fieldDelim':',', - 'rowDelim':'\n', - 'style':'None', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'rectangle': { - 'x':'0', - 'y':'0', - 'width':'100', - 'height':'100', - 'fill':'None', - 'stroke':'(0,0,0)', - 'linewidth':'0', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'roundrect': { - 'x':'0', - 'y':'0', - 'width':'100', - 'height':'100', - 'radius':'6', - 'fill':'None', - 'stroke':'(0,0,0)', - 'linewidth':'0', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'line': { - 'x1':'0', - 'y1':'0', - 'x2':'100', - 'y2':'100', - 'stroke':'(0,0,0)', - 'width':'0', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'ellipse': { - 'x1':'0', - 'y1':'0', - 'x2':'100', - 'y2':'100', - 'stroke':'(0,0,0)', - 'fill':'None', - 'linewidth':'0', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'polygon': { - 'points':'(0,0),(50,0),(25,25)', - 'stroke':'(0,0,0)', - 'linewidth':'0', - 'stroke':'(0,0,0)', - 'fill':'None', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'string':{ - 'x':'0', - 'y':'0', - 'color':'(0,0,0)', - 'font':'Times-Roman', - 'size':'12', - 'align':'left', - 'effectname':'None', - 'effectdirection':'0', - 'effectdimension':'H', - 'effectmotion':'I', - 'effectduration':'1' - }, - 'customshape':{ - 'path':'None', - 'module':'None', - 'class':'None', - 'initargs':'None' - } - } - - def __init__(self): - self.presentations = [] - #yes, I know a generic stack would be easier... - #still, testing if we are 'in' something gives - #a degree of validation. - self._curPres = None - self._curSection = None - self._curSlide = None - self._curFrame = None - self._curPara = None #the only places we are interested in - self._curPrefmt = None - self._curPyCode = None - self._curString = None - self._curTable = None - self._curTitle = None - self._curAuthor = None - self._curSubject = None - self.fx = 1 - xmllib.XMLParser.__init__(self) - - def _arg(self,tag,args,name): - "What's this for???" - if args.has_key(name): - v = args[name] - else: - if self.attributes.has_key(tag): - v = self.attributes[tag][name] - else: - v = None - return v - - def ceval(self,tag,args,name): - if args.has_key(name): - v = args[name] - else: - if self.attributes.has_key(tag): - v = self.attributes[tag][name] - else: - return None - - # handle named colors (names from reportlab.lib.colors) - if name in ('color', 'stroke', 'fill'): - v = str(pythonpoint.checkColor(v)) - - return eval(v) - - def getPresentation(self): - return self._curPres - - - def handle_data(self, data): - #the only data should be paragraph text, preformatted para - #text, 'string text' for a fixed string on the page, - #or table data - - if self._curPara: - self._curPara.rawtext = self._curPara.rawtext + data - elif self._curPrefmt: - self._curPrefmt.rawtext = self._curPrefmt.rawtext + data - elif self._curPyCode: - self._curPyCode.rawtext = self._curPyCode.rawtext + data - elif self._curString: - self._curString.text = self._curString.text + data - elif self._curTable: - self._curTable.rawBlocks.append(data) - elif self._curTitle <> None: # need to allow empty strings, - # hence explicitly testing for None - self._curTitle = self._curTitle + data - elif self._curAuthor <> None: - self._curAuthor = self._curAuthor + data - elif self._curSubject <> None: - self._curSubject = self._curSubject + data - - def handle_cdata(self, data): - #just append to current paragraph text, so we can quote XML - if self._curPara: - self._curPara.rawtext = self._curPara.rawtext + data - elif self._curPrefmt: - self._curPrefmt.rawtext = self._curPrefmt.rawtext + data - elif self._curPyCode: - self._curPyCode.rawtext = self._curPyCode.rawtext + data - elif self._curString: - self._curString.text = self._curString.text + data - elif self._curTable: - self._curTable.rawBlocks.append(data) - elif self._curAuthor <> None: - self._curAuthor = self._curAuthor + data - elif self._curSubject <> None: - self._curSubject = self._curSubject + data - - def start_presentation(self, args): - self._curPres = pythonpoint.PPPresentation() - self._curPres.filename = self._arg('presentation',args,'filename') - self._curPres.effectName = self._arg('presentation',args,'effect') - self._curPres.pageDuration = self._arg('presentation',args,'pageDuration') - - h = self._arg('presentation',args,'pageHeight') - if h: - self._curPres.pageHeight = h - w = self._arg('presentation',args,'pageWidth') - if w: - self._curPres.pageWidth = w - #print 'page size =', self._curPres.pageSize - - def end_presentation(self): - pass -## print 'Fully parsed presentation',self._curPres.filename - - def start_title(self, args): - self._curTitle = '' - - - def end_title(self): - self._curPres.title = self._curTitle - self._curTitle = None - - def start_author(self, args): - self._curAuthor = '' - - def end_author(self): - self._curPres.author = self._curAuthor - self._curAuthor = None - - def start_subject(self, args): - self._curSubject = '' - - def end_subject(self): - self._curPres.subject = self._curSubject - self._curSubject = None - - def start_stylesheet(self, args): - #makes it the current style sheet. - path = self._arg('stylesheet',args,'path') - if path=='None': path = [] - if type(path) not in SeqTypes: path = [path] - path.append('styles') - path.append(os.getcwd()) - modulename = self._arg('stylesheet', args, 'module') - funcname = self._arg('stylesheet', args, 'function') - try: - found = imp.find_module(modulename, path) - (file, pathname, description) = found - mod = imp.load_module(modulename, file, pathname, description) - except ImportError: - #last gasp - mod = getModule(modulename) - - #now get the function - func = getattr(mod, funcname) - pythonpoint.setStyles(func()) -## print 'set global stylesheet to %s.%s()' % (modulename, funcname) - - def end_stylesheet(self): - pass - - def start_section(self, args): - name = self._arg('section',args,'name') - self._curSection = pythonpoint.PPSection(name) - - def end_section(self): - self._curSection = None - - - def start_slide(self, args): - s = pythonpoint.PPSlide() - s.id = self._arg('slide',args,'id') - s.title = self._arg('slide',args,'title') - a = self._arg('slide',args,'effectname') - if a <> 'None': - s.effectName = a - s.effectDirection = self.ceval('slide',args,'effectdirection') - s.effectDimension = self._arg('slide',args,'effectdimension') - s.effectDuration = self.ceval('slide',args,'effectduration') - s.effectMotion = self._arg('slide',args,'effectmotion') - - #HACK - may not belong here in the long run... - #by default, use the slide title for the outline entry, - #unless it is specified as an arg. - a = self._arg('slide',args,'outlineentry') - if a == "Hide": - s.outlineEntry = None - elif a <> 'None': - s.outlineEntry = a - else: - s.outlineEntry = s.title - - s.outlineLevel = self.ceval('slide',args,'outlinelevel') - - #let it know its section, which may be none - s.section = self._curSection - self._curSlide = s - - def end_slide(self): - self._curPres.slides.append(self._curSlide) - self._curSlide = None - - def start_frame(self, args): - self._curFrame = pythonpoint.PPFrame( - self.ceval('frame',args,'x'), - self.ceval('frame',args,'y'), - self.ceval('frame',args,'width'), - self.ceval('frame',args,'height') - ) - if self._arg('frame',args,'border')=='true': - self._curFrame.showBoundary = 1 - - def end_frame(self): - self._curSlide.frames.append(self._curFrame) - self._curFrame = None - - def start_notes(self, args): - name = self._arg('notes',args,'name') - self._curNotes = pythonpoint.PPNotes() - - def end_notes(self): - self._curSlide.notes.append(self._curNotes) - self._curNotes = None - - def start_registerFont(self, args): - name = self._arg('font',args,'name') - path = self._arg('font',args,'path') - pythonpoint.registerFont0(self.sourceFilename, name, path) - - - def end_registerFont(self): - pass - - - def pack_slide(self, element, args): - if self.fx: - effectName = self._arg(element,args,'effectname') - if effectName <> 'None': - curSlide = copy.deepcopy(self._curSlide) - if self._curFrame: - curFrame = copy.deepcopy(self._curFrame) - curSlide.frames.append(curFrame) - self._curPres.slides.append(curSlide) - self._curSlide.effectName = effectName - self._curSlide.effectDirection = self.ceval(element,args,'effectdirection') - self._curSlide.effectDimension = self._arg(element,args,'effectdimension') - self._curSlide.effectDuration = self.ceval(element,args,'effectduration') - self._curSlide.effectMotion = self._arg(element,args,'effectmotion') - self._curSlide.outlineEntry = None - - def start_para(self, args): - self.pack_slide('para', args) - self._curPara = pythonpoint.PPPara() - self._curPara.style = self._arg('para',args,'style') - - # hack - bullet character if bullet style - bt = self._arg('para',args,'bullettext') - if bt == '': - if self._curPara.style == 'Bullet': - bt = '\xc2\xb7' # Symbol Font bullet character, reasonable default - elif self._curPara.style == 'Bullet2': - bt = '\xc2\xb7' # second-level bullet - else: - bt = None - - self._curPara.bulletText = bt - - def end_para(self): - if self._curFrame: - self._curFrame.content.append(self._curPara) - self._curPara = None - elif self._curNotes: - self._curNotes.content.append(self._curPara) - self._curPara = None - - - def start_prefmt(self, args): - self._curPrefmt = pythonpoint.PPPreformattedText() - self._curPrefmt.style = self._arg('prefmt',args,'style') - - - def end_prefmt(self): - self._curFrame.content.append(self._curPrefmt) - self._curPrefmt = None - - - def start_pycode(self, args): - self._curPyCode = pythonpoint.PPPythonCode() - self._curPyCode.style = self._arg('pycode',args,'style') - - - def end_pycode(self): - self._curFrame.content.append(self._curPyCode) - self._curPyCode = None - - - def start_image(self, args): - self.pack_slide('image',args) - sourceFilename = self.sourceFilename # XXX - filename = self._arg('image',args,'filename') - filename = os.path.join(os.path.dirname(sourceFilename), filename) - self._curImage = pythonpoint.PPImage() - self._curImage.filename = filename - self._curImage.width = self.ceval('image',args,'width') - self._curImage.height = self.ceval('image',args,'height') - - - def end_image(self): - self._curFrame.content.append(self._curImage) - self._curImage = None - - - def start_table(self, args): - self.pack_slide('table',args) - self._curTable = pythonpoint.PPTable() - self._curTable.widths = self.ceval('table',args,'widths') - self._curTable.heights = self.ceval('table',args,'heights') - #these may contain escapes like tabs - handle with - #a bit more care. - if args.has_key('fieldDelim'): - self._curTable.fieldDelim = eval('"' + args['fieldDelim'] + '"') - if args.has_key('rowDelim'): - self._curTable.rowDelim = eval('"' + args['rowDelim'] + '"') - if args.has_key('style'): - self._curTable.style = args['style'] - - - def end_table(self): - self._curFrame.content.append(self._curTable) - self._curTable = None - - - def start_spacer(self, args): - """No contents so deal with it here.""" - sp = pythonpoint.PPSpacer() - sp.height = eval(args['height']) - self._curFrame.content.append(sp) - - - def end_spacer(self): - pass - - - ## the graphics objects - go into either the current section - ## or the current slide. - def start_fixedimage(self, args): - sourceFilename = self.sourceFilename - filename = self._arg('image',args,'filename') - filename = os.path.join(os.path.dirname(sourceFilename), filename) - img = pythonpoint.PPFixedImage() - img.filename = filename - img.x = self.ceval('fixedimage',args,'x') - img.y = self.ceval('fixedimage',args,'y') - img.width = self.ceval('fixedimage',args,'width') - img.height = self.ceval('fixedimage',args,'height') - self._curFixedImage = img - - - def end_fixedimage(self): - if self._curSlide: - self._curSlide.graphics.append(self._curFixedImage) - elif self._curSection: - self._curSection.graphics.append(self._curFixedImage) - self._curFixedImage = None - - - def start_rectangle(self, args): - self.pack_slide('rectangle', args) - rect = pythonpoint.PPRectangle( - self.ceval('rectangle',args,'x'), - self.ceval('rectangle',args,'y'), - self.ceval('rectangle',args,'width'), - self.ceval('rectangle',args,'height') - ) - rect.fillColor = self.ceval('rectangle',args,'fill') - rect.strokeColor = self.ceval('rectangle',args,'stroke') - self._curRectangle = rect - - - def end_rectangle(self): - if self._curSlide: - self._curSlide.graphics.append(self._curRectangle) - elif self._curSection: - self._curSection.graphics.append(self._curRectangle) - self._curRectangle = None - - - def start_roundrect(self, args): - self.pack_slide('roundrect', args) - rrect = pythonpoint.PPRoundRect( - self.ceval('roundrect',args,'x'), - self.ceval('roundrect',args,'y'), - self.ceval('roundrect',args,'width'), - self.ceval('roundrect',args,'height'), - self.ceval('roundrect',args,'radius') - ) - rrect.fillColor = self.ceval('roundrect',args,'fill') - rrect.strokeColor = self.ceval('roundrect',args,'stroke') - self._curRoundRect = rrect - - - def end_roundrect(self): - if self._curSlide: - self._curSlide.graphics.append(self._curRoundRect) - elif self._curSection: - self._curSection.graphics.append(self._curRoundRect) - self._curRoundRect = None - - - def start_line(self, args): - self.pack_slide('line', args) - self._curLine = pythonpoint.PPLine( - self.ceval('line',args,'x1'), - self.ceval('line',args,'y1'), - self.ceval('line',args,'x2'), - self.ceval('line',args,'y2') - ) - self._curLine.strokeColor = self.ceval('line',args,'stroke') - - - def end_line(self): - if self._curSlide: - self._curSlide.graphics.append(self._curLine) - elif self._curSection: - self._curSection.graphics.append(self._curLine) - self._curLine = None - - - def start_ellipse(self, args): - self.pack_slide('ellipse', args) - self._curEllipse = pythonpoint.PPEllipse( - self.ceval('ellipse',args,'x1'), - self.ceval('ellipse',args,'y1'), - self.ceval('ellipse',args,'x2'), - self.ceval('ellipse',args,'y2') - ) - self._curEllipse.strokeColor = self.ceval('ellipse',args,'stroke') - self._curEllipse.fillColor = self.ceval('ellipse',args,'fill') - - - def end_ellipse(self): - if self._curSlide: - self._curSlide.graphics.append(self._curEllipse) - elif self._curSection: - self._curSection.graphics.append(self._curEllipse) - self._curEllipse = None - - - def start_polygon(self, args): - self.pack_slide('polygon', args) - self._curPolygon = pythonpoint.PPPolygon(self.ceval('polygon',args,'points')) - self._curPolygon.strokeColor = self.ceval('polygon',args,'stroke') - self._curPolygon.fillColor = self.ceval('polygon',args,'fill') - - - def end_polygon(self): - if self._curSlide: - self._curSlide.graphics.append(self._curPolygon) - elif self._curSection: - self._curSection.graphics.append(self._curPolygon) - self._curEllipse = None - - - def start_string(self, args): - self.pack_slide('string', args) - self._curString = pythonpoint.PPString( - self.ceval('string',args,'x'), - self.ceval('string',args,'y') - ) - self._curString.color = self.ceval('string',args,'color') - self._curString.font = self._arg('string',args,'font') - self._curString.size = self.ceval('string',args,'size') - if args['align'] == 'left': - self._curString.align = TA_LEFT - elif args['align'] == 'center': - self._curString.align = TA_CENTER - elif args['align'] == 'right': - self._curString.align = TA_RIGHT - elif args['align'] == 'justify': - self._curString.align = TA_JUSTIFY - #text comes later within the tag - - - def end_string(self): - #controller should have set the text - if self._curSlide: - self._curSlide.graphics.append(self._curString) - elif self._curSection: - self._curSection.graphics.append(self._curString) - self._curString = None - - - def start_infostring(self, args): - # like a string, but lets them embed page no, author etc. - self.start_string(args) - self._curString.hasInfo = 1 - - - def end_infostring(self): - self.end_string() - - - def start_customshape(self, args): - #loads one - path = self._arg('customshape',args,'path') - if path=='None': - path = [] - else: - path=[path] - - # add package root folder and input file's folder to path - path.append(os.path.dirname(self.sourceFilename)) - path.append(os.path.dirname(pythonpoint.__file__)) - - modulename = self._arg('customshape',args,'module') - funcname = self._arg('customshape',args,'class') - try: - found = imp.find_module(modulename, path) - (file, pathname, description) = found - mod = imp.load_module(modulename, file, pathname, description) - except ImportError: - mod = getModule(modulename) - - #now get the function - - func = getattr(mod, funcname) - initargs = self.ceval('customshape',args,'initargs') - self._curCustomShape = apply(func, initargs) - - def end_customshape(self): - if self._curSlide: - self._curSlide.graphics.append(self._curCustomShape) - elif self._curSection: - self._curSection.graphics.append(self._curCustomShape) - self._curCustomShape = None - - def start_drawing(self, args): - #loads one - moduleName = args["module"] - funcName = args["constructor"] - showBoundary = int(args.get("showBoundary", "0")) - hAlign = args.get("hAlign", "CENTER") - - - # the path for the imports should include: - # 1. document directory - # 2. python path if baseDir not given, or - # 3. baseDir if given - try: - dirName = sdict["baseDir"] - except: - dirName = None - importPath = [os.getcwd()] - if dirName is None: - importPath.extend(sys.path) - else: - importPath.insert(0, dirName) - - modul = recursiveImport(moduleName, baseDir=importPath) - func = getattr(modul, funcName) - drawing = func() - - drawing.hAlign = hAlign - if showBoundary: - drawing._showBoundary = 1 - - self._curDrawing = pythonpoint.PPDrawing() - self._curDrawing.drawing = drawing - - def end_drawing(self): - self._curFrame.content.append(self._curDrawing) - self._curDrawing = None - - def start_pageCatcherFigure(self, args): - filename = args["filename"] - pageNo = int(args["pageNo"]) - width = float(args.get("width", "595")) - height = float(args.get("height", "842")) - - - fig = figures.PageCatcherFigureNonA4(filename, pageNo, args.get("caption", ""), width, height) - sf = args.get('scaleFactor', None) - if sf: sf = float(sf) - border = not (args.get('border', None) in ['0','no']) - - fig.scaleFactor = sf - fig.border = border - - #self.ceval('pageCatcherFigure',args,'scaleFactor'), - #initargs = self.ceval('customshape',args,'initargs') - self._curFigure = pythonpoint.PPFigure() - self._curFigure.figure = fig - - def end_pageCatcherFigure(self): - self._curFrame.content.append(self._curFigure) - self._curFigure = None - - ## intra-paragraph XML should be allowed through into PLATYPUS - def unknown_starttag(self, tag, attrs): - if self._curPara: - echo = '<%s' % tag - for (key, value) in attrs.items(): - echo = echo + ' %s="%s"' % (key, value) - echo = echo + '>' - self._curPara.rawtext = self._curPara.rawtext + echo - else: - print 'Unknown start tag %s' % tag - - - def unknown_endtag(self, tag): - if self._curPara: - self._curPara.rawtext = self._curPara.rawtext + '</%s>'% tag - else: - print 'Unknown end tag %s' % tag - - def handle_charref(self, name): - try: - if name[0]=='x': - n = int(name[1:],16) - else: - n = int(name) - except ValueError: - self.unknown_charref(name) - return - self.handle_data(unichr(n).encode('utf8')) |
