summaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorNicolas Schodet2010-03-15 23:20:25 +0100
committerNicolas Schodet2010-03-15 23:20:25 +0100
commitc40ac55789ef7da23bc7baaf77e47944de0faccb (patch)
treeb4f9475b2b2a77903f278365b7a1268feba2cc0b /tools
parent77c575aa1fae9599e9e59fb1efad650960bfb675 (diff)
tools/dfagen: limit output using origin, refs #102
Diffstat (limited to 'tools')
-rw-r--r--tools/dfagen/dfagen/automaton.py23
-rw-r--r--tools/dfagen/dfagen/command.py4
-rw-r--r--tools/dfagen/dfagen/output/c.py4
-rw-r--r--tools/dfagen/dfagen/output/dot.py6
4 files changed, 24 insertions, 13 deletions
diff --git a/tools/dfagen/dfagen/automaton.py b/tools/dfagen/dfagen/automaton.py
index 63a701f6..50a5dcd0 100644
--- a/tools/dfagen/dfagen/automaton.py
+++ b/tools/dfagen/dfagen/automaton.py
@@ -1,3 +1,10 @@
+def filter_origin_iter (list, origin):
+ if origin is None:
+ return iter (list)
+ else:
+ import itertools
+ return itertools.ifilter (lambda x: x.origin in origin, iter (list))
+
class Event:
"""Event definition."""
@@ -63,8 +70,8 @@ class Transition:
self.branches[branch.name] = branch
self.branches_list.append (branch)
- def iter_branches (self):
- return iter (self.branches_list)
+ def iter_branches (self, origin = None):
+ return filter_origin_iter (self.branches_list, origin)
def get_attributes (self):
return [ b.attributes for b in self.iter_branches ()
@@ -124,14 +131,14 @@ class Automaton:
self.events[event.name] = event
self.events_list.append (event)
- def iter_states (self):
- return iter (self.states_list)
+ def iter_states (self, origin = None):
+ return filter_origin_iter (self.states_list, origin)
- def iter_initials (self):
- return iter (self.initials)
+ def iter_initials (self, origin = None):
+ return filter_origin_iter (self.initials, origin)
- def iter_events (self):
- return iter (self.events_list)
+ def iter_events (self, origin = None):
+ return filter_origin_iter (self.events_list, origin)
def __str__ (self):
s = self.name + '\n'
diff --git a/tools/dfagen/dfagen/command.py b/tools/dfagen/dfagen/command.py
index 3325d6c1..223deeaa 100644
--- a/tools/dfagen/dfagen/command.py
+++ b/tools/dfagen/dfagen/command.py
@@ -17,6 +17,8 @@ def run ():
help='read output configuration from FILE', metavar='FILE')
opt.add_option ('-p', '--prefix', dest='prefix',
help='use PREFIX for generated output', metavar='PREFIX')
+ opt.add_option ('--origin', dest='origin', action='append',
+ help='restrict output to given automaton name(s)', metavar='NAME')
opt.add_option ('-O', '--output-dir', dest='output_dir', default='',
help='generate output in DIR', metavar='DIR')
opt.add_option ('--dump', action='store_true', default=False,
@@ -38,4 +40,4 @@ def run ():
# Produce output.
if options.output is not None:
dfagen.output.get_output (options.output).write (options.prefix, a,
- cfg, options.output_dir)
+ cfg, options.output_dir, options.origin)
diff --git a/tools/dfagen/dfagen/output/c.py b/tools/dfagen/dfagen/output/c.py
index 5a44d0e3..2d45720e 100644
--- a/tools/dfagen/dfagen/output/c.py
+++ b/tools/dfagen/dfagen/output/c.py
@@ -258,7 +258,9 @@ class Writer:
for (t, f) in templates.iteritems ():
self.write_template (t, f.replace ('%', self.data.prefix))
-def write (prefix, automaton, user, outputdir):
+def write (prefix, automaton, user, outputdir, origin):
+ if origin is not None:
+ raise NotImplementedError ("--origin is not implemented for C output")
templatedir = os.path.splitext (__file__)[0]
if 'template-dir' in user:
templatedir = os.path.join (os.path.split (user.file)[0],
diff --git a/tools/dfagen/dfagen/output/dot.py b/tools/dfagen/dfagen/output/dot.py
index ce9c4db8..46b2289c 100644
--- a/tools/dfagen/dfagen/output/dot.py
+++ b/tools/dfagen/dfagen/output/dot.py
@@ -1,13 +1,13 @@
import os.path
-def write (prefix, automaton, user, outputdir):
+def write (prefix, automaton, user, outputdir, origin):
output = prefix + '.dot'
o = open (os.path.join (outputdir, output), 'w')
o.write ('digraph %s {' % prefix)
- for s in automaton.iter_states ():
+ for s in automaton.iter_states (origin):
o.write (' %s\n' % s.name)
for tr in s.iter_transitions ():
- for br in tr.iter_branches ():
+ for br in tr.iter_branches (origin):
o.write (' %(state)s -> %(to)s [ label = "%(event)s" ];\n'
% dict (
state = s.name,