From 3840f209522a18b460bb0f8709866ecb4e37655d Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rg=20Lehmann?= Date: Tue, 5 Apr 2005 18:17:21 +0000 Subject: [PATCH] - simplify PSregistry as already proposed in comments - shakeout various bugs of new resource system git-svn-id: https://pyx.svn.sourceforge.net/svnroot/pyx/trunk/pyx@2110 069f4177-920e-0410-937b-c2a4a81bcd90 --- pyx/bitmap.py | 8 ++++---- pyx/canvas.py | 2 +- pyx/pdfwriter.py | 2 +- pyx/pswriter.py | 31 ++++++++++++------------------- pyx/resource.py | 5 +++-- 5 files changed, 21 insertions(+), 27 deletions(-) diff --git a/pyx/bitmap.py b/pyx/bitmap.py index 067f586b..35e04542 100644 --- a/pyx/bitmap.py +++ b/pyx/bitmap.py @@ -157,7 +157,7 @@ class bitmap(canvas.canvasitem): self.storedata = storedata self.maxstrlen = maxstrlen self.imagedataid = "imagedata%d" % id(self) - self.resources = [] + self._resources = [] if width is not None or height is not None: self.width = width @@ -252,7 +252,7 @@ class bitmap(canvas.canvasitem): self.datasource = "/%s load" % self.imagedataid else: self.datasource = "/imagedataaccess load" # some printers do not allow for inline code here - self.resources.append(resource.definition("imagedataaccess", + self._resources.append(resource.definition("imagedataaccess", "{ /imagedataindex load " # get list index "dup 1 add /imagedataindex exch store " # store increased index "/imagedataid load exch get }")) # select string from array @@ -293,14 +293,14 @@ class bitmap(canvas.canvasitem): ascii85stream(buffer, self.data[tailpos:]) buffer.write("~>") buffer.write("]\n%%EndData\n") - self.resources.append(resource.definition(self.imagedataid, buffer.getvalue())) + self._resources.append(resource.definition(self.imagedataid, buffer.getvalue())) def bbox(self): return bbox.bbox_pt(self.xpos_pt, self.ypos_pt, self.xpos_pt+self.width_pt, self.ypos_pt+self.height_pt) def resources(self): - return self.resources + return self._resources def outputPS(self, file): file.write("gsave\n" diff --git a/pyx/canvas.py b/pyx/canvas.py index c0a37349..0814c530 100644 --- a/pyx/canvas.py +++ b/pyx/canvas.py @@ -307,7 +307,7 @@ class pattern(_canvas, attr.exclusiveattr, style.fillstyle): file.write("%s setpattern\n" % self.id) def resources(self): - resources = _canvas.resources(self, registry) + resources = _canvas.resources(self) realpatternbbox = _canvas.bbox(self) if self.xstep is None: xstep = unit.topt(realpatternbbox.width()) diff --git a/pyx/pdfwriter.py b/pyx/pdfwriter.py index 611deddf..8d1c5484 100644 --- a/pyx/pdfwriter.py +++ b/pyx/pdfwriter.py @@ -181,7 +181,7 @@ class PDFpage(PDFobject): file.write("/Resources << /ProcSet [ /PDF /Text ]\n") else: file.write("/Resources << /ProcSet [ /PDF ]\n") - if self.registry.types["font"]: + if self.registry.types.has_key("font"): file.write("/Font << %s >>" % " ".join(["/%s %i 0 R" % (font.fontname, font.refno) for font in self.registry.types["font"].values()])) file.write(">>\n") diff --git a/pyx/pswriter.py b/pyx/pswriter.py index fad359b8..9d295f60 100644 --- a/pyx/pswriter.py +++ b/pyx/pswriter.py @@ -29,31 +29,24 @@ import pykpathsea, t1strip class PSregistry: def __init__(self): - self.resources = [] - self.types = {} + # in order to keep a consistent order of the registered resources we + # not only store them in a hash but also keep an ordered list (up to a + # possible merging of resources, in which case the first instance is + # kept) + self.resourceshash = {} + self.resourceslist = [] def add(self, resource): - # XXX actually, we do not need the types hash. - # We could just require unique ids across all resources - # or we just use the tuple (type, id) as key: - # rkey = (type, id) - # if resourceshash.has_key(rkey): - # resourceshash[rkey].merge(resource) - # else: - # resourceshash[rkey] = resource - # resourceslist.append(resource) - # AFAIKS, the same holds true for the PDFregistry. - # If there comes no objection, I'll rewrite this code - resources = self.types.setdefault(resource.type, {}) - if resources.has_key(resource.id): - resources[resource.id].merge(resource) + rkey = (resource.type, resource.id) + if self.resourceshash.has_key(rkey): + self.resourceshash[rkey].merge(resource) else: - self.resources.append(resource) - resources[resource.id] = resource + self.resourceshash[rkey] = resource + self.resourceslist.append(resource) def outputPS(self, file): """ write all PostScript code of the prolog resources """ - for resource in self.resources: + for resource in self.resourceslist: resource.outputPS(file) # diff --git a/pyx/resource.py b/pyx/resource.py index f25a163c..31b52aef 100644 --- a/pyx/resource.py +++ b/pyx/resource.py @@ -38,7 +38,8 @@ class resource: self.id = id def PSregister(self, registry): - return [] + """ register PSresources in registry """ + pass # @@ -54,7 +55,7 @@ class definition(resource): self.body = body def PSregister(self, registry): - pswriter.PSdefinition(self.id, self.body).register(registry) + registry.add(pswriter.PSdefinition(self.id, self.body)) class font(resource): -- 2.11.4.GIT