66 |
return self.repl(s) |
return self.repl(s) |
67 |
|
|
68 |
class SimpleElement(MetapostElement): |
class SimpleElement(MetapostElement): |
69 |
def __init__(self, var, s, list): |
def __init__(self, var, toks, list): |
70 |
dbg("Simple element: %s %s %s" % (self, s, list)) |
dbg("Simple element: %s %s %s" % (var, toks, list)) |
71 |
self.var = var or s |
self.var = var or toks[0] |
72 |
self.name = s |
self.name = toks[0] |
73 |
self.do_contents(list) |
self.do_contents(list) |
74 |
if self.link != None: |
if self.link != None: |
75 |
self.link.bbox = ('bboxmeasuredpic(%s)' % (self.var)) |
self.link.bbox = ('bboxmeasuredpic(%s)' % (self.var)) |
76 |
|
|
77 |
class mptitle(MetapostElement): |
class mptitle(MetapostElement): |
78 |
key = 'title' |
key = 'title' |
79 |
def __init__(self, var, s, list = []): |
def __init__(self, var, toks, list = []): |
80 |
dbg("mp: %s %s" % (s,list)) |
dbg("mptitle: %s %s %s" % (var, toks, list)) |
81 |
"""Grep longer title after variable name.""" |
if not var: raise UMLException('No variable given name for title (%s).' %(' '.join(toks))) |
82 |
if var == None and s.find(' ')!=-1: |
self.var = var |
83 |
self.var = s.split(' ')[0] |
self.name = var |
84 |
s = s[len(self.var)+1:] |
self.title = ' '.join(toks) |
85 |
if s[0] == '"' and s[-1]=='"': |
|
86 |
s = s[1:len(s)-1] |
# Removing possible quotes |
87 |
else: self.var = var or s |
if self.title.startswith('"') and self.title.endswith('"'): |
88 |
|
self.title = self.title[1:len(self.title)-1] |
89 |
|
|
|
"""Title could be used as name if contains no spaces""" |
|
|
if len(s.split(' ')) > 0: |
|
|
self.name = self.var |
|
|
else: self.name = s |
|
|
self.title = s |
|
|
|
|
90 |
self.do_contents(list) |
self.do_contents(list) |
91 |
if self.link != None: |
if self.link != None: |
92 |
self.link.bbox = ('bboxmeasuredpic(%s)' % (self.var)) |
self.link.bbox = ('bboxmeasuredpic(%s)' % (self.var)) |
106 |
|
|
107 |
class mpContextMenu(MetapostElement): |
class mpContextMenu(MetapostElement): |
108 |
key = 'contextmenu' |
key = 'contextmenu' |
109 |
def __init__(self, var, s, list = []): |
def __init__(self, var, toks, list = []): |
110 |
config.mp_context_menu = 1 |
config.mp_context_menu = 1 |
111 |
def setup_code(self): |
def setup_code(self): |
112 |
return '' |
return '' |
154 |
target = relative_path(config.link_base_directory, refers[id]) |
target = relative_path(config.link_base_directory, refers[id]) |
155 |
refer_names[id] = random_var() |
refer_names[id] = random_var() |
156 |
|
|
157 |
element = mptitle(refer_names[id], title, |
element = mptitle(refer_names[id], [title], |
158 |
[['link', target+'#'+diagram]]) |
[[['link'], [target+'#'+diagram]]]) |
159 |
if id == len(refers)-1: |
if id == len(refers)-1: |
160 |
context_menu += "\tdraw ulcorner(bbox(currentpicture))+(0,10) -- urcorner(bbox(currentpicture))+(0,10) withpen pencircle scaled 1.5pt;\n" |
context_menu += "\tdraw ulcorner(bbox(currentpicture))+(0,10) -- urcorner(bbox(currentpicture))+(0,10) withpen pencircle scaled 1.5pt;\n" |
161 |
context_menu += element.setup_code() |
context_menu += element.setup_code() |
196 |
|
|
197 |
dir = slashify(config.mp_directory) |
dir = slashify(config.mp_directory) |
198 |
|
|
199 |
gen1 = open(dir+diagram+context+config.midfix+'.mp.1', 'w') |
gen1 = open(dir+diagram+context+config.midfix+'.mp.2', 'w') |
200 |
gen1.write(m.setup_code()+'\n') |
gen1.write(m.setup_code()+'\n') |
201 |
gen1.close() |
gen1.close() |
202 |
gen2 = open(dir+diagram+context+config.midfix+'.mp.2', 'w') |
gen2 = open(dir+diagram+context+config.midfix+'.mp.3', 'w') |
203 |
gen2.write(m.draw_code()+"\n") |
gen2.write(m.draw_code()+"\n") |
204 |
gen2.write(draw_extra+"\n") |
gen2.write(draw_extra+"\n") |
205 |
|
|
212 |
rough_edges = [] |
rough_edges = [] |
213 |
|
|
214 |
midfix = config.midfix |
midfix = config.midfix |
215 |
gen3 = open(dir+diagram+context+config.midfix+".mp.3", "w") |
gen3 = open(dir+diagram+context+config.midfix+".mp.4", "w") |
216 |
gen3.write(""" |
gen3.write(""" |
217 |
prologues := 1; |
prologues := 1; |
218 |
input """+slashify(relative_path(config.mp_directory, 'navidoc/mp/'))+"""uml.mp |
""") |
219 |
|
for include in config.mp_includes: |
220 |
|
gen3.write(""" |
221 |
|
input """+slashify(relative_path(config.mp_directory, 'navidoc/mp/'))+include) |
222 |
|
gen3.write(""" |
223 |
beginfig(1) |
beginfig(1) |
|
input %(diagram)s%(context)s%(midfix)s.mp.1 |
|
|
input %(diagram)s%(midfix)s.mp |
|
224 |
input %(diagram)s%(context)s%(midfix)s.mp.2 |
input %(diagram)s%(context)s%(midfix)s.mp.2 |
225 |
|
input %(diagram)s%(midfix)s.mp |
226 |
|
input %(diagram)s%(context)s%(midfix)s.mp.3 |
227 |
endfig |
endfig |
228 |
end |
end |
229 |
""" % locals()) |
""" % locals()) |
238 |
|
|
239 |
syscmd = config.metapost+' --file-line-error-style ' \ |
syscmd = config.metapost+' --file-line-error-style ' \ |
240 |
+ '--interaction nonstopmode ' \ |
+ '--interaction nonstopmode ' \ |
241 |
+ diagram + config.midfix + '.mp.3 >'+config.stderr |
+ diagram + config.midfix + '.mp.4 >'+config.stderr |
242 |
|
|
243 |
dbg(syscmd) |
dbg(syscmd) |
244 |
os.system('cd '+config.mp_directory+';'+syscmd) |
os.system('cd '+config.mp_directory+';'+syscmd) |
334 |
)] |
)] |
335 |
dbg("Mapped corners: "+str(self.corners)) |
dbg("Mapped corners: "+str(self.corners)) |
336 |
|
|
337 |
def imgmapanchor(self, scale=1.0, diagram=None): |
def imgmapanchor(self, scale=1.0, diagram=''): |
338 |
#If we have a link with empty target and empty title, let's link |
#If we have a link with empty target and empty title, let's link |
339 |
#it to the diagram itself, if diagram name provided. |
#it to the diagram itself, if diagram name provided. |
340 |
if self.title == '' and diagram: self.title = diagram+config.midfix+'.png' |
if self.title == '' and diagram: self.title = diagram+config.midfix+'.png' |
341 |
if self.target == '' and diagram: |
if self.target == '' and diagram: |
342 |
self.target = slashify(relative_path(config.working_directory, config.mp_directory))+diagram+config.midfix+'.png' |
self.target = slashify(relative_path(config.working_directory, config.mp_directory))+diagram+config.midfix+'.png' |
343 |
if self.target.endswith('.png'): target = '_plain' |
if self.target.endswith('.png'): |
344 |
|
target = '_plain' |
345 |
else: target = '_top' |
else: target = '_top' |
346 |
|
|
347 |
return """<area href="%s" shape="rect" coords="%s" target="%s" title="%s" alt="%s" />""" \ |
return """<area href="%s" shape="rect" coords="%s" target="%s" title="%s" alt="%s" />""" \ |
348 |
% (self.target, |
% (self.target, |
349 |
",".join(["%s"%(int(c*scale)) for c in self.corners]), |
",".join(["%s"%(int(c*scale)) for c in self.corners]), |