xamplr 1.2.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 (142) hide show
  1. data/CHANGES.txt +13 -0
  2. data/LICENSE +3 -0
  3. data/README.rdoc +26 -0
  4. data/README.rdoc.orig +118 -0
  5. data/Rakefile +85 -0
  6. data/VERSION.yml +4 -0
  7. data/examples/random-people-shared-addresses/Makefile +16 -0
  8. data/examples/random-people-shared-addresses/batch-load-users.rb +83 -0
  9. data/examples/random-people-shared-addresses/find-mentions.rb +47 -0
  10. data/examples/random-people-shared-addresses/find-people-by-address.rb +104 -0
  11. data/examples/random-people-shared-addresses/optimise.rb +16 -0
  12. data/examples/random-people-shared-addresses/people.rb +35 -0
  13. data/examples/random-people-shared-addresses/query.rb +75 -0
  14. data/examples/random-people-shared-addresses/query2.rb +73 -0
  15. data/examples/random-people-shared-addresses/random-names.csv +10000 -0
  16. data/examples/random-people-shared-addresses/settings.rb +3 -0
  17. data/examples/random-people-shared-addresses/what-to-query-on.rb +82 -0
  18. data/examples/random-people-shared-addresses/xampl-gen.rb +36 -0
  19. data/examples/random-people-shared-addresses/xml/people.xml +14 -0
  20. data/examples/random-people/Makefile +16 -0
  21. data/examples/random-people/batch-load-users.rb +61 -0
  22. data/examples/random-people/optimise.rb +16 -0
  23. data/examples/random-people/people.rb +22 -0
  24. data/examples/random-people/query.rb +73 -0
  25. data/examples/random-people/query2.rb +73 -0
  26. data/examples/random-people/random-names.csv +10000 -0
  27. data/examples/random-people/rawtc.rb +91 -0
  28. data/examples/random-people/settings.rb +3 -0
  29. data/examples/random-people/what-to-query-on.rb +80 -0
  30. data/examples/random-people/xampl-gen.rb +36 -0
  31. data/examples/random-people/xml/people.xml +11 -0
  32. data/examples/read-testing/Makefile +10 -0
  33. data/examples/read-testing/load.rb +65 -0
  34. data/examples/read-testing/read.rb +51 -0
  35. data/examples/read-testing/rrr.rb +87 -0
  36. data/examples/read-testing/settings.rb +2 -0
  37. data/examples/read-testing/xampl-gen.rb +36 -0
  38. data/examples/read-testing/xml/text.xml +8 -0
  39. data/examples/tokyo-cabinet-experimental/expt-query.rb +42 -0
  40. data/examples/tokyo-cabinet-experimental/expt-query2.rb +42 -0
  41. data/examples/tokyo-cabinet-experimental/expt-query3.rb +41 -0
  42. data/examples/tokyo-cabinet-experimental/expt-reader.rb +32 -0
  43. data/examples/tokyo-cabinet-experimental/expt.rb +61 -0
  44. data/examples/tokyo-cabinet-experimental/xampl-gen.rb +36 -0
  45. data/examples/tokyo-cabinet-experimental/xml/tcx.xml +6 -0
  46. data/lib/xampl-generator.rb +3 -0
  47. data/lib/xampl.rb +3 -0
  48. data/lib/xamplr-generator.rb +10 -0
  49. data/lib/xamplr.rb +37 -0
  50. data/lib/xamplr/README-POSSIBLE-PROBLEMS +5 -0
  51. data/lib/xamplr/TODO +1 -0
  52. data/lib/xamplr/exceptions.rb +97 -0
  53. data/lib/xamplr/from-xml-orig.rb +350 -0
  54. data/lib/xamplr/from-xml.rb +439 -0
  55. data/lib/xamplr/gen-elements.xml +6230 -0
  56. data/lib/xamplr/gen.elements.xml +108 -0
  57. data/lib/xamplr/generate-elements.rb +15 -0
  58. data/lib/xamplr/generator.rb +5 -0
  59. data/lib/xamplr/graphml-out.rb +470 -0
  60. data/lib/xamplr/handwritten/example.rb +698 -0
  61. data/lib/xamplr/handwritten/hand-example.rb +533 -0
  62. data/lib/xamplr/handwritten/test-handwritten.rb +873 -0
  63. data/lib/xamplr/indexed-array.rb +115 -0
  64. data/lib/xamplr/mixins.rb +397 -0
  65. data/lib/xamplr/my.gen.elements.xml +461 -0
  66. data/lib/xamplr/notifications.rb +57 -0
  67. data/lib/xamplr/obsolete/fsdb.rb +62 -0
  68. data/lib/xamplr/persist-to-xml.rb +249 -0
  69. data/lib/xamplr/persistence.rb +522 -0
  70. data/lib/xamplr/persistence.rb.more_thread_safe +771 -0
  71. data/lib/xamplr/persistence.rb.partially_thread_safe +763 -0
  72. data/lib/xamplr/persister.rb +310 -0
  73. data/lib/xamplr/persisters/caches.rb +186 -0
  74. data/lib/xamplr/persisters/caching.rb +172 -0
  75. data/lib/xamplr/persisters/filesystem.rb +60 -0
  76. data/lib/xamplr/persisters/in-memory.rb +180 -0
  77. data/lib/xamplr/persisters/simple.rb +59 -0
  78. data/lib/xamplr/persisters/tokyo-cabinet.rb +641 -0
  79. data/lib/xamplr/simpleTemplate/danger.rx +4 -0
  80. data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +35 -0
  81. data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +12 -0
  82. data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +20 -0
  83. data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +8 -0
  84. data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +13 -0
  85. data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +37 -0
  86. data/lib/xamplr/simpleTemplate/old/r6.000.rb +122 -0
  87. data/lib/xamplr/simpleTemplate/old/r6.001.rb +145 -0
  88. data/lib/xamplr/simpleTemplate/play.r6 +12 -0
  89. data/lib/xamplr/simpleTemplate/play_more.r6 +20 -0
  90. data/lib/xamplr/simpleTemplate/play_noblanks.r6 +21 -0
  91. data/lib/xamplr/simpleTemplate/playq.r6 +16 -0
  92. data/lib/xamplr/simpleTemplate/r6.rb +87 -0
  93. data/lib/xamplr/simpleTemplate/simple-template.rb +75 -0
  94. data/lib/xamplr/templates/child.template +47 -0
  95. data/lib/xamplr/templates/child_indexed.template +89 -0
  96. data/lib/xamplr/templates/child_modules.template +5 -0
  97. data/lib/xamplr/templates/element_classes.template +11 -0
  98. data/lib/xamplr/templates/element_data.template +282 -0
  99. data/lib/xamplr/templates/element_empty.template +285 -0
  100. data/lib/xamplr/templates/element_mixed.template +277 -0
  101. data/lib/xamplr/templates/element_simple.template +276 -0
  102. data/lib/xamplr/templates/package.template +26 -0
  103. data/lib/xamplr/test-support/Makefile +47 -0
  104. data/lib/xamplr/test-support/bench-cache.rb +80 -0
  105. data/lib/xamplr/test-support/bench-script.rb +21 -0
  106. data/lib/xamplr/test-support/bench.rb +116 -0
  107. data/lib/xamplr/test-support/bench2.rb +132 -0
  108. data/lib/xamplr/test-support/test-cache.rb +147 -0
  109. data/lib/xamplr/test-support/test-data/binding.xml +7 -0
  110. data/lib/xamplr/test-support/test-data/example.xml +14 -0
  111. data/lib/xamplr/test-support/test-data/internationalization-utf8.txt +1 -0
  112. data/lib/xamplr/test-support/test-data/labels.xml +37 -0
  113. data/lib/xamplr/test-support/test-data/labels001.xml +38 -0
  114. data/lib/xamplr/test-support/test-deep-change.rb +135 -0
  115. data/lib/xamplr/test-support/test-elements.rb +109 -0
  116. data/lib/xamplr/test-support/test-indexed-array.rb +169 -0
  117. data/lib/xamplr/test-support/test-misc.rb +73 -0
  118. data/lib/xamplr/test-support/test-names.rb +67 -0
  119. data/lib/xamplr/test-support/test-rollback.rb +106 -0
  120. data/lib/xamplr/test-support/test.rb +1504 -0
  121. data/lib/xamplr/to-ruby.rb +220 -0
  122. data/lib/xamplr/to-xml.rb +158 -0
  123. data/lib/xamplr/version.rb +67 -0
  124. data/lib/xamplr/visitor.rb +140 -0
  125. data/lib/xamplr/visitors.rb +573 -0
  126. data/lib/xamplr/xampl-generator.rb +533 -0
  127. data/lib/xamplr/xampl-hand-generated.rb +1535 -0
  128. data/lib/xamplr/xampl-module.rb +36 -0
  129. data/lib/xamplr/xampl-object-internals.rb +6 -0
  130. data/lib/xamplr/xampl-object.rb +202 -0
  131. data/lib/xamplr/xampl-persisted-object.rb +122 -0
  132. data/lib/xamplr/xml-text.rb +117 -0
  133. data/lib/xamplr/xml/document.xml +7 -0
  134. data/lib/xamplr/xml/elements.xml +101 -0
  135. data/lib/xamplr/xml/elements000.xml +73 -0
  136. data/lib/xamplr/xml/example.xml +23 -0
  137. data/lib/xamplr/xml/options.xml +12 -0
  138. data/lib/xamplr/xml/uche.xml +38 -0
  139. data/lib/xamplr/yEd-sample.graphml +300 -0
  140. data/test/test_helper.rb +10 -0
  141. data/test/xamplr_test.rb +7 -0
  142. metadata +245 -0
