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.
- data/CHANGELOG +20 -1
- data/MIT-LICENSE +1 -1
- data/README +12 -9
- data/lib/instantiators/ea_instantiator.rb +36 -0
- data/lib/metamodels/uml13_metamodel.rb +559 -0
- data/lib/metamodels/uml13_metamodel_ext.rb +26 -0
- data/lib/mmgen/metamodel_generator.rb +5 -5
- data/lib/mmgen/mm_ext/ecore_ext.rb +95 -0
- data/lib/mmgen/mmgen.rb +6 -4
- data/lib/mmgen/templates/annotations.tpl +37 -0
- data/lib/mmgen/templates/metamodel_generator.tpl +171 -0
- data/lib/rgen/ecore/ecore.rb +190 -0
- data/lib/rgen/ecore/ecore_instantiator.rb +25 -0
- data/lib/rgen/ecore/ecore_transformer.rb +85 -0
- data/lib/rgen/environment.rb +9 -24
- data/lib/rgen/find_helper.rb +68 -0
- data/lib/rgen/{instantiator.rb → instantiator/abstract_instantiator.rb} +6 -2
- data/lib/rgen/instantiator/abstract_xml_instantiator.rb +59 -0
- data/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
- data/lib/rgen/instantiator/ecore_xml_instantiator.rb +144 -0
- data/lib/rgen/instantiator/nodebased_xml_instantiator.rb +157 -0
- data/lib/rgen/instantiator/xmi11_instantiator.rb +164 -0
- data/lib/rgen/metamodel_builder.rb +103 -9
- data/lib/rgen/metamodel_builder/build_helper.rb +26 -4
- data/lib/rgen/metamodel_builder/builder_extensions.rb +285 -88
- data/lib/rgen/metamodel_builder/builder_runtime.rb +7 -1
- data/lib/rgen/metamodel_builder/data_types.rb +67 -0
- data/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
- data/lib/rgen/metamodel_builder/metamodel_description.rb +232 -0
- data/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
- data/lib/rgen/metamodel_builder/module_extension.rb +33 -0
- data/lib/rgen/model_comparator.rb +56 -0
- data/lib/rgen/model_dumper.rb +5 -5
- data/lib/rgen/name_helper.rb +17 -1
- data/lib/rgen/template_language.rb +148 -28
- data/lib/rgen/template_language/directory_template_container.rb +56 -38
- data/lib/rgen/template_language/output_handler.rb +93 -77
- data/lib/rgen/template_language/template_container.rb +186 -143
- data/lib/rgen/transformer.rb +19 -14
- data/lib/transformers/uml13_to_ecore.rb +75 -0
- data/redist/xmlscan/ChangeLog +1301 -0
- data/redist/xmlscan/README +34 -0
- data/redist/xmlscan/THANKS +11 -0
- data/redist/xmlscan/doc/changes.html +74 -0
- data/redist/xmlscan/doc/changes.rd +80 -0
- data/redist/xmlscan/doc/en/conformance.html +136 -0
- data/redist/xmlscan/doc/en/conformance.rd +152 -0
- data/redist/xmlscan/doc/en/manual.html +356 -0
- data/redist/xmlscan/doc/en/manual.rd +402 -0
- data/redist/xmlscan/doc/ja/conformance.ja.html +118 -0
- data/redist/xmlscan/doc/ja/conformance.ja.rd +134 -0
- data/redist/xmlscan/doc/ja/manual.ja.html +325 -0
- data/redist/xmlscan/doc/ja/manual.ja.rd +370 -0
- data/redist/xmlscan/doc/src/Makefile +41 -0
- data/redist/xmlscan/doc/src/conformance.rd.src +256 -0
- data/redist/xmlscan/doc/src/langsplit.rb +110 -0
- data/redist/xmlscan/doc/src/manual.rd.src +614 -0
- data/redist/xmlscan/install.rb +41 -0
- data/redist/xmlscan/lib/xmlscan/encoding.rb +311 -0
- data/redist/xmlscan/lib/xmlscan/htmlscan.rb +289 -0
- data/redist/xmlscan/lib/xmlscan/namespace.rb +352 -0
- data/redist/xmlscan/lib/xmlscan/parser.rb +299 -0
- data/redist/xmlscan/lib/xmlscan/scanner.rb +1109 -0
- data/redist/xmlscan/lib/xmlscan/version.rb +22 -0
- data/redist/xmlscan/lib/xmlscan/visitor.rb +158 -0
- data/redist/xmlscan/lib/xmlscan/xmlchar.rb +441 -0
- data/redist/xmlscan/memo/CONFORMANCE +1249 -0
- data/redist/xmlscan/memo/PRODUCTIONS +195 -0
- data/redist/xmlscan/memo/contentspec.ry +335 -0
- data/redist/xmlscan/samples/chibixml.rb +105 -0
- data/redist/xmlscan/samples/getxmlchar.rb +122 -0
- data/redist/xmlscan/samples/rexml.rb +159 -0
- data/redist/xmlscan/samples/xmlbench.rb +88 -0
- data/redist/xmlscan/samples/xmlbench/parser/chibixml.rb +22 -0
- data/redist/xmlscan/samples/xmlbench/parser/nqxml.rb +29 -0
- data/redist/xmlscan/samples/xmlbench/parser/rexml.rb +62 -0
- data/redist/xmlscan/samples/xmlbench/parser/xmlparser.rb +22 -0
- data/redist/xmlscan/samples/xmlbench/parser/xmlscan-0.0.10.rb +62 -0
- data/redist/xmlscan/samples/xmlbench/parser/xmlscan-chibixml.rb +22 -0
- data/redist/xmlscan/samples/xmlbench/parser/xmlscan-rexml.rb +22 -0
- data/redist/xmlscan/samples/xmlbench/parser/xmlscan.rb +99 -0
- data/redist/xmlscan/samples/xmlbench/xmlbench-lib.rb +116 -0
- data/redist/xmlscan/samples/xmlconftest.rb +200 -0
- data/redist/xmlscan/test.rb +7 -0
- data/redist/xmlscan/tests/deftestcase.rb +73 -0
- data/redist/xmlscan/tests/runtest.rb +47 -0
- data/redist/xmlscan/tests/testall.rb +14 -0
- data/redist/xmlscan/tests/testencoding.rb +438 -0
- data/redist/xmlscan/tests/testhtmlscan.rb +752 -0
- data/redist/xmlscan/tests/testnamespace.rb +457 -0
- data/redist/xmlscan/tests/testparser.rb +591 -0
- data/redist/xmlscan/tests/testscanner.rb +1749 -0
- data/redist/xmlscan/tests/testxmlchar.rb +143 -0
- data/redist/xmlscan/tests/visitor.rb +34 -0
- data/test/array_extensions_test.rb +2 -2
- data/test/ea_instantiator_test.rb +41 -0
- data/test/ecore_self_test.rb +53 -0
- data/test/environment_test.rb +11 -6
- data/test/metamodel_builder_test.rb +404 -245
- data/test/metamodel_roundtrip_test.rb +52 -0
- data/test/metamodel_roundtrip_test/TestModel.rb +65 -0
- data/test/metamodel_roundtrip_test/TestModel_Regenerated.rb +64 -0
- data/test/metamodel_roundtrip_test/houseMetamodel.ecore +32 -0
- data/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +39 -0
- data/test/rgen_test.rb +3 -3
- data/test/template_language_test.rb +65 -39
- data/test/template_language_test/expected_result.txt +24 -3
- data/test/template_language_test/templates/code/array.tpl +11 -0
- data/test/template_language_test/templates/content/author.tpl +7 -0
- data/test/template_language_test/templates/content/chapter.tpl +1 -1
- data/test/template_language_test/templates/root.tpl +17 -8
- data/test/template_language_test/testout.txt +24 -3
- data/test/testmodel/class_model_checker.rb +119 -0
- data/test/{xmi_instantiator_test/testmodel.eap → testmodel/ea_testmodel.eap} +0 -0
- data/test/{xmi_instantiator_test/testmodel.xml → testmodel/ea_testmodel.xml} +81 -14
- data/test/testmodel/ea_testmodel_partial.xml +317 -0
- data/test/testmodel/ecore_model_checker.rb +101 -0
- data/test/testmodel/manual_testmodel.xml +22 -0
- data/test/testmodel/object_model_checker.rb +67 -0
- data/test/transformer_test.rb +18 -10
- data/test/xml_instantiator_test.rb +81 -8
- data/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
- data/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
- data/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
- data/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
- metadata +126 -28
- data/lib/ea/xmi_class_instantiator.rb +0 -46
- data/lib/ea/xmi_helper.rb +0 -26
- data/lib/ea/xmi_metamodel.rb +0 -34
- data/lib/ea/xmi_object_instantiator.rb +0 -46
- data/lib/ea/xmi_to_classmodel.rb +0 -78
- data/lib/ea/xmi_to_objectmodel.rb +0 -92
- data/lib/mmgen/mm_ext/uml_classmodel_ext.rb +0 -71
- data/lib/mmgen/templates/uml_classmodel.tpl +0 -63
- data/lib/rgen/xml_instantiator.rb +0 -132
- data/lib/uml/objectmodel_instantiator.rb +0 -53
- data/lib/uml/uml_classmodel.rb +0 -92
- data/lib/uml/uml_objectmodel.rb +0 -65
- data/test/metamodel_generator_test.rb +0 -44
- data/test/metamodel_generator_test/TestModel.rb +0 -40
- data/test/metamodel_generator_test/expected_result.txt +0 -40
- data/test/xmi_class_instantiator_test.rb +0 -24
- data/test/xmi_instantiator_test/class_model_checker.rb +0 -97
- data/test/xmi_object_instantiator_test.rb +0 -65
- 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
|