283: def xx_with_doc_in_effect *a, &b
284:
285: @xx_docs ||= []
286: doc = ::XX::Document::new(*a)
287: ddoc = doc.doc
288: begin
289: @xx_docs.push doc
290: b.call doc if b
291:
292: doctype = xx_config_for "doctype", xx_which
293: if doctype
294: unless ddoc.doctype
295: doctype = ::REXML::DocType::new doctype unless
296: ::REXML::DocType === doctype
297: ddoc << doctype
298: end
299: end
300:
301: xmldecl = xx_config_for "xmldecl", xx_which
302: if xmldecl
303: if ddoc.xml_decl == ::REXML::XMLDecl::default
304: xmldecl = ::REXML::XMLDecl::new xmldecl unless
305: ::REXML::XMLDecl === xmldecl
306: ddoc << xmldecl
307: end
308: end
309:
310: return doc
311: ensure
312: @xx_docs.pop
313: end
314:
315: end