115: def << object
116:
117: t, x = top, object
118:
119: if x
120: case t
121: when ::REXML::Document
122:
123: begin
124: t <<
125: case x
126: when ::REXML::Document
127: x.root || ::REXML::Text::new(x.to_s)
128: when ::REXML::Element
129: x
130: when ::REXML::CData
131: x
132: when ::REXML::Text
133: x
134: else
135: ::REXML::Text::new(x.to_s)
136: end
137: rescue
138: if t.respond_to? "root"
139: t = t.root
140: retry
141: else
142: raise
143: end
144: end
145:
146: when ::REXML::Element
147: t <<
148: case x
149: when ::REXML::Document
150: x.root || ::REXML::Text::new(x.to_s)
151: when ::REXML::Element
152: x
153: when ::REXML::CData
154:
155: x
156: when ::REXML::Text
157: x
158: else
159: ::REXML::Text::new(x.to_s)
160: end
161:
162: when ::REXML::Text
163: t <<
164: case x
165: when ::REXML::Document
166: x.write ""
167: when ::REXML::Element
168: x.write ""
169: when ::REXML::CData
170: x.write ""
171: when ::REXML::Text
172: x.write ""
173: else
174: x.to_s
175: end
176:
177: else
178: t <<
179: case x
180: when ::REXML::Document
181: x.write ""
182: when ::REXML::Element
183: x.write ""
184: when ::REXML::CData
185: x.write ""
186: when ::REXML::Text
187: x.write ""
188: else
189: x.to_s
190: end
191: end
192: end
193:
194: @size += 1
195: self
196:
197: end