[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] gzz metacode/uml.py metacode/umlhelper.mp doc/u...
From: |
Tuomas J. Lukka |
Subject: |
[Gzz-commits] gzz metacode/uml.py metacode/umlhelper.mp doc/u... |
Date: |
Thu, 29 Aug 2002 05:19:00 -0400 |
CVSROOT: /cvsroot/gzz
Module name: gzz
Changes by: Tuomas J. Lukka <address@hidden> 02/08/29 05:18:59
Modified files:
metacode : uml.py umlhelper.mp
Added files:
doc/uml/gl : Helvetica.tfm renderableseq.mp
renderableseq.uml
Log message:
Improve sequence diagrams
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/doc/uml/gl/Helvetica.tfm?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/doc/uml/gl/renderableseq.mp?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/doc/uml/gl/renderableseq.uml?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/metacode/uml.py.diff?tr1=1.16&tr2=1.17&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/metacode/umlhelper.mp.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
Patches:
Index: gzz/metacode/uml.py
diff -c gzz/metacode/uml.py:1.16 gzz/metacode/uml.py:1.17
*** gzz/metacode/uml.py:1.16 Wed Aug 28 10:22:38 2002
--- gzz/metacode/uml.py Thu Aug 29 05:18:59 2002
***************
*** 97,170 ****
return self.repl(s)
class mpsequence:
class call:
! def __init__(self, parent, sourcename, toks, l):
self.var = randomVar()
self.parent = parent
! self.sourcename = sourcename
self.targetname = toks[1]
if len(toks) > 2:
self.text = " ".join(toks[2:])
- self.list = parent.parseContents(self.targetname, l)
- def setupCode(self):
- if self.sourcename:
- srcx = "xpart("+self.sourcename + ".c)"
- else:
- srcx = " %%.xd - 100 "
- dstx = "xpart("+self.targetname + ".c)"
- srcx, dstx = [self.repl(i) for i in [srcx, dstx]]
- s = self.repl("""
- numeric %%.yu, %%.yl, %%.xs, %%.xd;
- %%.xs = %(srcx)s;
- %%.xd = %(dstx)s;
- """) % locals()
- return s + " ".join([e.setupCode() for e in self.list])
- def drawCode_meas(self):
- yprev = self.parent.yvar
- if yprev:
- s = self.repl("""
- %%.yu = %(yprev)s - 30;
- """) % locals()
else:
! s = ""
! self.parent.yvar = self.var + ".yu"
! s += " ".join([e.drawCode_meas() for e in self.list])
! yprev = self.parent.yvar
! s += self.repl("""
! %%.yl = %(yprev)s - 15;
! """) % locals()
! self.parent.yvar = self.var + ".yl"
! return self.repl(s)
def drawCode_draw(self):
! wid = 5
! if hasattr(self,"text"):
! text = self.repl(
! """
label.top("""+self.text+""",(0.5[%%.xd,%%.xs],%%.yu));"""
! )
! else:
! text = ""
! return self.repl("""
! know(%%.yu);
! drawarrow (%%.xs,%%.yu) -- (%%.xd,%%.yu)
! withpen sequencecallpen;
! drawarrow (%%.xd,%%.yl) -- (%%.xs,%%.yl) dashed evenly
! withpen sequencecallpen;
! draw (%%.xd-%(wid)s, %%.yu) --
! (%%.xd-%(wid)s, %%.yl) --
! (%%.xd+%(wid)s, %%.yl) --
! (%%.xd+%(wid)s, %%.yu) -- cycle
! withpen sequenceactivepen;
! %(text)s
! """)%locals() + " ".join([e.drawCode_draw() for e in self.list])
! def repl(self, s):
! s = s.replace("%%", self.var)
! return s
def __init__(self, var, s, l):
toks = s.split(" ");
s = toks[0]
self.var = var or s
self.name = s
self.list = self.parseContents(None, l)
def parseContents(self, sourceName, list):
l = []
--- 97,180 ----
return self.repl(s)
class mpsequence:
+ def getVarForY(self, before, after):
+ """Get a variable name for a Y coordinate.
+ Padding before and after.
+ """
+ v1 = randomVar()
+ v2 = randomVar()
+ yvar = self.yvar
+ self.ycode += """
+ numeric %(v1)s, %(v2)s;
+ %(v2)s = %(yvar)s - %(before)s - %(after)s;
+ %(v1)s = %(yvar)s - %(before)s;
+ """ % locals()
+ self.yvar = v2
+ return v1;
class call:
! def __init__(self, parent, sourcex, toks, l):
self.var = randomVar()
self.parent = parent
! self.targetx = "(xpart(%s.c))" % (toks[1])
self.targetname = toks[1]
+ if toks[1] not in parent.seqobjs:
+ parent.seqobjs.append(toks[1])
+ if sourcex == None:
+ # self.sourcex = "(" + self.targetx + " - 100)"
+ self.sourcex = "-50"
+ else:
+ self.sourcex = sourcex
if len(toks) > 2:
self.text = " ".join(toks[2:])
else:
! self.text = "\"\""
! self.list = parent.parseContents(self.targetx, l)
! def setupCode(self):
! return " ".join([e.setupCode() for e in self.list])
! def measure(self):
! self.yu = self.parent.getVarForY(10,10)
! for e in self.list:
! e.measure()
! self.yl = self.parent.getVarForY(0, 20)
! def drawCode_measure(self):
! s = """
! sequencecallmeasure(%(sourcex)s, %(targetx)s, %(yu)s, %(yl)s,
%(text)s);
! """ % self.__dict__;
! return s + " ".join([e.drawCode_measure() for e in self.list])
def drawCode_draw(self):
! s = """
! sequencecall(%(sourcex)s, %(targetx)s, %(yu)s, %(yl)s,
%(text)s);
! """ % self.__dict__;
! return s + " ".join([e.drawCode_draw() for e in self.list])
!
! class create(call):
! def measure(self):
! self.yu = self.parent.getVarForY(10,10)
! for e in self.list:
! e.measure()
! self.yl = self.parent.getVarForY(20, 20)
! def drawCode_measure(self):
! s = """
! sequencecreatemeasure(%(sourcex)s, %(targetname)s, %(yu)s,
%(yl)s, %(text)s);
! """ % self.__dict__;
! return s + " ".join([e.drawCode_measure() for e in self.list])
!
! def drawCode_draw(self):
! s = """
! sequencecreate(%(sourcex)s, %(targetname)s, %(yu)s, %(yl)s,
%(text)s);
! """ % self.__dict__;
! return s + " ".join([e.drawCode_draw() for e in self.list])
!
!
!
def __init__(self, var, s, l):
+ self.seqobjs = []
toks = s.split(" ");
s = toks[0]
self.var = var or s
self.name = s
self.list = self.parseContents(None, l)
+ self.ycode = ""
def parseContents(self, sourceName, list):
l = []
***************
*** 173,190 ****
s = toks[0]
if s == "call":
l.append(self.call(self, sourceName, toks, el[1:]))
! elif s == "return":
pass
else:
! assert 0, "Must have call or return"
return l
def setupCode(self):
return self.repl(
" ".join([e.setupCode() for e in self.list])
)
def drawCode(self):
! self.yvar = None
! m = " ".join([e.drawCode_meas() for e in self.list])
m += " ".join([e.drawCode_draw() for e in self.list])
return self.repl(m)
def repl(self, s):
--- 183,210 ----
s = toks[0]
if s == "call":
l.append(self.call(self, sourceName, toks, el[1:]))
! elif s == "create":
! l.append(self.create(self, sourceName, toks, el[1:]))
! elif s == "return" or s == "delete":
pass
else:
! assert 0, "Must have call or return, not '"+s+"'"
return l
def setupCode(self):
return self.repl(
" ".join([e.setupCode() for e in self.list])
)
def drawCode(self):
! self.yvar = randomVar()
! self.ycode = "numeric %(yvar)s; %(yvar)s = -50;" % self.__dict__;
! for e in self.list:
! e.measure()
! m = self.ycode
! m += " ".join([e.drawCode_measure() for e in self.list])
! m += " ".join([
! "sequencedrawlifeline(%s, %s);" % (so, self.yvar)
! for so in self.seqobjs
! ])
m += " ".join([e.drawCode_draw() for e in self.list])
return self.repl(m)
def repl(self, s):
***************
*** 292,304 ****
def setupCode(self):
s = """
picture %%.titl, %%.pict;
%%.titl = classTitle("%name%");
%%.pict = %%.titl;
addto %%.pict doublepath bbox %%.titl;
!
picmeasurements(%%);
"""
return self.repl(s)
--- 312,336 ----
def setupCode(self):
s = """
picture %%.titl, %%.pict;
+ picture %%.ghost.pict;
%%.titl = classTitle("%name%");
%%.pict = %%.titl;
addto %%.pict doublepath bbox %%.titl;
! %%.ghost.pict = %%.titl;
picmeasurements(%%);
+ picmeasurements(%%.ghost);
+ xpart(%%.c) = xpart(%%.ghost.c);
+ """
+ return self.repl(s)
+ def drawCode(self):
+ s = """
+ if not known(ypart(%%.c)):
+ ypart(%%.c) = ypart(%%.ghost.c);
+ fi
+ drawmeasuredpic(%%);
"""
return self.repl(s)
+
Index: gzz/metacode/umlhelper.mp
diff -c gzz/metacode/umlhelper.mp:1.10 gzz/metacode/umlhelper.mp:1.11
*** gzz/metacode/umlhelper.mp:1.10 Mon Aug 26 11:43:27 2002
--- gzz/metacode/umlhelper.mp Thu Aug 29 05:18:59 2002
***************
*** 371,378 ****
--- 371,439 ----
final.c = cur - had/2 * spacing;
enddef;
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Graphics for sequence diagrams
+
pen sequencecallpen, sequenceactivepen;
sequencecallpen = pencircle scaled 3pt;
sequenceactivepen = pencircle scaled 1.5pt;
+ pair sequencebwid;
+ sequencebwid = (5,0);
+
+ vardef sequenceactivation(expr u,l) =
+ save rectpath;
+ path rectpath;
+ rectpath = (u+sequencebwid) -- (l+sequencebwid) --
+ (l-sequencebwid) -- (u-sequencebwid) -- cycle;
+ fill rectpath withcolor white;
+ draw rectpath withpen sequenceactivepen;
+ enddef;
+
+ vardef sequencedrawlifeline(suffix name)(expr y) =
+ show "drawlifeline", name.c;
+ if not known(ypart(name.c)):
+ name.c = name.ghost.c;
+ show "drawlifeline SET", name.c;
+ fi
+ draw name.s -- (xpart(name.s),y) withpen sequenceactivepen;
+ enddef;
+
+ vardef sequencecallmeasure(expr sourcex, destx, starty, endy, labelstring) =
+ know(sourcex);
+ know(destx);
+ know(starty);
+ know(endy);
+ enddef;
+
+ vardef sequencecall(expr sourcex, destx, starty, endy, labelstring) =
+ save u, l, rectpath;
+ pair u, l;
+ u = (destx, starty);
+ l = (destx, endy);
+ sequenceactivation(u, l);
+ drawarrow (sourcex, starty) -- u withpen sequencecallpen;
+ drawarrow l -- (sourcex, endy) withpen sequencecallpen dashed evenly;
+ label.top(labelstring, 0.5[(sourcex,starty), u]);
+ enddef;
+ vardef sequencecreatemeasure(expr sourcex)(suffix target)(expr starty, endy,
labelstring) =
+ know(sourcex);
+ know(starty);
+ know(endy);
+ ypart(target.c) = starty;
+ enddef;
+ vardef sequencecreate(expr sourcex)(suffix target)(expr starty, endy,
labelstring) =
+ save dx;
+ pair dx;
+ if sourcex < xpart(target.c): dx = target.w; else: dx = target.e; fi
+ save u,l;
+ pair u,l;
+ u = target.s;
+ l = (xpart(target.c), endy);
+ sequenceactivation(u, l);
+ drawarrow (sourcex, starty) -- dx withpen sequencecallpen;
+ drawarrow l -- (sourcex, endy) withpen sequencecallpen dashed evenly;
+ label.top(labelstring, 0.5[(sourcex,starty), dx]);
+ enddef;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gzz-commits] gzz metacode/uml.py metacode/umlhelper.mp doc/u...,
Tuomas J. Lukka <=