From cabf2578acb03ffe2077e8d80ceac373c6b69a17 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Wobst?= Date: Sun, 2 Mar 2003 20:29:10 +0000 Subject: [PATCH] box module: changed to relative box aligment; further integration of text into canvas, graph etc. git-svn-id: https://pyx.svn.sourceforge.net/svnroot/pyx/trunk/pyx@684 069f4177-920e-0410-937b-c2a4a81bcd90 --- CHANGES | 4 ++- examples/examples.py | 1 + examples/hello.py | 6 ++++ pyx/box.py | 73 +++++++++++++++++++++++++++++++------- pyx/canvas.py | 30 +++++++++++++--- pyx/graph.py | 83 ++++++++++++++++++-------------------------- pyx/text.py | 29 ++++++++++------ test/functional/test_box.py | 27 +++++++++----- test/functional/test_text.py | 12 ++++++- 9 files changed, 176 insertions(+), 89 deletions(-) create mode 100644 examples/hello.py diff --git a/CHANGES b/CHANGES index 916b7e9e..5a4b4630 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,7 @@ PyX - collection of helper functions (taken out of the graph module) - text module: - to be included in 0.3 -> finish base functionality + - documentation!!! - t1strip module: - strip glyphs from pfa/pfb-fonts - there is a C implementation taken from pdftex @@ -21,8 +22,9 @@ PyX - use text module instead of the obsolete tex module (work in progress) - TODO: allow for tailing zeros of automatic generated labels - TODO: allow for missing data in bar graphs + - TODO: remove the support for variables given within the argument dictionary in data constructor - TODO: graph keys - - TODO: 3d graphs should be scheduled for pyx-0.4 + - TODO: 3d graphs --- leave it for pyx-0.4 - data module: - TODO: line reduction for datafile like the every parameter in gnuplot - numerous bugfixes: diff --git a/examples/examples.py b/examples/examples.py index acd51434..5501b135 100644 --- a/examples/examples.py +++ b/examples/examples.py @@ -29,6 +29,7 @@ for file in sys.argv[1:]: tex.write("\\pagestyle{mypagestyle}{}\n") tex.write("\\section*{%s}\n" % file) tex.write("\\lstinputlisting{%s.py}\n" % file) + tex.write("\\vspace{1cm}\n") tex.write("\\centerline{\\includegraphics{%s}}\n\\clearpage\n" % file) tex.write("\\end{document}\n") diff --git a/examples/hello.py b/examples/hello.py new file mode 100644 index 00000000..487198f0 --- /dev/null +++ b/examples/hello.py @@ -0,0 +1,6 @@ +from pyx import * + +c = canvas.canvas() +c.text(0, 0, "Hello, world!") +c.stroke(path.line(0, 0, 2, 0)) +c.writetofile("hello") diff --git a/pyx/box.py b/pyx/box.py index 168186d4..2f327333 100644 --- a/pyx/box.py +++ b/pyx/box.py @@ -35,17 +35,54 @@ class _poly: if trafo is not None: self.transform(trafo) - def path(self, centerradius=None): + def path(self, centerradius=None, beziercorner=None): # TODO: - supply curved box plotting (Michael Schindler) pathels = [] if centerradius is not None and self.center is not None: r = unit.topt(unit.length(centerradius, default_type="v")) pathels.append(path._arc(self.center[0], self.center[1], r, 0, 360)) pathels.append(path.closepath()) - pathels.append(path._moveto(self.corners[0][0], self.corners[0][1])) - for x, y in self.corners[1:]: - pathels.append(path._lineto(x, y)) - pathels.append(path.closepath()) + if beziercorner is None: + pathels.append(path._moveto(self.corners[0][0], self.corners[0][1])) + for x, y in self.corners[1:]: + pathels.append(path._lineto(x, y)) + pathels.append(path.closepath()) + else: + # curved box plotting according to a suggestion by Michael Schindler + l = len(self.corners) + r = unit.topt(beziercorner) + for i in range(l): + c = self.corners[i] + def normed(*v): + n = math.sqrt(v[0] * v[0] + v[1] * v[1]) + return v[0] / n, v[1] / n + d1 = normed(self.corners[(i - 1 + l) % l][0] - c[0], + self.corners[(i - 1 + l) % l][1] - c[1]) + d2 = normed(self.corners[(i + 1 + l) % l][0] - c[0], + self.corners[(i + 1 + l) % l][1] - c[1]) + dc = normed(d1[0] + d2[0], d1[1] + d2[1]) + cosa = d1[0] * d2[0] + d1[1] * d2[1] + sina2 = math.sqrt(0.5 - 0.5 * cosa) + cosa2 = math.sqrt(0.5 + 0.5 * cosa) + R = r * cosa2 / sina2 + x = 0.75 + f = x * r * (1 - sina2) / sina2 + e = f * cosa2 + g = 1.25 * f + math.sqrt(1.5625 * f * f + f * r / 6.0) + e = c[0] + e * dc[0], c[1] + e * dc[1] + f1 = c[0] + f * d1[0], c[1] + f * d1[1] + f2 = c[0] + f * d2[0], c[1] + f * d2[1] + g1 = c[0] + g * d1[0], c[1] + g * d1[1] + g2 = c[0] + g * d2[0], c[1] + g * d2[1] + d1 = c[0] + R * d1[0], c[1] + R * d1[1] + d2 = c[0] + R * d2[0], c[1] + R * d2[1] + if i: + pathels.append(path._lineto(*d1)) + else: + pathels.append(path._moveto(*d1)) + pathels.append(path._curveto(*(g1 + f1 + e))) + pathels.append(path._curveto(*(f2 + g2 + d2))) + pathels.append(path.closepath()) return path.path(*pathels) def transform(self, trafo): @@ -75,7 +112,7 @@ class _poly: alpha = ((bx+cx-ex)*dy - (by+cy-ey)*dx) * 1.0 / (gy*dx - gx*dy) if alpha > 0 - epsilon and alpha < 1 + epsilon: beta = ((ex-bx-cx)*gy - (ey-by-cy)*gx) * 1.0 / (gx*dy - gy*dx) - return beta*dx - cx, beta*dy - cy # valid solution -> return align tuple + return beta*dx, beta*dy # valid solution -> return align tuple # crossing point at the line, but outside a valid range if alpha < 0: return 0 # crossing point outside e @@ -96,7 +133,7 @@ class _poly: alpha = ((a*dx+cx-ex)*dy - (a*dy+cy-ey)*dx) * 1.0 / (gy*dx - gx*dy) if alpha > 0 - epsilon and alpha < 1 + epsilon: beta = ((ex-a*dx-cx)*gy - (ey-a*dy-cy)*gx) * 1.0 / (gx*dy - gy*dx) - return beta*dx - cx, beta*dy - cy # valid solution -> return align tuple + return beta*dx, beta*dy # valid solution -> return align tuple # crossing point at the line, but outside a valid range if alpha < 0: return 0 # crossing point outside e @@ -114,12 +151,12 @@ class _poly: alpha = - p / 2 + math.sqrt(p*p/4 - q) else: alpha = - p / 2 - math.sqrt(p*p/4 - q) - return alpha*dx - cx, alpha*dy - cy + return alpha*dx, alpha*dy def _linealignpointvector(self, a, dx, dy, px, py): cx, cy = self.center beta = (a*dx+cx-px)*dy - (a*dy+cy-py)*dx - return a*dx - beta*dy - px, a*dy + beta*dx - py + return a*dx - beta*dy - px + cx, a*dy + beta*dx - py + cy def _alignvector(self, a, dx, dy, alignlinevector, alignpointvector): linevectors = map(lambda (p1, p2), self=self, a=a, dx=dx, dy=dy, alignlinevector=alignlinevector: @@ -223,17 +260,27 @@ class _poly: max([x[1] for x in self.corners])) -def _genalignequal(method, polys, *args): +def _genericalignequal(method, polys, a, dx, dy): vec = None for p in polys: - v = method(p, *args) - if vec is None or vec[0]*vec[0] + vec[1]*vec[1] < v[0]*v[0] + v[1]*v[1]: + v = method(p, a, dx, dy) + if vec is None or vec[0] * dx + vec[1] * dy < v[0] * dx + v[1] * dy: vec = v for p in polys: p.transform(trafo._translate(*vec)) + +def _circlealignequal(polys, *args): + _genericalignequal(_poly._circlealignvector, polys, *args) + def _linealignequal(polys, *args): - _genalignequal(poly._linealignvector, polys, *args) + _genericalignequal(_poly._linealignvector, polys, *args) + +def circlealignequal(polys, *args): + _genericalignequal(_poly.circlealignvector, polys, *args) + +def linealignequal(polys, *args): + _genericalignequal(_poly.linealignvector, polys, *args) class poly(_poly): diff --git a/pyx/canvas.py b/pyx/canvas.py index 78dead95..bac5875b 100644 --- a/pyx/canvas.py +++ b/pyx/canvas.py @@ -647,9 +647,10 @@ class canvas(base.PSText, attrlist.attrlist): """ - self.PSOps = [] - self.trafo = trafo.trafo() - self.clipbbox = bbox.bbox() + self.PSOps = [] + self.trafo = trafo.trafo() + self.clipbbox = bbox.bbox() + self.texrunner = text.defaulttexrunner for arg in args: if isinstance(arg, trafo._trafo): @@ -862,7 +863,26 @@ class canvas(base.PSText, attrlist.attrlist): return self.draw(path, filled(), *args) + def settexrunner(self, texrunner): + """sets the texrunner to be used to within the text and _text methods""" + + self.texrunner = texrunner + def text(self, x, y, atext, *args): - """AW: insert a text into the canvas""" + """insert a text into the canvas + + inserts a textbox created by self.texrunner.text into the canvas + + returns the inserted textbox""" + + return self.insert(self.texrunner.text(x, y, atext, *args)) + + + def _text(self, x, y, atext, *args): + """insert a text into the canvas + + inserts a textbox created by self.texrunner._text into the canvas + + returns the inserted textbox""" - return self.insert(text.text(x, y, atext, *args)) + return self.insert(self.texrunner._text(x, y, atext, *args)) diff --git a/pyx/graph.py b/pyx/graph.py index e1e3237a..37ae73db 100644 --- a/pyx/graph.py +++ b/pyx/graph.py @@ -23,8 +23,8 @@ import types, re, math, string, sys import bbox, box, canvas, path, unit, mathtree, trafo, attrlist, color, helper, text -import text as textmodule # well, ugly ??? -import data as datamodule # well, ugly ??? +import text as textmodule +import data as datamodule goldenrule = 0.5 * (math.sqrt(5) + 1) @@ -647,15 +647,15 @@ class axistitlepainter(attrlist.attrlist): def dolayout(self, graph, axis): titledist = unit.topt(unit.length(self.titledist_str, default_type="v")) if axis.title is not None and self.titleattrs is not None: + x, y = axis._vtickpoint(axis, self.titlepos) dx, dy = axis.vtickdirection(axis, self.titlepos) # no not modify self.titleattrs ... the painter might be used by several axes!!! titleattrs = list(helper.ensuresequence(self.titleattrs)) if self.titledirection is not None: titleattrs = titleattrs + [trafo.rotate(self.reldirection(self.titledirection, dx, dy))] - axis.titlebox = textmodule.text(0, 0, axis.title, *titleattrs) + axis.titlebox = textmodule._text(x, y, axis.title, *titleattrs) axis._extent += titledist axis.titlebox._linealign(axis._extent, dx, dy) - axis.titlebox.transform(trafo._translate(*axis._vtickpoint(axis, self.titlepos))) axis._extent += axis.titlebox._extent(dx, dy) def paint(self, graph, axis): @@ -841,6 +841,7 @@ class axispainter(axistitlepainter): tick.x, tick.y = axis._vtickpoint(axis, tick.virtual) tick.dx, tick.dy = axis.vtickdirection(axis, tick.virtual) for tick in axis.ticks: + tick.textbox = None if tick.labellevel is not None: tick.labelattrs = helper.getsequenceno(self.labelattrs, tick.labellevel) if tick.labelattrs is not None: @@ -850,37 +851,20 @@ class axispainter(axistitlepainter): self.createtext(tick) if self.labeldirection is not None: tick.labelattrs += [trafo.rotate(self.reldirection(self.labeldirection, tick.dx, tick.dy))] - tick.textbox = textmodule.text(0, 0, tick.text, *tick.labelattrs) - else: - tick.textbox = None - else: - tick.textbox = None - for tick in axis.ticks[1:]: - if tick.dx != axis.ticks[0].dx or tick.dy != axis.ticks[0].dy: - equaldirection = 0 - break + tick.textbox = textmodule._text(tick.x, tick.y, tick.text, *tick.labelattrs) + equaldirection = 1 + if len(axis.ticks): + for tick in axis.ticks[1:]: + if tick.dx != axis.ticks[0].dx or tick.dy != axis.ticks[0].dy: + equaldirection = 0 + if equaldirection and ((not axis.ticks[0].dx and self.labelvequalize) or + (not axis.ticks[0].dy and self.labelhequalize)): + box._linealignequal([tick.textbox for tick in axis.ticks if tick.textbox], + labeldist, axis.ticks[0].dx, axis.ticks[0].dy) else: - equaldirection = 1 - #if equaldirection: - # maxht, maxwd, maxdp = 0, 0, 0 - # for tick in axis.ticks: - # if tick.textbox is not None: - # if maxht < tick.textbox.ht: maxht = tick.textbox.ht - # if maxwd < tick.textbox.wd: maxwd = tick.textbox.wd - # if maxdp < tick.textbox.dp: maxdp = tick.textbox.dp - # for tick in axis.ticks: - # if tick.textbox is not None: - # if self.labelhequalize: - # tick.textbox.manualextents(wd = maxwd) - # if self.labelvequalize: - # tick.textbox.manualextents(ht = maxht, dp = maxdp) - box._linealignequal([tick.textbox for tick in axis.ticks if tick.textbox is not None], labeldist, tick.dx, tick.dy) - for tick in axis.ticks: - if tick.textbox is not None: -# tick.textbox._linealign(labeldist, tick.dx, tick.dy) - tick._extent = tick.textbox._extent(tick.dx, tick.dy) + labeldist - tick.textbox.transform(trafo._translate(tick.x, tick.y)) -# graph.stroke(tick.textbox.path()) + for tick in axis.ticks: + if tick.textbox: + tick.textbox._linealign(labeldist, axis.ticks[0].dx, axis.ticks[0].dy) def topt_v_recursive(arg): if helper.issequence(arg): # return map(topt_v_recursive, arg) needs python2.2 @@ -899,13 +883,14 @@ class axispainter(axistitlepainter): tick.outerticklength = 0 if tick.outerticklength is not None and tick.innerticklength is None: tick.innerticklength = 0 + extent = 0 if tick.textbox is None: if tick.outerticklength is not None and tick.outerticklength > 0: - tick._extent = tick.outerticklength - else: - tick._extent = 0 - if axis._extent < tick._extent: - axis._extent = tick._extent + extent = tick.outerticklength + else: + extent = tick.textbox._extent(tick.dx, tick.dy) + labeldist + if axis._extent < extent: + axis._extent = extent axistitlepainter.dolayout(self, graph, axis) def ratelayout(self, graph, axis, dense=1): @@ -1892,10 +1877,11 @@ class graphxy(canvas.canvas): def bbox(self): self.finish() - return bbox.bbox(self._xpos - self._yaxisextents[0], - self._ypos - self._xaxisextents[0], - self._xpos + self._width + self._yaxisextents[1], - self._ypos + self._height + self._xaxisextents[1]) + return canvas.canvas.bbox(self) + #return bbox.bbox(self._xpos - self._yaxisextents[0], + # self._ypos - self._xaxisextents[0], + # self._xpos + self._width + self._yaxisextents[1], + # self._ypos + self._height + self._xaxisextents[1]) def write(self, file): self.finish() @@ -2810,12 +2796,11 @@ class symbol: path.closepath()), *self.errorbarattrs) - def _drawsymbol(self, graph, x, y, point=None): - if x is not None and y is not None: - graph.draw(path.path(*self.symbol(self, x, y)), *self.symbolattrs) + def _drawsymbol(self, canvas, x, y, point=None): + canvas.draw(path.path(*self.symbol(self, x, y)), *self.symbolattrs) - def drawsymbol(self, graph, x, y, point=None): - self._drawsymbol(graph, unit.topt(x), unit.topt(y), point) + def drawsymbol(self, canvas, x, y, point=None): + self._drawsymbol(canvas, unit.topt(x), unit.topt(y), point) def drawpoints(self, graph, points): xaxismin, xaxismax = self.xaxis.getdatarange() @@ -2876,7 +2861,7 @@ class symbol: self._drawerrorbar(graph, topleft, top, topright, left, center, right, bottomleft, bottom, bottomright, point) - if self._symbolattrs is not None: + if self._symbolattrs is not None and xpos is not None and ypos is not None: self._drawsymbol(graph, xpos, ypos, point) if xpos is not None and ypos is not None: if moveto: diff --git a/pyx/text.py b/pyx/text.py index 8fa8ee5f..bea827e0 100644 --- a/pyx/text.py +++ b/pyx/text.py @@ -819,7 +819,7 @@ class _checkmsgstart(checkmsg): try: texrunner.texmsgparsed = texrunner.texmsgparsed.split("*! Undefined control sequence.\n<*> \\raiseerror\n %\n", 1)[1] except IndexError: - raise TexResultError("TeX switch to scrollmode failed", texrunner) + raise TexResultError("TeX scrollmode check failed", texrunner) class _checkmsgnoaux(checkmsg): @@ -1069,6 +1069,7 @@ class _readpipe(threading.Thread): self.expectqueue = expectqueue self.gotevent = gotevent self.gotqueue = gotqueue + self.expect = None self.start() def run(self): @@ -1082,7 +1083,7 @@ class _readpipe(threading.Thread): self.expect = self.expectqueue.get_nowait() except Queue.Empty: pass - if read.find(self.expect) != -1: + if self.expect is not None and read.find(self.expect) != -1: self.gotevent.set() read = self.pipe.readline() if self.expect.find("PyXInputMarker") != -1: @@ -1170,7 +1171,7 @@ class texrunner(attrlist.attrlist): try: self.texinput, self.texoutput = os.popen4("%s %s" % (self.mode, self.texfilename), "t", 0) except ValueError: - # workaround for MS Windows + # XXX: workaround for MS Windows (bufsize = 0 makes trouble!?) self.texinput, self.texoutput = os.popen4("%s %s" % (self.mode, self.texfilename), "t") self.expectqueue = Queue.Queue(1) # allow for a single entry only self.gotevent = threading.Event() @@ -1250,7 +1251,7 @@ class texrunner(attrlist.attrlist): def writefontheader(self, file, containsfonts): if not self.texdone: - _default.execute(None, *self.checkmsgend) + self.execute(None, *self.checkmsgend) self.dvifile = DVIFile("%s.dvi" % self.texfilename, debug=self.dvidebug) if self not in containsfonts: self.dvifile.writeheader(file) @@ -1311,7 +1312,7 @@ class texrunner(attrlist.attrlist): PyXBoxPattern = re.compile(r"PyXBox\(page=(?P\d+),wd=(?P-?\d*((\d\.?)|(\.?\d))\d*)pt,ht=(?P-?\d*((\d\.?)|(\.?\d))\d*)pt,dp=(?P-?\d*((\d\.?)|(\.?\d))\d*)pt\)") - def text(self, x, y, expr, *args): + def _text(self, x, y, expr, *args): if expr is None: raise ValueError("None is invalid") if self.texdone: @@ -1330,15 +1331,21 @@ class texrunner(attrlist.attrlist): raise TexResultError("box extents not found", self) width, height, depth = map(lambda x: float(x) * 72.0 / 72.27, match.group("wd", "ht", "dp")) hratio = self.attrgetall(args, halign, default=(halign.left,))[0].hratio - textbox = _textbox(unit.topt(x), unit.topt(y), hratio * width, (1 - hratio) * width, height, depth, self, self.page) + textbox = _textbox(0, 0, hratio * width, (1 - hratio) * width, height, depth, self, self.page) + # we do not yet move the box to the correct position for t in self.attrgetall(args, trafo._trafo, default=()): - textbox.transform(t) + textbox.transform(t) # transformations might rotate ... + textbox.transform(trafo._translate(x, y)) # ... before the hole box is positioned return textbox + def text(self, x, y, expr, *args): + return self._text(unit.topt(x), unit.topt(y), expr, *args) + -_default = texrunner() -set = _default.set -define = _default.define -text = _default.text +defaulttexrunner = texrunner() +set = defaulttexrunner.set +define = defaulttexrunner.define +text = defaulttexrunner.text +_text = defaulttexrunner._text # vim: fdm=marker diff --git a/test/functional/test_box.py b/test/functional/test_box.py index bad0727a..d6cd0138 100755 --- a/test/functional/test_box.py +++ b/test/functional/test_box.py @@ -5,14 +5,14 @@ import math from pyx import * def drawexample(canvas, corner, linealign): - if corner: - b = box.poly(center=(0, 0), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))) - else: - b = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))) r = 1.5 canvas.stroke(path.path(path.arc(0, 0, r, 0, 360))) phi = 0 while phi < 2 * math.pi + 1e-10: + if corner: + b = box.poly(center=(5, 5), corners=((5, 5), (6, 5), (5.5, 5+math.sqrt(3)/2))) + else: + b = box.poly(center=(5.5, 5+math.sqrt(3)/6), corners=((5, 5), (6, 5), (5.5, 5+math.sqrt(3)/2))) if linealign: b.linealign(r, math.cos(phi), math.sin(phi)) else: @@ -26,10 +26,14 @@ def drawexample(canvas, corner, linealign): def distances(): print "test distance measurement ...", b1 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))) - b2 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))).transform(trafo.translate(3, 0)) - b3 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))).transform(trafo.translate(3, 3 * math.tan(math.pi/6))) - b4 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))).transform(trafo.translate(0, 3)) - b5 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))).transform(trafo.translate(0.5, 0.5)) + b2 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))) + b2.transform(trafo.translate(3, 0)) + b3 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))) + b3.transform(trafo.translate(3, 3 * math.tan(math.pi/6))) + b4 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))) + b4.transform(trafo.translate(0, 3)) + b5 = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))) + b5.transform(trafo.translate(0.5, 0.5)) assert abs(unit.topt(b1.boxdistance(b2) - unit.t_cm(2))) < 1e-10 assert abs(unit.topt(b1.boxdistance(b3) - unit.t_cm(math.sqrt(9*(1 + math.tan(math.pi/6)**2)) - math.sqrt(3)/2))) < 1e-10 assert abs(unit.topt(b1.boxdistance(b4) - unit.t_cm(3 - math.sqrt(3)/2))) < 1e-10 @@ -55,6 +59,11 @@ sc = c.insert(canvas.canvas(trafo.translate(0, 0))) drawexample(sc, 1, 0) sc = c.insert(canvas.canvas(trafo.translate(6, 0))) drawexample(sc, 1, 1) -distances() +#distances() +#b = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (0.5, math.sqrt(3)/2))) +#c.stroke(b.path(beziercorner=0.1)) +#b = box.poly(center=(0.5, math.sqrt(3)/6), corners=((0, 0), (1, 0), (1, 1), (0, 1))) +#b.transform(trafo.translate(2, 0)) +#c.stroke(b.path(beziercorner=0.1)) c.writetofile("test_box", paperformat="a4") diff --git a/test/functional/test_text.py b/test/functional/test_text.py index 00357fc0..8091eb2b 100755 --- a/test/functional/test_text.py +++ b/test/functional/test_text.py @@ -5,10 +5,20 @@ from pyx import * from pyx import text c = canvas.canvas() -text.set(mode="latex", dvidebug=0) +text.set(mode="latex", dvidebug=1) c.stroke(path.line(-1, 0, 6, 0)) +c.stroke(path.line(6, 5, 6.99, 5), canvas.linewidth.THIN) +c.stroke(path.line(6, 6, 6.99, 6), canvas.linewidth.THIN) +c.stroke(path.line(8.01, 5, 9, 5), canvas.linewidth.THIN) +c.stroke(path.line(8.01, 6, 9, 6), canvas.linewidth.THIN) +c.stroke(path.line(7, 4, 7, 4.99), canvas.linewidth.THIN) +c.stroke(path.line(8, 4, 8, 4.99), canvas.linewidth.THIN) +c.stroke(path.line(7, 6.01, 7, 7), canvas.linewidth.THIN) +c.stroke(path.line(8, 6.01, 8, 7), canvas.linewidth.THIN) +c.text(7, 5, "\\vrule width1truecm height1truecm") + c.text(6.2, 0, "0", text.valign.centerline()) c.text(-1.2, 0, "abc", text.valign.centerline(), text.halign.right) -- 2.11.4.GIT