@@ -0,0 +1,36 @@
1
+
2
+ require "xamplr/persister"
3
+
4
+
5
+ module Xampl
6
+
7
+ @@xampl_extends_symbols = false
8
+
9
+ def Xampl.xampl_extends_symbols
10
+ @@xampl_extends_symbols
11
+ end
12
+
13
+ def Xampl.xampl_extends_symbols=(v)
14
+ @@xampl_extends_symbols = v
15
+
16
+ if @@xampl_extends_symbols then
17
+ Symbol.module_eval("include XamplExtensionsToRubyObjects")
18
+ end
19
+ end
20
+
21
+ class XamplLiteralRubyObject
22
+ def initialize(thing)
23
+ @thing = thing
24
+ end
25
+
26
+ def to_xml(out="")
27
+ out << @thing.to_s
28
+ end
29
+ end
30
+
31
+ module XamplExtensionsToRubyObjects
32
+ def to_xml(out="")
33
+ out << self.to_s
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,6 @@
1
+ module Xampl
2
+
3
+ module InvalidXampl
4
+ end
5
+
6
+ end
@@ -0,0 +1,202 @@
1
+
2
+ module Xampl
3
+
4
+ module XamplObject
5
+ attr_accessor :is_changed, :parents
6
+
7
+ @@preferred_ns_prefix = { "http://xampl.com/" => "xampl",
8
+ "http://xampl.com/generator" => "xampl-gen",
9
+ "http://www.w3.org/XML/1998/namespace" => "xml" }
10
+
11
+ def init_xampl_object
12
+ @parents = nil if not defined? @parents
13
+ @is_changed = false if not defined? @is_changed
14
+ end
15
+
16
+ def init_hook
17
+ end
18
+
19
+ def XamplObject.ns_preferred_prefix(ns, prefix)
20
+ @@preferred_ns_prefix[ns] = prefix unless @@preferred_ns_prefix.has_key?(ns)
21
+ end
22
+
23
+ def XamplObject.lookup_preferred_ns_prefix(ns)
24
+ @@preferred_ns_prefix[ns]
25
+ end
26
+
27
+ def persist_required
28
+ return false
29
+ end
30
+
31
+ def ignore_when_no_index
32
+ return false
33
+ end
34
+
35
+ def invalidate
36
+ self.note_invalidate
37
+ self.persister.uncache(self) if self.persister
38
+ self.extend InvalidXampl
39
+ end
40
+
41
+ def invalid
42
+ return kind_of?(InvalidXampl)
43
+ end
44
+
45
+ def changes_accepted
46
+ ResetIsChanged.new.start(self)
47
+ end
48
+
49
+ def changed
50
+ unless Xampl.persister then
51
+ raise UnmanagedChange.new(self)
52
+ end
53
+ unless @is_changed then
54
+ @is_changed = true
55
+ @parents.each{ | parent | parent.changed } if nil != @parents
56
+ end
57
+ end
58
+
59
+ def accessed
60
+ raise XamplIsInvalid.new(self) if invalid
61
+ end
62
+
63
+ def add_parent(xampl)
64
+ @parents = [] if (not defined? @parents) or (nil == @parents)
65
+ @parents << xampl
66
+ if Xampl.persister and self.persist_required and (nil == self.persister) then
67
+ Xampl.introduce_to_persister(self)
68
+ end
69
+ end
70
+
71
+ def init_attributes(attr_name, attr_namespace, attr_value)
72
+ return unless attr_name
73
+
74
+ attr_name.each_index do |i|
75
+ self.attributes.each do |attr_spec|
76
+ if (2 == attr_spec.size) then
77
+ if (attr_spec[1] == attr_name[i]) then
78
+ self.instance_variable_set(attr_spec[0], attr_value[i])
79
+ end
80
+ else
81
+ if ((attr_spec[1] == attr_name[i]) and (attr_spec[2] == attr_namespace[i])) then
82
+ self.instance_variable_set(attr_spec[0], attr_value[i])
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ def compare_xampl(other)
90
+ accessed
91
+ other.accessed if other
92
+ return false unless self.class == other.class
93
+ return false unless self.children.size == other.children.size
94
+ self.children.zip(other.children).each do |c1, c2|
95
+ return false unless c1.class == c2.class
96
+ if c1.kind_of? String then
97
+ return false unless c1 == c2
98
+ else
99
+ return false unless c1.compare_xampl(c2)
100
+ end
101
+ end
102
+ if (defined? self._content) and (defined? other._content) then
103
+ return false unless self._content == other._content
104
+ else
105
+ return false if (defined? self._content) or (defined? other._content)
106
+ end
107
+ return true
108
+ end
109
+
110
+ def ===(other)
111
+ accessed
112
+ other.accessed if other
113
+ return false unless self.class == other.class
114
+ return false unless self.children.size == other.children.size
115
+ self.children.zip(other.children).each do |c1, c2|
116
+ return false unless c1.class == c2.class
117
+ if c1.kind_of? String then
118
+ return false unless c1 == c2
119
+ else
120
+ return false unless c1 === c2
121
+ end
122
+ end
123
+ if (defined? self._content) and (defined? other._content) then
124
+ return false unless self._content == other._content
125
+ else
126
+ return false if (defined? self._content) or (defined? other._content)
127
+ end
128
+ return true
129
+ end
130
+
131
+ def to_ruby(mentions=nil)
132
+ accessed
133
+ return RubyPrinter.new(mentions).to_ruby(self)
134
+ end
135
+
136
+ module XamplRubyDefinition
137
+ @@proc = nil
138
+
139
+ def XamplRubyDefinition.build(target = nil)
140
+ xampl = nil
141
+ if @@proc then
142
+ local_proc = @@proc
143
+ @@proc = nil
144
+ xampl = local_proc.call(target)
145
+ @@proc = nil
146
+ else
147
+ xampl = XamplRubyDefinition.build_it(target)
148
+ end
149
+
150
+ return xampl
151
+ end
152
+
153
+ def build_it
154
+ nil
155
+ end
156
+ end
157
+
158
+ def XamplObject.from_string(string, target=nil)
159
+ return FromXML.new.parse_string(string, true, false, target)
160
+
161
+ # if '<' == string[0] then
162
+ # puts "XO.from_string XML ------------------------------------------------------"
163
+ # return FromXML.new.parse_string(string, true, false, target)
164
+ # else
165
+ # puts "XO.from_string RUBY ------------------------------------------------------"
166
+ # return XamplObject.from_ruby(string, target)
167
+ # end
168
+ end
169
+
170
+ def XamplObject.recover_from_string(string)
171
+ # return FromXML.new.realise_string(string)
172
+ return FromXML.new(true).parse_string(string, true, false, nil)
173
+ end
174
+
175
+ def XamplObject.from_ruby(ruby_string, target=nil)
176
+ eval(ruby_string, nil, "ruby_definition", 0)
177
+ target.load_needed = false if target
178
+ xampl = XamplRubyDefinition.build(target)
179
+ end
180
+
181
+ def persist(out="", mentions=nil, rules=nil)
182
+ persist_xml_new = PersistXML.new(out, mentions)
183
+ return persist_xml_new.start(self).done
184
+ end
185
+
186
+ def XamplObject.realise_from_xml_string(xml_string, target=nil, tokenise=true)
187
+ xampl = FromXML.new.realise_string(xml_string, tokenise, target)
188
+ return xampl
189
+ end
190
+
191
+ def XamplObject.from_xml_string(xml_string, tokenise=true)
192
+ return FromXML.new.parse_string(xml_string, tokenise)
193
+ end
194
+
195
+ def XamplObject.from_xml_file(file_name, tokenise=true)
196
+ return FromXML.new.parse(file_name, tokenise)
197
+ end
198
+ end
199
+
200
+
201
+ end
202
+
@@ -0,0 +1,122 @@
1
+ module Xampl
2
+
3
+ module XamplPersistedObject
4
+ include XamplObject
5
+
6
+ attr_reader :persister
7
+ attr_accessor :load_needed
8
+
9
+ def persist_required
10
+ return true
11
+ end
12
+
13
+ def accessed
14
+ raise XamplIsInvalid.new(self) if invalid
15
+ # TODO -- why do I need to get rid of this line, alternatively, why
16
+ # is this next line even there? Well, because accessed is now called
17
+ # differently. But???
18
+ #raise NoActivePersister unless @persister
19
+
20
+ if @load_needed and @persister then
21
+ raise NoActivePersister.new unless @persister
22
+
23
+ if nil == Xampl.persister then
24
+ #raise UnmanagedChange.new(self)
25
+ if not @persister.syncing then
26
+ Xampl.read_only(@persister) do
27
+ Xampl.lazy_load(self)
28
+ end
29
+ else
30
+ puts "LOAD NEEDED(2): REFUSED (persister: #{@persister.name})"
31
+ puts " pid: #{self.get_the_index} #{self}"
32
+ caller(0).each { | trace | puts " #{trace}"}
33
+ end
34
+ elsif Xampl.persister != @persister then
35
+ raise MixedPersisters.new(@persister, self)
36
+ elsif Xampl.persister == @persister then
37
+ if not @persister.syncing then
38
+ Xampl.lazy_load(self)
39
+ else
40
+ puts "LOAD NEEDED(3): REFUSED (persister: #{@persister.name})"
41
+ puts " pid: #{self.get_the_index} #{self}"
42
+ caller(0).each { | trace | puts " #{trace}"}
43
+ end
44
+ else
45
+ puts "LOAD NEEDED(4): REFUSED (persister: #{@persister.name})"
46
+ puts " pid: #{self.get_the_index} #{self}"
47
+ caller(0).each { | trace | puts " #{trace}"}
48
+ end
49
+ else
50
+ puts "LOAD NEEDED(5): REFUSED (persister: #{@persister})" if @load_needed
51
+ puts " pid: #{self.get_the_index} #{self}" if @load_needed
52
+ caller(0).each { | trace | puts " #{trace}"} if @load_needed
53
+ end
54
+ end
55
+
56
+ def changed
57
+ #puts "CHANGED: is_changed #{@is_changed} xampl #{self}"
58
+ unless Xampl.persister then
59
+ raise UnmanagedChange.new(self)
60
+ end
61
+ if @persister then
62
+ if Xampl.persister != @persister then
63
+ raise UnmanagedChange.new(self)
64
+ end
65
+ if @persister.block_changes then
66
+ raise BlockedChange.new(self)
67
+ end
68
+ end
69
+ unless @is_changed then
70
+ @is_changed = true
71
+ if @persister then
72
+ @persister.has_changed self
73
+ end
74
+ end
75
+ end
76
+
77
+ def force_load
78
+ @load_needed = true
79
+ @is_changed = false
80
+ @persister.has_not_changed(self) if @persister
81
+ self.clear_non_persistent_index_attributes
82
+ methods = self.methods.grep(/init_.*_as_child/)
83
+ methods.each do |method_name|
84
+ self.send(method_name)
85
+ end
86
+ @children = []
87
+ end
88
+
89
+ def reset_contents
90
+ self.clear_non_persistent_index_attributes
91
+ self.methods.grep(/init_.*_as_child/).each do |method_name|
92
+ self.send(method_name)
93
+ end
94
+ @children = []
95
+ end
96
+
97
+ def introduce_persister(persister)
98
+ #accessed
99
+ if @persister and (@persister != persister) then
100
+ raise AlreadyKnownToPersister.new(self, persister)
101
+ end
102
+ @persister = persister
103
+ return true
104
+ end
105
+
106
+ def init_xampl_object
107
+ super
108
+ @persister = nil
109
+ @load_needed = false
110
+ if (Xampl.persister and Xampl.persister.automatic) then
111
+ Xampl.persister.introduce(self)
112
+ else
113
+ introduce_persister(nil)
114
+ end
115
+ end
116
+
117
+ def describe_yourself
118
+ nil
119
+ end
120
+ end
121
+
122
+ end
@@ -0,0 +1,117 @@
1
+ module Xampl
2
+
3
+ class XMLText
4
+ attr_accessor :namespaces, :prefix_ns_map, :ns, :first_text, :text
5
+
6
+ def initialize
7
+ @namespaces = []
8
+ @prefix_ns_map = {}
9
+ @first_text = nil
10
+ @text = nil
11
+ @ns = nil
12
+ end
13
+
14
+ def start_element(pp, depth)
15
+ @namespaces = {}
16
+ @namespaces[pp.namespace] = pp.namespace
17
+
18
+ depth += 1
19
+
20
+ if @first_text then
21
+ @text << "<" << pp.qname
22
+
23
+ pp.attributeCount.times do |i|
24
+ @text << " " << pp.attributeQName(i) << "='" << pp.attributeValue(i) << "'"
25
+
26
+ prefix = pp.attributePrefix(i)
27
+ if prefix then
28
+ @prefix_ns_map[prefix] = pp.attributeNamespace(i)
29
+ end
30
+ end
31
+ else
32
+ @first_text = "<" << pp.qname
33
+
34
+ pp.attributeCount.times do |i|
35
+ @first_text << " " << pp.attributeQName(i) << "='" << pp.attributeValue(i) << "'"
36
+
37
+ prefix = pp.attributePrefix(i)
38
+ if prefix then
39
+ @prefix_ns_map[prefix] = pp.attributeNamespace(i)
40
+ end
41
+ end
42
+ @text = ""
43
+ end
44
+
45
+ prefix = pp.prefix
46
+ if prefix then
47
+ @prefix_ns_map[prefix] = pp.namespace
48
+ end
49
+
50
+ if @ns != pp.namespace then
51
+ @text << " xmlns='" << pp.namespace << "'"
52
+ end
53
+
54
+ @text << ">"
55
+
56
+ return depth
57
+ end
58
+
59
+ def end_element(pp, depth)
60
+ depth -= 1
61
+
62
+ @text << "</"
63
+ @text << pp.prefix << ":" if pp.prefix
64
+ @text << pp.name << ">"
65
+
66
+ return depth
67
+ end
68
+
69
+ def to_s
70
+ @text
71
+ end
72
+
73
+ def to_xml(xml_printer=nil)
74
+ @text
75
+ end
76
+
77
+ def build(pp)
78
+ @namespaces = {}
79
+ @first_text = nil
80
+ @text = nil
81
+
82
+ depth = start_element(pp, 0)
83
+
84
+ while true
85
+ raise XamplException.new("unexpected end of document") if pp.endDocument?
86
+
87
+ case pp.nextEvent
88
+ when Xampl_PP::START_DOCUMENT
89
+ raise XamplException.new("unexpected start of document")
90
+ when Xampl_PP::END_DOCUMENT
91
+ raise XamplException.new("unexpected end of document")
92
+ when Xampl_PP::START_ELEMENT
93
+ depth = start_element(pp, depth)
94
+ when Xampl_PP::END_ELEMENT
95
+ depth = end_element(pp, depth)
96
+ break if depth <= 0
97
+ when Xampl_PP::TEXT, Xampl_PP::CDATA_SECTION, Xampl_PP::ENTITY_REF
98
+ @text << pp.text
99
+ #when Xampl_PP::IGNORABLE_WHITESPACE
100
+ #when Xampl_PP::PROCESSING_INSTRUCTION
101
+ #when Xampl_PP::COMMENT
102
+ #when Xampl_PP::DOCTYPE
103
+ end
104
+ end
105
+
106
+ @namespaces = @namespaces.keys
107
+
108
+ @prefix_ns_map.sort.each do |prefix, ns|
109
+ @first_text << " xmlns:" << prefix << "='" << ns << "'"
110
+ end
111
+ @first_text << @text
112
+ @text = @first_text
113
+ @first_text = nil
114
+ end
115
+ end
116
+
117
+ end