xml.py 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. from sccd.statechart.parser.text import *
  2. from sccd.statechart.parser.xml import *
  3. from sccd.cd.static.cd import *
  4. def cd_parser_rules(statechart_parser_rules, default_delta = duration(100, Microsecond)):
  5. globals = Globals()
  6. text_parser = TextParser(globals)
  7. sc_rules = statechart_parser_rules(globals, text_parser=text_parser)
  8. delta = default_delta
  9. def parse_single_instance_cd(el):
  10. def parse_delta(el):
  11. nonlocal delta
  12. delta_expr = text_parser.parse_expr(el.text)
  13. delta = delta_expr.eval(None)
  14. def finish_single_instance_cd(statechart):
  15. globals.init_durations(delta)
  16. return SingleInstanceCD(globals, statechart)
  17. return ([("delta?", parse_delta), ("statechart", sc_rules)], finish_single_instance_cd)
  18. return parse_single_instance_cd
  19. # This is usually how you would want to load a class diagram:
  20. def load_cd(src):
  21. import os
  22. sc_rules = functools.partial(statechart_parser_rules, path=os.path.dirname(src), load_external=True)
  23. cd_rules = { "single_instance_cd": cd_parser_rules(sc_rules) }
  24. return parse_f(src, rules=cd_rules)