rgen 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. data/CHANGELOG +20 -1
  2. data/MIT-LICENSE +1 -1
  3. data/README +12 -9
  4. data/lib/instantiators/ea_instantiator.rb +36 -0
  5. data/lib/metamodels/uml13_metamodel.rb +559 -0
  6. data/lib/metamodels/uml13_metamodel_ext.rb +26 -0
  7. data/lib/mmgen/metamodel_generator.rb +5 -5
  8. data/lib/mmgen/mm_ext/ecore_ext.rb +95 -0
  9. data/lib/mmgen/mmgen.rb +6 -4
  10. data/lib/mmgen/templates/annotations.tpl +37 -0
  11. data/lib/mmgen/templates/metamodel_generator.tpl +171 -0
  12. data/lib/rgen/ecore/ecore.rb +190 -0
  13. data/lib/rgen/ecore/ecore_instantiator.rb +25 -0
  14. data/lib/rgen/ecore/ecore_transformer.rb +85 -0
  15. data/lib/rgen/environment.rb +9 -24
  16. data/lib/rgen/find_helper.rb +68 -0
  17. data/lib/rgen/{instantiator.rb → instantiator/abstract_instantiator.rb} +6 -2
  18. data/lib/rgen/instantiator/abstract_xml_instantiator.rb +59 -0
  19. data/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
  20. data/lib/rgen/instantiator/ecore_xml_instantiator.rb +144 -0
  21. data/lib/rgen/instantiator/nodebased_xml_instantiator.rb +157 -0
  22. data/lib/rgen/instantiator/xmi11_instantiator.rb +164 -0
  23. data/lib/rgen/metamodel_builder.rb +103 -9
  24. data/lib/rgen/metamodel_builder/build_helper.rb +26 -4
  25. data/lib/rgen/metamodel_builder/builder_extensions.rb +285 -88
  26. data/lib/rgen/metamodel_builder/builder_runtime.rb +7 -1
  27. data/lib/rgen/metamodel_builder/data_types.rb +67 -0
  28. data/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
  29. data/lib/rgen/metamodel_builder/metamodel_description.rb +232 -0
  30. data/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
  31. data/lib/rgen/metamodel_builder/module_extension.rb +33 -0
  32. data/lib/rgen/model_comparator.rb +56 -0
  33. data/lib/rgen/model_dumper.rb +5 -5
  34. data/lib/rgen/name_helper.rb +17 -1
  35. data/lib/rgen/template_language.rb +148 -28
  36. data/lib/rgen/template_language/directory_template_container.rb +56 -38
  37. data/lib/rgen/template_language/output_handler.rb +93 -77
  38. data/lib/rgen/template_language/template_container.rb +186 -143
  39. data/lib/rgen/transformer.rb +19 -14
  40. data/lib/transformers/uml13_to_ecore.rb +75 -0
  41. data/redist/xmlscan/ChangeLog +1301 -0
  42. data/redist/xmlscan/README +34 -0
  43. data/redist/xmlscan/THANKS +11 -0
  44. data/redist/xmlscan/doc/changes.html +74 -0
  45. data/redist/xmlscan/doc/changes.rd +80 -0
  46. data/redist/xmlscan/doc/en/conformance.html +136 -0
  47. data/redist/xmlscan/doc/en/conformance.rd +152 -0
  48. data/redist/xmlscan/doc/en/manual.html +356 -0
  49. data/redist/xmlscan/doc/en/manual.rd +402 -0
  50. data/redist/xmlscan/doc/ja/conformance.ja.html +118 -0
  51. data/redist/xmlscan/doc/ja/conformance.ja.rd +134 -0
  52. data/redist/xmlscan/doc/ja/manual.ja.html +325 -0
  53. data/redist/xmlscan/doc/ja/manual.ja.rd +370 -0
  54. data/redist/xmlscan/doc/src/Makefile +41 -0
  55. data/redist/xmlscan/doc/src/conformance.rd.src +256 -0
  56. data/redist/xmlscan/doc/src/langsplit.rb +110 -0
  57. data/redist/xmlscan/doc/src/manual.rd.src +614 -0
  58. data/redist/xmlscan/install.rb +41 -0
  59. data/redist/xmlscan/lib/xmlscan/encoding.rb +311 -0
  60. data/redist/xmlscan/lib/xmlscan/htmlscan.rb +289 -0
  61. data/redist/xmlscan/lib/xmlscan/namespace.rb +352 -0
  62. data/redist/xmlscan/lib/xmlscan/parser.rb +299 -0
  63. data/redist/xmlscan/lib/xmlscan/scanner.rb +1109 -0
  64. data/redist/xmlscan/lib/xmlscan/version.rb +22 -0
  65. data/redist/xmlscan/lib/xmlscan/visitor.rb +158 -0
  66. data/redist/xmlscan/lib/xmlscan/xmlchar.rb +441 -0
  67. data/redist/xmlscan/memo/CONFORMANCE +1249 -0
  68. data/redist/xmlscan/memo/PRODUCTIONS +195 -0
  69. data/redist/xmlscan/memo/contentspec.ry +335 -0
  70. data/redist/xmlscan/samples/chibixml.rb +105 -0
  71. data/redist/xmlscan/samples/getxmlchar.rb +122 -0
  72. data/redist/xmlscan/samples/rexml.rb +159 -0
  73. data/redist/xmlscan/samples/xmlbench.rb +88 -0
  74. data/redist/xmlscan/samples/xmlbench/parser/chibixml.rb +22 -0
  75. data/redist/xmlscan/samples/xmlbench/parser/nqxml.rb +29 -0
  76. data/redist/xmlscan/samples/xmlbench/parser/rexml.rb +62 -0
  77. data/redist/xmlscan/samples/xmlbench/parser/xmlparser.rb +22 -0
  78. data/redist/xmlscan/samples/xmlbench/parser/xmlscan-0.0.10.rb +62 -0
  79. data/redist/xmlscan/samples/xmlbench/parser/xmlscan-chibixml.rb +22 -0
  80. data/redist/xmlscan/samples/xmlbench/parser/xmlscan-rexml.rb +22 -0
  81. data/redist/xmlscan/samples/xmlbench/parser/xmlscan.rb +99 -0
  82. data/redist/xmlscan/samples/xmlbench/xmlbench-lib.rb +116 -0
  83. data/redist/xmlscan/samples/xmlconftest.rb +200 -0
  84. data/redist/xmlscan/test.rb +7 -0
  85. data/redist/xmlscan/tests/deftestcase.rb +73 -0
  86. data/redist/xmlscan/tests/runtest.rb +47 -0
  87. data/redist/xmlscan/tests/testall.rb +14 -0
  88. data/redist/xmlscan/tests/testencoding.rb +438 -0
  89. data/redist/xmlscan/tests/testhtmlscan.rb +752 -0
  90. data/redist/xmlscan/tests/testnamespace.rb +457 -0
  91. data/redist/xmlscan/tests/testparser.rb +591 -0
  92. data/redist/xmlscan/tests/testscanner.rb +1749 -0
  93. data/redist/xmlscan/tests/testxmlchar.rb +143 -0
  94. data/redist/xmlscan/tests/visitor.rb +34 -0
  95. data/test/array_extensions_test.rb +2 -2
  96. data/test/ea_instantiator_test.rb +41 -0
  97. data/test/ecore_self_test.rb +53 -0
  98. data/test/environment_test.rb +11 -6
  99. data/test/metamodel_builder_test.rb +404 -245
  100. data/test/metamodel_roundtrip_test.rb +52 -0
  101. data/test/metamodel_roundtrip_test/TestModel.rb +65 -0
  102. data/test/metamodel_roundtrip_test/TestModel_Regenerated.rb +64 -0
  103. data/test/metamodel_roundtrip_test/houseMetamodel.ecore +32 -0
  104. data/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +39 -0
  105. data/test/rgen_test.rb +3 -3
  106. data/test/template_language_test.rb +65 -39
  107. data/test/template_language_test/expected_result.txt +24 -3
  108. data/test/template_language_test/templates/code/array.tpl +11 -0
  109. data/test/template_language_test/templates/content/author.tpl +7 -0
  110. data/test/template_language_test/templates/content/chapter.tpl +1 -1
  111. data/test/template_language_test/templates/root.tpl +17 -8
  112. data/test/template_language_test/testout.txt +24 -3
  113. data/test/testmodel/class_model_checker.rb +119 -0
  114. data/test/{xmi_instantiator_test/testmodel.eap → testmodel/ea_testmodel.eap} +0 -0
  115. data/test/{xmi_instantiator_test/testmodel.xml → testmodel/ea_testmodel.xml} +81 -14
  116. data/test/testmodel/ea_testmodel_partial.xml +317 -0
  117. data/test/testmodel/ecore_model_checker.rb +101 -0
  118. data/test/testmodel/manual_testmodel.xml +22 -0
  119. data/test/testmodel/object_model_checker.rb +67 -0
  120. data/test/transformer_test.rb +18 -10
  121. data/test/xml_instantiator_test.rb +81 -8
  122. data/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
  123. data/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
  124. data/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
  125. data/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
  126. metadata +126 -28
  127. data/lib/ea/xmi_class_instantiator.rb +0 -46
  128. data/lib/ea/xmi_helper.rb +0 -26
  129. data/lib/ea/xmi_metamodel.rb +0 -34
  130. data/lib/ea/xmi_object_instantiator.rb +0 -46
  131. data/lib/ea/xmi_to_classmodel.rb +0 -78
  132. data/lib/ea/xmi_to_objectmodel.rb +0 -92
  133. data/lib/mmgen/mm_ext/uml_classmodel_ext.rb +0 -71
  134. data/lib/mmgen/templates/uml_classmodel.tpl +0 -63
  135. data/lib/rgen/xml_instantiator.rb +0 -132
  136. data/lib/uml/objectmodel_instantiator.rb +0 -53
  137. data/lib/uml/uml_classmodel.rb +0 -92
  138. data/lib/uml/uml_objectmodel.rb +0 -65
  139. data/test/metamodel_generator_test.rb +0 -44
  140. data/test/metamodel_generator_test/TestModel.rb +0 -40
  141. data/test/metamodel_generator_test/expected_result.txt +0 -40
  142. data/test/xmi_class_instantiator_test.rb +0 -24
  143. data/test/xmi_instantiator_test/class_model_checker.rb +0 -97
  144. data/test/xmi_object_instantiator_test.rb +0 -65
  145. data/test/xml_instantiator_test/testmodel.xml +0 -7
