From 9f7225a2ba72227d9219605407cc1ba09622520e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Wobst?= Date: Tue, 23 May 2006 09:21:14 +0000 Subject: [PATCH] fixes to properly support Python versions 2.1 to 2.4 git-svn-id: https://pyx.svn.sourceforge.net/svnroot/pyx/trunk/pyx@2795 069f4177-920e-0410-937b-c2a4a81bcd90 --- manual/connector.py | 26 ++++++++++++------------ pyx/attr.py | 13 +++++------- pyx/canvas.py | 2 ++ pyx/deformer.py | 47 ++++++++++++++++++++++++++----------------- pyx/font/t1font.py | 29 ++++++++++++++++---------- pyx/pdfwriter.py | 10 +++++++++ pyx/pswriter.py | 10 +++++++++ test/functional/test_color.py | 8 ++++++++ www/roadmap.pt | 4 ++-- 9 files changed, 96 insertions(+), 53 deletions(-) diff --git a/manual/connector.py b/manual/connector.py index 56e520f6..6310aa05 100755 --- a/manual/connector.py +++ b/manual/connector.py @@ -13,7 +13,7 @@ c1 = canvas.canvas() for b in [startbox, endbox]: c1.stroke(b.path(), [style.linewidth.Thick, style.linejoin.round]) c1.fill(path.circle_pt(b.center[0], b.center[1], 2)) -absangle = degrees(atan2(endbox.center[1] - startbox.center[1], endbox.center[0] - startbox.center[0])) +absangle = atan2(endbox.center[1] - startbox.center[1], endbox.center[0] - startbox.center[0])*180/pi relangle = 60 len = 2 @@ -27,7 +27,7 @@ c1.stroke(l, [style.linewidth.Thick, color.rgb.red, deco.earrow.Large]) # the relangle parameter comp1 = path.path(path.moveto(*direct.atbegin()), - path.rlineto(len*cos(radians(absangle + relangle)), len*sin(radians(absangle + relangle)))) + path.rlineto(len*cos((absangle + relangle)*pi/180), len*sin((absangle + relangle)*pi/180))) c1.stroke(comp1) ang = path.path(path.arc(direct.atbegin()[0], direct.atbegin()[1], 0.8*len, absangle, absangle+relangle)) c1.stroke(ang, [deco.earrow.large]) @@ -35,9 +35,9 @@ pos = ang.at(0.5*ang.arclen()) c1.text(pos[0], pos[1], r"~relangle", [text.halign.left]) # the bulge parameter -bulge = 0.5 * direct.arclen() * tan(0.5*radians(relangle)) +bulge = 0.5 * direct.arclen() * tan(0.5*relangle*pi/180) bul = path.path(path.moveto(*direct.at(0.5*direct.arclen())), - path.rlineto(bulge * cos(radians(absangle+90)), bulge * sin(radians(absangle+90)))) + path.rlineto(bulge * cos((absangle+90)*pi/180), bulge * sin((absangle+90)*pi/180))) c1.stroke(bul, [deco.earrow.large]) pos = bul.at(0.5*bul.arclen()) c1.text(pos[0], pos[1], r"~(rel)bulge", [text.halign.left]) @@ -49,7 +49,7 @@ c2 = canvas.canvas() for b in [startbox, endbox]: c2.stroke(b.path(), [style.linewidth.Thick, style.linejoin.round]) c2.fill(path.circle_pt(b.center[0], b.center[1], 2)) -absangle = degrees(atan2(endbox.center[1] - startbox.center[1], endbox.center[0] - startbox.center[0])) +absangle = atan2(endbox.center[1] - startbox.center[1], endbox.center[0] - startbox.center[0])*180/pi relangle1 = 60 relangle2 = 30 absbulge = 0 @@ -68,8 +68,8 @@ c2.stroke(l, [style.linewidth.Thick, color.rgb.red, deco.earrow.Large]) # the relangle parameters # relangle1 c2.stroke(path.path(path.moveto(*direct.atbegin()), - path.rlineto(len*cos(radians(absangle + relangle1)), - len*sin(radians(absangle + relangle1))))) + path.rlineto(len*cos((absangle + relangle1)*pi/180), + len*sin((absangle + relangle1)*pi/180)))) ang = path.path(path.arc(direct.atbegin()[0], direct.atbegin()[1], 0.8*len, absangle, absangle+relangle1)) c2.stroke(ang, [deco.earrow.large]) pos = ang.at(0.5*ang.arclen()) @@ -84,11 +84,11 @@ c2.text(pos[0], pos[1], r"~absangle1", [text.halign.left]) # relangle2 c2.stroke(path.path(path.moveto(*direct.atend()), - path.rlineto(len*cos(radians(absangle)), - len*sin(radians(absangle))))) + path.rlineto(len*cos(absangle*pi/180), + len*sin(absangle*pi/180)))) c2.stroke(path.path(path.moveto(*direct.atend()), - path.rlineto(len*cos(radians(absangle + relangle2)), - len*sin(radians(absangle + relangle2))))) + path.rlineto(len*cos((absangle + relangle2)*pi/180), + len*sin((absangle + relangle2)*pi/180)))) ang = path.path(path.arc(direct.atend()[0], direct.atend()[1], 0.8*len, absangle, absangle+relangle2)) c2.stroke(ang, [deco.earrow.large]) @@ -98,13 +98,13 @@ c2.text(pos[0], pos[1], r"~relangle2", [text.halign.left]) # the bulge parameter bulge = absbulge + direct.arclen() * relbulge bul = path.path(path.moveto(*direct.atbegin()), - path.rlineto(bulge * cos(radians(absangle+relangle1)), bulge * sin(radians(absangle+relangle1)))) + path.rlineto(bulge * cos((absangle+relangle1)*pi/180), bulge * sin((absangle+relangle1)*pi/180))) c2.stroke(bul, [deco.earrow.large]) pos = bul.at(0.7*bul.arclen()) c2.text(pos[0], pos[1], r"~(rel)bulge", [text.halign.left]) bul = path.path(path.moveto(*direct.atend()), - path.rlineto(-bulge * cos(radians(absangle+relangle2)), -bulge * sin(radians(absangle+relangle2)))) + path.rlineto(-bulge * cos((absangle+relangle2)*pi/180), -bulge * sin((absangle+relangle2)*pi/180))) c2.stroke(bul, [deco.earrow.large]) pos = bul.at(0.7*bul.arclen()) c2.text(pos[0], pos[1], r"~(rel)bulge", [text.halign.left, text.vshift(1)]) diff --git a/pyx/attr.py b/pyx/attr.py index 435200c4..35b7ca87 100644 --- a/pyx/attr.py +++ b/pyx/attr.py @@ -31,15 +31,12 @@ except TypeError: _isinstance = isinstance def isinstance(instance, clsarg): import types - try: - _isinstance(clsarg, types.ClassType) - except: - for cls in clsarg: - if _isinstance(instance, cls): - return 1 - return 0 - else: + if _isinstance(clsarg, types.ClassType): return _isinstance(instance, clsarg) + for cls in clsarg: + if _isinstance(instance, cls): + return 1 + return 0 # # some helper functions for the attribute handling diff --git a/pyx/canvas.py b/pyx/canvas.py index ea674816..182d85cc 100644 --- a/pyx/canvas.py +++ b/pyx/canvas.py @@ -30,6 +30,8 @@ displayed. """ # canvas item # +from __future__ import nested_scopes + class canvasitem: """Base class for everything which can be inserted into a canvas""" diff --git a/pyx/deformer.py b/pyx/deformer.py index 662b0143..0eafb4f5 100644 --- a/pyx/deformer.py +++ b/pyx/deformer.py @@ -21,11 +21,20 @@ # along with PyX; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +from __future__ import nested_scopes import math, warnings import attr, mathutils, path, normpath, unit, color from path import degrees, radians +try: + enumerate([]) +except NameError: + # fallback implementation for Python 2.2 and below + def enumerate(list): + return zip(xrange(len(list)), list) + + # specific exception for an invalid parameterization point # used in parallel class InvalidParamException(Exception): @@ -755,8 +764,8 @@ class parallel(deformer): # <<< if self.length_pt(next_orig_nspitem, invalid_nspitem_param, 1) > epsilon: p1, foo = self.valid_near_rotation(next_orig_nspitem, invalid_nspitem_param, 0, stepsize, 0.5*epsilon) p2, foo = self.valid_near_rotation(next_orig_nspitem, invalid_nspitem_param, 1, stepsize, 0.5*epsilon) - segments = next_orig_nspitem.segments([0, p1, p2, 1])[0:3:2] - segments[1] = segments[1].modifiedbegin_pt(*(segments[0].atend_pt())) + segments = next_orig_nspitem.segments([0, p1, p2, 1]) + segments = segments[0], segments[2].modifiedbegin_pt(*(segments[0].atend_pt())) else: p1, foo = self.valid_near_rotation(next_orig_nspitem, invalid_nspitem_param, 0, stepsize, 0.5*epsilon) segments = next_orig_nspitem.segments([0, p1]) @@ -1187,8 +1196,8 @@ class parallel(deformer): # <<< npp_j = normpath.normpathparam(np, nsp_j, float(nspitem_j)+intsparam_j) linearparams.append(npp_i) linearparams.append(npp_j) - paramsriap[npp_i] = len(parampairs) - paramsriap[npp_j] = len(parampairs) + paramsriap[id(npp_i)] = len(parampairs) + paramsriap[id(npp_j)] = len(parampairs) parampairs.append((npp_i, npp_j)) linearparams.sort() return linearparams, parampairs, paramsriap @@ -1259,14 +1268,14 @@ class parallel(deformer): # <<< allparams.sort() allparamindices = {} for i, param in enumerate(allparams): - allparamindices[param] = i + allparamindices[id(param)] = i done = {} for param in allparams: - done[param] = 0 + done[id(param)] = 0 def otherparam(p): # <<< - pair = selfintpairs[selfintsriap[p]] + pair = selfintpairs[selfintsriap[id(p)]] if (p is pair[0]): return pair[1] else: @@ -1275,10 +1284,10 @@ class parallel(deformer): # <<< def trial_parampairs(startp): # <<< tried = {} for param in allparams: - tried[param] = done[param] + tried[id(param)] = done[id(param)] lastp = startp - currentp = allparams[allparamindices[startp] + 1] + currentp = allparams[allparamindices[id(startp)] + 1] result = [] while 1: @@ -1291,7 +1300,7 @@ class parallel(deformer): # <<< if currentp in endparams: result.append((lastp, currentp)) return result - if tried[currentp]: + if tried[id(currentp)]: return [] if currentp in origintparams: return [] @@ -1302,20 +1311,20 @@ class parallel(deformer): # <<< # go to the next pair on the curve, seen from currentpair[1] result.append((lastp, currentp)) lastp = otherparam(currentp) - tried[currentp] = 1 - tried[otherparam(currentp)] = 1 - currentp = allparams[allparamindices[otherparam(currentp)] + 1] + tried[id(currentp)] = 1 + tried[id(otherparam(currentp))] = 1 + currentp = allparams[allparamindices[id(otherparam(currentp))] + 1] else: # go to the next pair on the curve, seen from currentpair[0] - tried[currentp] = 1 - tried[otherparam(currentp)] = 1 - currentp = allparams[allparamindices[currentp] + 1] + tried[id(currentp)] = 1 + tried[id(otherparam(currentp))] = 1 + currentp = allparams[allparamindices[id(currentp)] + 1] assert 0 # >>> # first the paths that start at the beginning of a subnormpath: for startp in beginparams + selfintparams: - if done[startp]: + if done[id(startp)]: continue parampairs = trial_parampairs(startp) @@ -1338,10 +1347,10 @@ class parallel(deformer): # <<< add_nsp.append(item) if begin in selfintparams: - done[begin] = 1 + done[id(begin)] = 1 #done[otherparam(begin)] = 1 if end in selfintparams: - done[end] = 1 + done[id(end)] = 1 #done[otherparam(end)] = 1 # eventually close the path diff --git a/pyx/font/t1font.py b/pyx/font/t1font.py index 0ca71db2..1e062915 100644 --- a/pyx/font/t1font.py +++ b/pyx/font/t1font.py @@ -30,6 +30,13 @@ try: except ImportError: haszlib = 0 +try: + enumerate([]) +except NameError: + # fallback implementation for Python 2.2 and below + def enumerate(list): + return zip(xrange(len(list)), list) + from pyx import trafo from pyx.path import path, moveto_pt, lineto_pt, curveto_pt, closepath import encoding @@ -66,7 +73,7 @@ T1subcmds = {} class T1cmd: - def __init__(self, code, subcmd=False): + def __init__(self, code, subcmd=0): self.code = code self.subcmd = subcmd if subcmd: @@ -138,7 +145,7 @@ T1hsbw = _T1hsbw() class _T1seac(T1cmd): def __init__(self): - T1cmd.__init__(self, 6, subcmd=True) + T1cmd.__init__(self, 6, subcmd=1) def __str__(self): return "seac" @@ -169,7 +176,7 @@ T1seac = _T1seac() class _T1sbw(T1cmd): def __init__(self): - T1cmd.__init__(self, 7, subcmd=True) + T1cmd.__init__(self, 7, subcmd=1) def __str__(self): return "sbw" @@ -381,7 +388,7 @@ T1vhcurveto = _T1vhcurveto() class _T1dotsection(T1cmd): def __init__(self): - T1cmd.__init__(self, 0, subcmd=True) + T1cmd.__init__(self, 0, subcmd=1) def __str__(self): return "dotsection" @@ -410,7 +417,7 @@ T1hstem = _T1hstem() class _T1hstem3(T1cmd): def __init__(self): - T1cmd.__init__(self, 2, subcmd=True) + T1cmd.__init__(self, 2, subcmd=1) def __str__(self): return "hstem3" @@ -444,7 +451,7 @@ T1vstem = _T1vstem() class _T1vstem3(T1cmd): def __init__(self): - T1cmd.__init__(self, 1, subcmd=True) + T1cmd.__init__(self, 1, subcmd=1) def __str__(self): return "vstem3" @@ -465,7 +472,7 @@ T1vstem3 = _T1vstem3() class _T1div(T1cmd): def __init__(self): - T1cmd.__init__(self, 12, subcmd=True) + T1cmd.__init__(self, 12, subcmd=1) def __str__(self): return "div" @@ -488,7 +495,7 @@ T1div = _T1div() class _T1callothersubr(T1cmd): def __init__(self): - T1cmd.__init__(self, 16, subcmd=True) + T1cmd.__init__(self, 16, subcmd=1) def __str__(self): return "callothersubr" @@ -532,7 +539,7 @@ T1callsubr = _T1callsubr() class _T1pop(T1cmd): def __init__(self): - T1cmd.__init__(self, 17, subcmd=True) + T1cmd.__init__(self, 17, subcmd=1) def __str__(self): return "pop" @@ -563,7 +570,7 @@ T1return = _T1return() class _T1setcurrentpoint(T1cmd): def __init__(self): - T1cmd.__init__(self, 33, subcmd=True) + T1cmd.__init__(self, 33, subcmd=1) def __str__(self): return "setcurrentpoint" % self.x, self.y @@ -807,7 +814,7 @@ class T1font: elif 251 <= x <= 254: # mid size ints cmds.append(-((x - 251)*256) - code.pop(0) - 108) else: # x = 255, i.e. full size ints - y = ((code.pop(0)*256+code.pop(0))*256+code.pop(0))*256+code.pop(0) + y = ((code.pop(0)*256l+code.pop(0))*256+code.pop(0))*256+code.pop(0) if y > (1l << 31): cmds.append(y - (1l << 32)) else: diff --git a/pyx/pdfwriter.py b/pyx/pdfwriter.py index 43d4af51..34612f08 100644 --- a/pyx/pdfwriter.py +++ b/pyx/pdfwriter.py @@ -37,6 +37,16 @@ except NameError: def enumerate(list): return zip(xrange(len(list)), list) +try: + dict([]) +except NameError: + # fallback implementation for Python 2.1 + def dict(list): + result = {} + for key, value in list: + result[key] = value + return result + class PDFregistry: diff --git a/pyx/pswriter.py b/pyx/pswriter.py index 56e3a099..beb44cc4 100644 --- a/pyx/pswriter.py +++ b/pyx/pswriter.py @@ -31,6 +31,16 @@ except NameError: def enumerate(list): return zip(xrange(len(list)), list) +try: + dict([]) +except NameError: + # fallback implementation for Python 2.1 + def dict(list): + result = {} + for key, value in list: + result[key] = value + return result + class PSregistry: diff --git a/test/functional/test_color.py b/test/functional/test_color.py index 56510a58..76f8374f 100644 --- a/test/functional/test_color.py +++ b/test/functional/test_color.py @@ -1,6 +1,14 @@ import sys; sys.path.insert(0, "../..") from pyx import * +try: + enumerate([]) +except NameError: + # fallback implementation for Python 2.2 and below + def enumerate(list): + return zip(xrange(len(list)), list) + + c = canvas.canvas() # color conversion tests diff --git a/www/roadmap.pt b/www/roadmap.pt index ab791881..18564f37 100644 --- a/www/roadmap.pt +++ b/www/roadmap.pt @@ -27,8 +27,8 @@ text in arbitrarily shaped boxes and float text from box to boxexperimental codelow priority graph system time axesexperimental codeplanned for 0.10 - 3d graph geometry and surface stylevery old experimental codeplanned for one of the next releases - polar graph geometrynot startedplanned for one of the next releases + 3d graph geometry and surface stylevery old experimental codeplanned for 0.10 + polar graph geometrynot startedplanned for 0.10 backend pdf embedding in pdfnot startedplanned for one of the next releases svg supportnot startedlow priority -- 2.11.4.GIT