31 |
|
|
32 |
import re |
import re |
33 |
|
|
34 |
from navidoc.parser import * |
from navidoc.utils.parser import * |
35 |
|
|
36 |
dbg = config.dbg.shorthand('uml') |
dbg = config.dbg.shorthand('uml') |
37 |
|
|
38 |
class mpsequence(Element): |
class UMLException(Exception): |
39 |
|
def __init__(self, value): |
40 |
|
Exception.__init__(self) |
41 |
|
self.value = value |
42 |
|
def __str__(self): |
43 |
|
return self.value |
44 |
|
|
45 |
|
class mpsequence(navidoc.Element): |
46 |
key = 'sequence' |
key = 'sequence' |
47 |
|
|
48 |
def getVarForY(self, before, after): |
def getVarForY(self, before, after): |
149 |
elif s == "return": |
elif s == "return": |
150 |
pass |
pass |
151 |
else: |
else: |
152 |
raise umlException("Must have call or return, not '"+s+"'") |
raise UMLException("Must have call or return, not '"+s+"'") |
153 |
return l |
return l |
154 |
def setup_code(self): |
def setup_code(self): |
155 |
return self.repl( |
return self.repl( |
174 |
s = s.replace("%%", self.var) |
s = s.replace("%%", self.var) |
175 |
return s |
return s |
176 |
|
|
177 |
class mpclass(MetaPostElement): |
class mpclass(navidoc.mp.MetapostElement): |
178 |
key = 'class' |
key = 'class' |
179 |
def __init__(self, var, s, list): |
def __init__(self, var, s, list): |
180 |
dbg("mpclass: %s %s" % (s,list)) |
dbg("mpclass: %s %s" % (s,list)) |
195 |
elif el[0] == "fields": |
elif el[0] == "fields": |
196 |
self.fields = el[1:] |
self.fields = el[1:] |
197 |
else: |
else: |
198 |
MetaPostElement.handle_contained(self, el) |
navidoc.mp.MetapostElement.handle_contained(self, el) |
199 |
def defaultlink(self): |
def defaultlink(self): |
200 |
if self.linkpackage != None and "." not in self.name: |
if self.linkpackage != None and "." not in self.name: |
201 |
return self.linkpackage + "." + self.name |
return self.linkpackage + "." + self.name |
241 |
""" |
""" |
242 |
return self.repl(s) |
return self.repl(s) |
243 |
|
|
244 |
class mppackage(MetaPostElement): |
class mppackage(navidoc.mp.MetapostElement): |
245 |
key = 'package' |
key = 'package' |
246 |
def __init__(self, var, s, list): |
def __init__(self, var, s, list): |
247 |
dbg("mppackage: %s %s" % (s,l)) |
dbg("mppackage: %s %s" % (s,l)) |
263 |
""" |
""" |
264 |
return self.repl(s) |
return self.repl(s) |
265 |
|
|
266 |
class mptitle(MetaPostElement): |
class mptitle(navidoc.mp.MetapostElement): |
267 |
key = 'title' |
key = 'title' |
268 |
def __init__(self, var, s, l = []): |
def __init__(self, var, s, l = []): |
269 |
dbg("mp: %s %s" % (s,l)) |
dbg("mp: %s %s" % (s,l)) |
284 |
return self.repl(s) |
return self.repl(s) |
285 |
|
|
286 |
# XXX underlining |
# XXX underlining |
287 |
class mpseqobject(SimpleElement): |
class mpseqobject(navidoc.mp.SimpleElement): |
288 |
key = 'seqobject' |
key = 'seqobject' |
289 |
def setup_code(self): |
def setup_code(self): |
290 |
s = """ |
s = """ |
308 |
""" |
""" |
309 |
return self.repl(s) |
return self.repl(s) |
310 |
|
|
311 |
class mpcomponent(SimpleElement): |
class mpcomponent(navidoc.mp.SimpleElement): |
312 |
key = 'component' |
key = 'component' |
313 |
def setup_code(self): |
def setup_code(self): |
314 |
s = """ |
s = """ |
321 |
""" |
""" |
322 |
return self.repl(s) |
return self.repl(s) |
323 |
|
|
324 |
class mpinterface(SimpleElement): |
class mpinterface(navidoc.mp.SimpleElement): |
325 |
key = 'interface' |
key = 'interface' |
326 |
def setup_code(self): |
def setup_code(self): |
327 |
s = """ |
s = """ |
344 |
""" |
""" |
345 |
return self.repl(s) |
return self.repl(s) |
346 |
|
|
347 |
class mpnary(SimpleElement): |
class mpnary(navidoc.mp.SimpleElement): |
348 |
key = 'naryassoc' |
key = 'naryassoc' |
349 |
def setup_code(self): |
def setup_code(self): |
350 |
s = """ |
s = """ |
359 |
""" |
""" |
360 |
return self.repl(s) |
return self.repl(s) |
361 |
|
|
362 |
class mpbigpackage(SimpleElement): |
class mpbigpackage(navidoc.mp.SimpleElement): |
363 |
key = 'bigpackage' |
key = 'bigpackage' |
364 |
def setup_code(self): |
def setup_code(self): |
365 |
s = """ |
s = """ |
382 |
drawmeasuredpic(%%.titl);""" |
drawmeasuredpic(%%.titl);""" |
383 |
return self.repl(s) |
return self.repl(s) |
384 |
|
|
385 |
class mpqual(MetaPostElement): |
class mpqual(navidoc.mp.MetapostElement): |
386 |
key = 'qual' |
key = 'qual' |
387 |
def __init__(self, var, s , list): |
def __init__(self, var, s , list): |
388 |
self.var = var |
self.var = var |
393 |
if el[0] == "fields": |
if el[0] == "fields": |
394 |
self.fields = el[1:] |
self.fields = el[1:] |
395 |
else: |
else: |
396 |
MetaPostElement.handle_contained(self, el) |
navidoc.mp.MetapostElement.handle_contained(self, el) |
397 |
def setup_code(self): |
def setup_code(self): |
398 |
s = """ |
s = """ |
399 |
picture %%.pict; |
picture %%.pict; |
405 |
[ '"'+m[0]+'"' for m in self.fields ] )) |
[ '"'+m[0]+'"' for m in self.fields ] )) |
406 |
return self.repl(s) |
return self.repl(s) |
407 |
|
|
408 |
class mpassoc(MetaPostElement): |
class mpassoc(navidoc.mp.MetapostElement): |
409 |
key = 'assoc' |
key = 'assoc' |
410 |
class end(MetaPostElement): |
class end(navidoc.mp.MetapostElement): |
411 |
def __init__(self, var, list): |
def __init__(self, var, list): |
412 |
self.var = var |
self.var = var |
413 |
self.name = "" |
self.name = "" |
430 |
if mat: |
if mat: |
431 |
self.role = mat.group(1) |
self.role = mat.group(1) |
432 |
continue |
continue |
433 |
raise umlException("Invalid assoc adorn "+el) |
raise UMLException("Invalid assoc adorn "+el) |
434 |
def setup_code(self): |
def setup_code(self): |
435 |
s = """ |
s = """ |
436 |
picture %%.multi, %%.role; |
picture %%.multi, %%.role; |
498 |
self.b.type = "vobinto" |
self.b.type = "vobinto" |
499 |
|
|
500 |
|
|
501 |
class SimpleRelation(MetaPostElement): |
class SimpleRelation(navidoc.mp.MetapostElement): |
502 |
def __init__(self, var, s , list): |
def __init__(self, var, s , list): |
503 |
self.var = var or random_var() |
self.var = var or random_var() |
504 |
self.name = "" |
self.name = "" |
505 |
ends = s.split() |
ends = s.split() |
506 |
#assert len(ends) == 2 |
#assert len(ends) == 2 |
507 |
if len(ends) != 2: |
if len(ends) != 2: |
508 |
raise umlException("len(ends) != 2") |
raise UMLException("len(ends) != 2") |
509 |
self.start = ends[0] |
self.start = ends[0] |
510 |
self.end = ends[1] |
self.end = ends[1] |
511 |
def setup_code(self): |
def setup_code(self): |
558 |
def draw_code(self): |
def draw_code(self): |
559 |
return self.pathCode() + self.repl(" vobsubmatch(%%.p); ") |
return self.pathCode() + self.repl(" vobsubmatch(%%.p); ") |
560 |
|
|
561 |
class placement(MetaPostElement): |
class placement(navidoc.mp.MetapostElement): |
562 |
def __init__(self, var, s , list): |
def __init__(self, var, s , list): |
563 |
self.var = var or random_var() |
self.var = var or random_var() |
564 |
self.name = "" |
self.name = "" |
584 |
return self.repl(' horizontally(%s, %s, %s, %s);' % |
return self.repl(' horizontally(%s, %s, %s, %s);' % |
585 |
(self.length, self.var, self.start, self.end)) |
(self.length, self.var, self.start, self.end)) |
586 |
|
|
587 |
class leftOf(placement): |
class rightOf(placement): |
588 |
key = 'right-of' |
key = 'right-of' |
589 |
def setup_code(self): |
def setup_code(self): |
590 |
return self.repl(' horizontally(%s, %s, %s, %s);' % |
return self.repl(' horizontally(%s, %s, %s, %s);' % |