@@ -0,0 +1,22 @@
1
+ #
2
+ # samples/xmlbench/parser/chibixml.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: chibixml.rb,v 1.1 2002/12/26 17:32:46 katsu Exp $
7
+ #
8
+
9
+ require 'chibiparse'
10
+
11
+
12
+ class BenchChibiXML < XMLBench
13
+
14
+ def name
15
+ 'chibixml-20010306'
16
+ end
17
+
18
+ def parse(src)
19
+ ChibiXML.parse src
20
+ end
21
+
22
+ end
@@ -0,0 +1,29 @@
1
+ #
2
+ # samples/xmlbench/parser/nqxml.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: nqxml.rb,v 1.1 2002/12/26 17:32:46 katsu Exp $
7
+ #
8
+
9
+ require 'nqxml/streamingparser'
10
+ require 'nqxml/treeparser'
11
+
12
+
13
+ class BenchNQXMLStream < XMLBench
14
+
15
+ def name
16
+ 'NQXML::StreamingParser'
17
+ end
18
+
19
+ def parse(src)
20
+ parser = NQXML::StreamingParser.new(src)
21
+ parser.instance_eval {
22
+ @tokenizer.instance_eval {
23
+ @internalEntities.default = ''
24
+ }
25
+ }
26
+ parser.each { }
27
+ end
28
+
29
+ end
@@ -0,0 +1,62 @@
1
+ #
2
+ # samples/xmlbench/parser/rexml.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: rexml.rb,v 1.2 2003/03/16 02:38:02 katsu Exp $
7
+ #
8
+
9
+ require 'rexml/document'
10
+ require 'rexml/streamlistener'
11
+ require 'rexml/pullparser'
12
+
13
+
14
+ class BenchREXMLStream < XMLBench
15
+
16
+ class REXMLListener
17
+ include REXML::StreamListener
18
+ end
19
+
20
+ def name
21
+ 'REXML::Document.parse_stream'
22
+ end
23
+
24
+ def parse(src)
25
+ s = REXML::SourceFactory.create_from(src)
26
+ REXML::Document.parse_stream s, REXMLListener.new
27
+ end
28
+
29
+ end
30
+
31
+
32
+ class BenchREXMLTree < XMLBench
33
+
34
+ class REXMLListener
35
+ include REXML::StreamListener
36
+ end
37
+
38
+ def name
39
+ 'REXML::Document.new'
40
+ end
41
+
42
+ def parse(src)
43
+ REXML::Document.new src
44
+ end
45
+
46
+ end
47
+
48
+
49
+ class BenchREXMLPull < XMLBench
50
+
51
+ def name
52
+ 'REXML::PullParser'
53
+ end
54
+
55
+ def parse(src)
56
+ parser = REXML::PullParser.new(src)
57
+ until parser.empty?
58
+ parser.next
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,22 @@
1
+ #
2
+ # samples/xmlbench/parser/xmlparser.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: xmlparser.rb,v 1.1 2002/12/26 17:32:46 katsu Exp $
7
+ #
8
+
9
+ require 'xmlparser'
10
+
11
+
12
+ class BenchXMLParser < XMLBench
13
+
14
+ def name
15
+ 'XMLParser'
16
+ end
17
+
18
+ def parse(src)
19
+ XMLParser.new.parse src
20
+ end
21
+
22
+ end
@@ -0,0 +1,62 @@
1
+ #
2
+ # samples/xmlbench/parser/xmlscan-0.0.10.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: xmlscan-0.0.10.rb,v 1.1 2002/12/26 17:32:46 katsu Exp $
7
+ #
8
+
9
+ require 'xmlscan'
10
+
11
+
12
+ class BenchXMLScan0010 < XMLBench
13
+
14
+ class Scanner < XMLScanner
15
+ def entityref_literal(ref) '' end
16
+ end
17
+
18
+ def name
19
+ 'xmlscan-0.0.10 XMLScanner'
20
+ end
21
+
22
+ def parse(src)
23
+ Scanner.new.parse src
24
+ end
25
+
26
+ end
27
+
28
+
29
+
30
+ class BenchXMLScan0010Parser < XMLBench
31
+
32
+ class Scanner < WellFormedXMLScanner
33
+ def entityref_literal(ref) '' end
34
+ end
35
+
36
+ def name
37
+ 'xmlscan-0.0.10 WellFormed'
38
+ end
39
+
40
+ def parse(src)
41
+ Scanner.new.parse src
42
+ end
43
+
44
+ end
45
+
46
+
47
+
48
+ class BenchXMLScan0010ParserNamespace < XMLBench
49
+
50
+ class Scanner < XMLScannerWithNamespace
51
+ def entityref_literal(ref) '' end
52
+ end
53
+
54
+ def name
55
+ 'xmlscan-0.0.10 Namespace'
56
+ end
57
+
58
+ def parse(src)
59
+ Scanner.new.parse src
60
+ end
61
+
62
+ end
@@ -0,0 +1,22 @@
1
+ #
2
+ # samples/xmlbench/parser/xmlscan-chibixml.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: xmlscan-chibixml.rb,v 1.1 2002/12/26 17:32:46 katsu Exp $
7
+ #
8
+
9
+ require 'samples/chibixml'
10
+
11
+
12
+ class BenchXMLScanChibiXML < XMLBench
13
+
14
+ def name
15
+ 'XMLScan::ChibiXML'
16
+ end
17
+
18
+ def parse(src)
19
+ XMLScan::ChibiXML.parse src
20
+ end
21
+
22
+ end
@@ -0,0 +1,22 @@
1
+ #
2
+ # samples/xmlbench/parser/xmlscan-rexml.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: xmlscan-rexml.rb,v 1.1 2002/12/26 17:32:46 katsu Exp $
7
+ #
8
+
9
+ require 'samples/rexml'
10
+
11
+
12
+ class BenchXMLScanREXML < XMLBench
13
+
14
+ def name
15
+ 'XMLScan::REXML'
16
+ end
17
+
18
+ def parse(src)
19
+ XMLScan::REXML.parse src
20
+ end
21
+
22
+ end
@@ -0,0 +1,99 @@
1
+ #
2
+ # samples/xmlbench/parser/xmlscan.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: xmlscan.rb,v 1.2 2003/01/18 07:05:19 katsu Exp $
7
+ #
8
+
9
+ require 'xmlscan/scanner'
10
+ require 'xmlscan/parser'
11
+ require 'xmlscan/namespace'
12
+ require 'xmlscan/xmlchar'
13
+
14
+
15
+ class BenchXMLScan < XMLBench
16
+
17
+ class Visitor
18
+ include XMLScan::Visitor
19
+ end
20
+
21
+ def name
22
+ 'XMLScan::XMLScanner'
23
+ end
24
+
25
+ def parse(src)
26
+ XMLScan::XMLScanner.new(Visitor.new).parse src
27
+ end
28
+
29
+ end
30
+
31
+
32
+
33
+ class BenchXMLScanParser < XMLBench
34
+
35
+ class Visitor
36
+ include XMLScan::Visitor
37
+ def on_stag(*) @attrs = {} end
38
+ def on_attribute(name) @attrs[name] = @attr = '' end
39
+ def on_attr_value(str) @attr << str end
40
+ def on_attr_charref(str) @attr << [str].pack('U') end
41
+ end
42
+
43
+ def name
44
+ 'XMLScan::XMLParser'
45
+ end
46
+
47
+ def parse(src)
48
+ XMLScan::XMLParser.new(Visitor.new).parse src
49
+ end
50
+
51
+ end
52
+
53
+
54
+
55
+ class BenchXMLScanParserNamespace < XMLBench
56
+
57
+ class Visitor
58
+ include XMLScan::NSVisitor
59
+ def on_stag_ns(*) @attrs = {} end
60
+ def on_attribute_ns(name,p,l) @attrs[name] = @attr = '' end
61
+ def on_attr_value(str) @attr << str end
62
+ def on_attr_charref(str) @attr << [str].pack('U') end
63
+ end
64
+
65
+ def name
66
+ 'XMLScan::XMLNamespace'
67
+ end
68
+
69
+ def parse(src)
70
+ XMLScan::XMLParserNS.new(Visitor.new).parse src
71
+ end
72
+
73
+ end
74
+
75
+
76
+
77
+ class BenchXMLScanParserStrict < XMLBench
78
+
79
+ class Visitor
80
+ include XMLScan::Visitor
81
+ def on_stag(*) @attrs = {} end
82
+ def on_attribute(name) @attrs[name] = @attr = '' end
83
+ def on_attr_value(str) @attr << str end
84
+ def on_attr_charref(str) @attr << [str].pack('U') end
85
+ end
86
+
87
+ def name
88
+ 'XMLScan::XMLParser (strict)'
89
+ end
90
+
91
+ def weight
92
+ 10
93
+ end
94
+
95
+ def parse(src)
96
+ XMLScan::XMLParser.new(Visitor.new, :strict_char).parse src
97
+ end
98
+
99
+ end
@@ -0,0 +1,116 @@
1
+ #
2
+ # samples/xmlbench/xmlbench-lib.rb
3
+ #
4
+ # Copyright (C) UENO Katsuhiro 2002
5
+ #
6
+ # $Id: xmlbench-lib.rb,v 1.3 2002/12/29 17:18:57 katsu Exp $
7
+ #
8
+
9
+ class XMLBench
10
+
11
+ def name
12
+ self.class.name
13
+ end
14
+
15
+ def weight
16
+ 0
17
+ end
18
+
19
+ def parse(src)
20
+ raise NotImplementedError, "abstract method"
21
+ end
22
+
23
+ end
24
+
25
+
26
+
27
+ class XMLBench
28
+
29
+ ParserDir = File.expand_path(File.dirname(__FILE__)) + '/parser'
30
+ @@parsers = []
31
+ @@parser_classes = []
32
+ @@weight_limit = 0
33
+
34
+ class << self
35
+
36
+ def weight_limit=(n)
37
+ @@weight_limit = n
38
+ end
39
+
40
+ private
41
+
42
+ def load(name)
43
+ @@parsers.push name
44
+ filename = "#{XMLBench::ParserDir}/#{name}.rb"
45
+ ret = nil
46
+ if File.file? filename then
47
+ loaded = true
48
+ begin
49
+ Kernel.load "#{XMLBench::ParserDir}/#{name}.rb"
50
+ rescue Exception
51
+ loaded = false
52
+ end
53
+ if loaded then
54
+ klasses = []
55
+ ObjectSpace.each_object(Class) { |klass|
56
+ if not equal? klass and klass.ancestors.include? self then
57
+ klasses.push klass
58
+ end
59
+ }
60
+ ret = klasses - @@parser_classes
61
+ @@parser_classes = klasses
62
+ ret.sort! { |a,b| a.name <=> b.name }
63
+ end
64
+ end
65
+ ret
66
+ end
67
+
68
+ public
69
+
70
+ def setup(*args)
71
+ ret = []
72
+ args.each { |name|
73
+ next if @@parsers.include? name
74
+ STDERR.print "checking for #{name} ..." if $VERBOSE
75
+ klasses = load(name)
76
+ unless klasses then
77
+ STDERR.print " no" if $VERBOSE
78
+ else
79
+ parsers = []
80
+ klasses.each { |klass|
81
+ begin
82
+ obj = klass.new
83
+ rescue Exception
84
+ obj = nil
85
+ end
86
+ parsers.push obj if obj
87
+ }
88
+ if $VERBOSE then
89
+ if parsers.size < klasses.size then
90
+ STDERR.print " ok (#{klasses.size - parsers.size} failed)"
91
+ else
92
+ STDERR.print " ok"
93
+ end
94
+ end
95
+ parsers.reject! { |i| i.weight > @@weight_limit }
96
+ ret.concat parsers
97
+ end
98
+ STDERR.print "\n" if $VERBOSE
99
+ }
100
+ ret
101
+ end
102
+
103
+ def setup_all
104
+ files = Dir.entries(XMLBench::ParserDir)
105
+ files.reject! { |i| /\.rb\z/ !~ i }
106
+ files.collect! { |i| i[0..-4] }
107
+ xmlscan = files.select { |i| /\Axmlscan/ =~ i }
108
+ files = files.reject { |i| /\Axmlscan/ =~ i }
109
+ xmlscan.sort!
110
+ files.sort!
111
+ setup(*xmlscan.concat(files))
112
+ end
113
+
114
+ end
115
+
116
+ end