summaryrefslogtreecommitdiff
path: root/test/rexml
diff options
context:
space:
mode:
Diffstat (limited to 'test/rexml')
-rw-r--r--test/rexml/data/LostineRiver.kml.gzbin0 -> 50154 bytes
-rw-r--r--test/rexml/data/ProductionSupport.xml29
-rw-r--r--test/rexml/data/axis.xml25
-rw-r--r--test/rexml/data/bad.xml5
-rw-r--r--test/rexml/data/basic.xml11
-rw-r--r--test/rexml/data/basicupdate.xml47
-rw-r--r--test/rexml/data/broken.rss20
-rw-r--r--test/rexml/data/contents.xml70
-rw-r--r--test/rexml/data/dash.xml12
-rw-r--r--test/rexml/data/defaultNamespace.xml6
-rw-r--r--test/rexml/data/doctype_test.xml34
-rw-r--r--test/rexml/data/documentation.xml542
-rw-r--r--test/rexml/data/euc.xml296
-rw-r--r--test/rexml/data/evaluate.xml28
-rw-r--r--test/rexml/data/fibo.xml29
-rw-r--r--test/rexml/data/foo.xml10
-rw-r--r--test/rexml/data/google.2.xml156
-rw-r--r--test/rexml/data/id.xml21
-rw-r--r--test/rexml/data/iso8859-1.xml4
-rw-r--r--test/rexml/data/jaxen24.xml2
-rw-r--r--test/rexml/data/jaxen3.xml15
-rw-r--r--test/rexml/data/lang.xml11
-rw-r--r--test/rexml/data/lang0.xml18
-rw-r--r--test/rexml/data/message.xml27
-rw-r--r--test/rexml/data/moreover.xml244
-rw-r--r--test/rexml/data/much_ado.xml6850
-rw-r--r--test/rexml/data/namespaces.xml18
-rw-r--r--test/rexml/data/nitf.xml67
-rw-r--r--test/rexml/data/numbers.xml18
-rw-r--r--test/rexml/data/ofbiz-issues-full-177.xml13971
-rw-r--r--test/rexml/data/pi.xml13
-rw-r--r--test/rexml/data/pi2.xml6
-rw-r--r--test/rexml/data/project.xml1
-rw-r--r--test/rexml/data/simple.xml2
-rw-r--r--test/rexml/data/stream_accents.xml4
-rw-r--r--test/rexml/data/t63-1.xmlbin0 -> 161690 bytes
-rw-r--r--test/rexml/data/t63-2.svg2828
-rw-r--r--test/rexml/data/t75.xml31
-rw-r--r--test/rexml/data/test/tests.xml683
-rw-r--r--test/rexml/data/test/tests.xsl369
-rw-r--r--test/rexml/data/testNamespaces.xml22
-rw-r--r--test/rexml/data/testsrc.xml64
-rw-r--r--test/rexml/data/text.xml10
-rw-r--r--test/rexml/data/ticket_110_utf16.xmlbin0 -> 207464 bytes
-rw-r--r--test/rexml/data/ticket_61.xml4
-rw-r--r--test/rexml/data/ticket_68.xml590
-rw-r--r--test/rexml/data/tutorial.xml678
-rw-r--r--test/rexml/data/underscore.xml6
-rw-r--r--test/rexml/data/web.xml42
-rw-r--r--test/rexml/data/web2.xml7
-rw-r--r--test/rexml/data/working.rss202
-rw-r--r--test/rexml/data/xmlfile-bug.xml15
-rw-r--r--test/rexml/data/xp.tst27
-rw-r--r--test/rexml/data/yahoo.xml80
-rw-r--r--test/rexml/listener.rb50
-rw-r--r--test/rexml/test_attributes.rb198
-rw-r--r--test/rexml/test_attributes_mixin.rb34
-rw-r--r--test/rexml/test_changing_encoding.rb46
-rw-r--r--test/rexml/test_contrib.rb581
-rw-r--r--test/rexml/test_core.rb1382
-rw-r--r--test/rexml/test_doctype_mixin.rb67
-rw-r--r--test/rexml/test_elements.rb107
-rw-r--r--test/rexml/test_encoding.rb92
-rw-r--r--test/rexml/test_encoding_2.rb59
-rw-r--r--test/rexml/test_entity.rb148
-rw-r--r--test/rexml/test_functions.rb223
-rw-r--r--test/rexml/test_functions_number.rb32
-rw-r--r--test/rexml/test_jaxen.rb126
-rw-r--r--test/rexml/test_light.rb101
-rw-r--r--test/rexml/test_lightparser.rb11
-rw-r--r--test/rexml/test_listener.rb207
-rw-r--r--test/rexml/test_martin_fowler.rb38
-rw-r--r--test/rexml/test_notationdecl_mixin.rb58
-rw-r--r--test/rexml/test_notationdecl_parsetest.rb23
-rw-r--r--test/rexml/test_order.rb101
-rw-r--r--test/rexml/test_preceding_sibling.rb40
-rw-r--r--test/rexml/test_pullparser.rb100
-rw-r--r--test/rexml/test_rexml_issuezilla.rb15
-rw-r--r--test/rexml/test_sax.rb286
-rw-r--r--test/rexml/test_stream.rb104
-rw-r--r--test/rexml/test_ticket_80.rb56
-rw-r--r--test/rexml/test_validation_rng.rb790
-rw-r--r--test/rexml/test_xml_declaration_parent_child.rb33
-rw-r--r--test/rexml/test_xpath.rb1055
-rw-r--r--test/rexml/test_xpath_attribute_query.rb89
-rw-r--r--test/rexml/test_xpath_msw.rb42
-rw-r--r--test/rexml/test_xpath_pred.rb80
-rw-r--r--test/rexml/test_xpathtext.rb72
88 files changed, 34716 insertions, 0 deletions
diff --git a/test/rexml/data/LostineRiver.kml.gz b/test/rexml/data/LostineRiver.kml.gz
new file mode 100644
index 0000000000..68a00c51db
--- /dev/null
+++ b/test/rexml/data/LostineRiver.kml.gz
Binary files differ
diff --git a/test/rexml/data/ProductionSupport.xml b/test/rexml/data/ProductionSupport.xml
new file mode 100644
index 0000000000..083cf64a6e
--- /dev/null
+++ b/test/rexml/data/ProductionSupport.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+<ProductionSupport version="1.1" >
+ <Errors>
+ <CommonErrors>
+ <CommonError>
+ <Key><![CDATA[RoyUpdatePolicyBusReq(Object)>>#error:]]></Key>
+ <Patterns>
+ <Pattern><![CDATA[The error code is '9997']]></Pattern>
+ </Patterns>
+ <Message>
+ <String>Update Policy request 9997: Please check CICS log</String>
+ </Message>
+ <BackendSupport/>
+ </CommonError>
+ <CommonError>
+ <Key>MotorInsuranceContract(Object)>>#error:</Key>
+ <Patterns>
+ <Pattern>Have not got a complete</Pattern>
+ </Patterns>
+ <Message>
+ <String>Have not got a complete and consistent set of price matrices for policy period - ask back-end prod supp to sort out</String>
+ </Message>
+ <BackendSupport/>
+ </CommonError>
+</CommonErrors>
+</Errors>
+</ProductionSupport>
diff --git a/test/rexml/data/axis.xml b/test/rexml/data/axis.xml
new file mode 100644
index 0000000000..bc996c571d
--- /dev/null
+++ b/test/rexml/data/axis.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+
+<root>
+
+ <a>
+ <a.1/>
+ <a.2/>
+ <a.3/>
+ <a.4/>
+ <a.5/>
+ </a>
+
+ <b>
+ <b.1/>
+ <b.2/>
+ <b.3/>
+ <b.4/>
+ <b.5/>
+ <b.6/>
+ <b.7/>
+ <b.8/>
+ <b.9/>
+ </b>
+
+</root>
diff --git a/test/rexml/data/bad.xml b/test/rexml/data/bad.xml
new file mode 100644
index 0000000000..18786f2b43
--- /dev/null
+++ b/test/rexml/data/bad.xml
@@ -0,0 +1,5 @@
+<a>
+ Here is an XML document.
+ <b>
+ It has some elements, but it also has a hidden < error! (or two)
+ </a>
diff --git a/test/rexml/data/basic.xml b/test/rexml/data/basic.xml
new file mode 100644
index 0000000000..88385fb6e1
--- /dev/null
+++ b/test/rexml/data/basic.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<foo>
+ <bar>
+ <baz/>
+ <cheese/>
+ <baz/>
+ <cheese/>
+ <baz/>
+ </bar>
+</foo>
diff --git a/test/rexml/data/basicupdate.xml b/test/rexml/data/basicupdate.xml
new file mode 100644
index 0000000000..57d458cf2a
--- /dev/null
+++ b/test/rexml/data/basicupdate.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<xu:modifications xmlns:xu="http://www.xmldb.org/xupdate">
+
+ <xu:append select="/foo/bar/cheese[1]">
+ Goudse kaas
+ <edam type="jong belegen">Rond</edam>
+ </xu:append>
+
+ <xu:remove select="/foo/bar/baz[2]"/>
+
+ <xu:if test="/foo">
+ <xu:insert-before select="/foo/bar/baz[2]">
+ <cheese>More cheese!</cheese>
+ </xu:insert-before>
+ </xu:if>
+
+ <xu:insert-before select="/foo/bar/baz[2]">
+ <cheese>Even more cheese!</cheese>
+ </xu:insert-before>
+
+ <xu:if test="/bar">
+ <xu:insert-before select="/foo/bar/baz[2]">
+ <sausages>No sausages today</sausages>
+ </xu:insert-before>
+ </xu:if>
+
+ <xu:variable
+ xmlns:private="http://www.jaxen.org/private"
+ name="private:twice">
+ <cracker/>
+ <!-- champagne -->
+ <?oisters with a bit of lemon?>
+ </xu:variable>
+
+ <xu:variable name="twice" select="'Twice'"/>
+
+ <xu:insert-after
+ select="/foo/bar"
+ xmlns:private="http://www.jaxen.org/private"
+ >
+ <xu:value-of select="$private:twice"/>
+ <xu:value-of select="$private:twice"/>
+ <xu:value-of select="$twice"/>
+ </xu:insert-after>
+
+</xu:modifications>
diff --git a/test/rexml/data/broken.rss b/test/rexml/data/broken.rss
new file mode 100644
index 0000000000..d5f29e5d1f
--- /dev/null
+++ b/test/rexml/data/broken.rss
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE rdf:RDF [
+ <!ENTITY % HTMLlat1 PUBLIC
+ "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
+ %HTMLlat1;
+]>
+
+<rdf:RDF
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:on="http://www.oreillynet.com/csrss/"
+ xmlns="http://purl.org/rss/1.0/"
+>
+
+ <channel rdf:about="http://www.oreillynet.com/">
+ <title>O'Reilly Network Articles</title>
+ <link>http://www.oreillynet.com/</link>
+ </channel>
+</rdf:RDF>
diff --git a/test/rexml/data/contents.xml b/test/rexml/data/contents.xml
new file mode 100644
index 0000000000..35e3ac7044
--- /dev/null
+++ b/test/rexml/data/contents.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+
+<?xml-stylesheet href="XSL\JavaXML.html.xsl" type="text/xsl"?>
+<?xml-stylesheet href="XSL\JavaXML.wml.xsl" type="text/xsl"
+ media="wap"?>
+<?cocoon-process type="xslt"?>
+
+<!-- Java and XML -->
+<JavaXML:Book xmlns:JavaXML="http://www.oreilly.com/catalog/javaxml/"
+ xmlns:ora="http://www.oreilly.com"
+ xmlns:unused="http://www.unused.com"
+ ora:category="Java"
+>
+ <!-- comment one -->
+ <!-- comment two -->
+
+ <JavaXML:Title>Java and XML</JavaXML:Title>
+ <JavaXML:Contents xmlns:topic="http://www.oreilly.com/topics">
+ <JavaXML:Chapter topic:focus="XML">
+ <JavaXML:Heading>Introduction</JavaXML:Heading>
+ <JavaXML:Topic subSections="7">
+ What Is It?
+ </JavaXML:Topic>
+ <JavaXML:Topic subSections="3">
+ How Do I Use It?
+ </JavaXML:Topic>
+ <JavaXML:Topic subSections="4">
+ Why Should I Use It?
+ </JavaXML:Topic>
+ <JavaXML:Topic subSections="0">
+ What's Next?
+ </JavaXML:Topic>
+ </JavaXML:Chapter>
+
+ <JavaXML:Chapter topic:focus="XML">
+ <JavaXML:Heading>Creating XML</JavaXML:Heading>
+ <JavaXML:Topic subSections="0">An XML Document</JavaXML:Topic>
+ <JavaXML:Topic subSections="2">The Header</JavaXML:Topic>
+ <JavaXML:Topic subSections="6">The Content</JavaXML:Topic>
+ <JavaXML:Topic subSections="1">What's Next?</JavaXML:Topic>
+ </JavaXML:Chapter>
+
+ <JavaXML:Chapter topic:focus="Java">
+ <JavaXML:Heading>Parsing XML</JavaXML:Heading>
+ <JavaXML:Topic subSections="3">Getting Prepared</JavaXML:Topic>
+ <JavaXML:Topic subSections="3">SAX Readers</JavaXML:Topic>
+ <JavaXML:Topic subSections="9">Content Handlers</JavaXML:Topic>
+ <JavaXML:Topic subSections="4">Error Handlers</JavaXML:Topic>
+ <JavaXML:Topic subSections="0">
+ A Better Way to Load a Parser
+ </JavaXML:Topic>
+ <JavaXML:Topic subSections="4">"Gotcha!"</JavaXML:Topic>
+ <JavaXML:Topic subSections="0">What's Next?</JavaXML:Topic>
+ </JavaXML:Chapter>
+
+ <JavaXML:SectionBreak/>
+
+ <JavaXML:Chapter topic:focus="Java">
+ <JavaXML:Heading>Web Publishing Frameworks</JavaXML:Heading>
+ <JavaXML:Topic subSections="4">Selecting a Framework</JavaXML:Topic>
+ <JavaXML:Topic subSections="4">Installation</JavaXML:Topic>
+ <JavaXML:Topic subSections="3">
+ Using a Publishing Framework
+ </JavaXML:Topic>
+ <JavaXML:Topic subSections="2">XSP</JavaXML:Topic>
+ <JavaXML:Topic subSections="3">Cocoon 2.0 and Beyond</JavaXML:Topic>
+ <JavaXML:Topic subSections="0">What's Next?</JavaXML:Topic>
+ </JavaXML:Chapter>
+ </JavaXML:Contents>
+</JavaXML:Book>
diff --git a/test/rexml/data/dash.xml b/test/rexml/data/dash.xml
new file mode 100644
index 0000000000..e1be655750
--- /dev/null
+++ b/test/rexml/data/dash.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<content-repository>
+ <content-repository-child-1>
+ <content-1>content-1-text</content-1>
+ </content-repository-child-1>
+ <content-repository-child-2>
+ <content-2>content-2-text</content-2>
+ </content-repository-child-2>
+ <content-repository-child-3>
+ <content-3>content-3-text</content-3>
+ </content-repository-child-3>
+</content-repository>
diff --git a/test/rexml/data/defaultNamespace.xml b/test/rexml/data/defaultNamespace.xml
new file mode 100644
index 0000000000..1e32981506
--- /dev/null
+++ b/test/rexml/data/defaultNamespace.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<a xmlns="http://dummyNamespace/">
+ <b>
+ <c>Hello</c>
+ </b>
+</a>
diff --git a/test/rexml/data/doctype_test.xml b/test/rexml/data/doctype_test.xml
new file mode 100644
index 0000000000..a690cab99d
--- /dev/null
+++ b/test/rexml/data/doctype_test.xml
@@ -0,0 +1,34 @@
+<!DOCTYPE internationalization SYSTEM "l10n.dtd" [
+<!ENTITY af SYSTEM "af.xml">
+<!ENTITY ca SYSTEM "ca.xml">
+<!ENTITY cs SYSTEM "cs.xml">
+<!ENTITY da SYSTEM "da.xml">
+<!ENTITY de SYSTEM "de.xml">
+<!ENTITY el SYSTEM "el.xml">
+<!ENTITY en SYSTEM "en.xml">
+<!ENTITY es SYSTEM "es.xml">
+<!ENTITY et SYSTEM "et.xml">
+<!ENTITY fi SYSTEM "fi.xml">
+<!ENTITY fr SYSTEM "fr.xml">
+<!ENTITY hu SYSTEM "hu.xml">
+<!ENTITY id SYSTEM "id.xml">
+<!ENTITY it SYSTEM "it.xml">
+<!ENTITY ja SYSTEM "ja.xml">
+<!ENTITY ko SYSTEM "ko.xml">
+<!ENTITY nl SYSTEM "nl.xml">
+<!ENTITY no SYSTEM "no.xml">
+<!ENTITY no_ny SYSTEM "no_ny.xml">
+<!ENTITY pl SYSTEM "pl.xml">
+<!ENTITY pt SYSTEM "pt.xml">
+<!ENTITY pt_br SYSTEM "pt_br.xml">
+<!ENTITY ro SYSTEM "ro.xml">
+<!ENTITY ru SYSTEM "ru.xml">
+<!ENTITY sk SYSTEM "sk.xml">
+<!ENTITY sl SYSTEM "sl.xml">
+<!ENTITY sr SYSTEM "sr.xml">
+<!ENTITY sv SYSTEM "sv.xml">
+<!ENTITY tr SYSTEM "tr.xml">
+<!ENTITY zh_cn SYSTEM "zh_cn.xml">
+<!ENTITY zh_tw SYSTEM "zh_tw.xml">
+]>
+<x/>
diff --git a/test/rexml/data/documentation.xml b/test/rexml/data/documentation.xml
new file mode 100644
index 0000000000..a1ad6e878b
--- /dev/null
+++ b/test/rexml/data/documentation.xml
@@ -0,0 +1,542 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/css" href="http://www.germane-software.com/repositories/public/documentation/documentation.css"?>
+<?xml-stylesheet alternative="yes" type="text/css" href="file:/home/ser/Work/documentation/documentation.css"?>
+<?xml-stylesheet alternative="yes" type="text/xsl" href="http://www.germane-software.com/repositories/public/documentation/paged.xsl"?>
+<!DOCTYPE documentation SYSTEM "http://www.germane-software.com/repositories/public/documentation/documentation.dtd">
+<documentation>
+ <head>
+ <title>REXML</title>
+
+ <banner href="img/rexml.png" />
+
+ <version>@ANT_VERSION@</version>
+
+ <date>@ANT_DATE@</date>
+
+ <home>http://www.germane-software.com/software/rexml</home>
+
+ <base>rexml</base>
+
+ <language>ruby</language>
+
+ <author email="ser@germane-software.com"
+ href="http://www.ser1.net/" jabber="seanerussell@gmail.com">Sean
+ Russell</author>
+ </head>
+
+ <overview>
+ <purpose lang="en">
+ <p>REXML is a conformant XML processor for the Ruby programming
+ language. REXML passes 100% of the Oasis non-validating tests and
+ includes full XPath support. It is reasonably fast, and is implemented
+ in pure Ruby. Best of all, it has a clean, intuitive API. REXML is
+ included in the standard library of Ruby</p>
+
+ <p>This software is distribute under the <link href="LICENSE.txt">Ruby
+ license</link>.</p>
+ </purpose>
+
+ <general>
+ <p>REXML arose out of a desire for a straightforward XML API, and is an
+ attempt at an API that doesn't require constant referencing of
+ documentation to do common tasks. "Keep the common case simple, and the
+ uncommon, possible."</p>
+
+ <p>REXML avoids The DOM API, which violates the maxim of simplicity. It
+ does provide <em>a</em> DOM model, but one that is Ruby-ized. It is an
+ XML API oriented for Ruby programmers, not for XML programmers coming
+ from Java.</p>
+
+ <p>Some of the common differences are that the Ruby API relies on block
+ enumerations, rather than iterators. For example, the Java code:</p>
+
+ <example>for (Enumeration e=parent.getChildren(); e.hasMoreElements(); ) {
+ Element child = (Element)e.nextElement(); // Do something with child
+}</example>
+
+ <p>in Ruby becomes:</p>
+
+ <example>parent.each_child{ |child| # Do something with child }</example>
+
+ <p>Can't you feel the peace and contentment in this block of code? Ruby
+ is the language Buddha would have programmed in.</p>
+
+ <p>One last thing. If you use and like this software, and you're in a
+ position of power in a company in Western Europe and are looking for a
+ software architect or developer, drop me a line. I took a lot of French
+ classes in college (all of which I've forgotten), and I lived in Munich
+ long enough that I was pretty fluent by the time I left, and I'd love to
+ get back over there.</p>
+ </general>
+
+ <features lang="en">
+ <item>Four intuitive parsing APIs.</item>
+
+ <item>Intuitive, powerful, and reasonably fast tree parsing API (a-la
+ DOM</item>
+
+ <item>Fast stream parsing API (a-la SAX)<footnote>This is not a SAX
+ API.</footnote></item>
+
+ <item>SAX2-based API<footnote>In addition to the native REXML streaming
+ API. This is slower than the native REXML API, but does a lot more work
+ for you.</footnote></item>
+
+ <item>Pull parsing API.</item>
+
+ <item>Small</item>
+
+ <item>Reasonably fast (for interpreted code)</item>
+
+ <item>Native Ruby</item>
+
+ <item>Full XPath support<footnote>Currently only available for the tree
+ API</footnote></item>
+
+ <item>XML 1.0 conformant<footnote>REXML passes all of the non-validating
+ OASIS tests. There are probably places where REXML isn't conformant, but
+ I try to fix them as they're reported.</footnote></item>
+
+ <item>ISO-8859-1, UNILE, UTF-16 and UTF-8 input and output; also,
+ support for any encoding the iconv supports.</item>
+
+ <item>Documentation</item>
+ </features>
+ </overview>
+
+ <operation lang="en">
+ <subsection title="Installation">
+ <p>You don't <em>have</em> to install anything; if you're running a
+ version of Ruby greater than 1.8, REXML is included. However, if you
+ choose to upgrade from the REXML distribution, run the command:
+ <code>ruby bin/install.rb</code>. By the way, you really should look at
+ these sorts of files before you run them as root. They could contain
+ anything, and since (in Ruby, at least) they tend to be mercifully
+ short, it doesn't hurt to glance over them. If you want to uninstall
+ REXML, run <code>ruby bin/install.rb -u</code>.</p>
+ </subsection>
+
+ <subsection title="Unit tests">
+ <p>If you have Test::Unit installed, you can run the unit test cases.
+ Run the command: <code>ruby bin/suite.rb</code>; it runs against the
+ distribution, not against the installed version.</p>
+ </subsection>
+
+ <subsection title="Benchmarks">
+ <p>There is a benchmark suite in <code>benchmarks/</code>. To run the
+ benchmarks, change into that directory and run <code>ruby
+ comparison.rb</code>. If you have nothing else installed, only the
+ benchmarks for REXML will be run. However, if you have any of the
+ following installed, benchmarks for those tools will also be run:</p>
+
+ <list>
+ <item>NQXML</item>
+
+ <item>XMLParser</item>
+
+ <item>Electric XML (you must copy <code>EXML.jar</code> into the
+ <code>benchmarks</code> directory and compile
+ <code>flatbench.java</code> before running the test)</item>
+ </list>
+
+ <p>The results will be written to <code>index.html</code>.</p>
+ </subsection>
+
+ <subsection title="General Usage">
+ <p>Please see <link href="docs/tutorial.html">the Tutorial</link>.</p>
+
+ <p>The API documentation is available <link
+ href="http://www.germane-software.com/software/XML/rexml/doc">on-line</link>,
+ or it can be downloaded as an archive <link
+ href="http://www.germane-software.com/software/archives/rexml_api_@ANT_VERSION@.tgz">in
+ tgz format (~70Kb)</link> or (if you're a masochist) <link
+ href="http://www.germane-software.com/software/archives/rexml_api_@ANT_VERSION@.zip">in
+ zip format (~280Kb)</link>. The best solution is to download and install
+ Dave Thomas' most excellent <link
+ href="http://rdoc.sourceforge.net">rdoc</link> and generate the API docs
+ yourself; then you'll be sure to have the latest API docs and won't have
+ to keep downloading the doc archive.</p>
+
+ <p>The unit tests in <code>test/</code> and the benchmarking code in
+ <code>benchmark/</code> provide additional examples of using REXML. The
+ Tutorial provides examples with commentary. The documentation unpacks
+ into <link href="doc/index.html"><code>rexml/doc</code></link>.</p>
+
+ <p>Kouhei Sutou maintains a <link
+ href="http://www.germane-software.com/software/rexml_doc_ja/current/index.html">Japanese
+ version</link> of the REXML API docs. <link
+ href="http://www.germane-software.com/software/rexml_doc_ja/current/japanese_documentation.html">Kou's
+ documentation page</link> contains links to binary archives for various
+ versions of the documentation.</p>
+ </subsection>
+ </operation>
+
+ <status>
+ <subsection title="Speed and Completeness">
+ <p>Unfortunately, NQXML is the only package REXML can be compared
+ against; XMLParser uses expat, which is a native library, and really is
+ a different beast altogether. So in comparing NQXML and REXML you can
+ look at four things: speed, size, completeness, and API.</p>
+
+ <p><link href="benchmarks/index.html">Benchmarks</link></p>
+
+ <p>REXML is faster than NQXML in some things, and slower than NQXML in a
+ couple of things. You can see this for yourself by running the supplied
+ benchmarks. Most of the places where REXML are slower are because of the
+ convenience methods<footnote>For example,
+ <code>element.elements[index]</code> isn't really an array operation;
+ index can be an Integer or an XPath, and this feature is relatively time
+ expensive.</footnote>. On the positive side, most of the convenience
+ methods can be bypassed if you know what you are doing. Check the <link
+ href="benchmarks/index.html"> benchmark comparison page</link> for a
+ <em>general</em> comparison. You can look at the benchmark code yourself
+ to decide how much salt to take with them.</p>
+
+ <p>The sizes of the XML parsers are close<footnote>As measured with
+ <code>ruby -nle 'print unless /^\s*(#.*|)$/' *.rb | wc -l</code>
+ </footnote>. NQXML 1.1.3 has 1580 non-blank, non-comment lines of code;
+ REXML 2.0 has 2340<footnote>REXML started out with about 1200, but that
+ number has been steadily increasing as features are added. XPath
+ accounts for 541 lines of that code, so the core REXML has about 1800
+ LOC.</footnote>.</p>
+
+ <p>REXML is a conformant XML 1.0 parser. It supports multiple language
+ encodings, and internal processing uses the required UTF-8 and UTF-16
+ encodings. It passes 100% of the Oasis non-validating tests.
+ Furthermore, it provides a full implementation of XPath, a SAX2 and a
+ PullParser API.</p>
+ </subsection>
+
+ <subsection title="XPath">
+ <p>As of release 2.0, XPath 1.0 is fully implemented.</p>
+
+ <p>I fully expect bugs to crop up from time to time, so if you see any
+ bogus XPath results, please let me know. That said, since I'm now
+ following the XPath grammar and spec fairly closely, I suspect that you
+ won't be surprised by REXML's XPath very often, and it should become
+ rock solid fairly quickly.</p>
+
+ <p>Check the "bugs" section for known problems; there are little bits of
+ XPath here and there that are not yet implemented, but I'll get to them
+ soon.</p>
+
+ <p>Namespace support is rather odd, but it isn't my fault. I can only do
+ so much and still conform to the specs. In particular, XPath attempts to
+ help as much as possible. Therefore, in the trivial cases, you can pass
+ namespace prefixes to Element.elements[...] and so on -- in these cases,
+ XPath will use the namespace environment of the base element you're
+ starting your XPath search from. However, if you want to do something
+ more complex, like pass in your own namespace environment, you have to
+ use the XPath first(), each(), and match() methods. Also, default
+ namespaces <em>force</em> you to use the XPath methods, rather than the
+ convenience methods, because there is no way for XPath to know what the
+ mappings for the default namespaces should be. This is exactly why I
+ loath namespaces -- a pox on the person(s) who thought them up!</p>
+ </subsection>
+
+ <subsection title="Namespaces">
+ <p>Namespace support is now fairly stable. One thing to be aware of is
+ that REXML is not (yet) a validating parser. This means that some
+ invalid namespace declarations are not caught.</p>
+ </subsection>
+
+ <subsection title="Mailing list">
+ <p>There is a low-volume mailing list dedicated to REXML. To subscribe,
+ send an empty email to <link
+ href="mailto:ser-rexml-subscribe@germane-software.com">ser-rexml-subscribe@germane-software.com</link>.
+ This list is more or less spam proof. To unsubscribe, similarly send a
+ message to <link
+ href="mailto:ser-rexml-unsubscribe@germane-software.com">ser-rexml-unsubscribe@germane-software.com</link>.</p>
+ </subsection>
+
+ <subsection title="RSS">
+ <p>An <link
+ href="http://www.germane-software.com/projects/rexml/timeline?ticket=on&amp;max=50&amp;daysback=90&amp;format=rss">RSS
+ file</link> for REXML is now being generated from the change log. This
+ allows you to be alerted of bug fixes and feature additions via "pull".
+ <link href="http://www.germane-software.com/software/rexml/rss.xml">Another
+ RSS</link> is available which contains a single item: the release notice
+ for the most recent release. This is an abuse of the RSS
+ mechanism, which was intended to be a distribution system for headlines
+ linked back to full articles, but it works. The headline for REXML is
+ the version number, and the description is the change log. The links all
+ link back to the REXML home page. The URL for the RSS itself is
+ http://www.germane-software.com/software/rexml/rss.xml.</p>
+
+ <p>The <link href="release.html">changelog itself is here</link>.</p>
+
+ <p>For those who are interested, there's a <link
+ href="docs/sloccount.txt">SLOCCount</link> (by David A. Wheeler) file
+ with stats on the REXML sourcecode. Note that the SLOCCount output
+ includes the files in the test/, benchmarks/, and bin/ directories, as
+ well as the main sourcecode for REXML itself.</p>
+ </subsection>
+
+ <subsection title="Applications that use REXML">
+ <list>
+ <item><link
+ href="http://www.pablotron.org/software/raggle/">Raggle</link> is a
+ console-based RSS aggregator.</item>
+
+ <item><link
+ href="http://www.zweknu.org/technical/index.rhtml?s=p|10/">getrss</link>
+ is an RSS aggregator</item>
+
+ <item>Ned Konz's <link
+ href="http://www.bikenomad.microship.com/ruby/">ruby-htmltools</link>
+ uses REXML</item>
+
+ <item>Hiroshi NAKAMURA's <link
+ href="http://www.ruby-lang.org/en/raa-list.rhtml?name=SOAP4R">SOAP4R</link>
+ package can use REXML as the XML processor.</item>
+
+ <item>Chris Morris' <link href="http://clabs.org/clxmlserial.htm">XML
+ Serializer</link>. XML Serializer provides a serialization mechanism
+ for Ruby that provides a bidirectional mapping between Ruby classes
+ and XML documents.</item>
+
+ <item>Much of the <link href="http://www.rubyxml.com">RubyXML</link>
+ site is generated with scripts that use REXML. RubyXML is a great
+ place to find information about th intersection between Ruby and
+ XML.</item>
+ </list>
+ </subsection>
+
+ <bugs lang="en">
+ <p>You can submit bug reports and feature requests, and view the list of
+ known bugs, at the <link
+ href="http://www.germane-software.com/projects/rexml">REXML bug report
+ page.</link> Please do submit bug reports. If you really want your bug
+ fixed fast, include an runit or Test::Unit method (or methods) that
+ illustrates the problem. At the very least, send me some XML that REXML
+ doesn't process properly.</p>
+
+ <p>You don't have to send an entire test suite -- just the unit test
+ methods. If you don't send me a unit test, I'll have to write one
+ myself, which will mean that your bug will take longer to fix.</p>
+
+ <p>When submitting bug reports, please include the version of Ruby and
+ of REXML that you're using, and the operating system you're running on.
+ Just run: <code>ruby -vrrexml/rexml -e 'p
+ REXML::VERSION,PLATFORM'</code> and paste the results in your bug
+ report. Include your email if you want a response about the bug.</p>
+
+ <item>Attributes are not handled internally as nodes, so you can't
+ perform node functions on them. This will have to change. It'll also
+ probably mean that, rather than returning attribute values, XPath will
+ return the Attribute nodes.</item>
+
+ <item>Some of the XPath <em>functions</em> are untested<footnote>Mike
+ Stok has been testing, debugging, and implementing some of these
+ Functions (and he's been doing a good job) so there's steady improvement
+ in this area.</footnote>. Any XPath functions that don't work are also
+ bugs... please report them. If you send a unit test that illustrates the
+ problem, I'll try to fix the problem within a couple of days (if I can)
+ and send you a patch, personally.</item>
+
+ <item>Accessing prefixes for which there is no defined namespace in an
+ XPath should throw an exception. It currently doesn't -- it just fails
+ to match.</item>
+ </bugs>
+
+ <todo lang="en">
+ <item>Reparsing a tree with a pull/SAX parser</item>
+
+ <item>Better namespace support in SAX</item>
+
+ <item>Lazy tree parsing</item>
+
+ <item>Segregate parsers, for optimized minimal distributions</item>
+
+ <item>XML &lt;-&gt; Ruby</item>
+
+ <item>Validation support</item>
+
+ <item>True XML character support</item>
+
+ <item>Add XPath support for streaming APIs</item>
+
+ <item status="request">XQuery support</item>
+
+ <item status="request">XUpdate support</item>
+
+ <item>Make sure namespaces are supported in pull parser</item>
+
+ <item status="request">Add document start and entity replacement events
+ in pull parser</item>
+
+ <item>Better stream parsing exception handling</item>
+
+ <item>I'd like to hack XMLRPC4R to use REXML, for my own
+ purposes.</item>
+ </todo>
+ </status>
+
+ <faq>
+ <q>REXML is hanging while parsing one of my XML files.</q>
+
+ <a>Your XML is probably malformed. Some malformed XML, especially XML that
+ contains literal '&lt;' embedded in the document, causes REXML to hang.
+ REXML should be throwing an exception, but it doesn't; this is a bug. I'm
+ aware that it is an extremely annoying bug, and it is one I'm trying to
+ solve in a way that doesn't significantly reduce REXML's parsing
+ speed.</a>
+
+ <q>I'm using the XPath '//foo' on an XML branch node X, and keep getting
+ all of the 'foo' elements in the entire document. Why? Shouldn't it return
+ only the 'foo' element descendants of X?</q>
+
+ <a>No. XPath specifies that '/' returns the document root, regardless of
+ the context node. '//' also starts at the document root. If you want to
+ limit your search to a branch, you need to use the self:: axe. EG,
+ 'self::node()//foo', or the shorthand './/foo'.</a>
+
+ <q>I want to parse a document both as a tree, and as a stream. Can I do
+ this?</q>
+
+ <a>Yes, and no. There is no mechanism that directly supports this in
+ REXML. However, aside from writing your own traversal layer, there is a
+ way of doing this. To turn a tree into a stream, just turn the branch you
+ want to process as a stream back into a string, and re-parse it with your
+ preferred API. EG: pp = PullParser.new( some_element.to_s ). The other
+ direction is more difficult; you basically have to build a tree from the
+ events. REXML will have one of these builders, eventually, but it doesn't
+ currently exist.</a>
+
+ <q>Why is Element.elements indexed off of '1' instead of '0'?</q>
+
+ <a>Because of XPath. The XPath specification states that the index of the
+ first child node is '1'. Although it may be counter-intuitive to base
+ elements on 1, it is more undesireable to have element.elements[0] ==
+ element.elements[ 'node()[1]' ]. Since I can't change the XPath
+ specification, the result is that Element.elements[1] is the first child
+ element.</a>
+
+ <q>Why isn't REXML a validating parser?</q>
+
+ <a>Because validating parsers must include code that parses and interprets
+ DTDs. I hate DTDs. REXML supports the barest minimum of DTD parsing, and
+ even that isn't complete. There is DTD parsing code in the works, but I
+ only work on it when I'm really, really bored. Rumor has it that a
+ contributor is working on a DTD parser for REXML; rest assured that any
+ such contribution will be included with REXML as soon as it is
+ available.</a>
+
+ <q>I'm trying to create an ISO-8859-1 document, but when I add text to the
+ document it isn't being properly encoded.</q>
+
+ <a>Regardless of what the encoding of your document is, when you add text
+ programmatically to a REXML document you <em>must</em> ensure that you are
+ only adding UTF-8 to the tree. In particular, you can't add ISO-8859-1
+ encoded text that contains characters above 0x80 to REXML trees -- you
+ must convert it to UTF-8 before doing so. Luckily, this is easy:
+ <code>text.unpack('C*').pack('U*')</code> will do the trick. 7-bit ASCII
+ is identical to UTF-8, so you probably won't need to worry about this.</a>
+
+ <q>How do I get the tag name of an Element?</q>
+
+ <a>You take a look at the APIs, and notice that <code>Element</code>
+ includes <code>Namespace</code>. Then you click on the
+ <code>Namespace</code> link and look at the methods that
+ <code>Element</code> includes from <code>Namespace</code>. One of these is
+ <code>name()</code>. Another is <code>expanded_name()</code>. Yet another
+ is <code>prefix()</code>. Then, you email the author of rdoc and ask him
+ to extend rdoc so that it lists methods in the API that are included from
+ other files, so that you don't have to do all of that looking around for
+ your method.</a>
+ </faq>
+
+ <credits>
+ <p>I've had help from a number of resources; if I haven't listed you here,
+ it means that I just haven't gotten around to adding you, or that I'm a
+ dork and have forgotten. In either case, feel free to write me and
+ complain.</p>
+
+ <list>
+ <item>Mike Stok has been very active, sending not only fixes for bugs
+ (especially in Functions), but also by providing unit tests and making
+ sure REXML runs under Ruby 1.7. He also sent the most awesome hand
+ knitted tea cozy, with "REXML" and the Ruby knitted into it.</item>
+
+ <item>Kouhei Sutou translated the REXML API documentation to Japanese!
+ Links are in the API docs section of the main documentation. He has also
+ contributed a large number of bug reports and patches to fix bugs in
+ REXML.</item>
+
+ <item>Erik Terpstra heard my pleas and submitted several logos for
+ REXML. After sagely procrastinating for several weeks, I finally forced
+ my poor slave of a wife to pick one (this is what we call "delegation").
+ She did, with caveats; Erik quickly made the changes, and the result is
+ what you now see at the top of this page. He also supplied a <link
+ href="img/rexml_50p.png">smaller version</link> that you can include
+ with your projects that use REXML, if you'd like.</item>
+
+ <item>Ernest Ellingson contributed the sourcecode for turning UTF16 and
+ UNILE encodings into UTF8, which allowed REXML to get the 100% OASIS
+ valid tests rating.</item>
+
+ <item>Ian Macdonald provided me with a comprehensive, well written RPM
+ spec file.</item>
+
+ <item>Oliver M . Bolzer is maintaining a Debian package distribution of
+ REXML. He also has provided good feedback and bug reports about
+ namespace support.</item>
+
+ <item>Michael Granger supplied a patch for REXML that make the unit
+ tests pass under Ruby 1.7.</item>
+
+ <item>James Britt contributed code that makes using
+ Document.parse_stream easier to use by allowing it to be passed either a
+ Source, File, or String.</item>
+
+ <item>Tobias Reif: Numerous bug reports, and suggestions for
+ improvement.</item>
+
+ <item>Stefan Scholl, who provided a lot of feedback and bug reports
+ while I was trying to get ISO-8859-1 support working.</item>
+
+ <item>Steven E Lumos for volunteering information about XPath
+ particulars.</item>
+
+ <item>Fumitoshi UKAI provided some bug fixes for CData metacharacter
+ quoting.</item>
+
+ <item>TAKAHASHI Masayoshi, for information on UTF</item>
+
+ <item>Robert Feldt: Bug reports and suggestions/recommendations about
+ improving REXML. Testing is one of the most important aspects of
+ software development.</item>
+
+ <item><link
+ href="http://www.themindelectric.com/exml/index.html">Electric
+ XML</link>: This was, after all, the inspiration for REXML. Originally,
+ I was just going to do a straight port, and although REXML doesn't in
+ any way, shape or form resemble Electric XML, still the basic framework
+ and philosophy was inspired by E-XML. And I still use E-XML in my Java
+ projects.</item>
+
+ <item><link
+ href="http://www.io.com/~jimm/downloads/nqxml/index.html">NQXML</link>:
+ While I may complain about the NQXML API, I wrote a few applications
+ using it that wouldn't have been written otherwise, and it was very
+ useful to me. It also encouraged me to write REXML. Never complain about
+ free software *slap*.</item>
+
+ <item>See my <link
+ href="http://www.germane-software.com/~ser/technology.html">technologies
+ page</link> for a more comprehensive list of computer technologies that
+ I depend on for my day-to-day work.</item>
+
+ <item>rdoc, an excellent JavaDoc analog<footnote>When I was first
+ working on REXML, rdoc wasn't, IMO, very good, so I wrote API2XML.
+ API2XML was good enough for a while, and then there was a flurry of work
+ on rdoc, and it quickly surpassed API2XML in features. Since I was never
+ really interested in maintaining a JavaDoc analog, I stopped support of
+ API2XML, and am now recommending that people use
+ rdoc.</footnote>.</item>
+
+ <item>Many, many other people who've submitted bug reports, suggestions,
+ and positive feedback. You're all co-developers!</item>
+ </list>
+ </credits>
+</documentation>
diff --git a/test/rexml/data/euc.xml b/test/rexml/data/euc.xml
new file mode 100644
index 0000000000..685f84b8b4
--- /dev/null
+++ b/test/rexml/data/euc.xml
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="euc-jp"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN">
+<html xml:lang="ja">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta name="author" content="U.Nakamura" />
+<link rev="made" href="mailto:usa@ruby-lang.org" />
+<link rel="StyleSheet" href="./ruby.css" type="text/css" />
+<title>Ruby-mswin32</title>
+</head>
+<body>
+
+<h1><a id="top">Ruby-mswin32</a></h1>
+<p>¤¢¤ë¤¤¤Ï¡¢Windows¤È¤Î½ª¤ï¤ê¤Ê¤­À襤 ;-(</p>
+<p>[ÆüËܸì / <a href="./index_en.html">English</a>]</p>
+
+
+
+<h2><a id="menu">¢§ Ìܼ¡</a></h2>
+<ul>
+<li><a href="#remark">Ãí°Õ»ö¹à</a></li>
+<li><a href="#ruby">Ruby¤È¤Ï?</a></li>
+<li><a href="#mswin32">mswin32ÈÇruby¤È¤Ï?</a></li>
+<li><a href="#download">¥Ð¥¤¥Ê¥ê ¥À¥¦¥ó¥í¡¼¥É</a></li>
+<li><a href="#install">¥¤¥ó¥¹¥È¡¼¥ë</a></li>
+<li><a href="#recent">ºÇ¶á¤Î½ÐÍè»ö</a></li>
+<li><a href="#link">¥ê¥ó¥¯</a></li>
+</ul>
+
+
+
+<h2><a id="remark">¢§ Ãí°Õ»ö¹à</a></h2>
+<p>¤³¤Î¥Ú¡¼¥¸¤Ç¤Ï¡¢mswin32ÈÇruby¤ÎÇÛÉÛ¤ÈÊѹ¹¾õ¶·¤Î¤ªÃΤ餻¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
+<p>¤³¤³¤ÏÊ̤˸ø¼°¥Ú¡¼¥¸¤Ç¤â¤Ê¤ó¤Ç¤â¤Ê¤¯¤Æ¡¢»ä¤¬¾¡¼ê¤Ë½ñ¤¤¤Æ¤ë¥Ú¡¼¥¸¤Ç¤¹¡£¤³¤³¤ÇÆþ¼ê¤Ç¤­¤ë¥×¥í¥°¥é¥à¡¦¾ðÊó(̵¤¤¤ËÅù¤·¤¤¤±¤É)¤Ë¤Ä¤¤¤Æ¤Ï¡¢³Æ¼«¤ÎȽÃǤǤ´ÍøÍѤ¯¤À¤µ¤¤¡£<br />
+Ì䤤¹ç¤ï¤»¤Ï<a href="mailto:usa@ruby-lang.org">»ä</a>¤Ø¡£´Ö°ã¤Ã¤Æ¤â¾¤Î¿Í¤ËÌÂÏǤò¤«¤±¤ë¤è¤¦¤Ê¤³¤È¤Ï¤·¤Ê¤¤¤Ç¤Í¡£</p>
+
+
+
+<h2><a id="ruby">¢§ Ruby¤È¤Ï?</a></h2>
+<p><a href="http://www.ruby-lang.org/ja/">Ruby¤Î¥µ¥¤¥È</a>¤ò¤´Í÷²¼¤µ¤¤¡£</p>
+
+
+
+<h2><a id="mswin32">¢§ mswin32ÈÇruby¤È¤Ï?</a></h2>
+<p>mswin32ÈÇruby¤È¤Ï¡¢32bitÈÇWindows(Windows95¡¦Windows98¡¦WindowsMe¡¦Windows NT¡¦Windows 2000¡¦WindowsXP¡¦Windows 2003 Server¡¢°Ê²¼Windows¤Èɽµ­)¾å¤ÇÆ°ºî¤¹¤ëRuby¤Î¥Ð¥¤¥Ê¥ê¤Î°ì¤Ä¤Ç¤¹¡£<br />
+Windows¾å¤ÇÆ°ºî¤¹¤ëRuby¤È¤·¤Æ¤Ï¡¢¸½ºß¡¢5¼ïÎà¤Î¥Ð¥¤¥Ê¥ê¤¬Â¸ºß¤·¤Þ¤¹¡£¤³¤ì¤é¤Ï¤½¤ì¤¾¤ìmswin32ÈÇ¡¦cygwinÈÇ¡¦mingw32ÈÇ¡¦bccwin32ÈÇ¡¦djgppÈǤȸƤФì¤Æ¤¤¤Þ¤¹¡£<br />
+¤½¤ì¤¾¤ì¤Î°ã¤¤¤ò¤Þ¤È¤á¤ë¤È°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹(»ö¼Â¸íǧ¤¬¤¢¤ì¤Ð¤ªÃΤ餻¤¯¤À¤µ¤¤)¡£</p>
+<dl>
+<dt><a id="label:1">mswin32ÈÇ</a></dt><dd>
+<p>VC++¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¡£Windows¤«¤é¸«¤ì¤Ð¤â¤Ã¤È¤â¡ÖÉáÄ̡פΥХ¤¥Ê¥ê¤È¸À¤¨¤ë¤¬¡¢È¿ÌÌ¡¢Ruby¤¬»ý¤ÄUNIX¤ÇÆÃħŪ¤Êµ¡Ç½¤Î°ìÉô¤¬»ÈÍѤǤ­¤Ê¤¤¡£1.7.3°Ê¹ß¤Ïmingw32ÈǤȳÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ë¤Ä¤¤¤Æ¤Ï¥Ð¥¤¥Ê¥ê¸ß´¹À­¤¬¤¢¤ë¡£<br />
+RUBY_PLATFORM¤Ï*-mswin32¡£</p>
+</dd>
+<dt><a id="label:2">cygwinÈÇ</a></dt><dd>
+<p>gcc¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¡¢<a href="http://sources.redhat.com/cygwin/">cygwin</a>´Ä¶­¤ÇÆ°ºî¤¹¤ë¡£cygwin´Ä¶­¤¬UNIX¥é¥¤¥¯¤Ê´Ä¶­¤òWindows¾å¤Ç¹½ÃÛ¤¹¤ë¤â¤Î¤Ç¤¢¤ë¤Î¤Ç¡¢ÅöÁ³¡¢cygwinÈÇruby¤Ï°ìÈ̤ÎUNIXÍѤΤâ¤Î¤È¤À¤¤¤¿¤¤Æ±¤¸¤è¤¦¤ËÆ°ºî¤¹¤ë(¤³¤È¤¬´üÂԤǤ­¤ë)¡£<br />
+RUBY_PLATFORM¤Ï*-cygwin¡£</p>
+</dd>
+<dt><a id="label:3">mingw32ÈÇ</a></dt><dd>
+<p>gcc¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¡£¥½¡¼¥¹¤Ï¤Û¤È¤ó¤Émswin32ÈǤȶ¦Ä̤Ǥ¢¤ê¡¢¥é¥ó¥¿¥¤¥à¥é¥¤¥Ö¥é¥ê¤â¶¦ÄÌ(MSVCRT.dll)¤Ê¤Î¤Ç¡¢Æ°ºî¤â(¤ª¤½¤é¤¯)mswin32ÈǤȤۤÜƱ¤¸¡£1.7.3°Ê¹ß¤Ïmswin32ÈǤȳÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ë¤Ä¤¤¤Æ¤Ï¥Ð¥¤¥Ê¥ê¸ß´¹À­¤¬¤¢¤ë¡£<br />
+RUBY_PLATFORM¤Ï*-mingw32¡£</p>
+</dd>
+<dt><a id="label:4">bccwin32ÈÇ</a></dt><dd>
+<p>BC++¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¡£¥½¡¼¥¹¤Ï¤«¤Ê¤ê¤ÎÉôʬ¤¬mswin32ÈǤȶ¦Ä̤ǤϤ¢¤ë¤¬¡¢¥é¥ó¥¿¥¤¥à¥é¥¤¥Ö¥é¥ê¤¬°Û¤Ê¤ë¤Î¤Ç¡¢ºÙ¤«¤¤¤È¤³¤í¤ÇµóÆ°¤¬mswin32ÈǤȤϰۤʤë(¤Ï¤º)¡£1.7°Ê¹ß¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤ë¡£<br />
+RUBY_PLATFORM¤Ï*-bccwin32¡£</p>
+</dd>
+<dt><a id="label:5">djgppÈÇ</a></dt><dd>
+<p>DJGPP¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¡£DOSÍѤΥХ¤¥Ê¥ê¤Ê¤Î¤Ç¡¢¤â¤Á¤í¤óDOS¤Ç¤âÆ°ºî¤¹¤ë¡£È¿ÌÌ¡¢Windows¤Ë¤¢¤Ã¤ÆDOS¤Ë¤Ê¤¤µ¡Ç½¤Î¿¤¯¤¬»È¤¨¤Ê¤¤(¥Í¥Ã¥È¥ï¡¼¥¯´ØÏ¢¤Ê¤É)¡£<br />
+RUBY_PLATFORM¤Ï*-msdosdjgpp¡£</p>
+</dd>
+</dl>
+<p>¤³¤Î¥Ú¡¼¥¸¤Ç¤Ï¡¢¾åµ­¤Î¤¦¤Ámswin32ÈǤΤߤò°·¤Ã¤Æ¤¤¤Þ¤¹¡£<br />
+¤Ê¤ª¡¢cygwinÈÇ¡¦mingw32ÈÇ¡¦djgppÈǤˤĤ¤¤Æ¤Ï¤ï¤¿¤Ê¤Ù¤µ¤ó¤Î<a href="http://www.os.rim.or.jp/~eban/">Ruby binaries</a>¤«¤éÆþ¼ê²Äǽ¤Ç¤¹¡£¤Þ¤¿¡¢bccwin32ÈǤˤĤ¤¤Æ¤Ï¾®À¾¤µ¤ó¤Î<a href="http://www001.upp.so-net.ne.jp/konishi/ruby/index.htm">Ruby</a>¤«¤éÆþ¼ê²Äǽ¤Ç¤¹¡£</p>
+
+
+
+<h2><a id="download">¢§ ¥Ð¥¤¥Ê¥ê ¥À¥¦¥ó¥í¡¼¥É</a></h2>
+<p>¸½ºßÇÛÉÛÃæ¤ÎÁ´¤Æ¤Î¥Ð¥¤¥Ê¥ê¤ÏVC++ 5.0(Version 11.00.7022 for 80x86)¤Çmake¤·¤¿¤â¤Î¤Ç¤¹¡£ruby¼«ÂΤ˴ؤ·¤Æ¤Ï¡¢<a href="http://www.ruby-lang.org/ja/download.html">ɸ½àÇÛÉۤΥ½¡¼¥¹</a>(¤Þ¤¿¤Ï<a href="http://www.ruby-lang.org/~knu/cvsrepo-guide.html">CVS</a>¤Î¥½¡¼¥¹)¤«¤é¤½¤Î¤Þ¤ÞºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ë¤Ä¤¤¤Æ¤Ï³Æ¡¹¤Î¥ê¥ó¥¯Àè¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£<br />
+¤¤¤º¤ì¤Î¥Ð¥¤¥Ê¥ê¤âzip·Á¼°¤Ç¥¢¡¼¥«¥¤¥Ö¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
+<p>md5sum¤Î¥Á¥§¥Ã¥¯ÊýË¡¤Ç¤¹¤¬¡¢Î㤨¤Ðruby¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤Ê¤é²¼µ­¤Î¤è¤¦¤ÊÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£<br />
+<code>ruby -r md5 -e "puts MD5.new(File.open('filename', 'rb').read).hexdigest"</code></p>
+
+
+
+<h3><a id="release">Release</a></h3>
+<ul>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.8.1-i386-mswin32.zip">ruby-1.8.1-i386-mswin32.zip</a> (3,764KB) <em>ºÇ¿·ReleaseÈÇ</em><br />
+ ruby 1.8.1 (2003-12-25) [i386-mswin32]<br />
+ md5sum : 6bbdabeb29f1a15fa69901e87d1108ac</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.8.0-i386-mswin32.zip">ruby-1.8.0-i386-mswin32.zip</a> (2,507KB)<br />
+ ruby 1.8.0 (2003-08-04) [i386-mswin32]<br />
+ md5sum : eaf9263062429fd4f722d9a70a38a9dc</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.6.8-i586-mswin32.zip">ruby-1.6.8-i586-mswin32.zip</a> (1,964KB)<br />
+ ruby 1.6.8 (2002-12-24) [i586-mswin32]<br />
+ md5sum : f704f1248ec25b96e3e1f3070afa915e</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.6.7-i586-mswin32.zip">ruby-1.6.7-i586-mswin32.zip</a> (1,972KB)<br />
+ ruby 1.6.7 (2002-03-01) [i586-mswin32]<br />
+ md5sum : ddedc40d0fc3b0ea1d6ac74f4976bfc6</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.6.6-i586-mswin32.zip">ruby-1.6.6-i586-mswin32.zip</a> (1,944KB)<br />
+ ruby 1.6.6 (2001-12-26) [i586-mswin32]<br />
+ md5sum : 96e0d1d19a37e5e7e50ae7ce99e34636</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.6.5-i586-mswin32.zip">ruby-1.6.5-i586-mswin32.zip</a> (1,896KB)<br />
+ ruby 1.6.5 (2001-09-19) [i586-mswin32]<br />
+ md5sum : c708ae98a05df2ff8dea5a70e3791bfa</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.6.4-i586-mswin32.zip">ruby-1.6.4-i586-mswin32.zip</a> (1,821KB)<br />
+ ruby 1.6.4 (2001-06-04) [i586-mswin32]<br />
+ md5sum : cf813ca19e40be164057b3562575e4da</li>
+</ul>
+
+
+
+
+
+
+
+<h3><a id="develop">Developing versions snapshots</a></h3>
+<ul>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.9.0-20040126-i386-mswin32.zip">ruby-1.9.0-20040126-i386-mswin32.zip</a> (3,849KB)<br />
+ ruby 1.9.0 (2004-01-26) [i386-mswin32]<br />
+ md5sum : fffafbf881cb6a85982220eae5a5b4f5</li>
+</ul>
+
+
+
+<h3><a id="stable">Stable versions snapshots</a></h3>
+<h4><a id="stable">1.8.0</a></h4>
+<ul>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.8.1-20040127-i386-mswin32.zip">ruby-1.8.1-20040127-i386-mswin32.zip</a> (3,822KB)<br />
+ ruby 1.8.1 (2004-01-27) [i386-mswin32]<br />
+ md5sum : 1fc0d5f53f0a75d0c6d1ca5d21082089</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.8.1-20031027-i386-mswin32.zip">ruby-1.8.1-20031027-i386-mswin32.zip</a> (3,075KB)<br />
+ ruby 1.8.1 (2003-10-27) [i386-mswin32]<br />
+ md5sum : 9dbdc644c529d207d0bda5d64478a5c4</li>
+</ul>
+<h4><a id="stable">1.6.8</a></h4>
+<ul>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.6.8-20030727-i586-mswin32.zip">ruby-1.6.8-20030727-i586-mswin32.zip</a> (2,093KB)<br />
+ ruby 1.6.8 (2003-07-27) [i586-mswin32]<br />
+ md5sum : 28c3b92b162319b3d6bc99c9996cad15</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.6.8-20030515-i586-mswin32.zip">ruby-1.6.8-20030515-i586-mswin32.zip</a> (2,091KB)<br />
+ ruby 1.6.8 (2003-05-15) [i586-mswin32]<br />
+ md5sum : e5f6558de261d111add4f657ad5e345f</li>
+</ul>
+
+
+
+<h3><a id="ext">Extension libraries</a></h3>
+<h4><a id="ext">1.8.0</a></h4>
+<ul>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/racc-1.4.4-all-i386-mswin32-1.8.zip">racc-1.4.4-all-i386-mswin32-1.8.zip</a> (70KB)<br />
+ <a href="http://www.loveruby.net/en/racc.html">racc</a> 1.4.4-all (for ruby 1.8.1)<br />
+ md5sum : 46c4d48b714fb1ded880e7e7af456b28</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/vrswin-030906-i386-mswin32-1.8.zip">vrswin-030906-i386-mswin32-1.8.zip</a> (54KB)<br />
+ <a href="http://www.osk.3web.ne.jp/~nyasu/vruby/vrproject-e.html">VisualuRuby (swin)</a> 030906 (for ruby 1.8.0)<br />
+ md5sum : 11c2d30e2a05e9ea7e097ec7b066cedf</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/vruby-030906-i386-mswin32-1.8.zip">vruby-030906-i386-mswin32-1.8.zip</a> (96KB)<br />
+ <a href="http://www.osk.3web.ne.jp/~nyasu/vruby/vrproject-e.html">VisualuRuby (vruby)</a> 030906 (for ruby 1.8.0)<br />
+ md5sum : 77a42995e42e869932f5fb282cc297ea</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/eruby-1.0.4-i386-mswin32-1.8.zip">eruby-1.0.4-i386-mswin32-1.8.zip</a> (75KB)<br />
+ <a href="http://www.modruby.net/">eruby</a> 1.0.4 (for ruby 1.8.0)<br />
+ md5sum : de7282647f015b1d20a28dcf7c2b8715</li>
+</ul>
+<h4><a id="ext">1.6.8</a></h4>
+<ul>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/vrswin-030521-i586-mswin32-1.6.zip">vrswin-030521-i586-mswin32-1.6.zip</a> (55KB)<br />
+ <a href="http://www.osk.3web.ne.jp/~nyasu/vruby/vrproject-e.html">VisualuRuby (swin)</a> 030521 (for ruby 1.6.8)<br />
+ md5sum : eae3284c6f79be7a119858ff9e940985</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/vruby-030517-i586-mswin32-1.6.zip">vruby-030517-i586-mswin32-1.6.zip</a> (95KB)<br />
+ <a href="http://www.osk.3web.ne.jp/~nyasu/vruby/vrproject-e.html">VisualuRuby (vruby)</a> 030517 (for ruby 1.6.8)<br />
+ md5sum : a32af752428cf3aa03000d66d8deca33</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/tmail-0.10.7-i586-mswin32-1.6.zip">tmail-0.10.7-i586-mswin32-1.6.zip</a> (160KB)<br />
+ <a href="http://www.loveruby.net/en/tmail.html">TMail</a> 0.10.7 (for ruby 1.6.8)<br />
+ md5sum : 74351ed81550dfbf3bfaf8252c316326</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/eruby-1.0.3-i586-mswin32-1.6.zip">eruby-1.0.3-i586-mswin32-1.6.zip</a> (74KB)<br />
+ <a href="http://www.modruby.net/">eruby</a> 1.0.3 (for ruby 1.6.8)<br />
+ md5sum : e05d654128422846f86ca84f55bf7bcb</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/rubywin-0.0.4.3-i586-mswin32-1.6.zip">rubywin-0.0.4.3-i586-mswin32-1.6.zip</a> (286KB)<br />
+ <a href="http://homepage1.nifty.com/markey/ruby/rubywin/index_e.html">RubyWin</a> 0.0.4.3 (for ruby 1.6.8)<br />
+ md5sum : 3f2226ef0c6e41b31c2f337f778e3e18</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/shim-20021224-i586-mswin32-1.6.zip">shim-20021224-i586-mswin32-1.6.zip</a> (138KB)<br />
+ <a href="http://www.ruby-lang.org/~knu/cgi-bin/cvsweb.cgi/shim/">Ruby Shim</a> 20021224 (for ruby 1.6.8)<br />
+ md5sum : 7ee4363195973a1df0584cb467e5ce82</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/racc-1.4.3-all-i586-mswin32-1.6.zip">racc-1.4.3-all-i586-mswin32-1.6.zip</a> (124KB)<br />
+ <a href="http://www.loveruby.net/en/racc.html">racc</a> 1.4.3-all (for ruby 1.6.8)<br />
+ md5sum : 1f093aabb464bef3074112949228a8c6</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/win32ole-0.5.2-i586-mswin32-1.6.zip">win32ole-0.5.2-i586-mswin32-1.6.zip</a> (59KB)<br />
+ <a href="http://homepage1.nifty.com/markey/ruby/win32ole/index_e.html">Win32OLE</a> 0.5.2 (for ruby 1.6.8)&lt;<br />
+ md5sum : 960f7205923a9243cff567d291b254ad</li>
+<li><a href="ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/uconv-0.4.11-i586-mswin32-1.6.zip">uconv-0.4.11-i586-mswin32-1.6.zip</a> (110KB)<br />
+ <a href="http://www.yoshidam.net/Ruby.html#uconv">uconv</a> 0.4.11 (for ruby 1.6.8)<br />
+ md5sum : c08f3662abee8e7186283741f89b88d7</li>
+</ul>
+
+
+
+<h2><a id="install">¢§ ¥¤¥ó¥¹¥È¡¼¥ë</a></h2>
+<p>¾åµ­¤Î¥Ð¥¤¥Ê¥ê¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¾ì¹ç¤Ï¡¢¤ª¹¥¤ß¤Î¥Ç¥£¥ì¥¯¥È¥ê(°Ê²¼<code>$TOPDIR</code>¤Èµ­½Ò)¤ËŸ³«¤·¤Æ¤¯¤À¤µ¤¤¡£¥Ç¥£¥ì¥¯¥È¥êÉÕ¤­¤Ç°µ½Ì¤µ¤ì¤Æ¤Þ¤¹¤Î¤Ç¡¢Å¸³«»þ¤Ë¤Ï¥Ç¥£¥ì¥¯¥È¥êÉÕ¤­¤ÇŸ³«¤¹¤ë¤Î¤ò˺¤ì¤º¤Ë(°ÕÌ£¤¬¤ï¤«¤é¤Ê¤¤¿Í¤Ïµ¤¤Ë¤·¤Ê¤¯¤Æ¤¤¤¤¤Ç¤¹)¡£<br />
+Ÿ³«¸å¤Ï¡¢<code>$TOPDIR\bin</code>¤Ë<code>PATH</code>¤òÄ̤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£</p>
+<p>¤Ê¤ª¡¢°Ê²¼¤Î³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ï¡¢¤³¤ÎÇÛÉÛʪ¤Ë´Þ¤Þ¤ì¤Ê¤¤³°Éô¤Î¥é¥¤¥Ö¥é¥ê¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</p>
+<ul>
+<li>curses.so : PDCurses¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</li>
+<li>dbm.so : GDBM¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</li>
+<li>gdbm.so : GDBM¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</li>
+<li>iconv.so : Iconv¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</li>
+<li>openssl.so : OpenSSL¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</li>
+<li>readline.so : readline¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</li>
+<li>tcltklib.so : Tcl/Tk¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</li>
+<li>zlib.so : Zlib¤Ë°Í¸¤·¤Æ¤¤¤Þ¤¹¡£</li>
+</ul>
+<p>¾åµ­¤Î¤¦¤Á¡¢PDCurses¡¦GDBM¡¦OpenSSL¡¦readline¡¦Zlib¤Ë¤Ä¤¤¤Æ¤Ï¡¢<a href="http://jarp.jin.gr.jp/win32/">Porting Libraries to Win32</a>¤Ë¥Ð¥¤¥Ê¥ê¤¬Â¸ºß¤·¤Þ¤¹¡£<br />
+Iconv¤Ë¤Ä¤¤¤Æ¤Ï¡¢Meadowy.org¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤ë<a href="http://www.meadowy.org/meadow/dists/snapshot/iconv-1.8.win32.zip">iconv-1.8.win32.zip</a>¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£<br />
+Tcl/Tk¤Ë¤Ä¤¤¤Æ¤Ï¡¢<a href="http://www.activestate.com/">ActiveState</a>¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤ë<a href="http://www.activestate.com/Products/ActiveTcl/">ActiveTcl</a>¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£</p>
+
+
+
+<h2><a id="recent">¢§ ºÇ¶á¤Î½ÐÍè»ö</a></h2>
+
+
+
+<h3><a id="d20040127">2004-01-27</a></h3>
+<p>¤¢¤±¤Þ¤·¤Æ¤ª¤á¤Ç¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£¤Ã¤ÆÃÙ¤¤¤è!</p>
+<p>ruby-1.8.1-20040127¤Èruby-1.9.0-20040126¤òÃÖ¤­¤Þ¤·¤¿¡£<br />
+Á°¼Ô¤Ï¼ç¤Ë1.8.1¥ê¥ê¡¼¥¹ÈǤÇȯ¸«¤µ¤ì¤¿ÉÔ¶ñ¹ç¤Î½¤Àµ¤Ç¤¹¡£¸å¼Ô¤Ï³«È¯ÈÇ¡£</p>
+
+<h3><a id="d20031225">2003-12-25</a></h3>
+<p>¥á¥ê¡¼¥¯¥ê¥¹¥Þ¥¹! ruby-1.8.1¤¬¥ê¥ê¡¼¥¹¤µ¤ì¤Þ¤·¤¿!<br />
+(preview¤ò°ì¤ÄÈô¤Ð¤·¤Á¤ã¤¤¤Þ¤·¤¿¡¢¤´¤á¤ó¤Ê¤µ¤¤...)</p>
+
+<h3><a id="d20031206">2003-12-06</a></h3>
+<p>ruby-1.8.1-preview3¤òÃÖ¤­¤Þ¤·¤¿¡£»×¤¤¤Î¤Û¤«´Ö¤¬¶õ¤¤¤Á¤ã¤¤¤Þ¤·¤¿¤Í¡£</p>
+
+<h3><a id="d20031101">2003-11-01</a></h3>
+<p>ruby-1.8.1-preview2¤òÃÖ¤­¤Þ¤·¤¿¡£</p>
+
+<h3><a id="d20031028">2003-10-28</a></h3>
+<p>ruby-1.8.1-20031027¤òÃÖ¤­¤Þ¤·¤¿¡£<br />
+racc-1.4.4-all¤òÃÖ¤­¤Þ¤·¤¿¡£</p>
+
+<h3><a id="d20030907">2003-09-07</a></h3>
+<p>eruby-1.0.4¡¦vrswin-030906¡¦vruby-030906¤òÃÖ¤­¤Þ¤·¤¿¡£</p>
+
+<h3><a id="d20030812">2003-08-12</a></h3>
+<p>ruby-1.8.0-20030812¤òÃÖ¤­¤Þ¤·¤¿¡£</p>
+<p>vrswin-030811¡¦vruby-030811¤òÃÖ¤­¤Þ¤·¤¿¡£º£²ó¤«¤éÃÖ¤¯³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤ÏÁ´¤Æ1.8ÍѤˤʤê¤Þ¤¹¡£</p>
+
+<h3><a id="d20030804">2003-08-04</a></h3>
+<p>ruby-1.8.0¤òÃÖ¤­¤Þ¤·¤¿¡£Ruby 1.8·ÏºÇ½é¤Î¥ê¥ê¡¼¥¹¤È¤Ê¤ê¤Þ¤¹¡£<br />
+1.6·Ï¤«¤é¤ÎÊѹ¹ÅÀ¤Ë¤Ä¤¤¤Æ¤Ï¡¢<a href="ftp://ftp.ruby-lang.org/pub/ruby/1.8/changes.1.8.0">changes.1.8.0</a>¤Ê¤É¤ò¤´Í÷¤¯¤À¤µ¤¤¡£</p>
+
+<h3><a id="d20030731">2003-07-31</a></h3>
+<p>ruby-1.8.0-preview6¤òÃÖ¤­¤Þ¤·¤¿¡£¤¨¡¼¤È¡¢¤³¤ì¤ò´Þ¤á¤Æ¤¢¤È2²ópreview¤¬½Ð¤ëÌÏÍͤǤ¹ :)</p>
+
+<h3><a id="d20030728">2003-07-28</a></h3>
+<p>ruby-1.8.0-preview5¤òÃÖ¤­¤Þ¤·¤¿¡£¤ª¤½¤é¤¯¤³¤ì¤¬1.8.0¤ÎºÇ¸å¤Îpreview¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£<br />
+ruby-1.6.8-20030727¤òÃÖ¤­¤Þ¤·¤¿¡£</p>
+
+
+
+<h3><a id="old">¤«¤Ä¤Æ¤Î½ÐÍè»ö</a></h3>
+<p><a href="./old.html">¤³¤Á¤é</a>¤ò¤É¤¦¤¾¡£</p>
+
+
+
+<h2><a id="link">¢§ ¥ê¥ó¥¯</a></h2>
+<p>mswin32ÈǤ˴ؤ¹¤ë(¤È»×¤ï¤ì¤ë)¥ê¥ó¥¯¤Ç¤¹¡£¾¡¼ê¤ËÄ¥¤Ã¤Æ¤Þ¤¹¤Î¤Ç¡¢ÉÔÅԹ礬¤¢¤ì¤Ð<a href="mailto:usa@osb.att.ne.jp">»ä</a>¤Þ¤Ç¤´Ï¢Íí¤¯¤À¤µ¤¤¡£</p>
+<ul>
+<li><a href="http://www.ruby-lang.org/">Ruby Home Page</a> (<a href="http://www.ruby-lang.org/ja/">ÆüËܸì</a> / <a href="http://www.ruby-lang.org/en/">English</a>)<br />
+ ¸À¤ï¤º¤È¤·¤ì¤¿¡¢Ëܲȥµ¥¤¥È¡£</li>
+<li>»¨µ­Ä¢ (<a href="http://homepage1.nifty.com/markey/">ÆüËܸì</a> / <a href="http://homepage1.nifty.com/markey/index_e.html">English</a>)<br />
+ ½õÅĤµ¤ó¤Î¥Ú¡¼¥¸¡£<a href="http://homepage1.nifty.com/markey/ruby/rubywin/index.html">RubWin</a>¡¦<a href="http://homepage1.nifty.com/markey/ruby/win32ole/index.html">Win32OLE</a>¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£</li>
+<li><a href="http://www.moonwolf.com/ruby/">Script/Ruby</a> (ÆüËܸì)<br />
+ MoonWolf¤µ¤ó¤Î¥Ú¡¼¥¸¡£Win32Module¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£</li>
+<li>ActiveScriptRuby (<a href="http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/index.html">ÆüËܸì</a> / <a href="http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/main.html">English</a>)<br />
+ arton¤µ¤ó¤Î¥Ú¡¼¥¸¡£WindowsÈÇRuby¤Î̤Íè¤Ï¤³¤³¤Ë¤¢¤ë¤Î¤«¤â¡£</li>
+<li>VisualuRuby·×²è(²¾¾Î) (<a href="http://www.osk.3web.ne.jp/~nyasu/software/vrproject.html">ÆüËܸì</a> / <a href="http://www.osk.3web.ne.jp/~nyasu/vruby/vrproject-e.html">English</a>)<br />
+ nyasu¤µ¤ó¤Î¥Ú¡¼¥¸¡£VisualuRuby¤Ê¤É¤¬¤¢¤ê¤Þ¤¹(¤Ã¤Æ¤³¤ì¤â¤½¤Î¤Þ¤ó¤Þ)¡£Windows¤ÇRuby¤ò»È¤¦¤¿¤á¤Î<a href="http://www.osk.3web.ne.jp/~nyasu/software/rubyonwin.html">¥ê¥ó¥¯½¸</a>¤¬½¼¼Â¤·¤Æ¤Þ¤¹¡£¤Á¤Ê¤ß¤Ë¡¢Åö¥µ¥¤¥È¤Î¥Ç¥¶¥¤¥ó¤Ï¤³¤Á¤é¤Î¥Ñ¥¯¥ê¤Ç¤¹¡£Â¿¼Õ!</li>
+<li>Ruby (<a href="http://www.yoshidam.net/Ruby_ja.html">ÆüËܸì</a> / <a href="http://www.yoshidam.net/Ruby.html">English</a>)<br />
+ ¤è¤·¤À¤à¤µ¤ó¤Î¥Ú¡¼¥¸¡£<a href="http://www.yoshidam.net/Ruby_ja.html#susie">Susie¥×¥é¥°¥¤¥ó¥é¥¤¥Ö¥é¥ê</a>¤ä<a href="http://www.yoshidam.net/Ruby_ja.html#rddraw">DirectDraw for Ruby</a>¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£</li>
+<li><a href="http://homepage2.nifty.com/sakazuki/rde.html">RDE(Ruby Development Environment)</a> (ÆüËܸì)<br />
+ sakazuki¤µ¤ó¤Î¥Ú¡¼¥¸¡£mswin32Èǥ桼¥¶¤Ê¤éɬ¸«¤Ç¤¹¡£¿ä¾©´Ä¶­¤Ïarton¤µ¤ó¤È¤³¤ÎActiveScriptRuby¤Ç¤¹¤¬ (^^; ¤³¤³¤ÎÇÛÉÛʪ¤ò»È¤Ã¤Æ¤âÌäÂê¤Ê¤¯Æ°ºî¤·¤Þ¤¹¡£</li>
+</ul>
+
+
+
+<p class="footer">
+[<a href="../">Ìá¤ë</a>]
+</p>
+<address>written by <a href="mailto:usa@ruby-lang.org">U.Nakamura</a></address>
+<p class="versions">
+ruby 1.9.0 (2004-01-13)<br />
+ERb 2.0.4<br />
+RDtool 0.6.11<br />
+rublog 0.0.2
+</p>
+
+</body>
+</html>
diff --git a/test/rexml/data/evaluate.xml b/test/rexml/data/evaluate.xml
new file mode 100644
index 0000000000..90d06bd652
--- /dev/null
+++ b/test/rexml/data/evaluate.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<evaluate>
+ <data>
+ <jumps>
+ <subject>
+ <the/>
+ <fox color="brown"/>
+ <speed category="quick"/>
+ </subject>
+ <over/>
+ <object>
+ <the/>
+ <dog color="unspecified"/>
+ <speed category="lazy"/>
+ </object>
+ </jumps>
+ </data>
+
+ <!-- there is one element with attribute color="brown" should this
+ meta-test should succeed -->
+
+ <metatest select="//@color">brown</metatest>
+
+ <!-- there is no element with attribute category="moderate" -->
+ <metatest select="//speed/@category">moderate</metatest>
+
+</evaluate>
diff --git a/test/rexml/data/fibo.xml b/test/rexml/data/fibo.xml
new file mode 100644
index 0000000000..9b5d0ecd87
--- /dev/null
+++ b/test/rexml/data/fibo.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Fibonacci_Numbers>
+ <fibonacci index="0">0</fibonacci>
+ <fibonacci index="1">1</fibonacci>
+ <fibonacci index="2">1</fibonacci>
+ <fibonacci index="3">2</fibonacci>
+ <fibonacci index="4">3</fibonacci>
+ <fibonacci index="5">5</fibonacci>
+ <fibonacci index="6">8</fibonacci>
+ <fibonacci index="7">13</fibonacci>
+ <fibonacci index="8">21</fibonacci>
+ <fibonacci index="9">34</fibonacci>
+ <fibonacci index="10">55</fibonacci>
+ <fibonacci index="11">89</fibonacci>
+ <fibonacci index="12">144</fibonacci>
+ <fibonacci index="13">233</fibonacci>
+ <fibonacci index="14">377</fibonacci>
+ <fibonacci index="15">610</fibonacci>
+ <fibonacci index="16">987</fibonacci>
+ <fibonacci index="17">1597</fibonacci>
+ <fibonacci index="18">2584</fibonacci>
+ <fibonacci index="19">4181</fibonacci>
+ <fibonacci index="20">6765</fibonacci>
+ <fibonacci index="21">10946</fibonacci>
+ <fibonacci index="22">17711</fibonacci>
+ <fibonacci index="23">28657</fibonacci>
+ <fibonacci index="24">46368</fibonacci>
+ <fibonacci index="25">75025</fibonacci>
+</Fibonacci_Numbers>
diff --git a/test/rexml/data/foo.xml b/test/rexml/data/foo.xml
new file mode 100644
index 0000000000..53b9a4e003
--- /dev/null
+++ b/test/rexml/data/foo.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE schema SYSTEM "foo.dtd" [
+<!ATTLIST root-el
+ xmlns:human CDATA #FIXED "http://www.foo.com/human">
+]>
+<root-el xmlns="http://www.bar.com/doc"
+ xmlns:table="http://www.foo.com/table">
+ <human:leg>human leg</human:leg>
+ <table:leg>table leg</table:leg>
+</root-el>
diff --git a/test/rexml/data/google.2.xml b/test/rexml/data/google.2.xml
new file mode 100644
index 0000000000..a1df93b107
--- /dev/null
+++ b/test/rexml/data/google.2.xml
@@ -0,0 +1,156 @@
+<form xmlns='http://www.w3.org/1999/xhtml'
+ enctype='application/x-www-form-urlencoded' class='rollover'
+ action='ModifyCampaign' method='POST'
+ onsubmit='return beforeRolloverSubmit(this, &apos;No campaigns selected.&apos;);'>
+ <a name='campaigns' shape='rect'/>
+ <tr bgcolor='#dbe6de'>
+ <th class='boxcolumn' rowspan='1' align='left' colspan='1'
+ width='1%'>
+ <script type='text/javascript'>document.write(" &lt;input
+ type\u003d\"checkbox\" name\u003d\"toggleAll\"
+ onclick\u003d\"rowToggleAll(this);\" title\u003d\"Select or
+ de-select all campaigns on this page\"&gt; ");</script>
+ </th>
+ <th bgcolor='#dbe6de' title='Sort by campaign name' nowrap='nowrap'
+ rowspan='1' align='left' colspan='1'>
+ <b>
+ <a href='CampaignSummary?campaignsummaryt=0%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Campaign Name</a>
+ </b>
+ </th>
+ <th bgcolor='#dbe6de' title='Sort by campaign status'
+ nowrap='nowrap' rowspan='1' align='left' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=1%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Current Status</a>
+ </th>
+ <th bgcolor='#dbe6de'
+ title='Sort by daily budget (maximum spending per day)'
+ nowrap='nowrap' rowspan='1' align='right' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=2%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Current Budget</a>
+ <span style='white-space: nowrap'>
+ <a href='/support/bin/answer.py?answer=6312&amp;hl=en_US'
+ shape='rect' id='' onclick='return helpPopUp(this);' style=''
+ target='google_popup'>[?]</a>
+ </span>
+ </th>
+ <th bgcolor='#c6d7cf' title='Sort by clicks on your ads'
+ nowrap='nowrap' rowspan='1' align='right' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=-3%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Clicks</a>
+ <a href='CampaignSummary?campaignsummaryt=-3%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ shape='rect' style='text-decoration:none;'>
+ <img src='/select/images/sortdown.gif' border='0' alt=''/>
+ </a>
+ </th>
+ <th bgcolor='#dbe6de' title='Sort by ad impressions served'
+ nowrap='nowrap' rowspan='1' align='right' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=4%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Impr.</a>
+ </th>
+ <th bgcolor='#dbe6de' title='Sort by CTR (clickthrough rate)'
+ nowrap='nowrap' rowspan='1' align='right' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=5%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>CTR</a>
+ </th>
+ <th bgcolor='#dbe6de' title='Sort by average cost per click (USD)'
+ nowrap='nowrap' rowspan='1' align='right' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=6%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Avg. CPC</a>
+ </th>
+ <th bgcolor='#dbe6de' class='' title='Sort by total cost (USD)'
+ nowrap='nowrap' rowspan='1' align='right' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=8%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Cost</a>
+ </th>
+ <th bgcolor='#dbe6de' title='Conversion Rate' nowrap='nowrap'
+ rowspan='1' align='right' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=11%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Conv. Rate</a>
+ </th>
+ <th bgcolor='#dbe6de' class='rightcolumn'
+ title='Cost per Conversion' nowrap='nowrap' rowspan='1'
+ align='right' colspan='1'>
+ <a href='CampaignSummary?campaignsummaryt=12%3Aa&amp;gsessionid=ezmXK9aaXnI#campaigns'
+ class='bluelink' shape='rect'>Cost/Conv.</a>
+ </th>
+ </tr>
+ <tr onmouseover='ron(3527627);' id='tr_3527627'
+ onmouseout='roff(3527627);'>
+ <td class='boxcolumn' rowspan='1' onclick='rowToggle(3527627);'
+ colspan='1'>
+ <input name='campaignid' type='checkbox' id='box_3527627'
+ value='3527627' onclick='toggleRow(this);'/>
+ </td>
+ <td rowspan='1' colspan='1'>
+ <a href='CampaignManagement?campaignid=3527627#a' shape='rect'>Test</a>
+ </td>
+ <td rowspan='1' colspan='1'>
+ <b>
+ <font size='-1' color='#b98b00'>Paused</font>
+ </b>
+ </td>
+ <td class='r' rowspan='1' colspan='1'>
+ <font color='#666666'>Test</font>
+ </td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='' rowspan='1' align='right' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='rightcolumn' rowspan='1' align='right' colspan='1'>1</td>
+ </tr>
+ <tr onmouseover='ron(7680287);' id='tr_7680287'
+ onmouseout='roff(7680287);'>
+ <td class='boxcolumn' rowspan='1' onclick='rowToggle(7680287);'
+ colspan='1'>
+ <input name='campaignid' type='checkbox' id='box_7680287'
+ value='7680287' onclick='toggleRow(this);'/>
+ </td>
+ <td rowspan='1' colspan='1'>
+ <a href='CampaignManagement?campaignid=7680287#a' shape='rect'>Test</a>
+ </td>
+ <td rowspan='1' colspan='1'>
+ <b>
+ <font size='-1' color='#b98b00'>Paused</font>
+ </b>
+ </td>
+ <td class='r' rowspan='1' colspan='1'>
+ <font color='#666666'>Test</font>
+ </td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='' rowspan='1' align='right' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='rightcolumn' rowspan='1' align='right' colspan='1'>1</td>
+ </tr>
+ <tr onmouseover='ron(6747347);' id='tr_6747347'
+ onmouseout='roff(6747347);'>
+ <td class='boxcolumn' rowspan='1' onclick='rowToggle(6747347);'
+ colspan='1'>
+ <input name='campaignid' type='checkbox' id='box_6747347'
+ value='6747347' onclick='toggleRow(this);'/>
+ </td>
+ <td rowspan='1' colspan='1'>
+ <a href='CampaignManagement?campaignid=6747347#a' shape='rect'>Test</a>
+ </td>
+ <td rowspan='1' colspan='1'>
+ <b>
+ <font size='-1' color='#b98b00'>Test</font>
+ </b>
+ </td>
+ <td class='r' rowspan='1' colspan='1'>
+ <font color='#666666'>Test</font>
+ </td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='' rowspan='1' align='right' colspan='1'>1</td>
+ <td class='r' rowspan='1' colspan='1'>1</td>
+ <td class='rightcolumn' rowspan='1' align='right' colspan='1'>1</td>
+ </tr>
+</form>
diff --git a/test/rexml/data/id.xml b/test/rexml/data/id.xml
new file mode 100644
index 0000000000..749ab207ce
--- /dev/null
+++ b/test/rexml/data/id.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE foo [
+
+<!ELEMENT foo (bar)>
+<!ATTLIST foo id CDATA #IMPLIED>
+<!ELEMENT bar (#PCDATA|cheese)*>
+<!ATTLIST bar id ID #REQUIRED>
+<!ELEMENT cheese (#PCDATA)>
+<!ATTLIST cheese kind ID #IMPLIED>
+]>
+
+<foo id="foobar">
+ <bar id="fb1">
+ baz
+ <cheese kind="edam">gouda</cheese>
+ baz
+ <cheese kind="gouda">cheddar</cheese>
+ baz
+ </bar>
+</foo>
diff --git a/test/rexml/data/iso8859-1.xml b/test/rexml/data/iso8859-1.xml
new file mode 100644
index 0000000000..5fb04ec9ba
--- /dev/null
+++ b/test/rexml/data/iso8859-1.xml
@@ -0,0 +1,4 @@
+<?xml version='1.0' encoding='ISO-8859-1'?>
+<booh>
+ <image caption='andrè is nice'/>
+</booh>
diff --git a/test/rexml/data/jaxen24.xml b/test/rexml/data/jaxen24.xml
new file mode 100644
index 0000000000..9b819967ee
--- /dev/null
+++ b/test/rexml/data/jaxen24.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<body><p><span></span></p><div></div></body>
diff --git a/test/rexml/data/jaxen3.xml b/test/rexml/data/jaxen3.xml
new file mode 100644
index 0000000000..a87723a3b9
--- /dev/null
+++ b/test/rexml/data/jaxen3.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+ <hostname>
+ <val>2</val>
+ <attrlist>
+ <hostname>CE-A</hostname>
+ </attrlist>
+ </hostname>
+ <hostname>
+ <val>1</val>
+ <attrlist>
+ <hostname>CE-B</hostname>
+ </attrlist>
+ </hostname>
+</Configuration>
diff --git a/test/rexml/data/lang.xml b/test/rexml/data/lang.xml
new file mode 100644
index 0000000000..49b45db291
--- /dev/null
+++ b/test/rexml/data/lang.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<e1 xml:lang="hr">
+ <e2 xml:lang="en-US">
+ <e3/>
+ </e2>
+ <e2 xml:lang="hu">
+ <e3/>
+ <e3/>
+ <e3 xml:lang="es"/>
+ </e2>
+</e1> \ No newline at end of file
diff --git a/test/rexml/data/lang0.xml b/test/rexml/data/lang0.xml
new file mode 100644
index 0000000000..283b4e0f08
--- /dev/null
+++ b/test/rexml/data/lang0.xml
@@ -0,0 +1,18 @@
+<programming_languages>
+ <language oop='yes'>
+ <name>
+ Ruby
+ </name>
+ <creator>
+ Yukihiro Matsumoto
+ </creator>
+ </language>
+ <language oop='yes'>
+ <name>
+ Python
+ </name>
+ <creator>
+ Guido van Rossum
+ </creator>
+ </language>
+</programming_languages>
diff --git a/test/rexml/data/message.xml b/test/rexml/data/message.xml
new file mode 100644
index 0000000000..3b81df2a86
--- /dev/null
+++ b/test/rexml/data/message.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<message>
+ <header>
+ <service>lookupformservice</service>
+ <connectionid>9</connectionid>
+ <appid>stammdaten</appid>
+ <action>new</action>
+ </header>
+ <body>
+ <data>
+ <items>
+ <item>
+ <name>iteminfo</name>
+ <value>ELE</value>
+ </item>
+ <item>
+ <name>parentinfo</name>
+ <value>Pruefgebiete</value>
+ </item>
+ <item>
+ <name>id</name>
+ <value>1</value>
+ </item>
+ </items>
+ </data>
+ </body>
+</message>
diff --git a/test/rexml/data/moreover.xml b/test/rexml/data/moreover.xml
new file mode 100644
index 0000000000..38d4c4f81c
--- /dev/null
+++ b/test/rexml/data/moreover.xml
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+ <moreovernews>
+ <article code="13563275">
+ <url>http://c.moreover.com/click/here.pl?x13563273</url>
+ <headline_text>e-Commerce Operators Present Version 1.0 of the XML Standard</headline_text>
+ <source>StockAccess</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.stockaccess.com/index.html</document_url>
+ <harvest_time>Dec 24 2000 6:28AM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13560996">
+ <url>http://c.moreover.com/click/here.pl?x13560995</url>
+ <headline_text>W3C Publishes XML Protocol Requirements Document</headline_text>
+ <source>Xml</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.xml.com/</document_url>
+ <harvest_time>Dec 24 2000 12:22AM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13553522">
+ <url>http://c.moreover.com/click/here.pl?x13553521</url>
+ <headline_text>Prowler: Open Source XML-Based Content Management Framework</headline_text>
+ <source>Xml</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.xml.com/</document_url>
+ <harvest_time>Dec 23 2000 2:05PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13549014">
+ <url>http://c.moreover.com/click/here.pl?x13549013</url>
+ <headline_text>The Middleware Company Debuts Public Training Courses in Ejb, J2ee And Xml</headline_text>
+ <source>Java Industry Connection</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://industry.java.sun.com/javanews/more/hotnews/</document_url>
+ <harvest_time>Dec 23 2000 12:15PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13544468">
+ <url>http://c.moreover.com/click/here.pl?x13544467</url>
+ <headline_text>Revised Working Draft for the W3C XML Information Set</headline_text>
+ <source>Xml</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.xml.com/</document_url>
+ <harvest_time>Dec 23 2000 5:50AM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13534837">
+ <url>http://c.moreover.com/click/here.pl?x13534836</url>
+ <headline_text>XML: Its The Great Peacemaker</headline_text>
+ <source>ZDNet</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.zdnet.com/intweek/</document_url>
+ <harvest_time>Dec 22 2000 9:05PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13533486">
+ <url>http://c.moreover.com/click/here.pl?x13533485</url>
+ <headline_text>Project eL - The XML Leningrad Codex Markup Project</headline_text>
+ <source>Xml</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.xml.com/</document_url>
+ <harvest_time>Dec 22 2000 8:34PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13533489">
+ <url>http://c.moreover.com/click/here.pl?x13533488</url>
+ <headline_text>XML Linking Language (XLink) and XML Base Specifications Issued as W3C Proposed Recommenda</headline_text>
+ <source>Xml</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.xml.com/</document_url>
+ <harvest_time>Dec 22 2000 8:34PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13533493">
+ <url>http://c.moreover.com/click/here.pl?x13533492</url>
+ <headline_text>W3C Releases XHTML Basic Specification as a W3C Recommendation</headline_text>
+ <source>Xml</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.xml.com/</document_url>
+ <harvest_time>Dec 22 2000 8:34PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13521835">
+ <url>http://c.moreover.com/click/here.pl?x13521827</url>
+ <headline_text>Java, Xml And Oracle9i(TM) Make A Great Team</headline_text>
+ <source>Java Industry Connection</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://industry.java.sun.com/javanews/more/hotnews/</document_url>
+ <harvest_time>Dec 22 2000 3:21PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13512020">
+ <url>http://c.moreover.com/click/here.pl?x13511233</url>
+ <headline_text>Competing initiatives to vie for security standard</headline_text>
+ <source>ZDNet</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.zdnet.com/eweek/filters/news/</document_url>
+ <harvest_time>Dec 22 2000 10:54AM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13492401">
+ <url>http://c.moreover.com/click/here.pl?x13492397</url>
+ <headline_text>Oracle Provides Developers with Great Xml Reading This Holiday Season</headline_text>
+ <source>Java Industry Connection</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://industry.java.sun.com/javanews/more/hotnews/</document_url>
+ <harvest_time>Dec 21 2000 8:08PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13491296">
+ <url>http://c.moreover.com/click/here.pl?x13491292</url>
+ <headline_text>XML as the great peacemaker - Extensible Markup Language Accomplished The Seemingly Impossible This Year: It B</headline_text>
+ <source>Hospitality Net</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.hospitalitynet.org/news/list.htm?c=2000</document_url>
+ <harvest_time>Dec 21 2000 7:45PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13484761">
+ <url>http://c.moreover.com/click/here.pl?x13484758</url>
+ <headline_text>XML as the great peacemaker</headline_text>
+ <source>CNET</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://news.cnet.com/news/0-1003.html?tag=st.ne.1002.dir.1003</document_url>
+ <harvest_time>Dec 21 2000 4:41PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13480897">
+ <url>http://c.moreover.com/click/here.pl?x13480896</url>
+ <headline_text>COOP Switzerland Selects Mercator as Integration Platform</headline_text>
+ <source>Stockhouse Canada</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.stockhouse.ca/news/</document_url>
+ <harvest_time>Dec 21 2000 1:55PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13471024">
+ <url>http://c.moreover.com/click/here.pl?x13471023</url>
+ <headline_text>Competing XML Specs Move Toward a Union</headline_text>
+ <source>Internet World</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://www.internetworld.com/</document_url>
+ <harvest_time>Dec 21 2000 11:14AM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13452281">
+ <url>http://c.moreover.com/click/here.pl?x13452280</url>
+ <headline_text>Next-generation XHTML stripped down for handhelds</headline_text>
+ <source>CNET</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://news.cnet.com/news/0-1005.html?tag=st.ne.1002.dir.1005</document_url>
+ <harvest_time>Dec 20 2000 9:11PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13451791">
+ <url>http://c.moreover.com/click/here.pl?x13451789</url>
+ <headline_text>Xml Powers Oracle9i(TM) Dynamic Services</headline_text>
+ <source>Java Industry Connection</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://industry.java.sun.com/javanews/more/hotnews/</document_url>
+ <harvest_time>Dec 20 2000 9:05PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13442098">
+ <url>http://c.moreover.com/click/here.pl?x13442097</url>
+ <headline_text>XML DOM reference guide</headline_text>
+ <source>ASPWire</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://aspwire.com/</document_url>
+ <harvest_time>Dec 20 2000 6:26PM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ <article code="13424118">
+ <url>http://c.moreover.com/click/here.pl?x13424117</url>
+ <headline_text>Repeat/Xqsite And Bowstreet Team to Deliver Integrated Xml Solutions</headline_text>
+ <source>Java Industry Connection</source>
+ <media_type>text</media_type>
+ <cluster>moreover...</cluster>
+ <tagline> </tagline>
+ <document_url>http://industry.java.sun.com/javanews/more/hotnews/</document_url>
+ <harvest_time>Dec 20 2000 9:04AM</harvest_time>
+ <access_registration> </access_registration>
+ <access_status> </access_status>
+ </article>
+ </moreovernews>
+
diff --git a/test/rexml/data/much_ado.xml b/test/rexml/data/much_ado.xml
new file mode 100644
index 0000000000..f008fadbb0
--- /dev/null
+++ b/test/rexml/data/much_ado.xml
@@ -0,0 +1,6850 @@
+<?xml version="1.0"?>
+<PLAY>
+<TITLE>Much Ado about Nothing</TITLE>
+
+<FM>
+<P>Text placed in the public domain by Moby Lexical Tools, 1992.</P>
+<P>SGML markup by Jon Bosak, 1992-1994.</P>
+<P>XML version by Jon Bosak, 1996-1998.</P>
+<P>This work may be freely copied and distributed worldwide.</P>
+</FM>
+
+
+<PERSONAE>
+<TITLE>Dramatis Personae</TITLE>
+
+<PERSONA>DON PEDRO, prince of Arragon.</PERSONA>
+<PERSONA>DON JOHN, his bastard brother.</PERSONA>
+<PERSONA>CLAUDIO, a young lord of Florence.</PERSONA>
+<PERSONA>BENEDICK, a young lord of Padua.</PERSONA>
+<PERSONA>LEONATO, governor of Messina.</PERSONA>
+<PERSONA>ANTONIO, his brother.</PERSONA>
+<PERSONA>BALTHASAR, attendant on Don Pedro.</PERSONA>
+
+<PGROUP>
+<PERSONA>CONRADE</PERSONA>
+<PERSONA>BORACHIO</PERSONA>
+<GRPDESCR>followers of Don John.</GRPDESCR>
+</PGROUP>
+
+<PERSONA>FRIAR FRANCIS</PERSONA>
+<PERSONA>DOGBERRY, a constable.</PERSONA>
+<PERSONA>VERGES, a headborough.</PERSONA>
+<PERSONA>A Sexton.</PERSONA>
+<PERSONA>A Boy.</PERSONA>
+<PERSONA>HERO, daughter to Leonato.</PERSONA>
+<PERSONA>BEATRICE, niece to Leonato.</PERSONA>
+
+<PGROUP>
+<PERSONA>MARGARET</PERSONA>
+<PERSONA>URSULA</PERSONA>
+<GRPDESCR>gentlewomen attending on Hero.</GRPDESCR>
+</PGROUP>
+
+<PERSONA>Messengers, Watch, Attendants, &amp;c. </PERSONA>
+</PERSONAE>
+
+<SCNDESCR>SCENE Messina.</SCNDESCR>
+
+<PLAYSUBT>MUCH ADO ABOUT NOTHING</PLAYSUBT>
+
+<ACT><TITLE>ACT I</TITLE>
+
+<SCENE><TITLE>SCENE I. Before LEONATO'S house.</TITLE>
+<STAGEDIR>Enter LEONATO, HERO, and BEATRICE, with a
+Messenger</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I learn in this letter that Don Peter of Arragon</LINE>
+<LINE>comes this night to Messina.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>He is very near by this: he was not three leagues off</LINE>
+<LINE>when I left him.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>How many gentlemen have you lost in this action?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>But few of any sort, and none of name.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>A victory is twice itself when the achiever brings</LINE>
+<LINE>home full numbers. I find here that Don Peter hath</LINE>
+<LINE>bestowed much honour on a young Florentine called Claudio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>Much deserved on his part and equally remembered by</LINE>
+<LINE>Don Pedro: he hath borne himself beyond the</LINE>
+<LINE>promise of his age, doing, in the figure of a lamb,</LINE>
+<LINE>the feats of a lion: he hath indeed better</LINE>
+<LINE>bettered expectation than you must expect of me to</LINE>
+<LINE>tell you how.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>He hath an uncle here in Messina will be very much</LINE>
+<LINE>glad of it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>I have already delivered him letters, and there</LINE>
+<LINE>appears much joy in him; even so much that joy could</LINE>
+<LINE>not show itself modest enough without a badge of</LINE>
+<LINE>bitterness.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Did he break out into tears?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>In great measure.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>A kind overflow of kindness: there are no faces</LINE>
+<LINE>truer than those that are so washed. How much</LINE>
+<LINE>better is it to weep at joy than to joy at weeping!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I pray you, is Signior Mountanto returned from the</LINE>
+<LINE>wars or no?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>I know none of that name, lady: there was none such</LINE>
+<LINE>in the army of any sort.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>What is he that you ask for, niece?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>My cousin means Signior Benedick of Padua.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>O, he's returned; and as pleasant as ever he was.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>He set up his bills here in Messina and challenged</LINE>
+<LINE>Cupid at the flight; and my uncle's fool, reading</LINE>
+<LINE>the challenge, subscribed for Cupid, and challenged</LINE>
+<LINE>him at the bird-bolt. I pray you, how many hath he</LINE>
+<LINE>killed and eaten in these wars? But how many hath</LINE>
+<LINE>he killed? for indeed I promised to eat all of his killing.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Faith, niece, you tax Signior Benedick too much;</LINE>
+<LINE>but he'll be meet with you, I doubt it not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>He hath done good service, lady, in these wars.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>You had musty victual, and he hath holp to eat it:</LINE>
+<LINE>he is a very valiant trencherman; he hath an</LINE>
+<LINE>excellent stomach.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>And a good soldier too, lady.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>And a good soldier to a lady: but what is he to a lord?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>A lord to a lord, a man to a man; stuffed with all</LINE>
+<LINE>honourable virtues.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>It is so, indeed; he is no less than a stuffed man:</LINE>
+<LINE>but for the stuffing,--well, we are all mortal.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>You must not, sir, mistake my niece. There is a</LINE>
+<LINE>kind of merry war betwixt Signior Benedick and her:</LINE>
+<LINE>they never meet but there's a skirmish of wit</LINE>
+<LINE>between them.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Alas! he gets nothing by that. In our last</LINE>
+<LINE>conflict four of his five wits went halting off, and</LINE>
+<LINE>now is the whole man governed with one: so that if</LINE>
+<LINE>he have wit enough to keep himself warm, let him</LINE>
+<LINE>bear it for a difference between himself and his</LINE>
+<LINE>horse; for it is all the wealth that he hath left,</LINE>
+<LINE>to be known a reasonable creature. Who is his</LINE>
+<LINE>companion now? He hath every month a new sworn brother.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>Is't possible?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Very easily possible: he wears his faith but as</LINE>
+<LINE>the fashion of his hat; it ever changes with the</LINE>
+<LINE>next block.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>I see, lady, the gentleman is not in your books.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>No; an he were, I would burn my study. But, I pray</LINE>
+<LINE>you, who is his companion? Is there no young</LINE>
+<LINE>squarer now that will make a voyage with him to the devil?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>He is most in the company of the right noble Claudio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>O Lord, he will hang upon him like a disease: he</LINE>
+<LINE>is sooner caught than the pestilence, and the taker</LINE>
+<LINE>runs presently mad. God help the noble Claudio! if</LINE>
+<LINE>he have caught the Benedick, it will cost him a</LINE>
+<LINE>thousand pound ere a' be cured.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>I will hold friends with you, lady.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Do, good friend.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>You will never run mad, niece.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>No, not till a hot January.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>Don Pedro is approached.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter DON PEDRO, DON JOHN, CLAUDIO, BENEDICK,
+and BALTHASAR</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Good Signior Leonato, you are come to meet your</LINE>
+<LINE>trouble: the fashion of the world is to avoid</LINE>
+<LINE>cost, and you encounter it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Never came trouble to my house in the likeness of</LINE>
+<LINE>your grace: for trouble being gone, comfort should</LINE>
+<LINE>remain; but when you depart from me, sorrow abides</LINE>
+<LINE>and happiness takes his leave.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>You embrace your charge too willingly. I think this</LINE>
+<LINE>is your daughter.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Her mother hath many times told me so.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Were you in doubt, sir, that you asked her?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Signior Benedick, no; for then were you a child.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>You have it full, Benedick: we may guess by this</LINE>
+<LINE>what you are, being a man. Truly, the lady fathers</LINE>
+<LINE>herself. Be happy, lady; for you are like an</LINE>
+<LINE>honourable father.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>If Signior Leonato be her father, she would not</LINE>
+<LINE>have his head on her shoulders for all Messina, as</LINE>
+<LINE>like him as she is.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I wonder that you will still be talking, Signior</LINE>
+<LINE>Benedick: nobody marks you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>What, my dear Lady Disdain! are you yet living?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Is it possible disdain should die while she hath</LINE>
+<LINE>such meet food to feed it as Signior Benedick?</LINE>
+<LINE>Courtesy itself must convert to disdain, if you come</LINE>
+<LINE>in her presence.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Then is courtesy a turncoat. But it is certain I</LINE>
+<LINE>am loved of all ladies, only you excepted: and I</LINE>
+<LINE>would I could find in my heart that I had not a hard</LINE>
+<LINE>heart; for, truly, I love none.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>A dear happiness to women: they would else have</LINE>
+<LINE>been troubled with a pernicious suitor. I thank God</LINE>
+<LINE>and my cold blood, I am of your humour for that: I</LINE>
+<LINE>had rather hear my dog bark at a crow than a man</LINE>
+<LINE>swear he loves me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>God keep your ladyship still in that mind! so some</LINE>
+<LINE>gentleman or other shall 'scape a predestinate</LINE>
+<LINE>scratched face.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Scratching could not make it worse, an 'twere such</LINE>
+<LINE>a face as yours were.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Well, you are a rare parrot-teacher.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>A bird of my tongue is better than a beast of yours.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I would my horse had the speed of your tongue, and</LINE>
+<LINE>so good a continuer. But keep your way, i' God's</LINE>
+<LINE>name; I have done.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>You always end with a jade's trick: I know you of old.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>That is the sum of all, Leonato. Signior Claudio</LINE>
+<LINE>and Signior Benedick, my dear friend Leonato hath</LINE>
+<LINE>invited you all. I tell him we shall stay here at</LINE>
+<LINE>the least a month; and he heartily prays some</LINE>
+<LINE>occasion may detain us longer. I dare swear he is no</LINE>
+<LINE>hypocrite, but prays from his heart.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>If you swear, my lord, you shall not be forsworn.</LINE>
+<STAGEDIR>To DON JOHN</STAGEDIR>
+<LINE>Let me bid you welcome, my lord: being reconciled to</LINE>
+<LINE>the prince your brother, I owe you all duty.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I thank you: I am not of many words, but I thank</LINE>
+<LINE>you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Please it your grace lead on?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Your hand, Leonato; we will go together.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt all except BENEDICK and CLAUDIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Benedick, didst thou note the daughter of Signior Leonato?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I noted her not; but I looked on her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Is she not a modest young lady?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Do you question me, as an honest man should do, for</LINE>
+<LINE>my simple true judgment; or would you have me speak</LINE>
+<LINE>after my custom, as being a professed tyrant to their sex?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>No; I pray thee speak in sober judgment.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Why, i' faith, methinks she's too low for a high</LINE>
+<LINE>praise, too brown for a fair praise and too little</LINE>
+<LINE>for a great praise: only this commendation I can</LINE>
+<LINE>afford her, that were she other than she is, she</LINE>
+<LINE>were unhandsome; and being no other but as she is, I</LINE>
+<LINE>do not like her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Thou thinkest I am in sport: I pray thee tell me</LINE>
+<LINE>truly how thou likest her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Would you buy her, that you inquire after her?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Can the world buy such a jewel?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Yea, and a case to put it into. But speak you this</LINE>
+<LINE>with a sad brow? or do you play the flouting Jack,</LINE>
+<LINE>to tell us Cupid is a good hare-finder and Vulcan a</LINE>
+<LINE>rare carpenter? Come, in what key shall a man take</LINE>
+<LINE>you, to go in the song?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>In mine eye she is the sweetest lady that ever I</LINE>
+<LINE>looked on.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I can see yet without spectacles and I see no such</LINE>
+<LINE>matter: there's her cousin, an she were not</LINE>
+<LINE>possessed with a fury, exceeds her as much in beauty</LINE>
+<LINE>as the first of May doth the last of December. But I</LINE>
+<LINE>hope you have no intent to turn husband, have you?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I would scarce trust myself, though I had sworn the</LINE>
+<LINE>contrary, if Hero would be my wife.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Is't come to this? In faith, hath not the world</LINE>
+<LINE>one man but he will wear his cap with suspicion?</LINE>
+<LINE>Shall I never see a bachelor of three-score again?</LINE>
+<LINE>Go to, i' faith; an thou wilt needs thrust thy neck</LINE>
+<LINE>into a yoke, wear the print of it and sigh away</LINE>
+<LINE>Sundays. Look Don Pedro is returned to seek you.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Re-enter DON PEDRO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>What secret hath held you here, that you followed</LINE>
+<LINE>not to Leonato's?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I would your grace would constrain me to tell.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I charge thee on thy allegiance.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>You hear, Count Claudio: I can be secret as a dumb</LINE>
+<LINE>man; I would have you think so; but, on my</LINE>
+<LINE>allegiance, mark you this, on my allegiance. He is</LINE>
+<LINE>in love. With who? now that is your grace's part.</LINE>
+<LINE>Mark how short his answer is;--With Hero, Leonato's</LINE>
+<LINE>short daughter.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If this were so, so were it uttered.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Like the old tale, my lord: 'it is not so, nor</LINE>
+<LINE>'twas not so, but, indeed, God forbid it should be</LINE>
+<LINE>so.'</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If my passion change not shortly, God forbid it</LINE>
+<LINE>should be otherwise.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Amen, if you love her; for the lady is very well worthy.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>You speak this to fetch me in, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>By my troth, I speak my thought.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And, in faith, my lord, I spoke mine.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>And, by my two faiths and troths, my lord, I spoke mine.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>That I love her, I feel.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>That she is worthy, I know.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>That I neither feel how she should be loved nor</LINE>
+<LINE>know how she should be worthy, is the opinion that</LINE>
+<LINE>fire cannot melt out of me: I will die in it at the stake.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Thou wast ever an obstinate heretic in the despite</LINE>
+<LINE>of beauty.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And never could maintain his part but in the force</LINE>
+<LINE>of his will.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>That a woman conceived me, I thank her; that she</LINE>
+<LINE>brought me up, I likewise give her most humble</LINE>
+<LINE>thanks: but that I will have a recheat winded in my</LINE>
+<LINE>forehead, or hang my bugle in an invisible baldrick,</LINE>
+<LINE>all women shall pardon me. Because I will not do</LINE>
+<LINE>them the wrong to mistrust any, I will do myself the</LINE>
+<LINE>right to trust none; and the fine is, for the which</LINE>
+<LINE>I may go the finer, I will live a bachelor.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I shall see thee, ere I die, look pale with love.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>With anger, with sickness, or with hunger, my lord,</LINE>
+<LINE>not with love: prove that ever I lose more blood</LINE>
+<LINE>with love than I will get again with drinking, pick</LINE>
+<LINE>out mine eyes with a ballad-maker's pen and hang me</LINE>
+<LINE>up at the door of a brothel-house for the sign of</LINE>
+<LINE>blind Cupid.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Well, if ever thou dost fall from this faith, thou</LINE>
+<LINE>wilt prove a notable argument.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>If I do, hang me in a bottle like a cat and shoot</LINE>
+<LINE>at me; and he that hits me, let him be clapped on</LINE>
+<LINE>the shoulder, and called Adam.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Well, as time shall try: 'In time the savage bull</LINE>
+<LINE>doth bear the yoke.'</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>The savage bull may; but if ever the sensible</LINE>
+<LINE>Benedick bear it, pluck off the bull's horns and set</LINE>
+<LINE>them in my forehead: and let me be vilely painted,</LINE>
+<LINE>and in such great letters as they write 'Here is</LINE>
+<LINE>good horse to hire,' let them signify under my sign</LINE>
+<LINE>'Here you may see Benedick the married man.'</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If this should ever happen, thou wouldst be horn-mad.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Nay, if Cupid have not spent all his quiver in</LINE>
+<LINE>Venice, thou wilt quake for this shortly.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I look for an earthquake too, then.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Well, you temporize with the hours. In the</LINE>
+<LINE>meantime, good Signior Benedick, repair to</LINE>
+<LINE>Leonato's: commend me to him and tell him I will</LINE>
+<LINE>not fail him at supper; for indeed he hath made</LINE>
+<LINE>great preparation.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I have almost matter enough in me for such an</LINE>
+<LINE>embassage; and so I commit you--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>To the tuition of God: From my house, if I had it,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>The sixth of July: Your loving friend, Benedick.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Nay, mock not, mock not. The body of your</LINE>
+<LINE>discourse is sometime guarded with fragments, and</LINE>
+<LINE>the guards are but slightly basted on neither: ere</LINE>
+<LINE>you flout old ends any further, examine your</LINE>
+<LINE>conscience: and so I leave you.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>My liege, your highness now may do me good.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>My love is thine to teach: teach it but how,</LINE>
+<LINE>And thou shalt see how apt it is to learn</LINE>
+<LINE>Any hard lesson that may do thee good.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Hath Leonato any son, my lord?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>No child but Hero; she's his only heir.</LINE>
+<LINE>Dost thou affect her, Claudio?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>O, my lord,</LINE>
+<LINE>When you went onward on this ended action,</LINE>
+<LINE>I look'd upon her with a soldier's eye,</LINE>
+<LINE>That liked, but had a rougher task in hand</LINE>
+<LINE>Than to drive liking to the name of love:</LINE>
+<LINE>But now I am return'd and that war-thoughts</LINE>
+<LINE>Have left their places vacant, in their rooms</LINE>
+<LINE>Come thronging soft and delicate desires,</LINE>
+<LINE>All prompting me how fair young Hero is,</LINE>
+<LINE>Saying, I liked her ere I went to wars.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Thou wilt be like a lover presently</LINE>
+<LINE>And tire the hearer with a book of words.</LINE>
+<LINE>If thou dost love fair Hero, cherish it,</LINE>
+<LINE>And I will break with her and with her father,</LINE>
+<LINE>And thou shalt have her. Was't not to this end</LINE>
+<LINE>That thou began'st to twist so fine a story?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>How sweetly you do minister to love,</LINE>
+<LINE>That know love's grief by his complexion!</LINE>
+<LINE>But lest my liking might too sudden seem,</LINE>
+<LINE>I would have salved it with a longer treatise.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>What need the bridge much broader than the flood?</LINE>
+<LINE>The fairest grant is the necessity.</LINE>
+<LINE>Look, what will serve is fit: 'tis once, thou lovest,</LINE>
+<LINE>And I will fit thee with the remedy.</LINE>
+<LINE>I know we shall have revelling to-night:</LINE>
+<LINE>I will assume thy part in some disguise</LINE>
+<LINE>And tell fair Hero I am Claudio,</LINE>
+<LINE>And in her bosom I'll unclasp my heart</LINE>
+<LINE>And take her hearing prisoner with the force</LINE>
+<LINE>And strong encounter of my amorous tale:</LINE>
+<LINE>Then after to her father will I break;</LINE>
+<LINE>And the conclusion is, she shall be thine.</LINE>
+<LINE>In practise let us put it presently.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE II. A room in LEONATO's house.</TITLE>
+<STAGEDIR>Enter LEONATO and ANTONIO, meeting</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>How now, brother! Where is my cousin, your son?</LINE>
+<LINE>hath he provided this music?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>He is very busy about it. But, brother, I can tell</LINE>
+<LINE>you strange news that you yet dreamt not of.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Are they good?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>As the event stamps them: but they have a good</LINE>
+<LINE>cover; they show well outward. The prince and Count</LINE>
+<LINE>Claudio, walking in a thick-pleached alley in mine</LINE>
+<LINE>orchard, were thus much overheard by a man of mine:</LINE>
+<LINE>the prince discovered to Claudio that he loved my</LINE>
+<LINE>niece your daughter and meant to acknowledge it</LINE>
+<LINE>this night in a dance: and if he found her</LINE>
+<LINE>accordant, he meant to take the present time by the</LINE>
+<LINE>top and instantly break with you of it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Hath the fellow any wit that told you this?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>A good sharp fellow: I will send for him; and</LINE>
+<LINE>question him yourself.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>No, no; we will hold it as a dream till it appear</LINE>
+<LINE>itself: but I will acquaint my daughter withal,</LINE>
+<LINE>that she may be the better prepared for an answer,</LINE>
+<LINE>if peradventure this be true. Go you and tell her of it.</LINE>
+<STAGEDIR>Enter Attendants</STAGEDIR>
+<LINE>Cousins, you know what you have to do. O, I cry you</LINE>
+<LINE>mercy, friend; go you with me, and I will use your</LINE>
+<LINE>skill. Good cousin, have a care this busy time.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE III. The same.</TITLE>
+<STAGEDIR>Enter DON JOHN and CONRADE</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>What the good-year, my lord! why are you thus out</LINE>
+<LINE>of measure sad?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>There is no measure in the occasion that breeds;</LINE>
+<LINE>therefore the sadness is without limit.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>You should hear reason.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>And when I have heard it, what blessing brings it?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>If not a present remedy, at least a patient</LINE>
+<LINE>sufferance.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I wonder that thou, being, as thou sayest thou art,</LINE>
+<LINE>born under Saturn, goest about to apply a moral</LINE>
+<LINE>medicine to a mortifying mischief. I cannot hide</LINE>
+<LINE>what I am: I must be sad when I have cause and smile</LINE>
+<LINE>at no man's jests, eat when I have stomach and wait</LINE>
+<LINE>for no man's leisure, sleep when I am drowsy and</LINE>
+<LINE>tend on no man's business, laugh when I am merry and</LINE>
+<LINE>claw no man in his humour.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Yea, but you must not make the full show of this</LINE>
+<LINE>till you may do it without controlment. You have of</LINE>
+<LINE>late stood out against your brother, and he hath</LINE>
+<LINE>ta'en you newly into his grace; where it is</LINE>
+<LINE>impossible you should take true root but by the</LINE>
+<LINE>fair weather that you make yourself: it is needful</LINE>
+<LINE>that you frame the season for your own harvest.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I had rather be a canker in a hedge than a rose in</LINE>
+<LINE>his grace, and it better fits my blood to be</LINE>
+<LINE>disdained of all than to fashion a carriage to rob</LINE>
+<LINE>love from any: in this, though I cannot be said to</LINE>
+<LINE>be a flattering honest man, it must not be denied</LINE>
+<LINE>but I am a plain-dealing villain. I am trusted with</LINE>
+<LINE>a muzzle and enfranchised with a clog; therefore I</LINE>
+<LINE>have decreed not to sing in my cage. If I had my</LINE>
+<LINE>mouth, I would bite; if I had my liberty, I would do</LINE>
+<LINE>my liking: in the meantime let me be that I am and</LINE>
+<LINE>seek not to alter me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Can you make no use of your discontent?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I make all use of it, for I use it only.</LINE>
+<LINE>Who comes here?</LINE>
+<STAGEDIR>Enter BORACHIO</STAGEDIR>
+<LINE>What news, Borachio?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>I came yonder from a great supper: the prince your</LINE>
+<LINE>brother is royally entertained by Leonato: and I</LINE>
+<LINE>can give you intelligence of an intended marriage.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Will it serve for any model to build mischief on?</LINE>
+<LINE>What is he for a fool that betroths himself to</LINE>
+<LINE>unquietness?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Marry, it is your brother's right hand.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Who? the most exquisite Claudio?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Even he.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>A proper squire! And who, and who? which way looks</LINE>
+<LINE>he?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Marry, on Hero, the daughter and heir of Leonato.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>A very forward March-chick! How came you to this?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Being entertained for a perfumer, as I was smoking a</LINE>
+<LINE>musty room, comes me the prince and Claudio, hand</LINE>
+<LINE>in hand in sad conference: I whipt me behind the</LINE>
+<LINE>arras; and there heard it agreed upon that the</LINE>
+<LINE>prince should woo Hero for himself, and having</LINE>
+<LINE>obtained her, give her to Count Claudio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Come, come, let us thither: this may prove food to</LINE>
+<LINE>my displeasure. That young start-up hath all the</LINE>
+<LINE>glory of my overthrow: if I can cross him any way, I</LINE>
+<LINE>bless myself every way. You are both sure, and will assist me?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>To the death, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Let us to the great supper: their cheer is the</LINE>
+<LINE>greater that I am subdued. Would the cook were of</LINE>
+<LINE>my mind! Shall we go prove what's to be done?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>We'll wait upon your lordship.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+</ACT>
+
+<ACT><TITLE>ACT II</TITLE>
+
+<SCENE><TITLE>SCENE I. A hall in LEONATO'S house.</TITLE>
+<STAGEDIR>Enter LEONATO, ANTONIO, HERO, BEATRICE, and others</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Was not Count John here at supper?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>I saw him not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>How tartly that gentleman looks! I never can see</LINE>
+<LINE>him but I am heart-burned an hour after.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>He is of a very melancholy disposition.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>He were an excellent man that were made just in the</LINE>
+<LINE>midway between him and Benedick: the one is too</LINE>
+<LINE>like an image and says nothing, and the other too</LINE>
+<LINE>like my lady's eldest son, evermore tattling.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Then half Signior Benedick's tongue in Count John's</LINE>
+<LINE>mouth, and half Count John's melancholy in Signior</LINE>
+<LINE>Benedick's face,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>With a good leg and a good foot, uncle, and money</LINE>
+<LINE>enough in his purse, such a man would win any woman</LINE>
+<LINE>in the world, if a' could get her good-will.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>By my troth, niece, thou wilt never get thee a</LINE>
+<LINE>husband, if thou be so shrewd of thy tongue.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>In faith, she's too curst.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Too curst is more than curst: I shall lessen God's</LINE>
+<LINE>sending that way; for it is said, 'God sends a curst</LINE>
+<LINE>cow short horns;' but to a cow too curst he sends none.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>So, by being too curst, God will send you no horns.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Just, if he send me no husband; for the which</LINE>
+<LINE>blessing I am at him upon my knees every morning and</LINE>
+<LINE>evening. Lord, I could not endure a husband with a</LINE>
+<LINE>beard on his face: I had rather lie in the woollen.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>You may light on a husband that hath no beard.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>What should I do with him? dress him in my apparel</LINE>
+<LINE>and make him my waiting-gentlewoman? He that hath a</LINE>
+<LINE>beard is more than a youth, and he that hath no</LINE>
+<LINE>beard is less than a man: and he that is more than</LINE>
+<LINE>a youth is not for me, and he that is less than a</LINE>
+<LINE>man, I am not for him: therefore, I will even take</LINE>
+<LINE>sixpence in earnest of the bear-ward, and lead his</LINE>
+<LINE>apes into hell.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Well, then, go you into hell?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>No, but to the gate; and there will the devil meet</LINE>
+<LINE>me, like an old cuckold, with horns on his head, and</LINE>
+<LINE>say 'Get you to heaven, Beatrice, get you to</LINE>
+<LINE>heaven; here's no place for you maids:' so deliver</LINE>
+<LINE>I up my apes, and away to Saint Peter for the</LINE>
+<LINE>heavens; he shows me where the bachelors sit, and</LINE>
+<LINE>there live we as merry as the day is long.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE><STAGEDIR>To HERO</STAGEDIR> Well, niece, I trust you will be ruled</LINE>
+<LINE>by your father.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Yes, faith; it is my cousin's duty to make curtsy</LINE>
+<LINE>and say 'Father, as it please you.' But yet for all</LINE>
+<LINE>that, cousin, let him be a handsome fellow, or else</LINE>
+<LINE>make another curtsy and say 'Father, as it please</LINE>
+<LINE>me.'</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Well, niece, I hope to see you one day fitted with a husband.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Not till God make men of some other metal than</LINE>
+<LINE>earth. Would it not grieve a woman to be</LINE>
+<LINE>overmastered with a pierce of valiant dust? to make</LINE>
+<LINE>an account of her life to a clod of wayward marl?</LINE>
+<LINE>No, uncle, I'll none: Adam's sons are my brethren;</LINE>
+<LINE>and, truly, I hold it a sin to match in my kindred.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Daughter, remember what I told you: if the prince</LINE>
+<LINE>do solicit you in that kind, you know your answer.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>The fault will be in the music, cousin, if you be</LINE>
+<LINE>not wooed in good time: if the prince be too</LINE>
+<LINE>important, tell him there is measure in every thing</LINE>
+<LINE>and so dance out the answer. For, hear me, Hero:</LINE>
+<LINE>wooing, wedding, and repenting, is as a Scotch jig,</LINE>
+<LINE>a measure, and a cinque pace: the first suit is hot</LINE>
+<LINE>and hasty, like a Scotch jig, and full as</LINE>
+<LINE>fantastical; the wedding, mannerly-modest, as a</LINE>
+<LINE>measure, full of state and ancientry; and then comes</LINE>
+<LINE>repentance and, with his bad legs, falls into the</LINE>
+<LINE>cinque pace faster and faster, till he sink into his grave.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Cousin, you apprehend passing shrewdly.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I have a good eye, uncle; I can see a church by daylight.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>The revellers are entering, brother: make good room.</LINE>
+</SPEECH>
+
+<STAGEDIR>All put on their masks</STAGEDIR>
+<STAGEDIR>Enter DON PEDRO, CLAUDIO, BENEDICK, BALTHASAR,
+DON JOHN, BORACHIO, MARGARET, URSULA and others, masked</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Lady, will you walk about with your friend?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>So you walk softly and look sweetly and say nothing,</LINE>
+<LINE>I am yours for the walk; and especially when I walk away.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>With me in your company?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>I may say so, when I please.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>And when please you to say so?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>When I like your favour; for God defend the lute</LINE>
+<LINE>should be like the case!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>My visor is Philemon's roof; within the house is Jove.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Why, then, your visor should be thatched.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Speak low, if you speak love.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Drawing her aside</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>Well, I would you did like me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>So would not I, for your own sake; for I have many</LINE>
+<LINE>ill-qualities.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>Which is one?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>I say my prayers aloud.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>I love you the better: the hearers may cry, Amen.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>God match me with a good dancer!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>Amen.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>And God keep him out of my sight when the dance is</LINE>
+<LINE>done! Answer, clerk.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>No more words: the clerk is answered.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>I know you well enough; you are Signior Antonio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>At a word, I am not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>I know you by the waggling of your head.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>To tell you true, I counterfeit him.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>You could never do him so ill-well, unless you were</LINE>
+<LINE>the very man. Here's his dry hand up and down: you</LINE>
+<LINE>are he, you are he.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>At a word, I am not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>Come, come, do you think I do not know you by your</LINE>
+<LINE>excellent wit? can virtue hide itself? Go to,</LINE>
+<LINE>mum, you are he: graces will appear, and there's an</LINE>
+<LINE>end.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Will you not tell me who told you so?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>No, you shall pardon me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Nor will you not tell me who you are?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Not now.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>That I was disdainful, and that I had my good wit</LINE>
+<LINE>out of the 'Hundred Merry Tales:'--well this was</LINE>
+<LINE>Signior Benedick that said so.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>What's he?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I am sure you know him well enough.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Not I, believe me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Did he never make you laugh?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I pray you, what is he?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Why, he is the prince's jester: a very dull fool;</LINE>
+<LINE>only his gift is in devising impossible slanders:</LINE>
+<LINE>none but libertines delight in him; and the</LINE>
+<LINE>commendation is not in his wit, but in his villany;</LINE>
+<LINE>for he both pleases men and angers them, and then</LINE>
+<LINE>they laugh at him and beat him. I am sure he is in</LINE>
+<LINE>the fleet: I would he had boarded me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>When I know the gentleman, I'll tell him what you say.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Do, do: he'll but break a comparison or two on me;</LINE>
+<LINE>which, peradventure not marked or not laughed at,</LINE>
+<LINE>strikes him into melancholy; and then there's a</LINE>
+<LINE>partridge wing saved, for the fool will eat no</LINE>
+<LINE>supper that night.</LINE>
+<STAGEDIR>Music</STAGEDIR>
+<LINE>We must follow the leaders.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>In every good thing.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Nay, if they lead to any ill, I will leave them at</LINE>
+<LINE>the next turning.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Dance. Then exeunt all except DON JOHN, BORACHIO,
+and CLAUDIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Sure my brother is amorous on Hero and hath</LINE>
+<LINE>withdrawn her father to break with him about it.</LINE>
+<LINE>The ladies follow her and but one visor remains.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>And that is Claudio: I know him by his bearing.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Are not you Signior Benedick?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>You know me well; I am he.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Signior, you are very near my brother in his love:</LINE>
+<LINE>he is enamoured on Hero; I pray you, dissuade him</LINE>
+<LINE>from her: she is no equal for his birth: you may</LINE>
+<LINE>do the part of an honest man in it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>How know you he loves her?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I heard him swear his affection.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>So did I too; and he swore he would marry her to-night.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Come, let us to the banquet.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt DON JOHN and BORACHIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Thus answer I in the name of Benedick,</LINE>
+<LINE>But hear these ill news with the ears of Claudio.</LINE>
+<LINE>'Tis certain so; the prince wooes for himself.</LINE>
+<LINE>Friendship is constant in all other things</LINE>
+<LINE>Save in the office and affairs of love:</LINE>
+<LINE>Therefore, all hearts in love use their own tongues;</LINE>
+<LINE>Let every eye negotiate for itself</LINE>
+<LINE>And trust no agent; for beauty is a witch</LINE>
+<LINE>Against whose charms faith melteth into blood.</LINE>
+<LINE>This is an accident of hourly proof,</LINE>
+<LINE>Which I mistrusted not. Farewell, therefore, Hero!</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Re-enter BENEDICK</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Count Claudio?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Yea, the same.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Come, will you go with me?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Whither?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Even to the next willow, about your own business,</LINE>
+<LINE>county. What fashion will you wear the garland of?</LINE>
+<LINE>about your neck, like an usurer's chain? or under</LINE>
+<LINE>your arm, like a lieutenant's scarf? You must wear</LINE>
+<LINE>it one way, for the prince hath got your Hero.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I wish him joy of her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Why, that's spoken like an honest drovier: so they</LINE>
+<LINE>sell bullocks. But did you think the prince would</LINE>
+<LINE>have served you thus?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I pray you, leave me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Ho! now you strike like the blind man: 'twas the</LINE>
+<LINE>boy that stole your meat, and you'll beat the post.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If it will not be, I'll leave you.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Alas, poor hurt fowl! now will he creep into sedges.</LINE>
+<LINE>But that my Lady Beatrice should know me, and not</LINE>
+<LINE>know me! The prince's fool! Ha? It may be I go</LINE>
+<LINE>under that title because I am merry. Yea, but so I</LINE>
+<LINE>am apt to do myself wrong; I am not so reputed: it</LINE>
+<LINE>is the base, though bitter, disposition of Beatrice</LINE>
+<LINE>that puts the world into her person and so gives me</LINE>
+<LINE>out. Well, I'll be revenged as I may.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Re-enter DON PEDRO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Now, signior, where's the count? did you see him?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Troth, my lord, I have played the part of Lady Fame.</LINE>
+<LINE>I found him here as melancholy as a lodge in a</LINE>
+<LINE>warren: I told him, and I think I told him true,</LINE>
+<LINE>that your grace had got the good will of this young</LINE>
+<LINE>lady; and I offered him my company to a willow-tree,</LINE>
+<LINE>either to make him a garland, as being forsaken, or</LINE>
+<LINE>to bind him up a rod, as being worthy to be whipped.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>To be whipped! What's his fault?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>The flat transgression of a schoolboy, who, being</LINE>
+<LINE>overjoyed with finding a birds' nest, shows it his</LINE>
+<LINE>companion, and he steals it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Wilt thou make a trust a transgression? The</LINE>
+<LINE>transgression is in the stealer.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Yet it had not been amiss the rod had been made,</LINE>
+<LINE>and the garland too; for the garland he might have</LINE>
+<LINE>worn himself, and the rod he might have bestowed on</LINE>
+<LINE>you, who, as I take it, have stolen his birds' nest.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I will but teach them to sing, and restore them to</LINE>
+<LINE>the owner.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>If their singing answer your saying, by my faith,</LINE>
+<LINE>you say honestly.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>The Lady Beatrice hath a quarrel to you: the</LINE>
+<LINE>gentleman that danced with her told her she is much</LINE>
+<LINE>wronged by you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>O, she misused me past the endurance of a block!</LINE>
+<LINE>an oak but with one green leaf on it would have</LINE>
+<LINE>answered her; my very visor began to assume life and</LINE>
+<LINE>scold with her. She told me, not thinking I had been</LINE>
+<LINE>myself, that I was the prince's jester, that I was</LINE>
+<LINE>duller than a great thaw; huddling jest upon jest</LINE>
+<LINE>with such impossible conveyance upon me that I stood</LINE>
+<LINE>like a man at a mark, with a whole army shooting at</LINE>
+<LINE>me. She speaks poniards, and every word stabs:</LINE>
+<LINE>if her breath were as terrible as her terminations,</LINE>
+<LINE>there were no living near her; she would infect to</LINE>
+<LINE>the north star. I would not marry her, though she</LINE>
+<LINE>were endowed with all that Adam bad left him before</LINE>
+<LINE>he transgressed: she would have made Hercules have</LINE>
+<LINE>turned spit, yea, and have cleft his club to make</LINE>
+<LINE>the fire too. Come, talk not of her: you shall find</LINE>
+<LINE>her the infernal Ate in good apparel. I would to God</LINE>
+<LINE>some scholar would conjure her; for certainly, while</LINE>
+<LINE>she is here, a man may live as quiet in hell as in a</LINE>
+<LINE>sanctuary; and people sin upon purpose, because they</LINE>
+<LINE>would go thither; so, indeed, all disquiet, horror</LINE>
+<LINE>and perturbation follows her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Look, here she comes.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter CLAUDIO, BEATRICE, HERO, and LEONATO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Will your grace command me any service to the</LINE>
+<LINE>world's end? I will go on the slightest errand now</LINE>
+<LINE>to the Antipodes that you can devise to send me on;</LINE>
+<LINE>I will fetch you a tooth-picker now from the</LINE>
+<LINE>furthest inch of Asia, bring you the length of</LINE>
+<LINE>Prester John's foot, fetch you a hair off the great</LINE>
+<LINE>Cham's beard, do you any embassage to the Pigmies,</LINE>
+<LINE>rather than hold three words' conference with this</LINE>
+<LINE>harpy. You have no employment for me?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>None, but to desire your good company.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>O God, sir, here's a dish I love not: I cannot</LINE>
+<LINE>endure my Lady Tongue.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Come, lady, come; you have lost the heart of</LINE>
+<LINE>Signior Benedick.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Indeed, my lord, he lent it me awhile; and I gave</LINE>
+<LINE>him use for it, a double heart for his single one:</LINE>
+<LINE>marry, once before he won it of me with false dice,</LINE>
+<LINE>therefore your grace may well say I have lost it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>You have put him down, lady, you have put him down.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>So I would not he should do me, my lord, lest I</LINE>
+<LINE>should prove the mother of fools. I have brought</LINE>
+<LINE>Count Claudio, whom you sent me to seek.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Why, how now, count! wherefore are you sad?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Not sad, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>How then? sick?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Neither, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>The count is neither sad, nor sick, nor merry, nor</LINE>
+<LINE>well; but civil count, civil as an orange, and</LINE>
+<LINE>something of that jealous complexion.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I' faith, lady, I think your blazon to be true;</LINE>
+<LINE>though, I'll be sworn, if he be so, his conceit is</LINE>
+<LINE>false. Here, Claudio, I have wooed in thy name, and</LINE>
+<LINE>fair Hero is won: I have broke with her father,</LINE>
+<LINE>and his good will obtained: name the day of</LINE>
+<LINE>marriage, and God give thee joy!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Count, take of me my daughter, and with her my</LINE>
+<LINE>fortunes: his grace hath made the match, and an</LINE>
+<LINE>grace say Amen to it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Speak, count, 'tis your cue.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Silence is the perfectest herald of joy: I were</LINE>
+<LINE>but little happy, if I could say how much. Lady, as</LINE>
+<LINE>you are mine, I am yours: I give away myself for</LINE>
+<LINE>you and dote upon the exchange.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Speak, cousin; or, if you cannot, stop his mouth</LINE>
+<LINE>with a kiss, and let not him speak neither.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>In faith, lady, you have a merry heart.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Yea, my lord; I thank it, poor fool, it keeps on</LINE>
+<LINE>the windy side of care. My cousin tells him in his</LINE>
+<LINE>ear that he is in her heart.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And so she doth, cousin.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Good Lord, for alliance! Thus goes every one to the</LINE>
+<LINE>world but I, and I am sunburnt; I may sit in a</LINE>
+<LINE>corner and cry heigh-ho for a husband!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Lady Beatrice, I will get you one.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I would rather have one of your father's getting.</LINE>
+<LINE>Hath your grace ne'er a brother like you? Your</LINE>
+<LINE>father got excellent husbands, if a maid could come by them.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Will you have me, lady?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>No, my lord, unless I might have another for</LINE>
+<LINE>working-days: your grace is too costly to wear</LINE>
+<LINE>every day. But, I beseech your grace, pardon me: I</LINE>
+<LINE>was born to speak all mirth and no matter.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Your silence most offends me, and to be merry best</LINE>
+<LINE>becomes you; for, out of question, you were born in</LINE>
+<LINE>a merry hour.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>No, sure, my lord, my mother cried; but then there</LINE>
+<LINE>was a star danced, and under that was I born.</LINE>
+<LINE>Cousins, God give you joy!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Niece, will you look to those things I told you of?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I cry you mercy, uncle. By your grace's pardon.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>By my troth, a pleasant-spirited lady.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>There's little of the melancholy element in her, my</LINE>
+<LINE>lord: she is never sad but when she sleeps, and</LINE>
+<LINE>not ever sad then; for I have heard my daughter say,</LINE>
+<LINE>she hath often dreamed of unhappiness and waked</LINE>
+<LINE>herself with laughing.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>She cannot endure to hear tell of a husband.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>O, by no means: she mocks all her wooers out of suit.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>She were an excellent wife for Benedict.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>O Lord, my lord, if they were but a week married,</LINE>
+<LINE>they would talk themselves mad.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>County Claudio, when mean you to go to church?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>To-morrow, my lord: time goes on crutches till love</LINE>
+<LINE>have all his rites.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Not till Monday, my dear son, which is hence a just</LINE>
+<LINE>seven-night; and a time too brief, too, to have all</LINE>
+<LINE>things answer my mind.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Come, you shake the head at so long a breathing:</LINE>
+<LINE>but, I warrant thee, Claudio, the time shall not go</LINE>
+<LINE>dully by us. I will in the interim undertake one of</LINE>
+<LINE>Hercules' labours; which is, to bring Signior</LINE>
+<LINE>Benedick and the Lady Beatrice into a mountain of</LINE>
+<LINE>affection the one with the other. I would fain have</LINE>
+<LINE>it a match, and I doubt not but to fashion it, if</LINE>
+<LINE>you three will but minister such assistance as I</LINE>
+<LINE>shall give you direction.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>My lord, I am for you, though it cost me ten</LINE>
+<LINE>nights' watchings.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And I, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>And you too, gentle Hero?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>I will do any modest office, my lord, to help my</LINE>
+<LINE>cousin to a good husband.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>And Benedick is not the unhopefullest husband that</LINE>
+<LINE>I know. Thus far can I praise him; he is of a noble</LINE>
+<LINE>strain, of approved valour and confirmed honesty. I</LINE>
+<LINE>will teach you how to humour your cousin, that she</LINE>
+<LINE>shall fall in love with Benedick; and I, with your</LINE>
+<LINE>two helps, will so practise on Benedick that, in</LINE>
+<LINE>despite of his quick wit and his queasy stomach, he</LINE>
+<LINE>shall fall in love with Beatrice. If we can do this,</LINE>
+<LINE>Cupid is no longer an archer: his glory shall be</LINE>
+<LINE>ours, for we are the only love-gods. Go in with me,</LINE>
+<LINE>and I will tell you my drift.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE II. The same.</TITLE>
+<STAGEDIR>Enter DON JOHN and BORACHIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>It is so; the Count Claudio shall marry the</LINE>
+<LINE>daughter of Leonato.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Yea, my lord; but I can cross it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Any bar, any cross, any impediment will be</LINE>
+<LINE>medicinable to me: I am sick in displeasure to him,</LINE>
+<LINE>and whatsoever comes athwart his affection ranges</LINE>
+<LINE>evenly with mine. How canst thou cross this marriage?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Not honestly, my lord; but so covertly that no</LINE>
+<LINE>dishonesty shall appear in me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Show me briefly how.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>I think I told your lordship a year since, how much</LINE>
+<LINE>I am in the favour of Margaret, the waiting</LINE>
+<LINE>gentlewoman to Hero.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I remember.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>I can, at any unseasonable instant of the night,</LINE>
+<LINE>appoint her to look out at her lady's chamber window.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>What life is in that, to be the death of this marriage?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>The poison of that lies in you to temper. Go you to</LINE>
+<LINE>the prince your brother; spare not to tell him that</LINE>
+<LINE>he hath wronged his honour in marrying the renowned</LINE>
+<LINE>Claudio--whose estimation do you mightily hold</LINE>
+<LINE>up--to a contaminated stale, such a one as Hero.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>What proof shall I make of that?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Proof enough to misuse the prince, to vex Claudio,</LINE>
+<LINE>to undo Hero and kill Leonato. Look you for any</LINE>
+<LINE>other issue?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Only to despite them, I will endeavour any thing.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Go, then; find me a meet hour to draw Don Pedro and</LINE>
+<LINE>the Count Claudio alone: tell them that you know</LINE>
+<LINE>that Hero loves me; intend a kind of zeal both to the</LINE>
+<LINE>prince and Claudio, as,--in love of your brother's</LINE>
+<LINE>honour, who hath made this match, and his friend's</LINE>
+<LINE>reputation, who is thus like to be cozened with the</LINE>
+<LINE>semblance of a maid,--that you have discovered</LINE>
+<LINE>thus. They will scarcely believe this without trial:</LINE>
+<LINE>offer them instances; which shall bear no less</LINE>
+<LINE>likelihood than to see me at her chamber-window,</LINE>
+<LINE>hear me call Margaret Hero, hear Margaret term me</LINE>
+<LINE>Claudio; and bring them to see this the very night</LINE>
+<LINE>before the intended wedding,--for in the meantime I</LINE>
+<LINE>will so fashion the matter that Hero shall be</LINE>
+<LINE>absent,--and there shall appear such seeming truth</LINE>
+<LINE>of Hero's disloyalty that jealousy shall be called</LINE>
+<LINE>assurance and all the preparation overthrown.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Grow this to what adverse issue it can, I will put</LINE>
+<LINE>it in practise. Be cunning in the working this, and</LINE>
+<LINE>thy fee is a thousand ducats.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Be you constant in the accusation, and my cunning</LINE>
+<LINE>shall not shame me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I will presently go learn their day of marriage.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE III. LEONATO'S orchard.</TITLE>
+<STAGEDIR>Enter BENEDICK</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Boy!</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter Boy</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>Boy</SPEAKER>
+<LINE>Signior?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>In my chamber-window lies a book: bring it hither</LINE>
+<LINE>to me in the orchard.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Boy</SPEAKER>
+<LINE>I am here already, sir.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I know that; but I would have thee hence, and here again.</LINE>
+<STAGEDIR>Exit Boy</STAGEDIR>
+<LINE>I do much wonder that one man, seeing how much</LINE>
+<LINE>another man is a fool when he dedicates his</LINE>
+<LINE>behaviors to love, will, after he hath laughed at</LINE>
+<LINE>such shallow follies in others, become the argument</LINE>
+<LINE>of his own scorn by failing in love: and such a man</LINE>
+<LINE>is Claudio. I have known when there was no music</LINE>
+<LINE>with him but the drum and the fife; and now had he</LINE>
+<LINE>rather hear the tabour and the pipe: I have known</LINE>
+<LINE>when he would have walked ten mile a-foot to see a</LINE>
+<LINE>good armour; and now will he lie ten nights awake,</LINE>
+<LINE>carving the fashion of a new doublet. He was wont to</LINE>
+<LINE>speak plain and to the purpose, like an honest man</LINE>
+<LINE>and a soldier; and now is he turned orthography; his</LINE>
+<LINE>words are a very fantastical banquet, just so many</LINE>
+<LINE>strange dishes. May I be so converted and see with</LINE>
+<LINE>these eyes? I cannot tell; I think not: I will not</LINE>
+<LINE>be sworn, but love may transform me to an oyster; but</LINE>
+<LINE>I'll take my oath on it, till he have made an oyster</LINE>
+<LINE>of me, he shall never make me such a fool. One woman</LINE>
+<LINE>is fair, yet I am well; another is wise, yet I am</LINE>
+<LINE>well; another virtuous, yet I am well; but till all</LINE>
+<LINE>graces be in one woman, one woman shall not come in</LINE>
+<LINE>my grace. Rich she shall be, that's certain; wise,</LINE>
+<LINE>or I'll none; virtuous, or I'll never cheapen her;</LINE>
+<LINE>fair, or I'll never look on her; mild, or come not</LINE>
+<LINE>near me; noble, or not I for an angel; of good</LINE>
+<LINE>discourse, an excellent musician, and her hair shall</LINE>
+<LINE>be of what colour it please God. Ha! the prince and</LINE>
+<LINE>Monsieur Love! I will hide me in the arbour.</LINE>
+</SPEECH>
+
+<STAGEDIR>Withdraws</STAGEDIR>
+<STAGEDIR>Enter DON PEDRO, CLAUDIO, and LEONATO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Come, shall we hear this music?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Yea, my good lord. How still the evening is,</LINE>
+<LINE>As hush'd on purpose to grace harmony!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>See you where Benedick hath hid himself?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>O, very well, my lord: the music ended,</LINE>
+<LINE>We'll fit the kid-fox with a pennyworth.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter BALTHASAR with Music</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Come, Balthasar, we'll hear that song again.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>O, good my lord, tax not so bad a voice</LINE>
+<LINE>To slander music any more than once.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>It is the witness still of excellency</LINE>
+<LINE>To put a strange face on his own perfection.</LINE>
+<LINE>I pray thee, sing, and let me woo no more.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>Because you talk of wooing, I will sing;</LINE>
+<LINE>Since many a wooer doth commence his suit</LINE>
+<LINE>To her he thinks not worthy, yet he wooes,</LINE>
+<LINE>Yet will he swear he loves.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Now, pray thee, come;</LINE>
+<LINE>Or, if thou wilt hold longer argument,</LINE>
+<LINE>Do it in notes.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>Note this before my notes;</LINE>
+<LINE>There's not a note of mine that's worth the noting.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Why, these are very crotchets that he speaks;</LINE>
+<LINE>Note, notes, forsooth, and nothing.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Air</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Now, divine air! now is his soul ravished! Is it</LINE>
+<LINE>not strange that sheeps' guts should hale souls out</LINE>
+<LINE>of men's bodies? Well, a horn for my money, when</LINE>
+<LINE>all's done.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>The Song</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>Sigh no more, ladies, sigh no more,</LINE>
+<LINE>Men were deceivers ever,</LINE>
+<LINE>One foot in sea and one on shore,</LINE>
+<LINE>To one thing constant never:</LINE>
+<LINE>Then sigh not so, but let them go,</LINE>
+<LINE>And be you blithe and bonny,</LINE>
+<LINE>Converting all your sounds of woe</LINE>
+<LINE>Into Hey nonny, nonny.</LINE>
+<LINE>Sing no more ditties, sing no moe,</LINE>
+<LINE>Of dumps so dull and heavy;</LINE>
+<LINE>The fraud of men was ever so,</LINE>
+<LINE>Since summer first was leafy:</LINE>
+<LINE>Then sigh not so, &amp;c.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>By my troth, a good song.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>And an ill singer, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Ha, no, no, faith; thou singest well enough for a shift.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>An he had been a dog that should have howled thus,</LINE>
+<LINE>they would have hanged him: and I pray God his bad</LINE>
+<LINE>voice bode no mischief. I had as lief have heard the</LINE>
+<LINE>night-raven, come what plague could have come after</LINE>
+<LINE>it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Yea, marry, dost thou hear, Balthasar? I pray thee,</LINE>
+<LINE>get us some excellent music; for to-morrow night we</LINE>
+<LINE>would have it at the Lady Hero's chamber-window.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BALTHASAR</SPEAKER>
+<LINE>The best I can, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Do so: farewell.</LINE>
+<STAGEDIR>Exit BALTHASAR</STAGEDIR>
+<LINE>Come hither, Leonato. What was it you told me of</LINE>
+<LINE>to-day, that your niece Beatrice was in love with</LINE>
+<LINE>Signior Benedick?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>O, ay: stalk on. stalk on; the fowl sits. I did</LINE>
+<LINE>never think that lady would have loved any man.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>No, nor I neither; but most wonderful that she</LINE>
+<LINE>should so dote on Signior Benedick, whom she hath in</LINE>
+<LINE>all outward behaviors seemed ever to abhor.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Is't possible? Sits the wind in that corner?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>By my troth, my lord, I cannot tell what to think</LINE>
+<LINE>of it but that she loves him with an enraged</LINE>
+<LINE>affection: it is past the infinite of thought.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>May be she doth but counterfeit.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Faith, like enough.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>O God, counterfeit! There was never counterfeit of</LINE>
+<LINE>passion came so near the life of passion as she</LINE>
+<LINE>discovers it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Why, what effects of passion shows she?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Bait the hook well; this fish will bite.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>What effects, my lord? She will sit you, you heard</LINE>
+<LINE>my daughter tell you how.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>She did, indeed.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>How, how, pray you? You amaze me: I would have I</LINE>
+<LINE>thought her spirit had been invincible against all</LINE>
+<LINE>assaults of affection.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I would have sworn it had, my lord; especially</LINE>
+<LINE>against Benedick.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I should think this a gull, but that the</LINE>
+<LINE>white-bearded fellow speaks it: knavery cannot,</LINE>
+<LINE>sure, hide himself in such reverence.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>He hath ta'en the infection: hold it up.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Hath she made her affection known to Benedick?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>No; and swears she never will: that's her torment.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>'Tis true, indeed; so your daughter says: 'Shall</LINE>
+<LINE>I,' says she, 'that have so oft encountered him</LINE>
+<LINE>with scorn, write to him that I love him?'</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>This says she now when she is beginning to write to</LINE>
+<LINE>him; for she'll be up twenty times a night, and</LINE>
+<LINE>there will she sit in her smock till she have writ a</LINE>
+<LINE>sheet of paper: my daughter tells us all.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Now you talk of a sheet of paper, I remember a</LINE>
+<LINE>pretty jest your daughter told us of.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>O, when she had writ it and was reading it over, she</LINE>
+<LINE>found Benedick and Beatrice between the sheet?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>That.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>O, she tore the letter into a thousand halfpence;</LINE>
+<LINE>railed at herself, that she should be so immodest</LINE>
+<LINE>to write to one that she knew would flout her; 'I</LINE>
+<LINE>measure him,' says she, 'by my own spirit; for I</LINE>
+<LINE>should flout him, if he writ to me; yea, though I</LINE>
+<LINE>love him, I should.'</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Then down upon her knees she falls, weeps, sobs,</LINE>
+<LINE>beats her heart, tears her hair, prays, curses; 'O</LINE>
+<LINE>sweet Benedick! God give me patience!'</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>She doth indeed; my daughter says so: and the</LINE>
+<LINE>ecstasy hath so much overborne her that my daughter</LINE>
+<LINE>is sometime afeared she will do a desperate outrage</LINE>
+<LINE>to herself: it is very true.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>It were good that Benedick knew of it by some</LINE>
+<LINE>other, if she will not discover it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>To what end? He would make but a sport of it and</LINE>
+<LINE>torment the poor lady worse.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>An he should, it were an alms to hang him. She's an</LINE>
+<LINE>excellent sweet lady; and, out of all suspicion,</LINE>
+<LINE>she is virtuous.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And she is exceeding wise.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>In every thing but in loving Benedick.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>O, my lord, wisdom and blood combating in so tender</LINE>
+<LINE>a body, we have ten proofs to one that blood hath</LINE>
+<LINE>the victory. I am sorry for her, as I have just</LINE>
+<LINE>cause, being her uncle and her guardian.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I would she had bestowed this dotage on me: I would</LINE>
+<LINE>have daffed all other respects and made her half</LINE>
+<LINE>myself. I pray you, tell Benedick of it, and hear</LINE>
+<LINE>what a' will say.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Were it good, think you?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Hero thinks surely she will die; for she says she</LINE>
+<LINE>will die, if he love her not, and she will die, ere</LINE>
+<LINE>she make her love known, and she will die, if he woo</LINE>
+<LINE>her, rather than she will bate one breath of her</LINE>
+<LINE>accustomed crossness.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>She doth well: if she should make tender of her</LINE>
+<LINE>love, 'tis very possible he'll scorn it; for the</LINE>
+<LINE>man, as you know all, hath a contemptible spirit.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>He is a very proper man.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>He hath indeed a good outward happiness.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Before God! and, in my mind, very wise.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>He doth indeed show some sparks that are like wit.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And I take him to be valiant.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>As Hector, I assure you: and in the managing of</LINE>
+<LINE>quarrels you may say he is wise; for either he</LINE>
+<LINE>avoids them with great discretion, or undertakes</LINE>
+<LINE>them with a most Christian-like fear.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>If he do fear God, a' must necessarily keep peace:</LINE>
+<LINE>if he break the peace, he ought to enter into a</LINE>
+<LINE>quarrel with fear and trembling.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>And so will he do; for the man doth fear God,</LINE>
+<LINE>howsoever it seems not in him by some large jests</LINE>
+<LINE>he will make. Well I am sorry for your niece. Shall</LINE>
+<LINE>we go seek Benedick, and tell him of her love?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Never tell him, my lord: let her wear it out with</LINE>
+<LINE>good counsel.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Nay, that's impossible: she may wear her heart out first.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Well, we will hear further of it by your daughter:</LINE>
+<LINE>let it cool the while. I love Benedick well; and I</LINE>
+<LINE>could wish he would modestly examine himself, to see</LINE>
+<LINE>how much he is unworthy so good a lady.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>My lord, will you walk? dinner is ready.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If he do not dote on her upon this, I will never</LINE>
+<LINE>trust my expectation.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Let there be the same net spread for her; and that</LINE>
+<LINE>must your daughter and her gentlewomen carry. The</LINE>
+<LINE>sport will be, when they hold one an opinion of</LINE>
+<LINE>another's dotage, and no such matter: that's the</LINE>
+<LINE>scene that I would see, which will be merely a</LINE>
+<LINE>dumb-show. Let us send her to call him in to dinner.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt DON PEDRO, CLAUDIO, and LEONATO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE><STAGEDIR>Coming forward</STAGEDIR> This can be no trick: the</LINE>
+<LINE>conference was sadly borne. They have the truth of</LINE>
+<LINE>this from Hero. They seem to pity the lady: it</LINE>
+<LINE>seems her affections have their full bent. Love me!</LINE>
+<LINE>why, it must be requited. I hear how I am censured:</LINE>
+<LINE>they say I will bear myself proudly, if I perceive</LINE>
+<LINE>the love come from her; they say too that she will</LINE>
+<LINE>rather die than give any sign of affection. I did</LINE>
+<LINE>never think to marry: I must not seem proud: happy</LINE>
+<LINE>are they that hear their detractions and can put</LINE>
+<LINE>them to mending. They say the lady is fair; 'tis a</LINE>
+<LINE>truth, I can bear them witness; and virtuous; 'tis</LINE>
+<LINE>so, I cannot reprove it; and wise, but for loving</LINE>
+<LINE>me; by my troth, it is no addition to her wit, nor</LINE>
+<LINE>no great argument of her folly, for I will be</LINE>
+<LINE>horribly in love with her. I may chance have some</LINE>
+<LINE>odd quirks and remnants of wit broken on me,</LINE>
+<LINE>because I have railed so long against marriage: but</LINE>
+<LINE>doth not the appetite alter? a man loves the meat</LINE>
+<LINE>in his youth that he cannot endure in his age.</LINE>
+<LINE>Shall quips and sentences and these paper bullets of</LINE>
+<LINE>the brain awe a man from the career of his humour?</LINE>
+<LINE>No, the world must be peopled. When I said I would</LINE>
+<LINE>die a bachelor, I did not think I should live till I</LINE>
+<LINE>were married. Here comes Beatrice. By this day!</LINE>
+<LINE>she's a fair lady: I do spy some marks of love in</LINE>
+<LINE>her.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter BEATRICE</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Against my will I am sent to bid you come in to dinner.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Fair Beatrice, I thank you for your pains.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I took no more pains for those thanks than you take</LINE>
+<LINE>pains to thank me: if it had been painful, I would</LINE>
+<LINE>not have come.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>You take pleasure then in the message?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Yea, just so much as you may take upon a knife's</LINE>
+<LINE>point and choke a daw withal. You have no stomach,</LINE>
+<LINE>signior: fare you well.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Ha! 'Against my will I am sent to bid you come in</LINE>
+<LINE>to dinner;' there's a double meaning in that 'I took</LINE>
+<LINE>no more pains for those thanks than you took pains</LINE>
+<LINE>to thank me.' that's as much as to say, Any pains</LINE>
+<LINE>that I take for you is as easy as thanks. If I do</LINE>
+<LINE>not take pity of her, I am a villain; if I do not</LINE>
+<LINE>love her, I am a Jew. I will go get her picture.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+</SCENE>
+
+</ACT>
+
+<ACT><TITLE>ACT III</TITLE>
+
+<SCENE><TITLE>SCENE I. LEONATO'S garden.</TITLE>
+<STAGEDIR>Enter HERO, MARGARET, and URSULA</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Good Margaret, run thee to the parlor;</LINE>
+<LINE>There shalt thou find my cousin Beatrice</LINE>
+<LINE>Proposing with the prince and Claudio:</LINE>
+<LINE>Whisper her ear and tell her, I and Ursula</LINE>
+<LINE>Walk in the orchard and our whole discourse</LINE>
+<LINE>Is all of her; say that thou overheard'st us;</LINE>
+<LINE>And bid her steal into the pleached bower,</LINE>
+<LINE>Where honeysuckles, ripen'd by the sun,</LINE>
+<LINE>Forbid the sun to enter, like favourites,</LINE>
+<LINE>Made proud by princes, that advance their pride</LINE>
+<LINE>Against that power that bred it: there will she hide her,</LINE>
+<LINE>To listen our purpose. This is thy office;</LINE>
+<LINE>Bear thee well in it and leave us alone.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>I'll make her come, I warrant you, presently.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Now, Ursula, when Beatrice doth come,</LINE>
+<LINE>As we do trace this alley up and down,</LINE>
+<LINE>Our talk must only be of Benedick.</LINE>
+<LINE>When I do name him, let it be thy part</LINE>
+<LINE>To praise him more than ever man did merit:</LINE>
+<LINE>My talk to thee must be how Benedick</LINE>
+<LINE>Is sick in love with Beatrice. Of this matter</LINE>
+<LINE>Is little Cupid's crafty arrow made,</LINE>
+<LINE>That only wounds by hearsay.</LINE>
+<STAGEDIR>Enter BEATRICE, behind</STAGEDIR>
+<LINE>Now begin;</LINE>
+<LINE>For look where Beatrice, like a lapwing, runs</LINE>
+<LINE>Close by the ground, to hear our conference.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>The pleasant'st angling is to see the fish</LINE>
+<LINE>Cut with her golden oars the silver stream,</LINE>
+<LINE>And greedily devour the treacherous bait:</LINE>
+<LINE>So angle we for Beatrice; who even now</LINE>
+<LINE>Is couched in the woodbine coverture.</LINE>
+<LINE>Fear you not my part of the dialogue.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Then go we near her, that her ear lose nothing</LINE>
+<LINE>Of the false sweet bait that we lay for it.</LINE>
+<STAGEDIR>Approaching the bower</STAGEDIR>
+<LINE>No, truly, Ursula, she is too disdainful;</LINE>
+<LINE>I know her spirits are as coy and wild</LINE>
+<LINE>As haggerds of the rock.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>But are you sure</LINE>
+<LINE>That Benedick loves Beatrice so entirely?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>So says the prince and my new-trothed lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>And did they bid you tell her of it, madam?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>They did entreat me to acquaint her of it;</LINE>
+<LINE>But I persuaded them, if they loved Benedick,</LINE>
+<LINE>To wish him wrestle with affection,</LINE>
+<LINE>And never to let Beatrice know of it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>Why did you so? Doth not the gentleman</LINE>
+<LINE>Deserve as full as fortunate a bed</LINE>
+<LINE>As ever Beatrice shall couch upon?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>O god of love! I know he doth deserve</LINE>
+<LINE>As much as may be yielded to a man:</LINE>
+<LINE>But Nature never framed a woman's heart</LINE>
+<LINE>Of prouder stuff than that of Beatrice;</LINE>
+<LINE>Disdain and scorn ride sparkling in her eyes,</LINE>
+<LINE>Misprising what they look on, and her wit</LINE>
+<LINE>Values itself so highly that to her</LINE>
+<LINE>All matter else seems weak: she cannot love,</LINE>
+<LINE>Nor take no shape nor project of affection,</LINE>
+<LINE>She is so self-endeared.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>Sure, I think so;</LINE>
+<LINE>And therefore certainly it were not good</LINE>
+<LINE>She knew his love, lest she make sport at it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Why, you speak truth. I never yet saw man,</LINE>
+<LINE>How wise, how noble, young, how rarely featured,</LINE>
+<LINE>But she would spell him backward: if fair-faced,</LINE>
+<LINE>She would swear the gentleman should be her sister;</LINE>
+<LINE>If black, why, Nature, drawing of an antique,</LINE>
+<LINE>Made a foul blot; if tall, a lance ill-headed;</LINE>
+<LINE>If low, an agate very vilely cut;</LINE>
+<LINE>If speaking, why, a vane blown with all winds;</LINE>
+<LINE>If silent, why, a block moved with none.</LINE>
+<LINE>So turns she every man the wrong side out</LINE>
+<LINE>And never gives to truth and virtue that</LINE>
+<LINE>Which simpleness and merit purchaseth.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>Sure, sure, such carping is not commendable.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>No, not to be so odd and from all fashions</LINE>
+<LINE>As Beatrice is, cannot be commendable:</LINE>
+<LINE>But who dare tell her so? If I should speak,</LINE>
+<LINE>She would mock me into air; O, she would laugh me</LINE>
+<LINE>Out of myself, press me to death with wit.</LINE>
+<LINE>Therefore let Benedick, like cover'd fire,</LINE>
+<LINE>Consume away in sighs, waste inwardly:</LINE>
+<LINE>It were a better death than die with mocks,</LINE>
+<LINE>Which is as bad as die with tickling.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>Yet tell her of it: hear what she will say.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>No; rather I will go to Benedick</LINE>
+<LINE>And counsel him to fight against his passion.</LINE>
+<LINE>And, truly, I'll devise some honest slanders</LINE>
+<LINE>To stain my cousin with: one doth not know</LINE>
+<LINE>How much an ill word may empoison liking.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>O, do not do your cousin such a wrong.</LINE>
+<LINE>She cannot be so much without true judgment--</LINE>
+<LINE>Having so swift and excellent a wit</LINE>
+<LINE>As she is prized to have--as to refuse</LINE>
+<LINE>So rare a gentleman as Signior Benedick.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>He is the only man of Italy.</LINE>
+<LINE>Always excepted my dear Claudio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>I pray you, be not angry with me, madam,</LINE>
+<LINE>Speaking my fancy: Signior Benedick,</LINE>
+<LINE>For shape, for bearing, argument and valour,</LINE>
+<LINE>Goes foremost in report through Italy.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Indeed, he hath an excellent good name.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>His excellence did earn it, ere he had it.</LINE>
+<LINE>When are you married, madam?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Why, every day, to-morrow. Come, go in:</LINE>
+<LINE>I'll show thee some attires, and have thy counsel</LINE>
+<LINE>Which is the best to furnish me to-morrow.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>She's limed, I warrant you: we have caught her, madam.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>If it proves so, then loving goes by haps:</LINE>
+<LINE>Some Cupid kills with arrows, some with traps.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt HERO and URSULA</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE><STAGEDIR>Coming forward</STAGEDIR></LINE>
+<LINE>What fire is in mine ears? Can this be true?</LINE>
+<LINE>Stand I condemn'd for pride and scorn so much?</LINE>
+<LINE>Contempt, farewell! and maiden pride, adieu!</LINE>
+<LINE>No glory lives behind the back of such.</LINE>
+<LINE>And, Benedick, love on; I will requite thee,</LINE>
+<LINE>Taming my wild heart to thy loving hand:</LINE>
+<LINE>If thou dost love, my kindness shall incite thee</LINE>
+<LINE>To bind our loves up in a holy band;</LINE>
+<LINE>For others say thou dost deserve, and I</LINE>
+<LINE>Believe it better than reportingly.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE II. A room in LEONATO'S house</TITLE>
+<STAGEDIR>Enter DON PEDRO, CLAUDIO, BENEDICK, and LEONATO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I do but stay till your marriage be consummate, and</LINE>
+<LINE>then go I toward Arragon.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I'll bring you thither, my lord, if you'll</LINE>
+<LINE>vouchsafe me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Nay, that would be as great a soil in the new gloss</LINE>
+<LINE>of your marriage as to show a child his new coat</LINE>
+<LINE>and forbid him to wear it. I will only be bold</LINE>
+<LINE>with Benedick for his company; for, from the crown</LINE>
+<LINE>of his head to the sole of his foot, he is all</LINE>
+<LINE>mirth: he hath twice or thrice cut Cupid's</LINE>
+<LINE>bow-string and the little hangman dare not shoot at</LINE>
+<LINE>him; he hath a heart as sound as a bell and his</LINE>
+<LINE>tongue is the clapper, for what his heart thinks his</LINE>
+<LINE>tongue speaks.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Gallants, I am not as I have been.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>So say I methinks you are sadder.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I hope he be in love.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Hang him, truant! there's no true drop of blood in</LINE>
+<LINE>him, to be truly touched with love: if he be sad,</LINE>
+<LINE>he wants money.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I have the toothache.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Draw it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Hang it!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>You must hang it first, and draw it afterwards.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>What! sigh for the toothache?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Where is but a humour or a worm.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Well, every one can master a grief but he that has</LINE>
+<LINE>it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Yet say I, he is in love.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>There is no appearance of fancy in him, unless it be</LINE>
+<LINE>a fancy that he hath to strange disguises; as, to be</LINE>
+<LINE>a Dutchman today, a Frenchman to-morrow, or in the</LINE>
+<LINE>shape of two countries at once, as, a German from</LINE>
+<LINE>the waist downward, all slops, and a Spaniard from</LINE>
+<LINE>the hip upward, no doublet. Unless he have a fancy</LINE>
+<LINE>to this foolery, as it appears he hath, he is no</LINE>
+<LINE>fool for fancy, as you would have it appear he is.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If he be not in love with some woman, there is no</LINE>
+<LINE>believing old signs: a' brushes his hat o'</LINE>
+<LINE>mornings; what should that bode?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Hath any man seen him at the barber's?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>No, but the barber's man hath been seen with him,</LINE>
+<LINE>and the old ornament of his cheek hath already</LINE>
+<LINE>stuffed tennis-balls.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Indeed, he looks younger than he did, by the loss of a beard.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Nay, a' rubs himself with civet: can you smell him</LINE>
+<LINE>out by that?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>That's as much as to say, the sweet youth's in love.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>The greatest note of it is his melancholy.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And when was he wont to wash his face?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Yea, or to paint himself? for the which, I hear</LINE>
+<LINE>what they say of him.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Nay, but his jesting spirit; which is now crept into</LINE>
+<LINE>a lute-string and now governed by stops.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Indeed, that tells a heavy tale for him: conclude,</LINE>
+<LINE>conclude he is in love.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Nay, but I know who loves him.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>That would I know too: I warrant, one that knows him not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Yes, and his ill conditions; and, in despite of</LINE>
+<LINE>all, dies for him.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>She shall be buried with her face upwards.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Yet is this no charm for the toothache. Old</LINE>
+<LINE>signior, walk aside with me: I have studied eight</LINE>
+<LINE>or nine wise words to speak to you, which these</LINE>
+<LINE>hobby-horses must not hear.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt BENEDICK and LEONATO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>For my life, to break with him about Beatrice.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>'Tis even so. Hero and Margaret have by this</LINE>
+<LINE>played their parts with Beatrice; and then the two</LINE>
+<LINE>bears will not bite one another when they meet.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter DON JOHN</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>My lord and brother, God save you!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Good den, brother.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>If your leisure served, I would speak with you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>In private?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>If it please you: yet Count Claudio may hear; for</LINE>
+<LINE>what I would speak of concerns him.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>What's the matter?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE><STAGEDIR>To CLAUDIO</STAGEDIR> Means your lordship to be married</LINE>
+<LINE>to-morrow?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>You know he does.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I know not that, when he knows what I know.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If there be any impediment, I pray you discover it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>You may think I love you not: let that appear</LINE>
+<LINE>hereafter, and aim better at me by that I now will</LINE>
+<LINE>manifest. For my brother, I think he holds you</LINE>
+<LINE>well, and in dearness of heart hath holp to effect</LINE>
+<LINE>your ensuing marriage;--surely suit ill spent and</LINE>
+<LINE>labour ill bestowed.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Why, what's the matter?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I came hither to tell you; and, circumstances</LINE>
+<LINE>shortened, for she has been too long a talking of,</LINE>
+<LINE>the lady is disloyal.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Who, Hero?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Even she; Leonato's Hero, your Hero, every man's Hero:</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Disloyal?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>The word is too good to paint out her wickedness; I</LINE>
+<LINE>could say she were worse: think you of a worse</LINE>
+<LINE>title, and I will fit her to it. Wonder not till</LINE>
+<LINE>further warrant: go but with me to-night, you shall</LINE>
+<LINE>see her chamber-window entered, even the night</LINE>
+<LINE>before her wedding-day: if you love her then,</LINE>
+<LINE>to-morrow wed her; but it would better fit your honour</LINE>
+<LINE>to change your mind.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>May this be so?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I will not think it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>If you dare not trust that you see, confess not</LINE>
+<LINE>that you know: if you will follow me, I will show</LINE>
+<LINE>you enough; and when you have seen more and heard</LINE>
+<LINE>more, proceed accordingly.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If I see any thing to-night why I should not marry</LINE>
+<LINE>her to-morrow in the congregation, where I should</LINE>
+<LINE>wed, there will I shame her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>And, as I wooed for thee to obtain her, I will join</LINE>
+<LINE>with thee to disgrace her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>I will disparage her no farther till you are my</LINE>
+<LINE>witnesses: bear it coldly but till midnight, and</LINE>
+<LINE>let the issue show itself.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>O day untowardly turned!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>O mischief strangely thwarting!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>O plague right well prevented! so will you say when</LINE>
+<LINE>you have seen the sequel.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE III. A street.</TITLE>
+<STAGEDIR>Enter DOGBERRY and VERGES with the Watch</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Are you good men and true?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Yea, or else it were pity but they should suffer</LINE>
+<LINE>salvation, body and soul.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Nay, that were a punishment too good for them, if</LINE>
+<LINE>they should have any allegiance in them, being</LINE>
+<LINE>chosen for the prince's watch.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Well, give them their charge, neighbour Dogberry.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>First, who think you the most desertless man to be</LINE>
+<LINE>constable?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>First Watchman</SPEAKER>
+<LINE>Hugh Otecake, sir, or George Seacole; for they can</LINE>
+<LINE>write and read.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Come hither, neighbour Seacole. God hath blessed</LINE>
+<LINE>you with a good name: to be a well-favoured man is</LINE>
+<LINE>the gift of fortune; but to write and read comes by nature.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Second Watchman</SPEAKER>
+<LINE>Both which, master constable,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>You have: I knew it would be your answer. Well,</LINE>
+<LINE>for your favour, sir, why, give God thanks, and make</LINE>
+<LINE>no boast of it; and for your writing and reading,</LINE>
+<LINE>let that appear when there is no need of such</LINE>
+<LINE>vanity. You are thought here to be the most</LINE>
+<LINE>senseless and fit man for the constable of the</LINE>
+<LINE>watch; therefore bear you the lantern. This is your</LINE>
+<LINE>charge: you shall comprehend all vagrom men; you are</LINE>
+<LINE>to bid any man stand, in the prince's name.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Second Watchman</SPEAKER>
+<LINE>How if a' will not stand?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Why, then, take no note of him, but let him go; and</LINE>
+<LINE>presently call the rest of the watch together and</LINE>
+<LINE>thank God you are rid of a knave.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>If he will not stand when he is bidden, he is none</LINE>
+<LINE>of the prince's subjects.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>True, and they are to meddle with none but the</LINE>
+<LINE>prince's subjects. You shall also make no noise in</LINE>
+<LINE>the streets; for, for the watch to babble and to</LINE>
+<LINE>talk is most tolerable and not to be endured.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE>We will rather sleep than talk: we know what</LINE>
+<LINE>belongs to a watch.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Why, you speak like an ancient and most quiet</LINE>
+<LINE>watchman; for I cannot see how sleeping should</LINE>
+<LINE>offend: only, have a care that your bills be not</LINE>
+<LINE>stolen. Well, you are to call at all the</LINE>
+<LINE>ale-houses, and bid those that are drunk get them to bed.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE>How if they will not?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Why, then, let them alone till they are sober: if</LINE>
+<LINE>they make you not then the better answer, you may</LINE>
+<LINE>say they are not the men you took them for.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE>Well, sir.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>If you meet a thief, you may suspect him, by virtue</LINE>
+<LINE>of your office, to be no true man; and, for such</LINE>
+<LINE>kind of men, the less you meddle or make with them,</LINE>
+<LINE>why the more is for your honesty.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE>If we know him to be a thief, shall we not lay</LINE>
+<LINE>hands on him?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Truly, by your office, you may; but I think they</LINE>
+<LINE>that touch pitch will be defiled: the most peaceable</LINE>
+<LINE>way for you, if you do take a thief, is to let him</LINE>
+<LINE>show himself what he is and steal out of your company.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>You have been always called a merciful man, partner.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Truly, I would not hang a dog by my will, much more</LINE>
+<LINE>a man who hath any honesty in him.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>If you hear a child cry in the night, you must call</LINE>
+<LINE>to the nurse and bid her still it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE>How if the nurse be asleep and will not hear us?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Why, then, depart in peace, and let the child wake</LINE>
+<LINE>her with crying; for the ewe that will not hear her</LINE>
+<LINE>lamb when it baes will never answer a calf when he bleats.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>'Tis very true.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>This is the end of the charge:--you, constable, are</LINE>
+<LINE>to present the prince's own person: if you meet the</LINE>
+<LINE>prince in the night, you may stay him.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Nay, by'r our lady, that I think a' cannot.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Five shillings to one on't, with any man that knows</LINE>
+<LINE>the statutes, he may stay him: marry, not without</LINE>
+<LINE>the prince be willing; for, indeed, the watch ought</LINE>
+<LINE>to offend no man; and it is an offence to stay a</LINE>
+<LINE>man against his will.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>By'r lady, I think it be so.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Ha, ha, ha! Well, masters, good night: an there be</LINE>
+<LINE>any matter of weight chances, call up me: keep your</LINE>
+<LINE>fellows' counsels and your own; and good night.</LINE>
+<LINE>Come, neighbour.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE>Well, masters, we hear our charge: let us go sit here</LINE>
+<LINE>upon the church-bench till two, and then all to bed.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>One word more, honest neighbours. I pray you watch</LINE>
+<LINE>about Signior Leonato's door; for the wedding being</LINE>
+<LINE>there to-morrow, there is a great coil to-night.</LINE>
+<LINE>Adieu: be vigitant, I beseech you.</LINE>
+</SPEECH>
+
+<STAGEDIR>Exeunt DOGBERRY and VERGES</STAGEDIR>
+<STAGEDIR>Enter BORACHIO and CONRADE</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>What Conrade!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE><STAGEDIR>Aside</STAGEDIR> Peace! stir not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Conrade, I say!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Here, man; I am at thy elbow.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Mass, and my elbow itched; I thought there would a</LINE>
+<LINE>scab follow.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>I will owe thee an answer for that: and now forward</LINE>
+<LINE>with thy tale.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Stand thee close, then, under this pent-house, for</LINE>
+<LINE>it drizzles rain; and I will, like a true drunkard,</LINE>
+<LINE>utter all to thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE><STAGEDIR>Aside</STAGEDIR> Some treason, masters: yet stand close.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Therefore know I have earned of Don John a thousand ducats.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Is it possible that any villany should be so dear?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Thou shouldst rather ask if it were possible any</LINE>
+<LINE>villany should be so rich; for when rich villains</LINE>
+<LINE>have need of poor ones, poor ones may make what</LINE>
+<LINE>price they will.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>I wonder at it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>That shows thou art unconfirmed. Thou knowest that</LINE>
+<LINE>the fashion of a doublet, or a hat, or a cloak, is</LINE>
+<LINE>nothing to a man.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Yes, it is apparel.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>I mean, the fashion.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Yes, the fashion is the fashion.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Tush! I may as well say the fool's the fool. But</LINE>
+<LINE>seest thou not what a deformed thief this fashion</LINE>
+<LINE>is?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE><STAGEDIR>Aside</STAGEDIR> I know that Deformed; a' has been a vile</LINE>
+<LINE>thief this seven year; a' goes up and down like a</LINE>
+<LINE>gentleman: I remember his name.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Didst thou not hear somebody?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>No; 'twas the vane on the house.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Seest thou not, I say, what a deformed thief this</LINE>
+<LINE>fashion is? how giddily a' turns about all the hot</LINE>
+<LINE>bloods between fourteen and five-and-thirty?</LINE>
+<LINE>sometimes fashioning them like Pharaoh's soldiers</LINE>
+<LINE>in the reeky painting, sometime like god Bel's</LINE>
+<LINE>priests in the old church-window, sometime like the</LINE>
+<LINE>shaven Hercules in the smirched worm-eaten tapestry,</LINE>
+<LINE>where his codpiece seems as massy as his club?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>All this I see; and I see that the fashion wears</LINE>
+<LINE>out more apparel than the man. But art not thou</LINE>
+<LINE>thyself giddy with the fashion too, that thou hast</LINE>
+<LINE>shifted out of thy tale into telling me of the fashion?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Not so, neither: but know that I have to-night</LINE>
+<LINE>wooed Margaret, the Lady Hero's gentlewoman, by the</LINE>
+<LINE>name of Hero: she leans me out at her mistress'</LINE>
+<LINE>chamber-window, bids me a thousand times good</LINE>
+<LINE>night,--I tell this tale vilely:--I should first</LINE>
+<LINE>tell thee how the prince, Claudio and my master,</LINE>
+<LINE>planted and placed and possessed by my master Don</LINE>
+<LINE>John, saw afar off in the orchard this amiable encounter.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>And thought they Margaret was Hero?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Two of them did, the prince and Claudio; but the</LINE>
+<LINE>devil my master knew she was Margaret; and partly</LINE>
+<LINE>by his oaths, which first possessed them, partly by</LINE>
+<LINE>the dark night, which did deceive them, but chiefly</LINE>
+<LINE>by my villany, which did confirm any slander that</LINE>
+<LINE>Don John had made, away went Claudio enraged; swore</LINE>
+<LINE>he would meet her, as he was appointed, next morning</LINE>
+<LINE>at the temple, and there, before the whole</LINE>
+<LINE>congregation, shame her with what he saw o'er night</LINE>
+<LINE>and send her home again without a husband.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>First Watchman</SPEAKER>
+<LINE>We charge you, in the prince's name, stand!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Second Watchman</SPEAKER>
+<LINE>Call up the right master constable. We have here</LINE>
+<LINE>recovered the most dangerous piece of lechery that</LINE>
+<LINE>ever was known in the commonwealth.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>First Watchman</SPEAKER>
+<LINE>And one Deformed is one of them: I know him; a'</LINE>
+<LINE>wears a lock.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Masters, masters,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Second Watchman</SPEAKER>
+<LINE>You'll be made bring Deformed forth, I warrant you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Masters,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>First Watchman</SPEAKER>
+<LINE>Never speak: we charge you let us obey you to go with us.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>We are like to prove a goodly commodity, being taken</LINE>
+<LINE>up of these men's bills.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>A commodity in question, I warrant you. Come, we'll obey you.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE IV. HERO's apartment.</TITLE>
+<STAGEDIR>Enter HERO, MARGARET, and URSULA</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Good Ursula, wake my cousin Beatrice, and desire</LINE>
+<LINE>her to rise.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>I will, lady.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>And bid her come hither.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>Well.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Troth, I think your other rabato were better.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>No, pray thee, good Meg, I'll wear this.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>By my troth, 's not so good; and I warrant your</LINE>
+<LINE>cousin will say so.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>My cousin's a fool, and thou art another: I'll wear</LINE>
+<LINE>none but this.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>I like the new tire within excellently, if the hair</LINE>
+<LINE>were a thought browner; and your gown's a most rare</LINE>
+<LINE>fashion, i' faith. I saw the Duchess of Milan's</LINE>
+<LINE>gown that they praise so.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>O, that exceeds, they say.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>By my troth, 's but a night-gown in respect of</LINE>
+<LINE>yours: cloth o' gold, and cuts, and laced with</LINE>
+<LINE>silver, set with pearls, down sleeves, side sleeves,</LINE>
+<LINE>and skirts, round underborne with a bluish tinsel:</LINE>
+<LINE>but for a fine, quaint, graceful and excellent</LINE>
+<LINE>fashion, yours is worth ten on 't.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>God give me joy to wear it! for my heart is</LINE>
+<LINE>exceeding heavy.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>'Twill be heavier soon by the weight of a man.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Fie upon thee! art not ashamed?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Of what, lady? of speaking honourably? Is not</LINE>
+<LINE>marriage honourable in a beggar? Is not your lord</LINE>
+<LINE>honourable without marriage? I think you would have</LINE>
+<LINE>me say, 'saving your reverence, a husband:' and bad</LINE>
+<LINE>thinking do not wrest true speaking, I'll offend</LINE>
+<LINE>nobody: is there any harm in 'the heavier for a</LINE>
+<LINE>husband'? None, I think, and it be the right husband</LINE>
+<LINE>and the right wife; otherwise 'tis light, and not</LINE>
+<LINE>heavy: ask my Lady Beatrice else; here she comes.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter BEATRICE</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Good morrow, coz.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Good morrow, sweet Hero.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Why how now? do you speak in the sick tune?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I am out of all other tune, methinks.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Clap's into 'Light o' love;' that goes without a</LINE>
+<LINE>burden: do you sing it, and I'll dance it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Ye light o' love, with your heels! then, if your</LINE>
+<LINE>husband have stables enough, you'll see he shall</LINE>
+<LINE>lack no barns.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>O illegitimate construction! I scorn that with my heels.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>'Tis almost five o'clock, cousin; tis time you were</LINE>
+<LINE>ready. By my troth, I am exceeding ill: heigh-ho!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>For a hawk, a horse, or a husband?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>For the letter that begins them all, H.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Well, and you be not turned Turk, there's no more</LINE>
+<LINE>sailing by the star.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>What means the fool, trow?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Nothing I; but God send every one their heart's desire!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>These gloves the count sent me; they are an</LINE>
+<LINE>excellent perfume.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I am stuffed, cousin; I cannot smell.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>A maid, and stuffed! there's goodly catching of cold.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>O, God help me! God help me! how long have you</LINE>
+<LINE>professed apprehension?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Even since you left it. Doth not my wit become me rarely?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>It is not seen enough, you should wear it in your</LINE>
+<LINE>cap. By my troth, I am sick.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Get you some of this distilled Carduus Benedictus,</LINE>
+<LINE>and lay it to your heart: it is the only thing for a qualm.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>There thou prickest her with a thistle.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Benedictus! why Benedictus? you have some moral in</LINE>
+<LINE>this Benedictus.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Moral! no, by my troth, I have no moral meaning; I</LINE>
+<LINE>meant, plain holy-thistle. You may think perchance</LINE>
+<LINE>that I think you are in love: nay, by'r lady, I am</LINE>
+<LINE>not such a fool to think what I list, nor I list</LINE>
+<LINE>not to think what I can, nor indeed I cannot think,</LINE>
+<LINE>if I would think my heart out of thinking, that you</LINE>
+<LINE>are in love or that you will be in love or that you</LINE>
+<LINE>can be in love. Yet Benedick was such another, and</LINE>
+<LINE>now is he become a man: he swore he would never</LINE>
+<LINE>marry, and yet now, in despite of his heart, he eats</LINE>
+<LINE>his meat without grudging: and how you may be</LINE>
+<LINE>converted I know not, but methinks you look with</LINE>
+<LINE>your eyes as other women do.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>What pace is this that thy tongue keeps?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Not a false gallop.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Re-enter URSULA</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>Madam, withdraw: the prince, the count, Signior</LINE>
+<LINE>Benedick, Don John, and all the gallants of the</LINE>
+<LINE>town, are come to fetch you to church.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Help to dress me, good coz, good Meg, good Ursula.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE V. Another room in LEONATO'S house.</TITLE>
+<STAGEDIR>Enter LEONATO, with DOGBERRY and VERGES</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>What would you with me, honest neighbour?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Marry, sir, I would have some confidence with you</LINE>
+<LINE>that decerns you nearly.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Brief, I pray you; for you see it is a busy time with me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Marry, this it is, sir.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Yes, in truth it is, sir.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>What is it, my good friends?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Goodman Verges, sir, speaks a little off the</LINE>
+<LINE>matter: an old man, sir, and his wits are not so</LINE>
+<LINE>blunt as, God help, I would desire they were; but,</LINE>
+<LINE>in faith, honest as the skin between his brows.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Yes, I thank God I am as honest as any man living</LINE>
+<LINE>that is an old man and no honester than I.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Comparisons are odorous: palabras, neighbour Verges.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Neighbours, you are tedious.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>It pleases your worship to say so, but we are the</LINE>
+<LINE>poor duke's officers; but truly, for mine own part,</LINE>
+<LINE>if I were as tedious as a king, I could find it in</LINE>
+<LINE>my heart to bestow it all of your worship.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>All thy tediousness on me, ah?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Yea, an 'twere a thousand pound more than 'tis; for</LINE>
+<LINE>I hear as good exclamation on your worship as of any</LINE>
+<LINE>man in the city; and though I be but a poor man, I</LINE>
+<LINE>am glad to hear it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>And so am I.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I would fain know what you have to say.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Marry, sir, our watch to-night, excepting your</LINE>
+<LINE>worship's presence, ha' ta'en a couple of as arrant</LINE>
+<LINE>knaves as any in Messina.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>A good old man, sir; he will be talking: as they</LINE>
+<LINE>say, when the age is in, the wit is out: God help</LINE>
+<LINE>us! it is a world to see. Well said, i' faith,</LINE>
+<LINE>neighbour Verges: well, God's a good man; an two men</LINE>
+<LINE>ride of a horse, one must ride behind. An honest</LINE>
+<LINE>soul, i' faith, sir; by my troth he is, as ever</LINE>
+<LINE>broke bread; but God is to be worshipped; all men</LINE>
+<LINE>are not alike; alas, good neighbour!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Indeed, neighbour, he comes too short of you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Gifts that God gives.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I must leave you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>One word, sir: our watch, sir, have indeed</LINE>
+<LINE>comprehended two aspicious persons, and we would</LINE>
+<LINE>have them this morning examined before your worship.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Take their examination yourself and bring it me: I</LINE>
+<LINE>am now in great haste, as it may appear unto you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>It shall be suffigance.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Drink some wine ere you go: fare you well.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter a Messenger</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>My lord, they stay for you to give your daughter to</LINE>
+<LINE>her husband.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I'll wait upon them: I am ready.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt LEONATO and Messenger</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Go, good partner, go, get you to Francis Seacole;</LINE>
+<LINE>bid him bring his pen and inkhorn to the gaol: we</LINE>
+<LINE>are now to examination these men.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>And we must do it wisely.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>We will spare for no wit, I warrant you; here's</LINE>
+<LINE>that shall drive some of them to a non-come: only</LINE>
+<LINE>get the learned writer to set down our</LINE>
+<LINE>excommunication and meet me at the gaol.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+</ACT>
+
+<ACT><TITLE>ACT IV</TITLE>
+
+<SCENE><TITLE>SCENE I. A church.</TITLE>
+<STAGEDIR>Enter DON PEDRO, DON JOHN, LEONATO, FRIAR FRANCIS,
+CLAUDIO, BENEDICK, HERO, BEATRICE, and Attendants</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Come, Friar Francis, be brief; only to the plain</LINE>
+<LINE>form of marriage, and you shall recount their</LINE>
+<LINE>particular duties afterwards.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>You come hither, my lord, to marry this lady.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>No.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>To be married to her: friar, you come to marry her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Lady, you come hither to be married to this count.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>I do.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>If either of you know any inward impediment why you</LINE>
+<LINE>should not be conjoined, charge you, on your souls,</LINE>
+<LINE>to utter it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Know you any, Hero?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>None, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Know you any, count?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I dare make his answer, none.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>O, what men dare do! what men may do! what men daily</LINE>
+<LINE>do, not knowing what they do!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>How now! interjections? Why, then, some be of</LINE>
+<LINE>laughing, as, ah, ha, he!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Stand thee by, friar. Father, by your leave:</LINE>
+<LINE>Will you with free and unconstrained soul</LINE>
+<LINE>Give me this maid, your daughter?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>As freely, son, as God did give her me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And what have I to give you back, whose worth</LINE>
+<LINE>May counterpoise this rich and precious gift?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Nothing, unless you render her again.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Sweet prince, you learn me noble thankfulness.</LINE>
+<LINE>There, Leonato, take her back again:</LINE>
+<LINE>Give not this rotten orange to your friend;</LINE>
+<LINE>She's but the sign and semblance of her honour.</LINE>
+<LINE>Behold how like a maid she blushes here!</LINE>
+<LINE>O, what authority and show of truth</LINE>
+<LINE>Can cunning sin cover itself withal!</LINE>
+<LINE>Comes not that blood as modest evidence</LINE>
+<LINE>To witness simple virtue? Would you not swear,</LINE>
+<LINE>All you that see her, that she were a maid,</LINE>
+<LINE>By these exterior shows? But she is none:</LINE>
+<LINE>She knows the heat of a luxurious bed;</LINE>
+<LINE>Her blush is guiltiness, not modesty.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>What do you mean, my lord?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Not to be married,</LINE>
+<LINE>Not to knit my soul to an approved wanton.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Dear my lord, if you, in your own proof,</LINE>
+<LINE>Have vanquish'd the resistance of her youth,</LINE>
+<LINE>And made defeat of her virginity,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I know what you would say: if I have known her,</LINE>
+<LINE>You will say she did embrace me as a husband,</LINE>
+<LINE>And so extenuate the 'forehand sin:</LINE>
+<LINE>No, Leonato,</LINE>
+<LINE>I never tempted her with word too large;</LINE>
+<LINE>But, as a brother to his sister, show'd</LINE>
+<LINE>Bashful sincerity and comely love.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>And seem'd I ever otherwise to you?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Out on thee! Seeming! I will write against it:</LINE>
+<LINE>You seem to me as Dian in her orb,</LINE>
+<LINE>As chaste as is the bud ere it be blown;</LINE>
+<LINE>But you are more intemperate in your blood</LINE>
+<LINE>Than Venus, or those pamper'd animals</LINE>
+<LINE>That rage in savage sensuality.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Is my lord well, that he doth speak so wide?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Sweet prince, why speak not you?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>What should I speak?</LINE>
+<LINE>I stand dishonour'd, that have gone about</LINE>
+<LINE>To link my dear friend to a common stale.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Are these things spoken, or do I but dream?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Sir, they are spoken, and these things are true.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>This looks not like a nuptial.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>True! O God!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Leonato, stand I here?</LINE>
+<LINE>Is this the prince? is this the prince's brother?</LINE>
+<LINE>Is this face Hero's? are our eyes our own?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>All this is so: but what of this, my lord?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Let me but move one question to your daughter;</LINE>
+<LINE>And, by that fatherly and kindly power</LINE>
+<LINE>That you have in her, bid her answer truly.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I charge thee do so, as thou art my child.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>O, God defend me! how am I beset!</LINE>
+<LINE>What kind of catechising call you this?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>To make you answer truly to your name.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Is it not Hero? Who can blot that name</LINE>
+<LINE>With any just reproach?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Marry, that can Hero;</LINE>
+<LINE>Hero itself can blot out Hero's virtue.</LINE>
+<LINE>What man was he talk'd with you yesternight</LINE>
+<LINE>Out at your window betwixt twelve and one?</LINE>
+<LINE>Now, if you are a maid, answer to this.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>I talk'd with no man at that hour, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Why, then are you no maiden. Leonato,</LINE>
+<LINE>I am sorry you must hear: upon mine honour,</LINE>
+<LINE>Myself, my brother and this grieved count</LINE>
+<LINE>Did see her, hear her, at that hour last night</LINE>
+<LINE>Talk with a ruffian at her chamber-window</LINE>
+<LINE>Who hath indeed, most like a liberal villain,</LINE>
+<LINE>Confess'd the vile encounters they have had</LINE>
+<LINE>A thousand times in secret.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Fie, fie! they are not to be named, my lord,</LINE>
+<LINE>Not to be spoke of;</LINE>
+<LINE>There is not chastity enough in language</LINE>
+<LINE>Without offence to utter them. Thus, pretty lady,</LINE>
+<LINE>I am sorry for thy much misgovernment.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>O Hero, what a Hero hadst thou been,</LINE>
+<LINE>If half thy outward graces had been placed</LINE>
+<LINE>About thy thoughts and counsels of thy heart!</LINE>
+<LINE>But fare thee well, most foul, most fair! farewell,</LINE>
+<LINE>Thou pure impiety and impious purity!</LINE>
+<LINE>For thee I'll lock up all the gates of love,</LINE>
+<LINE>And on my eyelids shall conjecture hang,</LINE>
+<LINE>To turn all beauty into thoughts of harm,</LINE>
+<LINE>And never shall it more be gracious.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Hath no man's dagger here a point for me?</LINE>
+</SPEECH>
+
+
+<STAGEDIR>HERO swoons</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Why, how now, cousin! wherefore sink you down?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON JOHN</SPEAKER>
+<LINE>Come, let us go. These things, come thus to light,</LINE>
+<LINE>Smother her spirits up.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt DON PEDRO, DON JOHN, and CLAUDIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>How doth the lady?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Dead, I think. Help, uncle!</LINE>
+<LINE>Hero! why, Hero! Uncle! Signior Benedick! Friar!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>O Fate! take not away thy heavy hand.</LINE>
+<LINE>Death is the fairest cover for her shame</LINE>
+<LINE>That may be wish'd for.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>How now, cousin Hero!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Have comfort, lady.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Dost thou look up?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Yea, wherefore should she not?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Wherefore! Why, doth not every earthly thing</LINE>
+<LINE>Cry shame upon her? Could she here deny</LINE>
+<LINE>The story that is printed in her blood?</LINE>
+<LINE>Do not live, Hero; do not ope thine eyes:</LINE>
+<LINE>For, did I think thou wouldst not quickly die,</LINE>
+<LINE>Thought I thy spirits were stronger than thy shames,</LINE>
+<LINE>Myself would, on the rearward of reproaches,</LINE>
+<LINE>Strike at thy life. Grieved I, I had but one?</LINE>
+<LINE>Chid I for that at frugal nature's frame?</LINE>
+<LINE>O, one too much by thee! Why had I one?</LINE>
+<LINE>Why ever wast thou lovely in my eyes?</LINE>
+<LINE>Why had I not with charitable hand</LINE>
+<LINE>Took up a beggar's issue at my gates,</LINE>
+<LINE>Who smirch'd thus and mired with infamy,</LINE>
+<LINE>I might have said 'No part of it is mine;</LINE>
+<LINE>This shame derives itself from unknown loins'?</LINE>
+<LINE>But mine and mine I loved and mine I praised</LINE>
+<LINE>And mine that I was proud on, mine so much</LINE>
+<LINE>That I myself was to myself not mine,</LINE>
+<LINE>Valuing of her,--why, she, O, she is fallen</LINE>
+<LINE>Into a pit of ink, that the wide sea</LINE>
+<LINE>Hath drops too few to wash her clean again</LINE>
+<LINE>And salt too little which may season give</LINE>
+<LINE>To her foul-tainted flesh!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Sir, sir, be patient.</LINE>
+<LINE>For my part, I am so attired in wonder,</LINE>
+<LINE>I know not what to say.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>O, on my soul, my cousin is belied!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Lady, were you her bedfellow last night?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>No, truly not; although, until last night,</LINE>
+<LINE>I have this twelvemonth been her bedfellow.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Confirm'd, confirm'd! O, that is stronger made</LINE>
+<LINE>Which was before barr'd up with ribs of iron!</LINE>
+<LINE>Would the two princes lie, and Claudio lie,</LINE>
+<LINE>Who loved her so, that, speaking of her foulness,</LINE>
+<LINE>Wash'd it with tears? Hence from her! let her die.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Hear me a little; for I have only been</LINE>
+<LINE>Silent so long and given way unto</LINE>
+<LINE>This course of fortune</LINE>
+<LINE>By noting of the lady. I have mark'd</LINE>
+<LINE>A thousand blushing apparitions</LINE>
+<LINE>To start into her face, a thousand innocent shames</LINE>
+<LINE>In angel whiteness beat away those blushes;</LINE>
+<LINE>And in her eye there hath appear'd a fire,</LINE>
+<LINE>To burn the errors that these princes hold</LINE>
+<LINE>Against her maiden truth. Call me a fool;</LINE>
+<LINE>Trust not my reading nor my observations,</LINE>
+<LINE>Which with experimental seal doth warrant</LINE>
+<LINE>The tenor of my book; trust not my age,</LINE>
+<LINE>My reverence, calling, nor divinity,</LINE>
+<LINE>If this sweet lady lie not guiltless here</LINE>
+<LINE>Under some biting error.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Friar, it cannot be.</LINE>
+<LINE>Thou seest that all the grace that she hath left</LINE>
+<LINE>Is that she will not add to her damnation</LINE>
+<LINE>A sin of perjury; she not denies it:</LINE>
+<LINE>Why seek'st thou then to cover with excuse</LINE>
+<LINE>That which appears in proper nakedness?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Lady, what man is he you are accused of?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>They know that do accuse me; I know none:</LINE>
+<LINE>If I know more of any man alive</LINE>
+<LINE>Than that which maiden modesty doth warrant,</LINE>
+<LINE>Let all my sins lack mercy! O my father,</LINE>
+<LINE>Prove you that any man with me conversed</LINE>
+<LINE>At hours unmeet, or that I yesternight</LINE>
+<LINE>Maintain'd the change of words with any creature,</LINE>
+<LINE>Refuse me, hate me, torture me to death!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>There is some strange misprision in the princes.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Two of them have the very bent of honour;</LINE>
+<LINE>And if their wisdoms be misled in this,</LINE>
+<LINE>The practise of it lives in John the bastard,</LINE>
+<LINE>Whose spirits toil in frame of villanies.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I know not. If they speak but truth of her,</LINE>
+<LINE>These hands shall tear her; if they wrong her honour,</LINE>
+<LINE>The proudest of them shall well hear of it.</LINE>
+<LINE>Time hath not yet so dried this blood of mine,</LINE>
+<LINE>Nor age so eat up my invention,</LINE>
+<LINE>Nor fortune made such havoc of my means,</LINE>
+<LINE>Nor my bad life reft me so much of friends,</LINE>
+<LINE>But they shall find, awaked in such a kind,</LINE>
+<LINE>Both strength of limb and policy of mind,</LINE>
+<LINE>Ability in means and choice of friends,</LINE>
+<LINE>To quit me of them throughly.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Pause awhile,</LINE>
+<LINE>And let my counsel sway you in this case.</LINE>
+<LINE>Your daughter here the princes left for dead:</LINE>
+<LINE>Let her awhile be secretly kept in,</LINE>
+<LINE>And publish it that she is dead indeed;</LINE>
+<LINE>Maintain a mourning ostentation</LINE>
+<LINE>And on your family's old monument</LINE>
+<LINE>Hang mournful epitaphs and do all rites</LINE>
+<LINE>That appertain unto a burial.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>What shall become of this? what will this do?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Marry, this well carried shall on her behalf</LINE>
+<LINE>Change slander to remorse; that is some good:</LINE>
+<LINE>But not for that dream I on this strange course,</LINE>
+<LINE>But on this travail look for greater birth.</LINE>
+<LINE>She dying, as it must so be maintain'd,</LINE>
+<LINE>Upon the instant that she was accused,</LINE>
+<LINE>Shall be lamented, pitied and excused</LINE>
+<LINE>Of every hearer: for it so falls out</LINE>
+<LINE>That what we have we prize not to the worth</LINE>
+<LINE>Whiles we enjoy it, but being lack'd and lost,</LINE>
+<LINE>Why, then we rack the value, then we find</LINE>
+<LINE>The virtue that possession would not show us</LINE>
+<LINE>Whiles it was ours. So will it fare with Claudio:</LINE>
+<LINE>When he shall hear she died upon his words,</LINE>
+<LINE>The idea of her life shall sweetly creep</LINE>
+<LINE>Into his study of imagination,</LINE>
+<LINE>And every lovely organ of her life</LINE>
+<LINE>Shall come apparell'd in more precious habit,</LINE>
+<LINE>More moving-delicate and full of life,</LINE>
+<LINE>Into the eye and prospect of his soul,</LINE>
+<LINE>Than when she lived indeed; then shall he mourn,</LINE>
+<LINE>If ever love had interest in his liver,</LINE>
+<LINE>And wish he had not so accused her,</LINE>
+<LINE>No, though he thought his accusation true.</LINE>
+<LINE>Let this be so, and doubt not but success</LINE>
+<LINE>Will fashion the event in better shape</LINE>
+<LINE>Than I can lay it down in likelihood.</LINE>
+<LINE>But if all aim but this be levell'd false,</LINE>
+<LINE>The supposition of the lady's death</LINE>
+<LINE>Will quench the wonder of her infamy:</LINE>
+<LINE>And if it sort not well, you may conceal her,</LINE>
+<LINE>As best befits her wounded reputation,</LINE>
+<LINE>In some reclusive and religious life,</LINE>
+<LINE>Out of all eyes, tongues, minds and injuries.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Signior Leonato, let the friar advise you:</LINE>
+<LINE>And though you know my inwardness and love</LINE>
+<LINE>Is very much unto the prince and Claudio,</LINE>
+<LINE>Yet, by mine honour, I will deal in this</LINE>
+<LINE>As secretly and justly as your soul</LINE>
+<LINE>Should with your body.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Being that I flow in grief,</LINE>
+<LINE>The smallest twine may lead me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>'Tis well consented: presently away;</LINE>
+<LINE>For to strange sores strangely they strain the cure.</LINE>
+<LINE>Come, lady, die to live: this wedding-day</LINE>
+<LINE>Perhaps is but prolong'd: have patience and endure.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt all but BENEDICK and BEATRICE</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Lady Beatrice, have you wept all this while?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Yea, and I will weep a while longer.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I will not desire that.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>You have no reason; I do it freely.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Surely I do believe your fair cousin is wronged.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Ah, how much might the man deserve of me that would right her!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Is there any way to show such friendship?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>A very even way, but no such friend.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>May a man do it?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>It is a man's office, but not yours.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I do love nothing in the world so well as you: is</LINE>
+<LINE>not that strange?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>As strange as the thing I know not. It were as</LINE>
+<LINE>possible for me to say I loved nothing so well as</LINE>
+<LINE>you: but believe me not; and yet I lie not; I</LINE>
+<LINE>confess nothing, nor I deny nothing. I am sorry for my cousin.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>By my sword, Beatrice, thou lovest me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Do not swear, and eat it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I will swear by it that you love me; and I will make</LINE>
+<LINE>him eat it that says I love not you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Will you not eat your word?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>With no sauce that can be devised to it. I protest</LINE>
+<LINE>I love thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Why, then, God forgive me!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>What offence, sweet Beatrice?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>You have stayed me in a happy hour: I was about to</LINE>
+<LINE>protest I loved you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>And do it with all thy heart.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I love you with so much of my heart that none is</LINE>
+<LINE>left to protest.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Come, bid me do any thing for thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Kill Claudio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Ha! not for the wide world.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>You kill me to deny it. Farewell.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Tarry, sweet Beatrice.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I am gone, though I am here: there is no love in</LINE>
+<LINE>you: nay, I pray you, let me go.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Beatrice,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>In faith, I will go.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>We'll be friends first.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>You dare easier be friends with me than fight with mine enemy.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Is Claudio thine enemy?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Is he not approved in the height a villain, that</LINE>
+<LINE>hath slandered, scorned, dishonoured my kinswoman? O</LINE>
+<LINE>that I were a man! What, bear her in hand until they</LINE>
+<LINE>come to take hands; and then, with public</LINE>
+<LINE>accusation, uncovered slander, unmitigated rancour,</LINE>
+<LINE>--O God, that I were a man! I would eat his heart</LINE>
+<LINE>in the market-place.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Hear me, Beatrice,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Talk with a man out at a window! A proper saying!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Nay, but, Beatrice,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Sweet Hero! She is wronged, she is slandered, she is undone.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Beat--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Princes and counties! Surely, a princely testimony,</LINE>
+<LINE>a goodly count, Count Comfect; a sweet gallant,</LINE>
+<LINE>surely! O that I were a man for his sake! or that I</LINE>
+<LINE>had any friend would be a man for my sake! But</LINE>
+<LINE>manhood is melted into courtesies, valour into</LINE>
+<LINE>compliment, and men are only turned into tongue, and</LINE>
+<LINE>trim ones too: he is now as valiant as Hercules</LINE>
+<LINE>that only tells a lie and swears it. I cannot be a</LINE>
+<LINE>man with wishing, therefore I will die a woman with grieving.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Tarry, good Beatrice. By this hand, I love thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Use it for my love some other way than swearing by it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Think you in your soul the Count Claudio hath wronged Hero?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Yea, as sure as I have a thought or a soul.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Enough, I am engaged; I will challenge him. I will</LINE>
+<LINE>kiss your hand, and so I leave you. By this hand,</LINE>
+<LINE>Claudio shall render me a dear account. As you</LINE>
+<LINE>hear of me, so think of me. Go, comfort your</LINE>
+<LINE>cousin: I must say she is dead: and so, farewell.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE II. A prison.</TITLE>
+<STAGEDIR>Enter DOGBERRY, VERGES, and Sexton, in gowns; and
+the Watch, with CONRADE and BORACHIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Is our whole dissembly appeared?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>O, a stool and a cushion for the sexton.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Sexton</SPEAKER>
+<LINE>Which be the malefactors?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Marry, that am I and my partner.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Nay, that's certain; we have the exhibition to examine.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Sexton</SPEAKER>
+<LINE>But which are the offenders that are to be</LINE>
+<LINE>examined? let them come before master constable.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Yea, marry, let them come before me. What is your</LINE>
+<LINE>name, friend?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Borachio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Pray, write down, Borachio. Yours, sirrah?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>I am a gentleman, sir, and my name is Conrade.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Write down, master gentleman Conrade. Masters, do</LINE>
+<LINE>you serve God?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Yea, sir, we hope.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Write down, that they hope they serve God: and</LINE>
+<LINE>write God first; for God defend but God should go</LINE>
+<LINE>before such villains! Masters, it is proved already</LINE>
+<LINE>that you are little better than false knaves; and it</LINE>
+<LINE>will go near to be thought so shortly. How answer</LINE>
+<LINE>you for yourselves?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Marry, sir, we say we are none.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>A marvellous witty fellow, I assure you: but I</LINE>
+<LINE>will go about with him. Come you hither, sirrah; a</LINE>
+<LINE>word in your ear: sir, I say to you, it is thought</LINE>
+<LINE>you are false knaves.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Sir, I say to you we are none.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Well, stand aside. 'Fore God, they are both in a</LINE>
+<LINE>tale. Have you writ down, that they are none?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Sexton</SPEAKER>
+<LINE>Master constable, you go not the way to examine:</LINE>
+<LINE>you must call forth the watch that are their accusers.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Yea, marry, that's the eftest way. Let the watch</LINE>
+<LINE>come forth. Masters, I charge you, in the prince's</LINE>
+<LINE>name, accuse these men.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>First Watchman</SPEAKER>
+<LINE>This man said, sir, that Don John, the prince's</LINE>
+<LINE>brother, was a villain.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Write down Prince John a villain. Why, this is flat</LINE>
+<LINE>perjury, to call a prince's brother villain.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Master constable,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Pray thee, fellow, peace: I do not like thy look,</LINE>
+<LINE>I promise thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Sexton</SPEAKER>
+<LINE>What heard you him say else?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Second Watchman</SPEAKER>
+<LINE>Marry, that he had received a thousand ducats of</LINE>
+<LINE>Don John for accusing the Lady Hero wrongfully.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Flat burglary as ever was committed.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Yea, by mass, that it is.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Sexton</SPEAKER>
+<LINE>What else, fellow?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>First Watchman</SPEAKER>
+<LINE>And that Count Claudio did mean, upon his words, to</LINE>
+<LINE>disgrace Hero before the whole assembly. and not marry her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>O villain! thou wilt be condemned into everlasting</LINE>
+<LINE>redemption for this.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Sexton</SPEAKER>
+<LINE>What else?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Watchman</SPEAKER>
+<LINE>This is all.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Sexton</SPEAKER>
+<LINE>And this is more, masters, than you can deny.</LINE>
+<LINE>Prince John is this morning secretly stolen away;</LINE>
+<LINE>Hero was in this manner accused, in this very manner</LINE>
+<LINE>refused, and upon the grief of this suddenly died.</LINE>
+<LINE>Master constable, let these men be bound, and</LINE>
+<LINE>brought to Leonato's: I will go before and show</LINE>
+<LINE>him their examination.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Come, let them be opinioned.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Let them be in the hands--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Off, coxcomb!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>God's my life, where's the sexton? let him write</LINE>
+<LINE>down the prince's officer coxcomb. Come, bind them.</LINE>
+<LINE>Thou naughty varlet!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CONRADE</SPEAKER>
+<LINE>Away! you are an ass, you are an ass.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Dost thou not suspect my place? dost thou not</LINE>
+<LINE>suspect my years? O that he were here to write me</LINE>
+<LINE>down an ass! But, masters, remember that I am an</LINE>
+<LINE>ass; though it be not written down, yet forget not</LINE>
+<LINE>that I am an ass. No, thou villain, thou art full of</LINE>
+<LINE>piety, as shall be proved upon thee by good witness.</LINE>
+<LINE>I am a wise fellow, and, which is more, an officer,</LINE>
+<LINE>and, which is more, a householder, and, which is</LINE>
+<LINE>more, as pretty a piece of flesh as any is in</LINE>
+<LINE>Messina, and one that knows the law, go to; and a</LINE>
+<LINE>rich fellow enough, go to; and a fellow that hath</LINE>
+<LINE>had losses, and one that hath two gowns and every</LINE>
+<LINE>thing handsome about him. Bring him away. O that</LINE>
+<LINE>I had been writ down an ass!</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+</ACT>
+
+<ACT><TITLE>ACT V</TITLE>
+
+<SCENE><TITLE>SCENE I. Before LEONATO'S house.</TITLE>
+<STAGEDIR>Enter LEONATO and ANTONIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>If you go on thus, you will kill yourself:</LINE>
+<LINE>And 'tis not wisdom thus to second grief</LINE>
+<LINE>Against yourself.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I pray thee, cease thy counsel,</LINE>
+<LINE>Which falls into mine ears as profitless</LINE>
+<LINE>As water in a sieve: give not me counsel;</LINE>
+<LINE>Nor let no comforter delight mine ear</LINE>
+<LINE>But such a one whose wrongs do suit with mine.</LINE>
+<LINE>Bring me a father that so loved his child,</LINE>
+<LINE>Whose joy of her is overwhelm'd like mine,</LINE>
+<LINE>And bid him speak of patience;</LINE>
+<LINE>Measure his woe the length and breadth of mine</LINE>
+<LINE>And let it answer every strain for strain,</LINE>
+<LINE>As thus for thus and such a grief for such,</LINE>
+<LINE>In every lineament, branch, shape, and form:</LINE>
+<LINE>If such a one will smile and stroke his beard,</LINE>
+<LINE>Bid sorrow wag, cry 'hem!' when he should groan,</LINE>
+<LINE>Patch grief with proverbs, make misfortune drunk</LINE>
+<LINE>With candle-wasters; bring him yet to me,</LINE>
+<LINE>And I of him will gather patience.</LINE>
+<LINE>But there is no such man: for, brother, men</LINE>
+<LINE>Can counsel and speak comfort to that grief</LINE>
+<LINE>Which they themselves not feel; but, tasting it,</LINE>
+<LINE>Their counsel turns to passion, which before</LINE>
+<LINE>Would give preceptial medicine to rage,</LINE>
+<LINE>Fetter strong madness in a silken thread,</LINE>
+<LINE>Charm ache with air and agony with words:</LINE>
+<LINE>No, no; 'tis all men's office to speak patience</LINE>
+<LINE>To those that wring under the load of sorrow,</LINE>
+<LINE>But no man's virtue nor sufficiency</LINE>
+<LINE>To be so moral when he shall endure</LINE>
+<LINE>The like himself. Therefore give me no counsel:</LINE>
+<LINE>My griefs cry louder than advertisement.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Therein do men from children nothing differ.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I pray thee, peace. I will be flesh and blood;</LINE>
+<LINE>For there was never yet philosopher</LINE>
+<LINE>That could endure the toothache patiently,</LINE>
+<LINE>However they have writ the style of gods</LINE>
+<LINE>And made a push at chance and sufferance.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Yet bend not all the harm upon yourself;</LINE>
+<LINE>Make those that do offend you suffer too.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>There thou speak'st reason: nay, I will do so.</LINE>
+<LINE>My soul doth tell me Hero is belied;</LINE>
+<LINE>And that shall Claudio know; so shall the prince</LINE>
+<LINE>And all of them that thus dishonour her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Here comes the prince and Claudio hastily.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter DON PEDRO and CLAUDIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Good den, good den.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Good day to both of you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Hear you. my lords,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>We have some haste, Leonato.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Some haste, my lord! well, fare you well, my lord:</LINE>
+<LINE>Are you so hasty now? well, all is one.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Nay, do not quarrel with us, good old man.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>If he could right himself with quarreling,</LINE>
+<LINE>Some of us would lie low.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Who wrongs him?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Marry, thou dost wrong me; thou dissembler, thou:--</LINE>
+<LINE>Nay, never lay thy hand upon thy sword;</LINE>
+<LINE>I fear thee not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Marry, beshrew my hand,</LINE>
+<LINE>If it should give your age such cause of fear:</LINE>
+<LINE>In faith, my hand meant nothing to my sword.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Tush, tush, man; never fleer and jest at me:</LINE>
+<LINE>I speak not like a dotard nor a fool,</LINE>
+<LINE>As under privilege of age to brag</LINE>
+<LINE>What I have done being young, or what would do</LINE>
+<LINE>Were I not old. Know, Claudio, to thy head,</LINE>
+<LINE>Thou hast so wrong'd mine innocent child and me</LINE>
+<LINE>That I am forced to lay my reverence by</LINE>
+<LINE>And, with grey hairs and bruise of many days,</LINE>
+<LINE>Do challenge thee to trial of a man.</LINE>
+<LINE>I say thou hast belied mine innocent child;</LINE>
+<LINE>Thy slander hath gone through and through her heart,</LINE>
+<LINE>And she lies buried with her ancestors;</LINE>
+<LINE>O, in a tomb where never scandal slept,</LINE>
+<LINE>Save this of hers, framed by thy villany!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>My villany?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Thine, Claudio; thine, I say.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>You say not right, old man.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>My lord, my lord,</LINE>
+<LINE>I'll prove it on his body, if he dare,</LINE>
+<LINE>Despite his nice fence and his active practise,</LINE>
+<LINE>His May of youth and bloom of lustihood.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Away! I will not have to do with you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Canst thou so daff me? Thou hast kill'd my child:</LINE>
+<LINE>If thou kill'st me, boy, thou shalt kill a man.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>He shall kill two of us, and men indeed:</LINE>
+<LINE>But that's no matter; let him kill one first;</LINE>
+<LINE>Win me and wear me; let him answer me.</LINE>
+<LINE>Come, follow me, boy; come, sir boy, come, follow me:</LINE>
+<LINE>Sir boy, I'll whip you from your foining fence;</LINE>
+<LINE>Nay, as I am a gentleman, I will.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Brother,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Content yourself. God knows I loved my niece;</LINE>
+<LINE>And she is dead, slander'd to death by villains,</LINE>
+<LINE>That dare as well answer a man indeed</LINE>
+<LINE>As I dare take a serpent by the tongue:</LINE>
+<LINE>Boys, apes, braggarts, Jacks, milksops!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Brother Antony,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Hold you content. What, man! I know them, yea,</LINE>
+<LINE>And what they weigh, even to the utmost scruple,--</LINE>
+<LINE>Scrambling, out-facing, fashion-monging boys,</LINE>
+<LINE>That lie and cog and flout, deprave and slander,</LINE>
+<LINE>Go anticly, show outward hideousness,</LINE>
+<LINE>And speak off half a dozen dangerous words,</LINE>
+<LINE>How they might hurt their enemies, if they durst;</LINE>
+<LINE>And this is all.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>But, brother Antony,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Come, 'tis no matter:</LINE>
+<LINE>Do not you meddle; let me deal in this.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Gentlemen both, we will not wake your patience.</LINE>
+<LINE>My heart is sorry for your daughter's death:</LINE>
+<LINE>But, on my honour, she was charged with nothing</LINE>
+<LINE>But what was true and very full of proof.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>My lord, my lord,--</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I will not hear you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>No? Come, brother; away! I will be heard.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>And shall, or some of us will smart for it.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt LEONATO and ANTONIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>See, see; here comes the man we went to seek.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter BENEDICK</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Now, signior, what news?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Good day, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Welcome, signior: you are almost come to part</LINE>
+<LINE>almost a fray.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>We had like to have had our two noses snapped off</LINE>
+<LINE>with two old men without teeth.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Leonato and his brother. What thinkest thou? Had</LINE>
+<LINE>we fought, I doubt we should have been too young for them.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>In a false quarrel there is no true valour. I came</LINE>
+<LINE>to seek you both.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>We have been up and down to seek thee; for we are</LINE>
+<LINE>high-proof melancholy and would fain have it beaten</LINE>
+<LINE>away. Wilt thou use thy wit?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>It is in my scabbard: shall I draw it?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Dost thou wear thy wit by thy side?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Never any did so, though very many have been beside</LINE>
+<LINE>their wit. I will bid thee draw, as we do the</LINE>
+<LINE>minstrels; draw, to pleasure us.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>As I am an honest man, he looks pale. Art thou</LINE>
+<LINE>sick, or angry?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>What, courage, man! What though care killed a cat,</LINE>
+<LINE>thou hast mettle enough in thee to kill care.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Sir, I shall meet your wit in the career, and you</LINE>
+<LINE>charge it against me. I pray you choose another subject.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Nay, then, give him another staff: this last was</LINE>
+<LINE>broke cross.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>By this light, he changes more and more: I think</LINE>
+<LINE>he be angry indeed.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>If he be, he knows how to turn his girdle.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Shall I speak a word in your ear?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>God bless me from a challenge!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE><STAGEDIR>Aside to CLAUDIO</STAGEDIR> You are a villain; I jest not:</LINE>
+<LINE>I will make it good how you dare, with what you</LINE>
+<LINE>dare, and when you dare. Do me right, or I will</LINE>
+<LINE>protest your cowardice. You have killed a sweet</LINE>
+<LINE>lady, and her death shall fall heavy on you. Let me</LINE>
+<LINE>hear from you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Well, I will meet you, so I may have good cheer.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>What, a feast, a feast?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I' faith, I thank him; he hath bid me to a calf's</LINE>
+<LINE>head and a capon; the which if I do not carve most</LINE>
+<LINE>curiously, say my knife's naught. Shall I not find</LINE>
+<LINE>a woodcock too?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Sir, your wit ambles well; it goes easily.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>I'll tell thee how Beatrice praised thy wit the</LINE>
+<LINE>other day. I said, thou hadst a fine wit: 'True,'</LINE>
+<LINE>said she, 'a fine little one.' 'No,' said I, 'a</LINE>
+<LINE>great wit:' 'Right,' says she, 'a great gross one.'</LINE>
+<LINE>'Nay,' said I, 'a good wit:' 'Just,' said she, 'it</LINE>
+<LINE>hurts nobody.' 'Nay,' said I, 'the gentleman</LINE>
+<LINE>is wise:' 'Certain,' said she, 'a wise gentleman.'</LINE>
+<LINE>'Nay,' said I, 'he hath the tongues:' 'That I</LINE>
+<LINE>believe,' said she, 'for he swore a thing to me on</LINE>
+<LINE>Monday night, which he forswore on Tuesday morning;</LINE>
+<LINE>there's a double tongue; there's two tongues.' Thus</LINE>
+<LINE>did she, an hour together, transshape thy particular</LINE>
+<LINE>virtues: yet at last she concluded with a sigh, thou</LINE>
+<LINE>wast the properest man in Italy.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>For the which she wept heartily and said she cared</LINE>
+<LINE>not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Yea, that she did: but yet, for all that, an if she</LINE>
+<LINE>did not hate him deadly, she would love him dearly:</LINE>
+<LINE>the old man's daughter told us all.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>All, all; and, moreover, God saw him when he was</LINE>
+<LINE>hid in the garden.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>But when shall we set the savage bull's horns on</LINE>
+<LINE>the sensible Benedick's head?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Yea, and text underneath, 'Here dwells Benedick the</LINE>
+<LINE>married man'?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Fare you well, boy: you know my mind. I will leave</LINE>
+<LINE>you now to your gossip-like humour: you break jests</LINE>
+<LINE>as braggarts do their blades, which God be thanked,</LINE>
+<LINE>hurt not. My lord, for your many courtesies I thank</LINE>
+<LINE>you: I must discontinue your company: your brother</LINE>
+<LINE>the bastard is fled from Messina: you have among</LINE>
+<LINE>you killed a sweet and innocent lady. For my Lord</LINE>
+<LINE>Lackbeard there, he and I shall meet: and, till</LINE>
+<LINE>then, peace be with him.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>He is in earnest.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>In most profound earnest; and, I'll warrant you, for</LINE>
+<LINE>the love of Beatrice.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>And hath challenged thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Most sincerely.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>What a pretty thing man is when he goes in his</LINE>
+<LINE>doublet and hose and leaves off his wit!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>He is then a giant to an ape; but then is an ape a</LINE>
+<LINE>doctor to such a man.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>But, soft you, let me be: pluck up, my heart, and</LINE>
+<LINE>be sad. Did he not say, my brother was fled?</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter DOGBERRY, VERGES, and the Watch, with CONRADE
+and BORACHIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Come you, sir: if justice cannot tame you, she</LINE>
+<LINE>shall ne'er weigh more reasons in her balance: nay,</LINE>
+<LINE>an you be a cursing hypocrite once, you must be looked to.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>How now? two of my brother's men bound! Borachio</LINE>
+<LINE>one!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Hearken after their offence, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Officers, what offence have these men done?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Marry, sir, they have committed false report;</LINE>
+<LINE>moreover, they have spoken untruths; secondarily,</LINE>
+<LINE>they are slanders; sixth and lastly, they have</LINE>
+<LINE>belied a lady; thirdly, they have verified unjust</LINE>
+<LINE>things; and, to conclude, they are lying knaves.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>First, I ask thee what they have done; thirdly, I</LINE>
+<LINE>ask thee what's their offence; sixth and lastly, why</LINE>
+<LINE>they are committed; and, to conclude, what you lay</LINE>
+<LINE>to their charge.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Rightly reasoned, and in his own division: and, by</LINE>
+<LINE>my troth, there's one meaning well suited.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Who have you offended, masters, that you are thus</LINE>
+<LINE>bound to your answer? this learned constable is</LINE>
+<LINE>too cunning to be understood: what's your offence?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Sweet prince, let me go no farther to mine answer:</LINE>
+<LINE>do you hear me, and let this count kill me. I have</LINE>
+<LINE>deceived even your very eyes: what your wisdoms</LINE>
+<LINE>could not discover, these shallow fools have brought</LINE>
+<LINE>to light: who in the night overheard me confessing</LINE>
+<LINE>to this man how Don John your brother incensed me</LINE>
+<LINE>to slander the Lady Hero, how you were brought into</LINE>
+<LINE>the orchard and saw me court Margaret in Hero's</LINE>
+<LINE>garments, how you disgraced her, when you should</LINE>
+<LINE>marry her: my villany they have upon record; which</LINE>
+<LINE>I had rather seal with my death than repeat over</LINE>
+<LINE>to my shame. The lady is dead upon mine and my</LINE>
+<LINE>master's false accusation; and, briefly, I desire</LINE>
+<LINE>nothing but the reward of a villain.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Runs not this speech like iron through your blood?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I have drunk poison whiles he utter'd it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>But did my brother set thee on to this?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Yea, and paid me richly for the practise of it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>He is composed and framed of treachery:</LINE>
+<LINE>And fled he is upon this villany.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Sweet Hero! now thy image doth appear</LINE>
+<LINE>In the rare semblance that I loved it first.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Come, bring away the plaintiffs: by this time our</LINE>
+<LINE>sexton hath reformed Signior Leonato of the matter:</LINE>
+<LINE>and, masters, do not forget to specify, when time</LINE>
+<LINE>and place shall serve, that I am an ass.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>VERGES</SPEAKER>
+<LINE>Here, here comes master Signior Leonato, and the</LINE>
+<LINE>Sexton too.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Re-enter LEONATO and ANTONIO, with the Sexton</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Which is the villain? let me see his eyes,</LINE>
+<LINE>That, when I note another man like him,</LINE>
+<LINE>I may avoid him: which of these is he?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>If you would know your wronger, look on me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Art thou the slave that with thy breath hast kill'd</LINE>
+<LINE>Mine innocent child?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>Yea, even I alone.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>No, not so, villain; thou beliest thyself:</LINE>
+<LINE>Here stand a pair of honourable men;</LINE>
+<LINE>A third is fled, that had a hand in it.</LINE>
+<LINE>I thank you, princes, for my daughter's death:</LINE>
+<LINE>Record it with your high and worthy deeds:</LINE>
+<LINE>'Twas bravely done, if you bethink you of it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I know not how to pray your patience;</LINE>
+<LINE>Yet I must speak. Choose your revenge yourself;</LINE>
+<LINE>Impose me to what penance your invention</LINE>
+<LINE>Can lay upon my sin: yet sinn'd I not</LINE>
+<LINE>But in mistaking.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>By my soul, nor I:</LINE>
+<LINE>And yet, to satisfy this good old man,</LINE>
+<LINE>I would bend under any heavy weight</LINE>
+<LINE>That he'll enjoin me to.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I cannot bid you bid my daughter live;</LINE>
+<LINE>That were impossible: but, I pray you both,</LINE>
+<LINE>Possess the people in Messina here</LINE>
+<LINE>How innocent she died; and if your love</LINE>
+<LINE>Can labour ought in sad invention,</LINE>
+<LINE>Hang her an epitaph upon her tomb</LINE>
+<LINE>And sing it to her bones, sing it to-night:</LINE>
+<LINE>To-morrow morning come you to my house,</LINE>
+<LINE>And since you could not be my son-in-law,</LINE>
+<LINE>Be yet my nephew: my brother hath a daughter,</LINE>
+<LINE>Almost the copy of my child that's dead,</LINE>
+<LINE>And she alone is heir to both of us:</LINE>
+<LINE>Give her the right you should have given her cousin,</LINE>
+<LINE>And so dies my revenge.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>O noble sir,</LINE>
+<LINE>Your over-kindness doth wring tears from me!</LINE>
+<LINE>I do embrace your offer; and dispose</LINE>
+<LINE>For henceforth of poor Claudio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>To-morrow then I will expect your coming;</LINE>
+<LINE>To-night I take my leave. This naughty man</LINE>
+<LINE>Shall face to face be brought to Margaret,</LINE>
+<LINE>Who I believe was pack'd in all this wrong,</LINE>
+<LINE>Hired to it by your brother.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BORACHIO</SPEAKER>
+<LINE>No, by my soul, she was not,</LINE>
+<LINE>Nor knew not what she did when she spoke to me,</LINE>
+<LINE>But always hath been just and virtuous</LINE>
+<LINE>In any thing that I do know by her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Moreover, sir, which indeed is not under white and</LINE>
+<LINE>black, this plaintiff here, the offender, did call</LINE>
+<LINE>me ass: I beseech you, let it be remembered in his</LINE>
+<LINE>punishment. And also, the watch heard them talk of</LINE>
+<LINE>one Deformed: they say be wears a key in his ear and</LINE>
+<LINE>a lock hanging by it, and borrows money in God's</LINE>
+<LINE>name, the which he hath used so long and never paid</LINE>
+<LINE>that now men grow hard-hearted and will lend nothing</LINE>
+<LINE>for God's sake: pray you, examine him upon that point.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>I thank thee for thy care and honest pains.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>Your worship speaks like a most thankful and</LINE>
+<LINE>reverend youth; and I praise God for you.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>There's for thy pains.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>God save the foundation!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Go, I discharge thee of thy prisoner, and I thank thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DOGBERRY</SPEAKER>
+<LINE>I leave an arrant knave with your worship; which I</LINE>
+<LINE>beseech your worship to correct yourself, for the</LINE>
+<LINE>example of others. God keep your worship! I wish</LINE>
+<LINE>your worship well; God restore you to health! I</LINE>
+<LINE>humbly give you leave to depart; and if a merry</LINE>
+<LINE>meeting may be wished, God prohibit it! Come, neighbour.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt DOGBERRY and VERGES</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Until to-morrow morning, lords, farewell.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Farewell, my lords: we look for you to-morrow.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>We will not fail.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>To-night I'll mourn with Hero.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE><STAGEDIR>To the Watch</STAGEDIR> Bring you these fellows on. We'll</LINE>
+<LINE>talk with Margaret,</LINE>
+<LINE>How her acquaintance grew with this lewd fellow.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt, severally</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE II. LEONATO'S garden.</TITLE>
+<STAGEDIR>Enter BENEDICK and MARGARET, meeting</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Pray thee, sweet Mistress Margaret, deserve well at</LINE>
+<LINE>my hands by helping me to the speech of Beatrice.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Will you then write me a sonnet in praise of my beauty?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>In so high a style, Margaret, that no man living</LINE>
+<LINE>shall come over it; for, in most comely truth, thou</LINE>
+<LINE>deservest it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>To have no man come over me! why, shall I always</LINE>
+<LINE>keep below stairs?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Thy wit is as quick as the greyhound's mouth; it catches.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>And yours as blunt as the fencer's foils, which hit,</LINE>
+<LINE>but hurt not.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>A most manly wit, Margaret; it will not hurt a</LINE>
+<LINE>woman: and so, I pray thee, call Beatrice: I give</LINE>
+<LINE>thee the bucklers.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Give us the swords; we have bucklers of our own.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>If you use them, Margaret, you must put in the</LINE>
+<LINE>pikes with a vice; and they are dangerous weapons for maids.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>MARGARET</SPEAKER>
+<LINE>Well, I will call Beatrice to you, who I think hath legs.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>And therefore will come.</LINE>
+<STAGEDIR>Exit MARGARET</STAGEDIR>
+<STAGEDIR>Sings</STAGEDIR>
+<LINE>The god of love,</LINE>
+<LINE>That sits above,</LINE>
+<LINE>And knows me, and knows me,</LINE>
+<LINE>How pitiful I deserve,--</LINE>
+<LINE>I mean in singing; but in loving, Leander the good</LINE>
+<LINE>swimmer, Troilus the first employer of panders, and</LINE>
+<LINE>a whole bookful of these quondam carpet-mangers,</LINE>
+<LINE>whose names yet run smoothly in the even road of a</LINE>
+<LINE>blank verse, why, they were never so truly turned</LINE>
+<LINE>over and over as my poor self in love. Marry, I</LINE>
+<LINE>cannot show it in rhyme; I have tried: I can find</LINE>
+<LINE>out no rhyme to 'lady' but 'baby,' an innocent</LINE>
+<LINE>rhyme; for 'scorn,' 'horn,' a hard rhyme; for,</LINE>
+<LINE>'school,' 'fool,' a babbling rhyme; very ominous</LINE>
+<LINE>endings: no, I was not born under a rhyming planet,</LINE>
+<LINE>nor I cannot woo in festival terms.</LINE>
+<STAGEDIR>Enter BEATRICE</STAGEDIR>
+<LINE>Sweet Beatrice, wouldst thou come when I called thee?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Yea, signior, and depart when you bid me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>O, stay but till then!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>'Then' is spoken; fare you well now: and yet, ere</LINE>
+<LINE>I go, let me go with that I came; which is, with</LINE>
+<LINE>knowing what hath passed between you and Claudio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Only foul words; and thereupon I will kiss thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Foul words is but foul wind, and foul wind is but</LINE>
+<LINE>foul breath, and foul breath is noisome; therefore I</LINE>
+<LINE>will depart unkissed.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Thou hast frighted the word out of his right sense,</LINE>
+<LINE>so forcible is thy wit. But I must tell thee</LINE>
+<LINE>plainly, Claudio undergoes my challenge; and either</LINE>
+<LINE>I must shortly hear from him, or I will subscribe</LINE>
+<LINE>him a coward. And, I pray thee now, tell me for</LINE>
+<LINE>which of my bad parts didst thou first fall in love with me?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>For them all together; which maintained so politic</LINE>
+<LINE>a state of evil that they will not admit any good</LINE>
+<LINE>part to intermingle with them. But for which of my</LINE>
+<LINE>good parts did you first suffer love for me?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Suffer love! a good epithet! I do suffer love</LINE>
+<LINE>indeed, for I love thee against my will.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>In spite of your heart, I think; alas, poor heart!</LINE>
+<LINE>If you spite it for my sake, I will spite it for</LINE>
+<LINE>yours; for I will never love that which my friend hates.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Thou and I are too wise to woo peaceably.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>It appears not in this confession: there's not one</LINE>
+<LINE>wise man among twenty that will praise himself.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>An old, an old instance, Beatrice, that lived in</LINE>
+<LINE>the lime of good neighbours. If a man do not erect</LINE>
+<LINE>in this age his own tomb ere he dies, he shall live</LINE>
+<LINE>no longer in monument than the bell rings and the</LINE>
+<LINE>widow weeps.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>And how long is that, think you?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Question: why, an hour in clamour and a quarter in</LINE>
+<LINE>rheum: therefore is it most expedient for the</LINE>
+<LINE>wise, if Don Worm, his conscience, find no</LINE>
+<LINE>impediment to the contrary, to be the trumpet of his</LINE>
+<LINE>own virtues, as I am to myself. So much for</LINE>
+<LINE>praising myself, who, I myself will bear witness, is</LINE>
+<LINE>praiseworthy: and now tell me, how doth your cousin?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Very ill.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>And how do you?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Very ill too.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Serve God, love me and mend. There will I leave</LINE>
+<LINE>you too, for here comes one in haste.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter URSULA</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>URSULA</SPEAKER>
+<LINE>Madam, you must come to your uncle. Yonder's old</LINE>
+<LINE>coil at home: it is proved my Lady Hero hath been</LINE>
+<LINE>falsely accused, the prince and Claudio mightily</LINE>
+<LINE>abused; and Don John is the author of all, who is</LINE>
+<LINE>fed and gone. Will you come presently?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Will you go hear this news, signior?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I will live in thy heart, die in thy lap, and be</LINE>
+<LINE>buried in thy eyes; and moreover I will go with</LINE>
+<LINE>thee to thy uncle's.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE III. A church.</TITLE>
+<STAGEDIR>Enter DON PEDRO, CLAUDIO, and three or four
+with tapers</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Is this the monument of Leonato?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>Lord</SPEAKER>
+<LINE>It is, my lord.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE><STAGEDIR>Reading out of a scroll</STAGEDIR></LINE>
+<LINE>Done to death by slanderous tongues</LINE>
+<LINE>Was the Hero that here lies:</LINE>
+<LINE>Death, in guerdon of her wrongs,</LINE>
+<LINE>Gives her fame which never dies.</LINE>
+<LINE>So the life that died with shame</LINE>
+<LINE>Lives in death with glorious fame.</LINE>
+<LINE>Hang thou there upon the tomb,</LINE>
+<LINE>Praising her when I am dumb.</LINE>
+<LINE>Now, music, sound, and sing your solemn hymn.</LINE>
+<SUBHEAD>SONG.</SUBHEAD>
+<LINE>Pardon, goddess of the night,</LINE>
+<LINE>Those that slew thy virgin knight;</LINE>
+<LINE>For the which, with songs of woe,</LINE>
+<LINE>Round about her tomb they go.</LINE>
+<LINE>Midnight, assist our moan;</LINE>
+<LINE>Help us to sigh and groan,</LINE>
+<LINE>Heavily, heavily:</LINE>
+<LINE>Graves, yawn and yield your dead,</LINE>
+<LINE>Till death be uttered,</LINE>
+<LINE>Heavily, heavily.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Now, unto thy bones good night!</LINE>
+<LINE>Yearly will I do this rite.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Good morrow, masters; put your torches out:</LINE>
+<LINE>The wolves have prey'd; and look, the gentle day,</LINE>
+<LINE>Before the wheels of Phoebus, round about</LINE>
+<LINE>Dapples the drowsy east with spots of grey.</LINE>
+<LINE>Thanks to you all, and leave us: fare you well.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Good morrow, masters: each his several way.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Come, let us hence, and put on other weeds;</LINE>
+<LINE>And then to Leonato's we will go.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And Hymen now with luckier issue speed's</LINE>
+<LINE>Than this for whom we render'd up this woe.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+
+<SCENE><TITLE>SCENE IV. A room in LEONATO'S house.</TITLE>
+<STAGEDIR>Enter LEONATO, ANTONIO, BENEDICK, BEATRICE,
+MARGARET, URSULA, FRIAR FRANCIS, and HERO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>Did I not tell you she was innocent?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>So are the prince and Claudio, who accused her</LINE>
+<LINE>Upon the error that you heard debated:</LINE>
+<LINE>But Margaret was in some fault for this,</LINE>
+<LINE>Although against her will, as it appears</LINE>
+<LINE>In the true course of all the question.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Well, I am glad that all things sort so well.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>And so am I, being else by faith enforced</LINE>
+<LINE>To call young Claudio to a reckoning for it.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Well, daughter, and you gentle-women all,</LINE>
+<LINE>Withdraw into a chamber by yourselves,</LINE>
+<LINE>And when I send for you, come hither mask'd.</LINE>
+<STAGEDIR>Exeunt Ladies</STAGEDIR>
+<LINE>The prince and Claudio promised by this hour</LINE>
+<LINE>To visit me. You know your office, brother:</LINE>
+<LINE>You must be father to your brother's daughter</LINE>
+<LINE>And give her to young Claudio.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>Which I will do with confirm'd countenance.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Friar, I must entreat your pains, I think.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>To do what, signior?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>To bind me, or undo me; one of them.</LINE>
+<LINE>Signior Leonato, truth it is, good signior,</LINE>
+<LINE>Your niece regards me with an eye of favour.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>That eye my daughter lent her: 'tis most true.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>And I do with an eye of love requite her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>The sight whereof I think you had from me,</LINE>
+<LINE>From Claudio and the prince: but what's your will?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Your answer, sir, is enigmatical:</LINE>
+<LINE>But, for my will, my will is your good will</LINE>
+<LINE>May stand with ours, this day to be conjoin'd</LINE>
+<LINE>In the state of honourable marriage:</LINE>
+<LINE>In which, good friar, I shall desire your help.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>My heart is with your liking.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>And my help.</LINE>
+<LINE>Here comes the prince and Claudio.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter DON PEDRO and CLAUDIO, and two or
+three others</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Good morrow to this fair assembly.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Good morrow, prince; good morrow, Claudio:</LINE>
+<LINE>We here attend you. Are you yet determined</LINE>
+<LINE>To-day to marry with my brother's daughter?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I'll hold my mind, were she an Ethiope.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Call her forth, brother; here's the friar ready.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Exit ANTONIO</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>Good morrow, Benedick. Why, what's the matter,</LINE>
+<LINE>That you have such a February face,</LINE>
+<LINE>So full of frost, of storm and cloudiness?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I think he thinks upon the savage bull.</LINE>
+<LINE>Tush, fear not, man; we'll tip thy horns with gold</LINE>
+<LINE>And all Europa shall rejoice at thee,</LINE>
+<LINE>As once Europa did at lusty Jove,</LINE>
+<LINE>When he would play the noble beast in love.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Bull Jove, sir, had an amiable low;</LINE>
+<LINE>And some such strange bull leap'd your father's cow,</LINE>
+<LINE>And got a calf in that same noble feat</LINE>
+<LINE>Much like to you, for you have just his bleat.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>For this I owe you: here comes other reckonings.</LINE>
+<STAGEDIR>Re-enter ANTONIO, with the Ladies masked</STAGEDIR>
+<LINE>Which is the lady I must seize upon?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>ANTONIO</SPEAKER>
+<LINE>This same is she, and I do give you her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Why, then she's mine. Sweet, let me see your face.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>No, that you shall not, till you take her hand</LINE>
+<LINE>Before this friar and swear to marry her.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Give me your hand: before this holy friar,</LINE>
+<LINE>I am your husband, if you like of me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>And when I lived, I was your other wife:</LINE>
+<STAGEDIR>Unmasking</STAGEDIR>
+<LINE>And when you loved, you were my other husband.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>Another Hero!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>Nothing certainer:</LINE>
+<LINE>One Hero died defiled, but I do live,</LINE>
+<LINE>And surely as I live, I am a maid.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>The former Hero! Hero that is dead!</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>She died, my lord, but whiles her slander lived.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>FRIAR FRANCIS</SPEAKER>
+<LINE>All this amazement can I qualify:</LINE>
+<LINE>When after that the holy rites are ended,</LINE>
+<LINE>I'll tell you largely of fair Hero's death:</LINE>
+<LINE>Meantime let wonder seem familiar,</LINE>
+<LINE>And to the chapel let us presently.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Soft and fair, friar. Which is Beatrice?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE><STAGEDIR>Unmasking</STAGEDIR> I answer to that name. What is your will?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Do not you love me?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Why, no; no more than reason.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Why, then your uncle and the prince and Claudio</LINE>
+<LINE>Have been deceived; they swore you did.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Do not you love me?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Troth, no; no more than reason.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>Why, then my cousin Margaret and Ursula</LINE>
+<LINE>Are much deceived; for they did swear you did.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>They swore that you were almost sick for me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>They swore that you were well-nigh dead for me.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>'Tis no such matter. Then you do not love me?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>No, truly, but in friendly recompense.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>Come, cousin, I am sure you love the gentleman.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>And I'll be sworn upon't that he loves her;</LINE>
+<LINE>For here's a paper written in his hand,</LINE>
+<LINE>A halting sonnet of his own pure brain,</LINE>
+<LINE>Fashion'd to Beatrice.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>HERO</SPEAKER>
+<LINE>And here's another</LINE>
+<LINE>Writ in my cousin's hand, stolen from her pocket,</LINE>
+<LINE>Containing her affection unto Benedick.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>A miracle! here's our own hands against our hearts.</LINE>
+<LINE>Come, I will have thee; but, by this light, I take</LINE>
+<LINE>thee for pity.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BEATRICE</SPEAKER>
+<LINE>I would not deny you; but, by this good day, I yield</LINE>
+<LINE>upon great persuasion; and partly to save your life,</LINE>
+<LINE>for I was told you were in a consumption.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Peace! I will stop your mouth.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Kissing her</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>DON PEDRO</SPEAKER>
+<LINE>How dost thou, Benedick, the married man?</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>I'll tell thee what, prince; a college of</LINE>
+<LINE>wit-crackers cannot flout me out of my humour. Dost</LINE>
+<LINE>thou think I care for a satire or an epigram? No:</LINE>
+<LINE>if a man will be beaten with brains, a' shall wear</LINE>
+<LINE>nothing handsome about him. In brief, since I do</LINE>
+<LINE>purpose to marry, I will think nothing to any</LINE>
+<LINE>purpose that the world can say against it; and</LINE>
+<LINE>therefore never flout at me for what I have said</LINE>
+<LINE>against it; for man is a giddy thing, and this is my</LINE>
+<LINE>conclusion. For thy part, Claudio, I did think to</LINE>
+<LINE>have beaten thee, but in that thou art like to be my</LINE>
+<LINE>kinsman, live unbruised and love my cousin.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>CLAUDIO</SPEAKER>
+<LINE>I had well hoped thou wouldst have denied Beatrice,</LINE>
+<LINE>that I might have cudgelled thee out of thy single</LINE>
+<LINE>life, to make thee a double-dealer; which, out of</LINE>
+<LINE>question, thou wilt be, if my cousin do not look</LINE>
+<LINE>exceedingly narrowly to thee.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Come, come, we are friends: let's have a dance ere</LINE>
+<LINE>we are married, that we may lighten our own hearts</LINE>
+<LINE>and our wives' heels.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>LEONATO</SPEAKER>
+<LINE>We'll have dancing afterward.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>First, of my word; therefore play, music. Prince,</LINE>
+<LINE>thou art sad; get thee a wife, get thee a wife:</LINE>
+<LINE>there is no staff more reverend than one tipped with horn.</LINE>
+</SPEECH>
+
+
+<STAGEDIR>Enter a Messenger</STAGEDIR>
+
+<SPEECH>
+<SPEAKER>Messenger</SPEAKER>
+<LINE>My lord, your brother John is ta'en in flight,</LINE>
+<LINE>And brought with armed men back to Messina.</LINE>
+</SPEECH>
+
+<SPEECH>
+<SPEAKER>BENEDICK</SPEAKER>
+<LINE>Think not on him till to-morrow:</LINE>
+<LINE>I'll devise thee brave punishments for him.</LINE>
+<LINE>Strike up, pipers.</LINE>
+</SPEECH>
+
+<STAGEDIR>Dance</STAGEDIR>
+<STAGEDIR>Exeunt</STAGEDIR>
+</SCENE>
+</ACT>
+</PLAY>
diff --git a/test/rexml/data/namespaces.xml b/test/rexml/data/namespaces.xml
new file mode 100644
index 0000000000..e8e4df8364
--- /dev/null
+++ b/test/rexml/data/namespaces.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<foo:a xmlns:foo="http://fooNamespace/">
+ <b>
+ <c>Hello</c>
+ </b>
+
+ <foo:d>
+ <foo:e>Hey</foo:e>
+ </foo:d>
+
+ <bar:f xmlns:bar="http://barNamespace/">
+ <bar:g>Hey2</bar:g>
+ </bar:f>
+
+ <alias:x xmlns:alias="http://fooNamespace/">
+ <alias:y>Hey3</alias:y>
+ </alias:x>
+</foo:a>
diff --git a/test/rexml/data/nitf.xml b/test/rexml/data/nitf.xml
new file mode 100644
index 0000000000..269d99e211
--- /dev/null
+++ b/test/rexml/data/nitf.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nitf>
+
+ <!-- Example of markup of URLs (at the bottom of the story) -->
+
+ <head>
+ <meta name="ap-cycle" content="AP"/>
+ <meta name="ap-online-code" content="1700"/>
+ <meta name="ap-company" content="CO:Media Metrix Inc;TS:MMXI;IG:SVC;"/>
+ <meta name="ap-routing" content="ENTITLEMENTS,pfONLINE,pf1700"/>
+ <meta name="ap-format" content="bx"/>
+ <meta name="ap-category" content="f"/>
+ <meta name="ap-selector" content="-----"/>
+ <meta name="ap-transref" content="V0347"/>
+ <docdata>
+ <doc-id regsrc="AP" id-string="D76UIMO80"/>
+ <urgency ed-urg="7"/>
+ <date.issue norm="20000911T185842Z"/>
+ <du-key key="Napster Traffic"/>
+ <doc.copyright holder="(AP)"/>
+ </docdata>
+ </head>
+ <body>
+ <body.head>
+ <hedline>
+ <hl1>Use of Napster Quadruples</hl1>
+ </hedline>
+ <byline>By PETER SVENSSON
+ <byttl>AP Business Writer</byttl>
+ </byline>
+ <distributor>The Associated Press</distributor>
+ <dateline>
+ <location>NEW YORK</location>
+ </dateline>
+ </body.head>
+ <body.content>
+ <block>
+ <p>Despite the uncertain legality of the Napster online music-sharing service, the number of people
+using it more than quadrupled in just five months, Media Metrix said Monday.</p>
+ <p>That made Napster the fastest-growing software application ever recorded by the Internet research
+company.</p>
+ <p>From 1.1 million home users in the United States in February, the first month Media Metrix
+tracked the application, Napster use rocketed to 4.9 million users in July.</p>
+ <p>That represents 6 percent of U.S. home PC users who have modems, said Media Metrix, which pays
+people to install monitoring software on their computers.</p>
+ <p>It estimates total usage from a panel of about 50,000 people in the United States.</p>
+ <p>Napster was also used at work by 887,000 people in July, Media Metrix said.</p>
+ <p>Napster Inc. has been sued by the recording industry for allegedly enabling copyright
+infringement. The federal government weighed in on the case Friday, saying the service is not protected
+under a key copyright law, as the San Mateo, Calif., company claims.</p>
+ <p>Bruce Ryon, head of Media Metrix&apos;s New Media Group, said Napster was used by &quot;the full spectrum of PC users, not just the youth with time on their hands and a passion for music.&quot;</p>
+ <p>The Napster program allows users to copy digital music files from the hard drives of other
+users over the Internet.</p>
+ <p>Napster Inc. said last week that 28 million people had downloaded its program. It does not reveal
+its own figures for how many people actually use the software.</p>
+ <p>Because the program connects to the company&apos;s computers over the Internet every time
+it is run, Napster Inc. can track usage exactly.</p>
+ <p>__</p>
+ <p>On the Net:</p>
+ <p><a href="http://www.napster.com">
+http://www.napster.com</a></p>
+ <p><a href="http://www.mediametrix.com">
+http://www.mediametrix.com</a></p>
+ </block>
+ </body.content>
+ </body>
+</nitf>
diff --git a/test/rexml/data/numbers.xml b/test/rexml/data/numbers.xml
new file mode 100644
index 0000000000..a1791cd638
--- /dev/null
+++ b/test/rexml/data/numbers.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+
+<numbers>
+ <set>
+ <nr>3</nr>
+ <nr>24</nr>
+ <nr>55</nr>
+ <nr>11</nr>
+ <nr>2</nr>
+ <nr>-3</nr>
+ </set>
+ <set>
+ <nr value="66"/>
+ <nr value="123"/>
+ <nr value="55"/>
+ <nr value="9999"/>
+ </set>
+</numbers>
diff --git a/test/rexml/data/ofbiz-issues-full-177.xml b/test/rexml/data/ofbiz-issues-full-177.xml
new file mode 100644
index 0000000000..bfff771d12
--- /dev/null
+++ b/test/rexml/data/ofbiz-issues-full-177.xml
@@ -0,0 +1,13971 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE issuezilla [
+ <!-- This DTD describes a structure that contains one or more -->
+ <!-- IssueZilla issues. IssueZilla is a derivative of BugZilla -->
+ <!-- (http://bugzilla.mozilla.org) developed for use with SourceCast -->
+ <!-- $Id: issuezilla.dtd 34364 2003-11-18 00:30:16Z kmaples $ -->
+
+ <!ELEMENT issuezilla (issue+)>
+
+ <!-- Attributes of the root element 'issuezilla': -->
+ <!-- -->
+ <!-- version : Current version of IssueZilla. -->
+ <!-- urlbase : Full url to source installation of issueZilla. -->
+ <!-- maintainer : Email address of person responsible for -->
+ <!-- installation usually 'webmaster@foo.com' -->
+ <!-- exporter : Email address of the individual performing the -->
+ <!-- XML export. -->
+ <!-- charset : The originating charset for this issue. -->
+ <!-- dtd_version : Version of this DTD; the cvs revision number. -->
+
+ <!ATTLIST issuezilla version CDATA #REQUIRED>
+ <!ATTLIST issuezilla urlbase CDATA #REQUIRED>
+ <!ATTLIST issuezilla maintainer CDATA #REQUIRED>
+ <!ATTLIST issuezilla exporter CDATA #IMPLIED>
+ <!ATTLIST issuezilla charset CDATA #REQUIRED>
+
+ <!-- Attributes of the Helm project from whence this export came: -->
+
+ <!ATTLIST issuezilla project_domain CDATA #IMPLIED>
+ <!ATTLIST issuezilla project_name CDATA #IMPLIED>
+ <!ATTLIST issuezilla project_id CDATA #IMPLIED>
+
+ <!-- Current cvs revision: $Revision: 1.6 $ -->
+ <!-- Revision above should match hardcoded value below (hard-coded -->
+ <!-- to facilitate development): -->
+ <!ATTLIST issuezilla dtd_version CDATA #FIXED "Revision: 1.2">
+
+ <!-- Elements comprising an issue. -->
+
+ <!ELEMENT issue ( issue_id, (issue_status, priority, resolution,
+ component, version, rep_platform, assigned_to,
+ delta_ts, subcomponent, reporter, target_milestone?, issue_type,
+ creation_ts, qa_contact?, status_whiteboard?, issue_file_loc?,
+ votes?, op_sys, short_desc, keywords*, dependson*, blocks*,
+ is_duplicate?, has_duplicates*, cc*, long_desc+, attachment*,
+ activity*
+ )?
+ ) >
+
+ <!-- Attribute(s) of the 'issue' element: -->
+ <!-- -->
+ <!-- status_code : Error code if issue requested is missing, or user -->
+ <!-- performing the operation does not have the -->
+ <!-- necessary role. Uses HTTP codes as defined in -->
+ <!-- RFC 2616; will always return a three-digit code. -->
+ <!-- status_message : String corresponding to status_code above. -->
+
+ <!ATTLIST issue status_code (200|401|404) #REQUIRED>
+ <!ATTLIST issue status_message (OK|Unauthorized|NotFound) #REQUIRED>
+
+ <!-- Elements of issue and their definitions: -->
+ <!-- -->
+ <!-- issue_id : ID of this issue (unique key). -->
+ <!-- issue_status : Current status of this issue. -->
+ <!-- priority : Priority (severity) assigned to issue. -->
+ <!-- resolution : The issue's resolution, if any -->
+ <!-- component : Product against which issue is reported. -->
+ <!-- version : Version associated with component. -->
+ <!-- platform : Platform issue reported against (e.g. linux, etc.).-->
+ <!-- assigned_to : Email of person issue currently assigned to. -->
+ <!-- delta_ts : Last modified timestamp ('yyyy-mm-dd hh:mm:ss'). -->
+ <!-- -->
+ <!-- subcomponent : Component of component issue reported against. -->
+ <!-- reporter : Email of initial issue reporter. -->
+ <!-- target_milestone : Milestone for this issue's resolution. -->
+ <!-- issue_type : Nature of issue, e.g. defect, task, etc. -->
+ <!-- creation_ts : Issue creation timestamp ('yyyy-mm-dd hh:mm:ss').-->
+ <!-- qa_contact : Email of the QA contact for this issue. -->
+ <!-- status_whiteboard: Free text 'whiteboard' for issue comments. -->
+ <!-- issue_file_loc : URL related to issue -->
+ <!-- votes : current votes for issu -->
+ <!-- op_sys : Operating system issue reported against. -->
+ <!-- short_desc : Short description of issue. -->
+
+ <!ELEMENT issue_id (#PCDATA)>
+ <!ELEMENT issue_status (#PCDATA)>
+ <!ELEMENT priority (#PCDATA)>
+ <!ELEMENT resolution (#PCDATA)>
+ <!ELEMENT component (#PCDATA)>
+ <!ELEMENT version (#PCDATA)>
+ <!ELEMENT rep_platform (#PCDATA)>
+ <!ELEMENT assigned_to (#PCDATA)>
+ <!ELEMENT delta_ts (#PCDATA)>
+ <!ELEMENT subcomponent (#PCDATA)>
+ <!ELEMENT reporter (#PCDATA)>
+ <!ELEMENT target_milestone (#PCDATA)>
+ <!ELEMENT issue_type (#PCDATA)>
+ <!ELEMENT creation_ts (#PCDATA)>
+ <!ELEMENT qa_contact (#PCDATA)>
+ <!ELEMENT status_whiteboard (#PCDATA)>
+ <!ELEMENT issue_file_loc (#PCDATA)>
+ <!ELEMENT votes (#PCDATA)>
+ <!ELEMENT op_sys (#PCDATA)>
+ <!ELEMENT short_desc (#PCDATA)>
+
+ <!-- Data from the longdescs table for this issue id. Essentially -->
+ <!-- the log of additional comments. -->
+ <!-- -->
+ <!-- who : Email of person posting long_desc. -->
+ <!-- issue_when : Timestamp when long_desc added ('yyy-mm-dd hh:mm') -->
+ <!-- thetext : Free text that comprises the long desc. -->
+
+ <!ELEMENT long_desc (who, issue_when, thetext)>
+
+ <!ELEMENT who (#PCDATA)>
+ <!ELEMENT issue_when (#PCDATA)>
+ <!ELEMENT thetext (#PCDATA)>
+
+ <!-- 'optional' elements.
+ keywords : List of keywords for this issue.
+ dependson : List of local issue IDs that depend on this one.
+ blocks : List of local issue IDs blocked by this one.
+ is_duplicate : The issue which this issue was closed as a
+ duplicate of.
+ has_duplicates : Other issues which were closed as a duplicate
+ of this issue.
+ cc : List of email addresses of interested parties.
+
+ NOTE: elements of 'blocks', 'dependson', 'is_duplicate' and
+ 'has_duplicates' are defined elsewhere in this document. -->
+
+ <!ELEMENT keywords (#PCDATA)>
+ <!ELEMENT dependson (issue_id, who, when)>
+ <!ELEMENT blocks (issue_id, who, when)>
+ <!ELEMENT is_duplicate (issue_id, who, when)>
+ <!ELEMENT has_duplicates (issue_id, who, when)>
+ <!ELEMENT cc (#PCDATA)>
+
+ <!-- Data pertaining to attachments. NOTE - some of these fields -->
+ <!-- are currently unimplemented (ispatch, filename, etc.). -->
+
+ <!ELEMENT attachment (mimetype, attachid, date, desc, ispatch*, filename,
+ submitter_id, submitting_username, data, attachment_iz_url)>
+
+ <!-- encoding : How the inline attachment is encoded. -->
+
+ <!ATTLIST attachment encoding CDATA #FIXED "Base64" >
+
+ <!-- mimetype : Mime type for the attachment. -->
+ <!-- attachid : A unique id for this attachment. -->
+ <!-- date : Timestamp of when added 'yyyy-mm-dd hh:mm' -->
+ <!-- desc : Short description for attachment. -->
+ <!-- ispatch : Whether attachment is a patch file. -->
+ <!-- filename : Filename of attachment. -->
+ <!-- submitter_id : Issuezilla ID of attachement submitter. -->
+ <!-- submitting_username : username of attachement submitter. -->
+ <!-- data : Encoded attachment. -->
+ <!-- attachment_iz_url : URL to attachment in iz. -->
+
+ <!ELEMENT mimetype (#PCDATA)>
+ <!ELEMENT attachid (#PCDATA)>
+ <!ELEMENT date (#PCDATA)>
+ <!ELEMENT desc (#PCDATA)>
+ <!ELEMENT ispatch (#PCDATA)>
+ <!ELEMENT filename (#PCDATA)>
+ <!ELEMENT submitter_id (#PCDATA)>
+ <!ELEMENT submitting_username (#PCDATA)>
+ <!ELEMENT data (#PCDATA)>
+ <!ELEMENT attachment_iz_url (#PCDATA)>
+
+ <!-- Data pertaining to the issue's activity record. -->
+
+ <!ELEMENT activity (user, when, field_name, field_desc, oldvalue,
+ newvalue)>
+
+ <!-- user : user who performed the action -->
+ <!-- when : date the described change was made -->
+ <!-- field_name : name of db field (in fielddefs) -->
+ <!-- field_desc : description of the database field -->
+ <!-- oldvalue : value changed from -->
+ <!-- newvalue : value changed to -->
+
+ <!ELEMENT user (#PCDATA)>
+ <!ELEMENT when (#PCDATA)>
+ <!ELEMENT field_name (#PCDATA)>
+ <!ELEMENT field_desc (#PCDATA)>
+ <!ELEMENT oldvalue (#PCDATA)>
+ <!ELEMENT newvalue (#PCDATA)>
+
+
+]>
+<issuezilla exporter="guest" charset="UTF-8" version="2.11" urlbase="https://ofbiz.dev.java.net/issues/" maintainer="owner@ofbiz.dev.java.net" project_domain="dev.java.net" project_name="ofbiz" project_id="792" dtd_version="Revision: 1.2">
+<issue status_code="200" status_message="OK">
+ <issue_id>1</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Documentation</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20030820210924</delta_ts>
+ <subcomponent>website</subcomponent>
+ <reporter>ajzeneski</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-08-13 22:35:10</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Website missing</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-08-13 22:35:10</issue_when>
+ <thetext>Website is missing from CVS.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-08-19 12:09:17</issue_when>
+ <thetext>Website starting to move</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-08-19 12:11:57</issue_when>
+ <thetext>Changed milestone</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-08-20 21:09:24</issue_when>
+ <thetext>Website has been imported into CVS</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2003-08-19 12:09:17</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>STARTED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2003-08-19 12:09:17</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>unspecified</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2003-08-19 12:11:57</when>
+ <field_name>target_milestone</field_name>
+ <field_desc>Target Milestone</field_desc>
+ <oldvalue>milestone 1</oldvalue>
+ <newvalue>not determined</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2003-08-20 21:09:24</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>STARTED</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2003-08-20 21:09:24</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>2</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20030824004146</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>ajzeneski</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-08-23 14:25:20</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Missing FTL</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-08-23 14:25:20</issue_when>
+ <thetext>Missing FTL file:
+
+Error: File not found: /feature/EditFeatureCategoryFeatures.ftl</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-08-24 00:41:46</issue_when>
+ <thetext>Converted JSP to FTL, made some small corrections.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-08-24 00:41:46</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-08-24 00:41:46</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>3</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20030828103031</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>ajzeneski</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-08-23 14:27:14</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Edit Promo Bug</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-08-23 14:27:14</issue_when>
+ <thetext>When editing a promo rule; the drop down for the current condition contains only
+the existing condition (many times).</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-08-28 10:30:31</issue_when>
+ <thetext>#list directive had a type. Fix in CVS.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-08-28 10:30:31</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-08-28 10:30:31</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>4</issue_id>
+ <issue_status>VERIFIED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20030828103057</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>ajzeneski</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-08-23 14:30:52</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Price Rule Bug</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-08-23 14:30:52</issue_when>
+ <thetext>When editing a price rule; changing the is &quot;sale price&quot; flag sets properly,
+however always displays &quot;no&quot; as the selected choice.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-08-28 10:20:59</issue_when>
+ <thetext>Fixed conditional on the no button, now appears correctly.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-08-28 10:30:57</issue_when>
+ <thetext>Done</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-08-28 10:20:59</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-08-28 10:20:59</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-08-28 10:30:57</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>RESOLVED</oldvalue>
+ <newvalue>VERIFIED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>5</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20030823144138</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>ajzeneski</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-08-23 14:41:38</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Relationship missing button</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-08-23 14:41:38</issue_when>
+ <thetext>View/Edit party relationships page first is still JSP and second is missing the
+links to communication event(s).</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>6</issue_id>
+ <issue_status>CLOSED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20030918144334</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>robdawson</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-09-04 02:09:57</creation_ts>
+ <qa_contact>jonesde</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Entity Engine ConnectionFactory and DBCPConnectionFactory issues with Oracle</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>robdawson</who>
+ <issue_when>2003-09-04 02:09:57</issue_when>
+ <thetext>When using the Inline JDBC Functionality of the Entity Engine to access an Oracle
+database the Entity Engine gives SQL no suitable driver exceptions.
+
+The fix for this involves changing:
+ loader.loadClass(driverClassName);
+to
+ Class clazz = loader.loadClass(driverClassName);
+ clazz.newInstance();
+in both the ConnectionFactory and DBCPConnectionFactory classes.
+
+There will also need to be the appropriate exception handling.
+
+Please contact me if this requires any clarification.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-09-04 22:15:06</issue_when>
+ <thetext>The message you are getting means that the JDBC drivers for Oracle cannot be
+found on the classpath. Contact the users mailing list if you need further help
+with this issue.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2003-09-04 22:17:28</issue_when>
+ <thetext>Sorry; DBCP support is currently outdated and not used due to the fact that
+there is no transaction support. It is recommended you use the JOTM/XAPool
+connections. This issue will be addressed during a refactor of this class in the
+coming months.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-09-18 14:43:34</issue_when>
+ <thetext>
+This issue has been resolved with code changes similar to those recommended.
+
+HOWEVER: There is one caveat with this: I would NOT recommend running using
+either of these blocks of code. Without a transaction aware connection pool
+performance will be severely affected or operations may be performed outside of
+transactions. So, I wouldn&apos;t use straight JDBC or DBCP right now. Hopefully in
+the future DBCP will support XADataSources, then it may be an option.
+
+Later,
+-David Jones
+</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2003-09-04 22:15:06</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2003-09-04 22:15:06</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-09-18 14:43:34</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>RESOLVED</oldvalue>
+ <newvalue>CLOSED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-09-18 14:43:34</when>
+ <field_name>qa_contact</field_name>
+ <field_desc>QA Contact</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>jonesde</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>7</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040304194045</delta_ts>
+ <subcomponent>WebTools</subcomponent>
+ <reporter>fzhu_genshare</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-09-21 07:35:08</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc>http://localhost:8080/webtools/control/view/ModelGroupWriter?savetofile=true</issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>&quot;Save Entity Group XML to File&quot; error</short_desc>
+ <keywords></keywords>
+ <has_duplicates>
+ <issue_id>8</issue_id>
+ <who>jonesde</who>
+ <when>2003-11-04 01:04:02</when>
+ </has_duplicates>
+ <long_desc>
+ <who>fzhu_genshare</who>
+ <issue_when>2003-09-21 07:35:08</issue_when>
+ <thetext>If click &quot;Save Entity Group XML to File&quot; on the webtools, the new page opens and
+the following error message appears:
+
+org.apache.jasper.JasperException: Unable to compile class for JSP
+
+An error occurred at line: -1 in the jsp file: null
+
+Generated servlet error:
+[javac] Since fork is true, ignoring compiler setting.
+[javac] Compiling 1 source file
+[javac] Since fork is true, ignoring compiler setting.
+[javac] C:\DOCUME~1\ADMINI~1\LOCALS~1
+\Temp\Jetty_0_0_0_0_8080__webtools\entity\ModelGroupWriter_jsp.java:72:
+cannot resolve symbol
+[javac] symbol : variable entityGroupResourceHandler
+[javac] location: class org.ofbiz.entity.model.ModelGroupReader
+[javac] ResourceHandler resourceHandler =
+modelGroupReader.entityGroupResourceHandler;
+[javac] ^
+[javac] 1 error</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-11-04 01:04:02</issue_when>
+ <thetext>*** Issue 8 has been marked as a duplicate of this issue. ***</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-04 19:40:45</issue_when>
+ <thetext>lower priority</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-04 19:40:45</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P4</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>8</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>DUPLICATE</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20031104010402</delta_ts>
+ <subcomponent>WebTools</subcomponent>
+ <reporter>fzhu_genshare</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-09-21 07:40:53</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc>http://localhost:8080/webtools/control/view/ModelGroupWriter</issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>&quot;Generate Entity Group XML&quot; error</short_desc>
+ <keywords></keywords>
+ <is_duplicate>
+ <issue_id>7</issue_id>
+ <who>jonesde</who>
+ <when>2003-11-04 01:04:02</when>
+ </is_duplicate>
+ <long_desc>
+ <who>fzhu_genshare</who>
+ <issue_when>2003-09-21 07:40:53</issue_when>
+ <thetext>If clicked &quot;Generate Entity Group XML&quot; on webtools, an error message occurs:
+
+org.apache.jasper.JasperException: Unable to compile class for JSP
+
+An error occurred at line: -1 in the jsp file: null
+
+Generated servlet error:
+[javac] Since fork is true, ignoring compiler setting.
+[javac] Compiling 1 source file
+[javac] Since fork is true, ignoring compiler setting.
+[javac] C:\DOCUME~1\ADMINI~1\LOCALS~1
+\Temp\Jetty_0_0_0_0_8080__webtools\entity\ModelGroupWriter_jsp.java:72:
+cannot resolve symbol
+[javac] symbol : variable entityGroupResourceHandler
+[javac] location: class org.ofbiz.entity.model.ModelGroupReader
+[javac] ResourceHandler resourceHandler =
+modelGroupReader.entityGroupResourceHandler;
+[javac] ^
+[javac] 1 error
+
+It seems the class ResourceHandler is missing. The same error result in several
+links of webtools concerning entity engine xml export broken.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-11-04 01:04:02</issue_when>
+ <thetext>This issue is a duplicate of #7, they may be different links but they hit the same
+request and code.
+
+*** This issue has been marked as a duplicate of 7 ***</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-11-04 01:04:02</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-11-04 01:04:02</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>DUPLICATE</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>9</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>WONTFIX</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040223211140</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>byersa</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-10-28 09:27:31</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>GenericEntity.getBytes fails with HSQLDB</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>byersa</who>
+ <issue_when>2003-10-28 09:27:31</issue_when>
+ <thetext>getBytes internally casts to ByteWrapper which causes a ClassCastException.
+Casting directly to byte[] seems to work.
+
+Don&apos;t know if it fails with other dbs.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-23 21:11:40</issue_when>
+ <thetext>This does not appear to be something that can be fixed in OFBiz, it appears to be a bug in HSQLDB, and
+only in certain versions. Trying it with an earlier version it worked, but various other things didn&apos;t. We
+may just have to be patient until HSQLDB has another stable release.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-23 21:11:40</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-23 21:11:40</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>WONTFIX</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>10</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P5</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040630193003</delta_ts>
+ <subcomponent>Service</subcomponent>
+ <reporter>byersa</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2003-10-31 08:53:59</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>missing or incorrect service parameter message</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>byersa</who>
+ <issue_when>2003-10-31 08:53:59</issue_when>
+ <thetext>If possible, I think it would be very helpful to developers if the message that
+informs on invalid service parameter conditions would clearly indicate whether
+it is in the IN or OUT mode that the problem is occurring.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 12:17:42</issue_when>
+ <thetext>changed to enhancement</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:49:18</issue_when>
+ <thetext>reassigned</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-06-30 19:30:03</issue_when>
+ <thetext>The ServiceValidationException has been updated to support missing and extra fields as well as
+knowing which &quot;mode&quot; (IN/OUT) the error occured in.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:17:42</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>DEFECT</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:17:42</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P5</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:49:17</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:30:03</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:30:03</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>11</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>PC</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20031104002629</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>cyf</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-11-03 22:26:18</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>Windows 2000</op_sys>
+ <short_desc>&quot;response.sendRedirect&quot; in jsp could not take effect</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>cyf</who>
+ <issue_when>2003-11-03 22:26:18</issue_when>
+ <thetext>I have write a test.jsp code(like):
+.....
+hello world!
+&lt;%response.sendRedirect(&quot;control/main&quot;);%&gt;
+....
+
+define :
+in controller.xml:
+&lt;request-map uri=&quot;test&quot; edit=&quot;true&quot;&gt;
+ &lt;response name=&quot;success&quot; type=&quot;view&quot; value=&quot;test&quot;/&gt;
+ &lt;response name=&quot;error&quot; type=&quot;view&quot; value=&quot;error&quot;/&gt;
+&lt;/request-map&gt;
+.....
+&lt;view-map name=&quot;test&quot; type=&quot;region&quot;/&gt;
+
+in region also configued
+
+when I test the page :
+it&apos;s appear &quot;hello world!&quot;,but didn&apos;t redirect.
+
+When I use this code as jsp page in normal web app,redirect can take effect.
+
+I think this is a bug of in region process.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-11-04 00:26:29</issue_when>
+ <thetext>
+If I understand your complaint correctly it is because the way you organized
+things the response output stream is committed before the sendRedirect is
+called. There is absolutely nothing that can be done about this.
+
+If you want to send a redirect you should do so in an event or a non-region view
+(and non-jpublish for that matter). Those composite view tools are meant for
+generating views and involve templates that may cause the response to be
+committed before you wrapped view is even called.
+
+BTW, this may be more appropriate as a question on the users list, not as a defect
+bug report.
+
+Later,
+-David Jones</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-11-04 00:26:29</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-11-04 00:26:29</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>12</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040223213513</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>quake_wang</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-11-04 01:39:16</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>entity cache is not synchronized with DB</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>quake_wang</who>
+ <issue_when>2003-11-04 01:39:16</issue_when>
+ <thetext>Quake,
+
+It might make sense to have an issue created on the ofbiz.dev.java.net
+site that covers this problem, since it may take some time to resolve.
+Could you create one there? It could just include text from messages
+send back and forth in this email thread.
+
+Thanks,
+-David
+
+On Nov 3, 2003, at 6:57 PM, Quake_Wang wrote:
+
+&gt; The immutable flag can solve some cache synchronize issues, it will
+&gt; help for debugging. But, please consider this scenario:
+&gt;
+&gt; Service A:
+&gt; OK, now base on policy: &quot;NEVER read from the cache if you are planning
+&gt; on updating&quot;, we directly read from DB,
+&gt; order = findByPK (&quot;Order&quot;, 10000);
+&gt; order.set(&quot;status&quot;, &quot;DEF&quot;);
+&gt; order.store();
+&gt;
+&gt;
+&gt; Service B:
+&gt; order = findByPKCache(&quot;Order&quot;, 10000);
+&gt; just query, do not change any fields, entity engine will put the order
+&gt; 10000 with &quot;DEF&quot; status in cache, after some other operations (not on
+&gt; the order generic value) throw exception, rolled back service A and B,
+&gt; then PKCache is not synchronized with DB too, the immutable flag can
+&gt; not help any......
+&gt;
+&gt; You wrote a service using cache for better performance, and someone
+&gt; may assembly your service in same transaction (group service, ECA
+&gt; service), the synchronizing may broken, it&apos;s really hard to find such
+&gt; problem.
+&gt;
+&gt; Any ideas?
+&gt;
+&gt; Quake
+&gt;
+&gt; -----Original Message-----
+&gt; From: David Jones [mailto:jonesde@ofbiz.org]
+&gt; Sent: Monday, November 03, 2003 11:05 PM
+&gt; To: dev@ofbiz.dev.java.net
+&gt; Subject: Re: [OFBiz] Dev - Important - [Bug] PKCache is not
+&gt; synchronized
+&gt; with DB
+&gt;
+&gt;
+&gt;
+&gt; Because of the possibility that this is happening and causing
+&gt; previously unexplained problems, I decided to go ahead and implement
+&gt; the immutable feature on the GenericEntity. This is now in CVS, but may
+&gt; cause problems with current code (and will most likely in many cases).
+&gt; Do disable this just comment out the line near the beginning of the set
+&gt; method in GenericEntity.java. It is around line 248 in the current
+&gt; revision of the file.
+&gt;
+&gt; I fixed a few places that had this problem, including createCustomer in
+&gt; ecommerce and the userLogin service. Creating a new customer and going
+&gt; through the checkout process works fine now, but variations on the way
+&gt; I did it may break.
+&gt;
+&gt; If we have too many problems with this, I&apos;m okay with disabling it
+&gt; temporarily, but it would be nice to go this direction in the future.
+&gt; It will help resolve the possibility that strange things happen because
+&gt; things are being changed in the cache when they shouldn&apos;t be and the
+&gt; cache is out of sync with the database, ie is dirty.
+&gt;
+&gt; Feel free to report bugs along these lines, or better yet send
+&gt; patches...
+&gt;
+&gt; Later,
+&gt; -David
+&gt;
+&gt;
+&gt; On Nov 3, 2003, at 5:24 AM, David Jones wrote:
+&gt;
+&gt;&gt;
+&gt;&gt; Quake,
+&gt;&gt;
+&gt;&gt; Yes, I know this is a problem, although I had forgotten about it since
+&gt;&gt; it hasn&apos;t come up for a long time.
+&gt;&gt;
+&gt;&gt; Our official answer on this, related to the use of the cache in
+&gt;&gt; general is: NEVER read from the cache if you are planning on updating
+&gt;&gt; something. It&apos;s tempting to change the GenericValue object to have an
+&gt;&gt; unchangeable flag that is set for all versions that go into the
+&gt;&gt; cache....
+&gt;&gt;
+&gt;&gt; I agree with you, there doesn&apos;t seem to be an easy way to
+&gt;&gt; automatically clear the cache on a rollback. In most cases the
+&gt;&gt; rollback doesn&apos;t even go through the Entity Engine, it is done in
+&gt;&gt; external code. So, the Entity Engine never gets a notification of the
+&gt;&gt; rollback, and if it did it would have to remember every operation that
+&gt;&gt; happened during that transaction so it could clear those dirty cache
+&gt;&gt; entries.
+&gt;&gt;
+&gt;&gt; Thus the policy: never use the cache to read when you are planning on
+&gt;&gt; writing to the database. And yeah, maybe I should throw some code in
+&gt;&gt; there to enforce this... Any thoughts from anyone on that?
+&gt;&gt;
+&gt;&gt; Later,
+&gt;&gt; -David
+&gt;&gt;
+&gt;&gt;
+&gt;&gt;
+&gt;&gt; On Nov 3, 2003, at 4:45 AM, Quake_Wang wrote:
+&gt;&gt;
+&gt;&gt;&gt; Found a bug in the PKCache, below is the scenario
+&gt;&gt;&gt;
+&gt;&gt;&gt; Service A:
+&gt;&gt;&gt; 1. find an order with the order No. 10000, dummy code:
+&gt;&gt;&gt; order = findByPKCache(&quot;Order&quot;, 10000);
+&gt;&gt;&gt; assume we get an order with the status &quot;ABC&quot;;
+&gt;&gt;&gt;
+&gt;&gt;&gt; 2. set the order status to &quot;DEF&quot; and store, dummy code:
+&gt;&gt;&gt; order.set(&quot;status&quot;, &quot;DEF&quot;);
+&gt;&gt;&gt; order.store();
+&gt;&gt;&gt;
+&gt;&gt;&gt; Service B:
+&gt;&gt;&gt; 1. find order 10000 again, dummy code:
+&gt;&gt;&gt; order = findByPKCache(&quot;Order&quot;, 10000);
+&gt;&gt;&gt; If the service A and B are in the same transaction (ex, group service
+&gt;&gt;&gt; or ECA service), entity engine will get the order with &quot;DEF&quot; status
+&gt;&gt;&gt; and put it in the PK cache.
+&gt;&gt;&gt;
+&gt;&gt;&gt; 2. some other operations, throw exception
+&gt;&gt;&gt; Service A and B are rolled back, as the result, the PKCache is not
+&gt;&gt;&gt; synchronized with DB:
+&gt;&gt;&gt; DB: order 10000, status &quot;ABC&quot;
+&gt;&gt;&gt; PKCache: order 10000, status &quot;DEF&quot;
+&gt;&gt;&gt;
+&gt;&gt;&gt; I spent some time to trace this bug, but can not find an easy way to
+&gt;&gt;&gt; fix it, just simply change the findByPKCache to findByPK in service
+&gt;&gt;&gt; B.
+&gt;&gt;&gt; I&apos;m sending out this email in hopes of helping who may encounter the
+&gt;&gt;&gt; same problem and receiving a better fix method.
+&gt;&gt;&gt;
+&gt;&gt;&gt; Regards
+&gt;&gt;&gt; Quake
+&gt;&gt;&gt;
+&gt;&gt;&gt; ---------------------------------------------------------------------
+&gt;&gt;&gt; To unsubscribe, e-mail: dev-unsubscribe@ofbiz.dev.java.net
+&gt;&gt;&gt; For additional commands, e-mail: dev-help@ofbiz.dev.java.net
+&gt;&gt;
+&gt;&gt;
+&gt;&gt; ---------------------------------------------------------------------
+&gt;&gt; To unsubscribe, e-mail: dev-unsubscribe@ofbiz.dev.java.net
+&gt;&gt; For additional commands, e-mail: dev-help@ofbiz.dev.java.net
+&gt;
+&gt;
+&gt; ---------------------------------------------------------------------
+&gt; To unsubscribe, e-mail: dev-unsubscribe@ofbiz.dev.java.net
+&gt; For additional commands, e-mail: dev-help@ofbiz.dev.java.net
+&gt;
+&gt;
+&gt; ---------------------------------------------------------------------
+&gt; To unsubscribe, e-mail: dev-unsubscribe@ofbiz.dev.java.net
+&gt; For additional commands, e-mail: dev-help@ofbiz.dev.java.net
+
+
+---------------------------------------------------------------------
+To unsubscribe, e-mail: dev-unsubscribe@ofbiz.dev.java.net
+For additional commands, e-mail: dev-help@ofbiz.dev.java.net</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-23 21:35:13</issue_when>
+ <thetext>
+Just a note on this. To fix it there need to be ThreadLocal caches that are maintained by a class that
+implements the Synchronization interface for transactions. The idea would be that cache reads look in
+the ThreadLocal cache first, then in the global cache, cache writes put everything in the ThreadLocal
+cache and when the transaction is committed all ThreadLocal cache entries go into the global cache.
+-David</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>13</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20031112065558</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>byersa</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2003-11-12 06:15:27</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>setNonPKFields</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>byersa</who>
+ <issue_when>2003-11-12 06:15:27</issue_when>
+ <thetext>I had a situation in which I used setNonPKFields to populate an entity that had
+createdData and lastModifiedDate from parameters thinking that it would be a
+sort of parameter map. My intention was to then add the individual fields to a
+service input, but it turns out that instead of converting the date string to
+DateTime format, it kept them as strings and the service complained. I guess the
+GenericValue only converts datatypes during the persistence phase? If that is
+the case, it would be useful if it converted up loading.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2003-11-12 06:55:58</issue_when>
+ <thetext>This is really not the responsibility of the GenericValue object (or really the
+GenericEntity object). This is difficult to handle as a defect report and should
+be sent to the dev mailing for discussion of the best way to go about what you
+are trying to do. The email message should perhaps include more detail about the
+overall goal you are trying to accomplish. Note that the GenericEntity, at the
+moment, does not enforce types going in, but may be changed to do that and throw
+an exception if the type is wrong. -David</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-11-12 06:55:58</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2003-11-12 06:55:58</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>14</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>Macintosh</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040107162053</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-01-07 16:20:53</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Order Summary pages don&apos;t show free shipping promo</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-01-07 16:20:53</issue_when>
+ <thetext>Here is a description from Si Chen who reported the problem:
+
+One thing that I noticed that is anomalous, though, is that the order review
+pages still show an estimate for shipping charges, even though the customer
+should get free shipping. It seems that the checkout review pages are using
+org.ofbiz.order.shoppingcart.shipping.ShippingEvents.getShipEstimate, while on
+actual checkout it is using
+org.ofbiz.order.order.OrderReadHelper.getShippingTotal.
+
+The former is not taking into account shipping adjustments.</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>15</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040210064750</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>nowpulse</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-10 01:36:16</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Order Stats showing incorrect YTD info</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>nowpulse</who>
+ <issue_when>2004-02-10 01:36:16</issue_when>
+ <thetext>The YTD info is incorrect since the Java month starts at 0 instead of 1.
+
+ofbiz/components/order/webapp/ordermgr/WEB-INF/actions/order/orderstats.bsh
+On Line 71 the 1 should be replaced with a 0
+
+cal.set(Calendar.MONTH, 0);
+
+thank you,
+sterling</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-10 06:47:50</issue_when>
+ <thetext>Fixed as recommended.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-10 06:47:50</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-10 06:47:50</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>16</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20040527233859</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-02-24 02:56:29</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Limit Categories Shown in Drop Downs</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-24 02:56:29</issue_when>
+ <thetext>Add &quot;show in drop-down&quot; option ProductCategory, filter by it in all combo style category drop downs,
+and change existing category drop-downs to be combo-boxes, include those on the EditProduct,
+EditProductCategories, EditCategory, EditCategoryProducts, EditPromoRules pages.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-27 23:38:59</issue_when>
+ <thetext>Some progress has been made on this, but something still needs to be done with the form tool, etc to
+limit the drop downs.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 11:59:21</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-27 23:38:59</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P1</oldvalue>
+ <newvalue>P4</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>17</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20040318120731</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-02-24 02:58:45</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Filter Promotion Products to exclude discontinued</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-24 02:58:45</issue_when>
+ <thetext>Add code to the ProductPromoWorker to (perhaps optionally) filter products included by the
+salesDiscontinuationDate, and of course make sure the category member from/thru dates are being
+honored.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-25 21:00:44</issue_when>
+ <thetext>Now implemented.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-25 21:00:44</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-25 21:00:44</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:07:31</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>18</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20040318120740</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-24 03:01:49</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Back ordered, or insufficient quantities not handled right</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-24 03:01:49</issue_when>
+ <thetext>It appears that when a product is back-ordered, or reserved in excess of the AvailableToPromise the
+calculations and setting of values are messed up.
+
+Here is a report on this from Bryce Ewing on Feb 5th, 2004:
+
+=================================================
+I have found something that appears to be a bug (but I am not totally sure), I will explain this in two
+cases below:
+
+case 1: buy 1 item of product1 with no inventory
+ - inventory item created with 0 on hand, and -1 available to promise
+ - order item inventory res created with quantity of 1 and quantity not available of 1
+
+case 2: buy 2 items of product2 with 1 item in inventory
+ - inventory item updated with 1 on hand, and -1 available to promise
+ - order item inventory res created with quantity of 2 and quantity not available of 0
+
+For case 1 the system is doing exactly what I would expect, but in case 2 I would have expected that
+the order item inventory res record would have had a quantity not available of 1 rather than 0.
+
+Am I mistaken in this expectation, or is this infact a bug?
+=================================================
+
+Here is a comment on some apparently related findings by Jacopo Cappellato:
+
+=================================================
+I&apos;m studying the simple method InventoryServices.reserveProductInventory
+that implements the inventory reservation of on order/order item, and I&apos;ve
+got a question about this issue.
+What is the meaning of the quantityNotAvailable field in
+OrderItemInventoryRes entity? Where and how is it used (or intended to be
+used for)? I&apos;ve noticed that this quantity is considered in the pick list
+reports...
+
+Probably the quantityNotAvailable field should contain the quantity reserved
+that caused inventory item&apos;s atp to be less than zero: if so, why in the
+reserveProductInventory method the quantityNotAvailable is set only in line
+498 and not also after line 458? And in which way, once set, could this
+quantity return to zero?
+=================================================</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-24 18:35:45</issue_when>
+ <thetext>After a patch from Bryce Ewing it appears to be fixed.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-24 18:35:45</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-24 18:35:45</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:07:40</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>19</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120748</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-24 06:44:51</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Patch for bug in the Inventory Receive function</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 06:44:51</issue_when>
+ <thetext>In Facility manager, when you receive a purchase order delivered with more than
+one shipments and you select to receive only one shipment the proposed
+quantities are the quantities of the original purchase order and not the
+quantities of the shipment.
+In my patches I tried to change the minimum amount of code and the
+result is that the code is not well written... obviously feel free to change
+my code.
+PS: I submitted this patches to the dev list in january 2004.
+PPS: the two patches are in Unified Output Format
+
+
+Index: ofbiz/components/product/webapp/facility/inventory/receiveInventory.ftl
+===================================================================
+RCS
+file: /cvs/ofbiz/components/product/webapp/facility/inventory/receiveInventory.f
+tl,v
+retrieving revision 1.5
+diff -u -r1.5 receiveInventory.ftl
+--- ofbiz/components/product/webapp/facility/inventory/receiveInventory.ftl
+ 17 Dec 2003 22:46:36 -0000 1.5
++++ ofbiz/components/product/webapp/facility/inventory/receiveInventory.ftl
+ 14 Jan 2004 11:05:06 -0000
+@@ -312,6 +312,9 @@
+ &lt;/tr&gt;
+ &lt;#list purchaseOrderItems as orderItem&gt;
+ &lt;#assign defaultQuantity = orderItem.quantity - receivedQuantities
+[orderItem.orderItemSeqId]?double&gt;
++ &lt;#if shipment?has_content&gt;
++ &lt;#assign defaultQuantity = shippedQuantities
+[orderItem.orderItemSeqId]?double - receivedQuantities
+[orderItem.orderItemSeqId]?double&gt;
++ &lt;/#if&gt;
+ &lt;#if 0 &lt; defaultQuantity&gt;
+ &lt;#assign orderItemType = orderItem.getRelatedOne(&quot;OrderItemType&quot;)&gt;
+ &lt;input type=&quot;hidden&quot; name=&quot;orderId_o_${rowCount}&quot;
+value=&quot;${orderItem.orderId}&quot;&gt;
+
+
+
+
+
+
+
+Index: ofbiz/components/product/webapp/facility/WEB-
+INF/actions/inventory/receiveInventory.bsh
+===================================================================
+RCS file: /cvs/ofbiz/components/product/webapp/facility/WEB-
+INF/actions/inventory/receiveInventory.bsh,v
+retrieving revision 1.4
+diff -u -r1.4 receiveInventory.bsh
+--- ofbiz/components/product/webapp/facility/WEB-
+INF/actions/inventory/receiveInventory.bsh 25 Aug 2003 15:28:00 -0000
+ 1.4
++++ ofbiz/components/product/webapp/facility/WEB-
+INF/actions/inventory/receiveInventory.bsh 14 Jan 2004 11:08:14 -0000
+@@ -69,6 +69,7 @@
+ shipment = delegator.findByPrimaryKey(&quot;Shipment&quot;, UtilMisc.toMap
+(&quot;shipmentId&quot;, shipmentId));
+ }
+
++shippedQuantities = new HashMap();
+ purchaseOrderItems = null;
+ if (purchaseOrder != null) {
+ if (product != null) {
+@@ -80,14 +81,18 @@
+ exprs = new ArrayList();
+ while (issueIter.hasNext()) {
+ issuance = issueIter.next();
+- exprs.add(new EntityExpr(&quot;orderItemSeqId&quot;, EntityOperator.EQUALS,
+issuance.getString(&quot;orderItemSeqId&quot;)));
++ exprs.add(new EntityExpr(&quot;orderItemSeqId&quot;, EntityOperator.EQUALS,
+issuance.getString(&quot;orderItemSeqId&quot;)));
++ double issuanceQty = issuance.getDouble(&quot;quantity&quot;).doubleValue();
++ if (shippedQuantities.containsKey(issuance.getString
+(&quot;orderItemSeqId&quot;))) {
++ issuanceQty += ((Double)shippedQuantities.get
+(issuance.getString(&quot;orderItemSeqId&quot;))).doubleValue();
++ }
++ shippedQuantities.put(issuance.getString(&quot;orderItemSeqId&quot;),
+issuanceQty);
+ }
+ purchaseOrderItems = EntityUtil.filterByOr(orderItems, exprs);
+ } else {
+ purchaseOrderItems = purchaseOrder.getRelated(&quot;OrderItem&quot;);
+ }
+ }
+-
+ receivedQuantities = new HashMap();
+ if (purchaseOrderItems != null &amp;&amp; purchaseOrderItems.size() &gt; 0) {
+ context.put(&quot;firstOrderItem&quot;, EntityUtil.getFirst(purchaseOrderItems));
+@@ -100,7 +105,13 @@
+ if (receipts != null &amp;&amp; receipts.size() &gt; 0) {
+ recIter = receipts.iterator();
+ while (recIter.hasNext()) {
+- rec = recIter.next();
++ rec = recIter.next();
++ if (shipment != null) {
++ if (rec.getString(&quot;shipmentId&quot;) == null ||
++ !rec.getString(&quot;shipmentId&quot;).equals(shipment.getString
+(&quot;shipmentId&quot;))) {
++ continue;
++ }
++ }
+ accepted = rec.getDouble(&quot;quantityAccepted&quot;);
+ rejected = rec.getDouble(&quot;quantityRejected&quot;);
+ if (accepted != null)
+@@ -140,6 +151,7 @@
+ context.put(&quot;product&quot;, product);
+ context.put(&quot;shipments&quot;, shipments);
+ context.put(&quot;shipment&quot;, shipment);
++context.put(&quot;shippedQuantities&quot;, shippedQuantities);
+ context.put(&quot;purchaseOrderItems&quot;, purchaseOrderItems);
+ context.put(&quot;receivedQuantities&quot;, receivedQuantities);
+ context.put(&quot;rejectReasons&quot;, rejectReasons);</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 06:55:45</issue_when>
+ <thetext>Created an attachment (id=1)
+Patch files in UOF for receiveInventory,bsh and receiveInventory.ftl
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 06:35:22</issue_when>
+ <thetext>The changes are in CVS. Thanks Jacopo!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>1</attachid>
+ <date>2004-02-24 06:55:45</date>
+ <desc>Patch files in UOF for receiveInventory,bsh and receiveInventory.ftl</desc>
+ <ispatch>1</ispatch>
+ <filename>receiveInventory.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/1/receiveInventory.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-24 06:55:45</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=1)
+Patch files in UOF for receiveInventory,bsh and receiveInventory.ftl
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 06:35:22</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 06:35:22</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:07:48</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>20</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120758</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-24 07:36:49</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>List All Visits link in the Party Profile page returns an error with 0 visits</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 07:36:50</issue_when>
+ <thetext>List All Visits link in the Party Profile page returns an error with 0 visits
+(see attached patch file) due to wrong bsh code.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 07:38:20</issue_when>
+ <thetext>Created an attachment (id=2)
+Patch for bug in uof
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 06:39:57</issue_when>
+ <thetext>The changes are in CVS. Thanks Jacopo!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>2</attachid>
+ <date>2004-02-24 07:38:20</date>
+ <desc>Patch for bug in uof</desc>
+ <ispatch>1</ispatch>
+ <filename>showvisits.bsh.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/2/showvisits.bsh.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-24 07:38:20</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=2)
+Patch for bug in uof
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 06:39:57</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 06:39:57</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:07:58</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>21</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120807</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-24 07:40:56</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>findparty page returns JavaScript errors when clicking on the LookupParty link and when the lookup fields are hidden</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 07:40:56</issue_when>
+ <thetext>findparty page returns JavaScript errors when clicking on the LookupParty link
+and when the lookup fields are hidden. The attached patch should fix the
+problem.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 07:41:29</issue_when>
+ <thetext>Created an attachment (id=3)
+Patch for bug in uof
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 06:44:01</issue_when>
+ <thetext>Your changes are in CVS. Thanks Jacopo!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>3</attachid>
+ <date>2004-02-24 07:41:29</date>
+ <desc>Patch for bug in uof</desc>
+ <ispatch>1</ispatch>
+ <filename>findparty.ftl.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/3/findparty.ftl.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-24 07:41:29</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=3)
+Patch for bug in uof
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 06:44:01</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 06:44:01</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:08:07</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>22</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040318115951</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-24 08:52:07</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Errors in order entry when &quot;Payment Already Received&quot; type is selected.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 08:52:08</issue_when>
+ <thetext>In Order Entry:
+when you finalize an order and, in the &quot;Order Entry Payment
+Settings&quot; page, you select the &quot;Payment Already Received&quot; type, in the
+following page you get JavaScript errors when you click over
+the links (stating that the object &quot;document.billsetupform&quot; doesn&apos;t exist);
+and so you cannot submit the order.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-26 07:08:20</issue_when>
+ <thetext>
+This has been an issue for a while now. It&apos;s good to have it in the tracking system since it may not get
+fixed right away. Andy is more aware of what is happening there than I am, so he may have more
+feedback on it. -David</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-26 07:08:20</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-26 07:08:20</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P2</oldvalue>
+ <newvalue>P3</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 11:59:51</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>23</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040318120006</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-24 08:56:40</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Inventory receive ignores the inventory item id field.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 08:56:40</issue_when>
+ <thetext>In Facility Manager -&gt; Inventory receive:
+it always creates a new inventory item even if the &quot;inventory item id&quot; optional
+field is filled with an existing inventory item id.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:38:11</issue_when>
+ <thetext>reassigned</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:38:11</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:00:06</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>24</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040318120024</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-24 09:01:59</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Receive return: it always creates serialized inventory items.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-24 09:01:59</issue_when>
+ <thetext>In Facility Manager --&gt;Receive return
+
+it always creates a serialized inventory item (even if &apos;non-serialized&apos; is
+selected) and so the received quantities are lost (if more than one).</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:38:55</issue_when>
+ <thetext>reassigned</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:38:55</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:00:24</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>25</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040318120814</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-25 14:58:53</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Permission Checks missing in various part of Accounting Manager</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-25 14:58:53</issue_when>
+ <thetext>Various pages in the Accounting Manager have no view permission checking, including the billing
+account, invoice, etc pages.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jaz</who>
+ <issue_when>2004-02-25 15:36:03</issue_when>
+ <thetext>I&apos;m not involved in this project.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-25 16:13:54</issue_when>
+ <thetext>
+Fixed assigned to mistake.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 10:48:28</issue_when>
+ <thetext>All components have a default VIEW permission based on the component configuration. Each page no
+longer needs to have the added code as long as require auth is set in the controller.xml file. The
+checkLogin event will make sure the user has the default permission for the specific component.
+Additional permissions are only necessary when not using the default permission.</thetext>
+ </long_desc>
+ <activity>
+ <user>jaz</user>
+ <when>2004-02-25 15:36:03</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>jaz</oldvalue>
+ <newvalue>jonesde</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-25 16:13:54</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>jonesde</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 10:48:28</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 10:48:28</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:08:14</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>26</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040308115822</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-25 21:11:36</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Billing Account Errors</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-25 21:11:36</issue_when>
+ <thetext>This issue was reported by Si Chen, Olivier Heintz, and some others.
+
+The following is some text from an email fro Si Chen on Jan 26, 2004; the attached patch is also from
+this email.
+
+=======================================
+Hello. After some work we have tracked down the problem with using
+billingAccount in the order manager and were able to fix it. The
+problem is stated in the order manager&apos;s billsettings.ftl, it was
+passing in &quot;EXT_BILLACT|10000&quot; for the checkoutPaymentId instead of
+separate checkoutPaymentId and billingAccountId. Olivier had suggested
+a good patch earlier which parses this form of checkoutPaymentId in the
+CheckOutEvents.java. We took a different approach and used code from
+ecommerce to pass both checkoutPaymentId and billingAccountId. We also
+fixed CheckOutEvents.java to get the billingAccountId from the request
+and associate it with the cart. Both are shown in the attached patch.
+
+One last problem: in ecommerce, in checkoutpayment.ftl, gift cards,
+credit cards, and billing accounts are all using &quot;amount_&lt;account_id&gt;&quot;
+as the name of the input fields. As a result, when the
+toggleBillingAccount javascript function tries to toggle the billing
+account selected for entering the amount to pay, it gets confused and
+cannot do this. As a result, when you use the multi-page rather than
+express checkout in ecommerce, it does not work properly. I&apos;ll be happy
+to elaborate on this if you need me to.
+=======================================</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-25 21:14:01</issue_when>
+ <thetext>Created an attachment (id=4)
+Patch to fix BillingAccount issues
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 11:58:22</issue_when>
+ <thetext>Applied patch; fixed JS in ecommerce </thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>4</attachid>
+ <date>2004-02-25 21:14:01</date>
+ <desc>Patch to fix BillingAccount issues</desc>
+ <ispatch>1</ispatch>
+ <filename>BillingAccountError.patch</filename>
+ <submitter_id>3</submitter_id>
+ <submitting_username>jonesde</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/4/BillingAccountError.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-25 21:14:01</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=4)
+Patch to fix BillingAccount issues
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 11:58:22</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 11:58:22</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 11:58:22</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>27</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120822</delta_ts>
+ <subcomponent>WorkEffort</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-26 03:20:00</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Patch for missing pagedef file for popup template that causes lookup error (due to i18n changes)</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 03:20:00</issue_when>
+ <thetext>The lookup link in New Event -&gt; Parties page is broken.
+The popup template doesn&apos;t run the envsetup script that loads the localized
+labels.
+
+PATCH: add a file named &quot;popup.xml&quot; to the template folder containing the
+following lines:
+
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;page&gt;
+ &lt;template-action name=&quot;/includes/envsetup.bsh&quot;/&gt;
+&lt;/page&gt;</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 07:16:55</issue_when>
+ <thetext>
+I have added the popup.xml file to CVS. Thanks for sending it over Jacopo.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:16:55</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:16:55</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:08:22</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>28</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040806161040</delta_ts>
+ <subcomponent>WorkEffort</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-26 03:32:11</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Added lookup link for parties in month view</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 03:32:11</issue_when>
+ <thetext>Added lookup link for parties in month view.
+All the stuff was already in place... I just added the link.
+However I think this is a very useful enhancement.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 03:32:44</issue_when>
+ <thetext>Created an attachment (id=5)
+Patch in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-03 08:10:20</issue_when>
+ <thetext>Changed issue type as per email from Jacopo.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-08-06 16:10:40</issue_when>
+ <thetext>Thanks Jacopo, this is now in CVS.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>5</attachid>
+ <date>2004-02-26 03:32:44</date>
+ <desc>Patch in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>month.ftl.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/5/month.ftl.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-26 03:32:44</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=5)
+Patch in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-03 08:10:20</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>ENHANCEMENT</oldvalue>
+ <newvalue>PATCH</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:00:44</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-06 16:10:40</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-06 16:10:40</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>29</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120831</delta_ts>
+ <subcomponent>WorkEffort</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-26 03:56:48</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>When creating a new event from calendar, start and end date were not filled properly in the form</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 03:56:48</issue_when>
+ <thetext>When creating a new event from calendar, start and end date were not filled
+properly in the event form.
+The two patches (one for the event.ftl file and one for the event.bsh file)
+will solve this problem.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 03:59:24</issue_when>
+ <thetext>Created an attachment (id=6)
+Patch for event.bsh in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 03:59:58</issue_when>
+ <thetext>Created an attachment (id=7)
+Patch for event.ftl file in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 07:28:02</issue_when>
+ <thetext>Your changes are in CVS, thanks Jacopo!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>6</attachid>
+ <date>2004-02-26 03:59:24</date>
+ <desc>Patch for event.bsh in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>event.bsh.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/6/event.bsh.patch</attachment_iz_url>
+ </attachment>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>7</attachid>
+ <date>2004-02-26 03:59:58</date>
+ <desc>Patch for event.ftl file in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>event.ftl.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/7/event.ftl.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-26 03:59:24</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=6)
+Patch for event.bsh in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-26 03:59:58</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=7)
+Patch for event.ftl file in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:28:02</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:28:02</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:08:31</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>30</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P5</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040308175050</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jackhung</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-26 04:17:49</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Fail to approval order</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jackhung</who>
+ <issue_when>2004-02-26 04:17:49</issue_when>
+ <thetext>19285437[ ControlServlet.java:133:DEBUG] [[[updateactivityassign] Servlet
+Starting, doing setup- total:0.0,since last(Begin):0.0]]
+19285438[ ControlServlet.java:182:DEBUG] [[[updateactivityassign] Setup
+done, doing Event(s) and View(s)- total:0.0,since last([updateactivityas...):0.0]]
+19285440[ RequestHandler.java:200:INFO ] [Processing Request]:
+updateactivityassign
+19285744[ WfProcessMgrImpl.java:106:INFO ] [WfProcessMgr.init] : Create
+process manager (org.ofbiz.order[20030730144901] / ProcessOrder[20030730144901])
+19285890[ BshUtil.java:75 :ERROR] BSH Evaluation error.
+Sourced file: &lt;Inline eval of: approvalCode.equals(&quot;0&quot;); &gt; : Attempt to resolve
+method: equals() on undefined variable or class name: approvalCode : at Line: 1
+: in file: &lt;Inline eval of: approvalCode.equals(&quot;0&quot;); &gt; : approvalCode .equals (
+&quot;0&quot; )
+
+ at bsh.UtilEvalError.toEvalError(UtilEvalError.java:82)
+ at bsh.UtilEvalError.toEvalError(UtilEvalError.java:87)
+ at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:79)
+ at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:69)
+ at bsh.Interpreter.evalParsedScript(Interpreter.java:1104)
+ at bsh.Interpreter.eval(Interpreter.java:590)
+ at bsh.Interpreter.eval(Interpreter.java:616)
+ at bsh.Interpreter.eval(Interpreter.java:606)
+ at org.ofbiz.base.util.BshUtil.eval(BshUtil.java:64)
+ at
+org.ofbiz.workflow.impl.WfExecutionObjectImpl.evalBshCondition(WfExecutionObjectImpl.java:718)
+ at
+org.ofbiz.workflow.impl.WfProcessImpl.getTransFrom(WfProcessImpl.java:477)
+ at org.ofbiz.workflow.impl.WfProcessImpl.queueNext(WfProcessImpl.java:298)
+ at
+org.ofbiz.workflow.impl.WfProcessImpl.activityComplete(WfProcessImpl.java:286)
+ at org.ofbiz.workflow.impl.WfActivityImpl.complete(WfActivityImpl.java:408)
+ at
+org.ofbiz.workflow.impl.WfAssignmentImpl.complete(WfAssignmentImpl.java:175)
+ at
+org.ofbiz.workflow.client.WorkflowClient.complete(WorkflowClient.java:266)
+ at
+org.ofbiz.workflow.client.WorkflowServices.completeAssignment(WorkflowServices.java:418)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 12:08:46</issue_when>
+ <thetext>I cannot duplicate this problem; please provide more information or we will have to close this has no
+longer an issue.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:50:50</issue_when>
+ <thetext>reassigned</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:08:46</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>STARTED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:08:46</when>
+ <field_name>op_sys</field_name>
+ <field_desc>OS/Version</field_desc>
+ <oldvalue>Linux</oldvalue>
+ <newvalue>All</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:08:46</when>
+ <field_name>rep_platform</field_name>
+ <field_desc>Platform</field_desc>
+ <oldvalue>PC</oldvalue>
+ <newvalue>All</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:08:46</when>
+ <field_name>short_desc</field_name>
+ <field_desc>Summary</field_desc>
+ <oldvalue>Fail to approval order </oldvalue>
+ <newvalue>Fail to approval order</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:50:50</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:50:50</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>STARTED</oldvalue>
+ <newvalue>NEW</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:50:50</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P2</oldvalue>
+ <newvalue>P5</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>31</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120101</delta_ts>
+ <subcomponent>WorkEffort</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-26 05:39:36</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Error message when you try to create new contact information under an event</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 05:39:36</issue_when>
+ <thetext>An error message is returned when you try to create new contact information
+under an event: Cannot locate service by name (createWorkEffortContactMech)
+
+This is the complete message:
+
+ERROR: Could not complete the Create an email address for WorkEffort process
+[problem invoking the [createWorkEffortContactMech] service with the map named
+[context] containing [{locale=en_US, infoString=foo@bar.com, userLogin=
+[GenericEntity:UserLogin][partyId,admin(java.lang.String)][disabledDateTime,null
+()][passwordHint,null()][createdTxStamp,null()][successiveFailedLogins,null()]
+[enabled,Y(java.lang.String)][userLoginId,admin(java.lang.String)]
+[currentPassword,ofbiz(java.lang.String)][lastUpdatedTxStamp,null()]
+[lastUpdatedStamp,null()][createdStamp,null()], workEffortId=10030,
+contactMechTypeId=EMAIL_ADDRESS}]: Cannot locate service by name
+(createWorkEffortContactMech)]</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:01:01</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>32</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040409054533</delta_ts>
+ <subcomponent>WorkEffort</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-26 05:50:01</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Errors that prevent adding a new phase to a project.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 05:50:01</issue_when>
+ <thetext>It&apos;s impossible to add a new phase to a project. Even if you fill all the
+fields of the new phase form when you press the &apos;create&apos; button you get an
+error in the system log (however no error messages are shown in the html page).
+
+This is the complete error message:
+
+1160388[ ServiceDispatcher.java:309:ERROR] Service Error [createPhase]: ERROR:
+Could not complete the Create Project Phase process [problem creating the newEnt
+ity value: while inserting: [GenericEntity:WorkEffortAssoc][createdTxStamp,2004-
+02-26 14:44:26.096(java.sql.Timestamp)][workEffortIdTo,10034(java.lang.String)][
+workEffortIdFrom,10031(java.lang.String)][workEffortAssocTypeId,WORK_EFF_BREAKDO
+WN(java.lang.String)][lastUpdatedTxStamp,2004-02-26 14:44:26.096(java.sql.Timest
+amp)][createdStamp,2004-02-26 14:44:26.106(java.sql.Timestamp)][lastUpdatedStamp
+,2004-02-26 14:44:26.106(java.sql.Timestamp)] (SQL Exception while executing the
+ following:INSERT INTO WORK_EFFORT_ASSOC (WORK_EFFORT_ID_FROM, WORK_EFFORT_ID_TO
+, WORK_EFFORT_ASSOC_TYPE_ID, SEQUENCE_NUM, FROM_DATE, THRU_DATE, LAST_UPDATED_ST
+AMP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?,
+ ?, ?, ?, ?, ?, ?) ([-5005] (at 124): Missing non-NULL value))]</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-04-09 05:45:33</issue_when>
+ <thetext>David Jones has fixed this problem in date 2004-04-08 (see the
+thread &quot;createphase ERROR in OFBiz 3.0 and OFBiz CVS versions&quot; in the dev-list).
+</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:01:18</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-04-09 05:45:33</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-04-09 05:45:33</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>33</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P4</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20050209023142</delta_ts>
+ <subcomponent>WorkEffort</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-26 06:00:26</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>When you create a new request and you don&apos;t fill correctly all the fields no error messages are shown</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 06:00:26</issue_when>
+ <thetext>When you create a new request and you don&apos;t fill correctly all the fields no
+error messages are shown.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2005-02-09 02:31:42</issue_when>
+ <thetext>Fixed after the refactoring to screen widget.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:01:30</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2005-02-09 02:31:42</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2005-02-09 02:31:42</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>34</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P5</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120838</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-26 06:11:14</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Little JavaScript in &quot;find returns&quot; when lookup fields are hidden</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 06:11:14</issue_when>
+ <thetext>Little JavaScript in &quot;find returns&quot; when lookup fields are hidden
+
+Patch for findReturns.ftl is attached.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 06:11:49</issue_when>
+ <thetext>Created an attachment (id=8)
+Patch for findReturn.ftl in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 11:18:49</issue_when>
+ <thetext>Your changes are in CVS. Thanks for sending that over.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>8</attachid>
+ <date>2004-02-26 06:11:49</date>
+ <desc>Patch for findReturn.ftl in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>findReturn.ftl.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/8/findReturn.ftl.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-26 06:11:49</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=8)
+Patch for findReturn.ftl in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 11:18:49</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 11:18:49</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:08:38</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>35</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040308103928</delta_ts>
+ <subcomponent>E-Commerce</subcomponent>
+ <reporter>razorb</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-26 06:18:48</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc>http://localhost:8080/ecommerce/control/product/~category_id=100/~product_id=GZ-1006</issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Single variant combo doesn&apos;t select properly</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>razorb</who>
+ <issue_when>2004-02-26 06:18:48</issue_when>
+ <thetext>Using the drop down menu to select a variantion i.e. LGPL does not set the
+selection on the menu. Using the swatch/images does correctly set the menu
+selection and allows adding to the basket.
+
+I suspect a little JS error somewhere for single variant items.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-26 06:52:49</issue_when>
+ <thetext>
+I just reproduced this against the latest code base, appears to still be an issue with single feature type
+virtual products.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 09:54:51</issue_when>
+ <thetext>Updated since this is a CVS bug and updated status</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 10:39:28</issue_when>
+ <thetext>fixed JS bugs in productdetail</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-26 06:52:48</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-26 06:52:48</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P1</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 09:54:51</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>STARTED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 09:54:51</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 10:39:28</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>STARTED</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 10:39:28</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>36</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120846</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-26 23:17:51</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Facility Manager: in &apos;inventory receive&apos; the type of order is not checked and it&apos;s possible to receive a sales order if you enter its id in the &apos;purchase order id&apos; field</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-26 23:17:51</issue_when>
+ <thetext>Facility Manager: in &apos;inventory receive&apos; the type of order is not checked and
+it&apos;s possible to receive a sales order if you enter its id in the &apos;purchase
+order id&apos; field.
+
+This is the patch in UOF for the receiveInventory.bsh file (pay attention that
+some days ago I&apos;ve submitted a patch for the same file against the same CVS
+release):
+
+Index: ofbiz/components/product/webapp/facility/WEB-
+INF/actions/inventory/receiveInventory.bsh
+===================================================================
+RCS file: /cvs/ofbiz/components/product/webapp/facility/WEB-
+INF/actions/inventory/receiveInventory.bsh,v
+retrieving revision 1.4
+diff -u -r1.4 receiveInventory.bsh
+--- ofbiz/components/product/webapp/facility/WEB-
+INF/actions/inventory/receiveInventory.bsh 25 Aug 2003 15:28:00 -0000
+ 1.4
++++ ofbiz/components/product/webapp/facility/WEB-
+INF/actions/inventory/receiveInventory.bsh 27 Feb 2004 07:17:08 -0000
+@@ -43,6 +43,9 @@
+ purchaseOrder = null;
+ if (purchaseOrderId != null &amp;&amp; purchaseOrderId.length() &gt; 0) {
+ purchaseOrder = delegator.findByPrimaryKey(&quot;OrderHeader&quot;, UtilMisc.toMap
+(&quot;orderId&quot;, purchaseOrderId));
++ if (purchaseOrder != null &amp;&amp; !&quot;PURCHASE_ORDER&quot;.equals
+(purchaseOrder.getString(&quot;orderTypeId&quot;))) {
++ purchaseOrder = null;
++ }
+ }
+
+ product = null;</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-02-28 11:58:13</issue_when>
+ <thetext>The patch is in CVS.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-28 11:58:13</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-02-28 11:58:13</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:08:46</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>37</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120856</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-27 02:05:25</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Facility Manager: error message when trying to confirm stock moves needed.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-27 02:05:25</issue_when>
+ <thetext>In the Facility Manager, int the PickList -&gt; Stock Moves page, if I try to
+confirm the &quot;stock moves needed&quot; proposed by the system I get the following
+error:
+
+Error calling event: org.ofbiz.content.webapp.event.EventHandlerException: No
+rows to process
+
+And the movements are not performed.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 17:22:23</issue_when>
+ <thetext>This is caused by some code that was added to display warning messages that wiped out the rowCount
+variable. The warning message loop now uses a variable names messageCount.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 17:22:23</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 17:22:23</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:08:56</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>38</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120905</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-27 02:23:36</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Facility Manager: in Edit shipment -&gt; items tab, a wrong link to EditProduct page caused a controller error.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-27 02:23:36</issue_when>
+ <thetext>Facility Manager: in Edit shipment -&gt; items tab, a wrong link to EditProduct
+page caused a controller error.
+
+Patch for EditShipmentItems.ftl file is attached.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-27 02:24:16</issue_when>
+ <thetext>Created an attachment (id=9)
+Patch for EditShipmentItems.ftl in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 07:38:50</issue_when>
+ <thetext>Your changes are in CVS. Thanks for the patch Jacopo.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>9</attachid>
+ <date>2004-02-27 02:24:16</date>
+ <desc>Patch for EditShipmentItems.ftl in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>EditShipmentItems.ftl.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/9/EditShipmentItems.ftl.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-27 02:24:16</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=9)
+Patch for EditShipmentItems.ftl in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:38:50</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:38:50</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:09:05</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>39</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P2</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120141</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-27 04:05:34</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>SapDB problem when displaying order task list assigned to user role</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-27 04:05:34</issue_when>
+ <thetext>SapDB problem when displaying order task list assigned to user role:
+if more than one order is assigned to user role, in &quot;Order List&quot; page the
+orders are shown 5 times!
+If only one order is assigned to the user role, the order is shown well (1
+time).
+
+See picture attached.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-27 04:07:00</issue_when>
+ <thetext>Created an attachment (id=10)
+Bug example showing two orders waiting approval duplicated 5 times.
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>image/gif</mimetype>
+ <attachid>10</attachid>
+ <date>2004-02-27 04:07:00</date>
+ <desc>Bug example showing two orders waiting approval duplicated 5 times.</desc>
+ <ispatch></ispatch>
+ <filename>order_list_bug.GIF</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/10/order_list_bug.GIF</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-27 04:07:00</when>
+ <field_name>attachments.thedata</field_name>
+ <field_desc>Attachment Data</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=10)
+Bug example showing two orders waiting approval duplicated 5 times.
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:01:41</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>40</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20050209023003</delta_ts>
+ <subcomponent>WorkEffort</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-27 07:27:15</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Party lookup with empty fields returns only one person repeated many times (= number of persons).</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-27 07:27:15</issue_when>
+ <thetext>If, in Party lookup, you perform a lookup with empty fields (all records),
+returns only one person repeated many times (= number of persons).
+I suspect that the problem is in the &quot;lookupParty&quot; simple method in common
+component.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2005-02-09 02:30:03</issue_when>
+ <thetext>Fixed changing the way the lookup is implemented (see Jira issue OFBIZ-114).</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:01:50</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2005-02-09 02:30:03</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2005-02-09 02:30:03</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>41</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120912</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-27 08:53:04</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Facility Manager: in Edit shipment -&gt; items tab, a wrong link to EditProduct caused a controller error (same as issue #38)</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-27 08:53:04</issue_when>
+ <thetext>Facility Manager: in View shipment tab, a wrong link to EditProduct
+page caused a controller error (same as issue #38).
+
+Patch for ViewShipmentItemInfo.ftl file is attached.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-27 08:53:50</issue_when>
+ <thetext>Created an attachment (id=11)
+Patch for file ViewShipmentItemInfo.ftl in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 07:41:15</issue_when>
+ <thetext>Your changes are now in CVS. Thanks for sending those over Jacopo.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>11</attachid>
+ <date>2004-02-27 08:53:50</date>
+ <desc>Patch for file ViewShipmentItemInfo.ftl in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>ViewShipmentItemInfo.ftl.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/11/ViewShipmentItemInfo.ftl.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-27 08:53:50</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=11)
+Patch for file ViewShipmentItemInfo.ftl in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:41:15</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:41:15</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:09:12</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>42</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P4</priority>
+ <resolution>WONTFIX</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040630193328</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-28 22:34:42</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In shipment, the following error message appears: &quot;Applet Package Weight Reader notinited&quot;</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-28 22:34:42</issue_when>
+ <thetext>In shipment, the following error message appears: &quot;Applet Package Weight Reader
+notinited&quot;.
+I think the problem is caused by the fact that the class ShipmentScaleApplet is
+not built in the ant task.
+Was this done intentionally? (I think this applet tries to connect to a scale
+device connected to a serial port and so probably this could cause some
+problems...).</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:39:52</issue_when>
+ <thetext>reassigned; I will comment out the applet code until this is finished</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-06-30 19:33:28</issue_when>
+ <thetext>The applet is going to be replaced with a think client shipment station UI</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:39:52</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:01:59</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:33:28</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:33:28</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>WONTFIX</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>43</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120921</delta_ts>
+ <subcomponent>E-Commerce</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-02-28 22:46:49</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In &quot;Create Return&quot;, select-all checkbox doesn&apos;t work due to wrong form name.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-28 22:46:49</issue_when>
+ <thetext>In &quot;Create Return&quot;, select-all checkbox doesn&apos;t work due to wrong form name.
+
+Patch attached for requestreturn.ftl in Unified Output Format.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-28 22:47:40</issue_when>
+ <thetext>Created an attachment (id=12)
+Patch attached for requestreturn.ftl in UOF.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 07:48:30</issue_when>
+ <thetext>Your changes are in CVS. Thanks for fixing that.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>12</attachid>
+ <date>2004-02-28 22:47:39</date>
+ <desc>Patch attached for requestreturn.ftl in UOF.</desc>
+ <ispatch>1</ispatch>
+ <filename>requestreturn.ftl.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/12/requestreturn.ftl.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-02-28 22:47:40</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=12)
+Patch attached for requestreturn.ftl in UOF.
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:48:30</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 07:48:30</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:09:21</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>44</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040229030013</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-02-29 03:00:13</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Packages: ShipmentPackage&apos;s weight automatically updated when ShipmentPackageContent entries are added/deleted (weight taken from the Product entity).</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-29 03:00:13</issue_when>
+ <thetext>Packages: ShipmentPackage&apos;s weight automatically updated when
+ShipmentPackageContent entries are added/deleted (weight taken from the Product
+entity).</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>45</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040301155709</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-02-29 06:17:33</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In orderview page, if you select the &quot;QuickShip order link&quot; you get a controller error.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-02-29 06:17:33</issue_when>
+ <thetext>In orderview page (/ordermgr/control/orderview), if you select the &quot;QuickShip
+order link&quot; you get a controller error:
+
+org.ofbiz.content.webapp.control.RequestHandlerException: Unknown request
+[quickShipOrderMultiFacility]; this request does not exist or cannot be called
+directly.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 12:11:07</issue_when>
+ <thetext>I&apos;ll get on this...</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-01 15:57:09</issue_when>
+ <thetext>Changed the default behavior for this; also added request-map and service defs for the quick ship from
+multi facilites.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 12:11:07</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>STARTED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 15:57:09</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>STARTED</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-01 15:57:09</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>46</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040806152631</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-02 05:13:01</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Patch for multiple inventory facility reservation</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-02 05:13:01</issue_when>
+ <thetext>Patch for multiple inventory facility reservation:
+the intent of this is to perform reservation only if all items are available in
+one facility: that, I think, is the declared behaviour, and what is checked
+with the isInventoryAvailable method.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-02 05:13:49</issue_when>
+ <thetext>Created an attachment (id=13)
+Patch for ProductStoreWorker.java in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-08-06 15:26:31</issue_when>
+ <thetext>Thanks Jacopo, your patch is now in CVS.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>13</attachid>
+ <date>2004-03-02 05:13:49</date>
+ <desc>Patch for ProductStoreWorker.java in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>ProductStoreWorker.java.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/13/ProductStoreWorker.java.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-02 05:13:49</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=13)
+Patch for ProductStoreWorker.java in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:02:10</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-06 15:26:31</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-06 15:26:31</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>47</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040323221326</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-02 06:06:51</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Facility -&gt; Shipment: patch for JavaScript error introduced during i18n process.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-02 06:06:51</issue_when>
+ <thetext>Facility -&gt; Shipment: patch for JavaScript error introduced during i18n process.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-02 06:07:51</issue_when>
+ <thetext>Created an attachment (id=14)
+Patch for AddItemsFromOrder.ftl file in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:42:45</issue_when>
+ <thetext>reassigned</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-23 22:13:26</issue_when>
+ <thetext>This bug has been fixed by the code for the new feature regarding shipment
+plans.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>14</attachid>
+ <date>2004-03-02 06:07:51</date>
+ <desc>Patch for AddItemsFromOrder.ftl file in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>AddItemsFromOrder.ftl.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/14/AddItemsFromOrder.ftl.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-02 06:07:51</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=14)
+Patch for AddItemsFromOrder.ftl file in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:42:45</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:02:18</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-23 22:13:26</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-23 22:13:26</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>48</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P2</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120228</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-02 06:28:37</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Facility -&gt; Shipment -&gt; Items: delete shipment item link returns a constraint violation error.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-02 06:28:37</issue_when>
+ <thetext>Facility -&gt; Shipment -&gt; Items: delete shipment item link returns a constraint
+violation error:
+
+The following errors occurred:
+ERROR: Could not complete the Delete ShipmentItem process [problem removing the
+lookedUpValue value: Exception while deleting the following entity:
+[GenericEntity:ShipmentItem][shipmentId,10010(java.lang.String)]
+[shipmentItemSeqId,00001(java.lang.String)] (SQL Exception while executing the
+following:DELETE FROM SHIPMENT_ITEM WHERE SHIPMENT_ID=? AND
+SHIPMENT_ITEM_SEQ_ID=? (Integrity constraint violation ITEM_ISS_SHITM table:
+ITEM_ISSUANCE in statement [DELETE FROM SHIPMENT_ITEM WHERE SHIPMENT_ID=? AND
+SHIPMENT_ITEM_SEQ_ID=?]))]
+
+In my opinion, the delete shipment item link should perform something like this
+(instead of barely trying to remove the ShipmentItem entry): it should remove
+the item issuances, recreate the reservations and then remove the shipment item.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:02:28</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>49</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040528001027</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-03 03:11:18</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Facility -&gt; Receive PO: at now it&apos;s possible to receive multiple times the same shipment items. This is a partial patch for this problem.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-03 03:11:18</issue_when>
+ <thetext>Facility -&gt; Receive PO: at now it&apos;s possible to receive multiple times the same
+shipment items. This is a partial patch for this problem. With the attached
+patch the shipment already delivered (or cancelled) are not shown (and so the
+user cannot receive them again).
+In order to completely fix this issue the best solution is, in my opinion, to
+automatically update the shipment status to &quot;delivered&quot; when the user receives
+an item: this could be done modifying the service
+group &quot;receiveInventoryProduct&quot; by adding to it the &quot;updateShipment&quot; service
+(to update the shipment status). However I&apos;m going to add this comments to a
+new &quot;DEFECT&quot; issue.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-03 03:12:11</issue_when>
+ <thetext>Created an attachment (id=15)
+Patch for file receiveInventory.bsh in UOF.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-28 00:10:27</issue_when>
+ <thetext>This is now in CVS, thanks for sending it over Jacopo.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>15</attachid>
+ <date>2004-03-03 03:12:11</date>
+ <desc>Patch for file receiveInventory.bsh in UOF.</desc>
+ <ispatch>1</ispatch>
+ <filename>receiveInventory.bsh.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/15/receiveInventory.bsh.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-03 03:12:11</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=15)
+Patch for file receiveInventory.bsh in UOF.
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:02:37</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-28 00:10:27</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-28 00:10:27</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>50</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040528000924</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-03 03:15:23</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Facility -&gt; Receive PO: at now it&apos;s possible to receive multiple times the same shipment items.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-03 03:15:24</issue_when>
+ <thetext>Facility -&gt; Receive PO: at now it&apos;s possible to receive multiple times the same
+shipment items.
+This problem was partially fixed by the patch attached to issue #49.
+With that patch the shipment already delivered (or cancelled) are not shown
+(and so the user cannot receive them again).
+In order to completely fix this issue the best solution is, in my opinion, to
+automatically update the shipment status to &quot;delivered&quot; when the user receives
+an item: this could be done modifying the service
+group &quot;receiveInventoryProduct&quot; by adding to it the &quot;updateShipment&quot; service
+(to update the shipment status). However I&apos;m going to add this comments to a
+new &quot;DEFECT&quot; issue.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-28 00:09:24</issue_when>
+ <thetext>The patch is in, now just need to update the shipment status as mentioned in the description.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:02:49</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>51</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>REMIND</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040811004716</delta_ts>
+ <subcomponent>Startup</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-03 06:37:30</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Several SapDB error messages are generated at startup when entities are created.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-03 06:37:30</issue_when>
+ <thetext>Several SapDB error messages are generated at startup when entities are created.
+The messages appear during the indices&apos; generation phase, not for all entities
+(maybe 5-10%); here is an example:
+
+147042[ DatabaseUtil.java:319:ERROR] Could not create foreign key indices
+for entity &quot;EftAccount&quot;: SQL Exception while executing the following:
+CREATE INDEX EFTACCT_PMETH ON EFT_ACCOUNT (PAYMENT_METHOD_ID)
+Error was: com.sap.dbtech.jdbc.exceptions.DatabaseException: [-7055] (at 44):
+Column(s) already indexed:EFTACCT_PMETH
+SQL Exception while executing the following:
+CREATE INDEX EFTACCT_PADDR ON EFT_ACCOUNT (CONTACT_MECH_ID)
+Error was: com.sap.dbtech.jdbc.exceptions.DatabaseException: [-7055] (at 44):
+Column(s) already indexed:EFTACCT_PADDR</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-08-11 00:47:16</issue_when>
+ <thetext>I&apos;ve created a new issue (OFBIZ-1) for this in Jira; in it you will find a lot
+of details.
+</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:03:00</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-08-11 00:47:16</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-08-11 00:47:16</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>REMIND</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>52</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040308121509</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-04 03:14:08</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Billing accounts selectable by users during order entry are not correctly filtered out.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-04 03:14:08</issue_when>
+ <thetext>Billing accounts selectable by users as payment methods during order entry are
+not correctly filtered out: removed billing accounts are also shown (i.e.
+billing accounts with thru date &lt; now).</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 12:15:09</issue_when>
+ <thetext>Billing accounts are now filtered by date so expired accounts no longer show on order manager order
+entry and the ecommerce checkout pages</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:15:09</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:15:09</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 12:15:09</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>53</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040528010450</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-05 06:01:05</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In Shipment: it&apos;s possible to issue 0 quantities from AddItemsFormOrder page.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-05 06:01:05</issue_when>
+ <thetext>In Shipment: it&apos;s possible to issue 0 quantities from AddItemsFormOrder page
+(an ItemIssuance record is created with 0 quantity).
+I think this should be avoided by submitting only quantities &gt; 0.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-28 01:04:50</issue_when>
+ <thetext>Now checks to see if quantity is empty or 0 when issuing OIIRs to the shipment.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:03:13</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-28 01:04:50</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-28 01:04:50</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>54</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040630124239</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-05 06:20:02</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In Shipment: if you enter a non numeric value (such as null quantity) in the issue field the program returns a bad error.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-05 06:20:02</issue_when>
+ <thetext>In Shipment: if you enter a non numeric value (such as null quantity) in the
+issue field the program returns a bad error.
+See also issue#53.
+I&apos;m running SapDB and after this error I need to restart OFBiz because in every
+page I receive SQL errors like the following:
+
+Target exception: org.ofbiz.entity.GenericDataSourceException: SQL Exception
+occurred on commit (Cannot commit a transactional connection: See JDBC 2.0
+Optional Package Specification section 7.1 (p25))
+BSF info: ..\ofbiz\components\content\webapp\content\WEB-
+INF\actions\includes\envsetup.bsh at line: 0 column: 0)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-06-30 12:42:39</issue_when>
+ <thetext>Applied patch which fixes a bug in the service multi event handler</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:03:23</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 12:42:39</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 12:42:39</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>55</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040323221851</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-05 06:25:34</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In shipment, it&apos;s possible to issue to shipment items with negative reservations (atp &lt; 0); as a consequence of this, also the inventory items&apos; quantity on hand can be negative.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-05 06:25:34</issue_when>
+ <thetext>I&apos;ve noticed that, in shipment, it&apos;s possible to issue to shipment items with
+negative reservations (atp &lt; 0); as a consequence of this, also the inventory
+items&apos; quantity on hand can be negative.
+In my opinion, in this situation at least a warning message should be
+provided.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-23 22:18:51</issue_when>
+ <thetext>In &quot;Order Items&quot; page a new column has been added that tells users if they are
+issuing negative reservations and the default issuance value is also
+decremented by this quantity.
+However is still possible to override this value and force an issuance for a
+negative reservation.
+
+</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:03:32</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-23 22:18:51</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-23 22:18:51</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>56</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>WONTFIX</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>PC</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040308173638</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>vivalinux</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-08 14:07:32</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc>http://&lt;ofbiz_root_url&gt;/partymgr/control/findparty</issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Selecting &quot;Show All Records&quot; displays all names as &quot;(Not selected)&quot;</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>vivalinux</who>
+ <issue_when>2004-03-08 14:07:32</issue_when>
+ <thetext>The findparty.bsh constructs a dynamic view tailored to the search fields
+submited by the lookupparty form. Since selecting all does not give a hint about
+which fields the client is interested in, the findparty.bsh fails to include any
+of the name (firstName, lastName, groupName) fields.
+
+The can be corrected with the patch that follows or handling the select all
+records as yet another case. I think, I&apos;ll side with simplicity, and sacrify
+efficiency ....
+
+Hope this helps.
+
+
+Index: components/party/webapp/partymgr/WEB-INF/actions/party/findparty.bsh
+===================================================================
+RCS file:
+/cvs/ofbiz/components/party/webapp/partymgr/WEB-INF/actions/party/findparty.bsh,v
+retrieving revision 1.13
+diff -u -r1.13 findparty.bsh
+--- components/party/webapp/partymgr/WEB-INF/actions/party/findparty.bsh 27 Jan
+2004 19:44:36 -0000 1.13
++++ components/party/webapp/partymgr/WEB-INF/actions/party/findparty.bsh 8 Mar
+2004 22:06:24 -0000
+@@ -100,8 +100,15 @@
+
+ // default view settings
+ dynamicView.addMemberEntity(&quot;PT&quot;, &quot;Party&quot;);
++ dynamicView.addMemberEntity(&quot;PG&quot;, &quot;PartyGroup&quot;);
++ dynamicView.addMemberEntity(&quot;PP&quot;, &quot;Person&quot;);
+ dynamicView.addAlias(&quot;PT&quot;, &quot;partyId&quot;);
+ dynamicView.addAlias(&quot;PT&quot;, &quot;partyTypeId&quot;);
++ dynamicView.addAlias(&quot;PG&quot;, &quot;groupName&quot;);
++ dynamicView.addAlias(&quot;PP&quot;, &quot;firstName&quot;);
++ dynamicView.addAlias(&quot;PP&quot;, &quot;lastName&quot;);
++ dynamicView.addViewLink(&quot;PT&quot;,&quot;PG&quot;,true,UtilMisc.toList(new
+ModelKeyMap(&quot;partyId&quot;, &quot;partyId&quot;)));
++ dynamicView.addViewLink(&quot;PT&quot;,&quot;PP&quot;,true,UtilMisc.toList(new
+ModelKeyMap(&quot;partyId&quot;, &quot;partyId&quot;)));
+ dynamicView.addRelation(&quot;one-nofk&quot;, &quot;&quot;, &quot;PartyType&quot;,
+ModelKeyMap.makeKeyMapList(&quot;partyTypeId&quot;));
+ dynamicView.addRelation(&quot;many&quot;, &quot;&quot;, &quot;UserLogin&quot;,
+ModelKeyMap.makeKeyMapList(&quot;partyId&quot;));
+
+@@ -143,11 +150,6 @@
+ if (groupName != null &amp;&amp; groupName.length() &gt; 0) {
+ paramList = paramList + &quot;&amp;groupName=&quot; + groupName;
+
+- // modify the dynamic view
+- dynamicView.addMemberEntity(&quot;PG&quot;, &quot;PartyGroup&quot;);
+- dynamicView.addAlias(&quot;PG&quot;, &quot;groupName&quot;);
+- dynamicView.addViewLink(&quot;PT&quot;, &quot;PG&quot;, Boolean.FALSE,
+ModelKeyMap.makeKeyMapList(&quot;partyId&quot;));
+-
+ // add the expr
+ andExprs.add(new EntityExpr(&quot;groupName&quot;, true, EntityOperator.LIKE,
+&quot;%&quot;+groupName+&quot;%&quot;, true));
+ }
+@@ -160,14 +162,6 @@
+ firstName = request.getParameter(&quot;firstName&quot;);
+ lastName = request.getParameter(&quot;lastName&quot;);
+
+- // modify the dynamic view
+- if ((firstName != null &amp;&amp; firstName.length() &gt; 0) || (lastName != null &amp;&amp;
+lastName.length() &gt; 0)) {
+- dynamicView.addMemberEntity(&quot;PE&quot;, &quot;Person&quot;);
+- dynamicView.addAlias(&quot;PE&quot;, &quot;firstName&quot;);
+- dynamicView.addAlias(&quot;PE&quot;, &quot;lastName&quot;);
+- dynamicView.addViewLink(&quot;PT&quot;, &quot;PE&quot;, Boolean.FALSE,
+ModelKeyMap.makeKeyMapList(&quot;partyId&quot;));
+- }
+-
+ // filter on firstName
+ if (firstName != null &amp;&amp; firstName.length() &gt; 0) {
+ paramList = paramList + &quot;&amp;firstName=&quot; + firstName;
+@@ -319,6 +313,12 @@
+ List orderBy = new ArrayList();
+ fieldsToSelect.add(&quot;partyId&quot;);
+ fieldsToSelect.add(&quot;partyTypeId&quot;);
++ fieldsToSelect.add(&quot;firstName&quot;);
++ fieldsToSelect.add(&quot;lastName&quot;);
++ fieldsToSelect.add(&quot;groupName&quot;);
++ orderBy.add(&quot;-partyTypeId&quot;);
++ orderBy.add(&quot;lastName&quot;);
++ orderBy.add(&quot;groupName&quot;);
+
+ // UserLogin
+ if (userLoginId != null &amp;&amp; userLoginId.length() &gt; 0) {
+@@ -327,14 +327,11 @@
+
+ // Person
+ if ((firstName != null &amp;&amp; firstName.length() &gt; 0) || (lastName != null
+&amp;&amp; lastName.length() &gt; 0)) {
+- fieldsToSelect.add(&quot;firstName&quot;);
+- fieldsToSelect.add(&quot;lastName&quot;);
+ orderBy.add(&quot;lastName&quot;);
+ orderBy.add(&quot;firstName&quot;);
+ }
+ // PartyGroup
+ if (groupName != null &amp;&amp; groupName.length() &gt; 0) {
+- fieldsToSelect.add(&quot;groupName&quot;);
+ orderBy.add(&quot;groupName&quot;);
+ }
+ // RoleType
+Index: components/party/webapp/partymgr/party/findparty.ftl
+===================================================================
+RCS file: /cvs/ofbiz/components/party/webapp/partymgr/party/findparty.ftl,v
+retrieving revision 1.10
+diff -u -r1.10 findparty.ftl
+--- components/party/webapp/partymgr/party/findparty.ftl 1 Mar 2004 14:43:27
+-0000 1.10
++++ components/party/webapp/partymgr/party/findparty.ftl 8 Mar 2004 22:06:24 -0000
+@@ -212,13 +212,12 @@
+ &lt;/table&gt;
+ &lt;input type=&quot;image&quot; src=&quot;/images/spacer.gif&quot;
+onClick=&quot;javascript:document.lookupparty.submit();&quot;&gt;
+ &lt;/form&gt;
+-&lt;#if requestParameters.hideFields?default(&quot;N&quot;) != &quot;Y&quot;&gt;
+ &lt;script language=&quot;JavaScript&quot;&gt;
+ &lt;!--//
+ document.lookupparty.partyId.focus();
+ //--&gt;
+ &lt;/script&gt;
+-&lt;/#if&gt;
++
+ &lt;#if partyList?exists&gt;
+ &lt;br&gt;
+ &lt;table border=0 width=&apos;100%&apos; cellspacing=&apos;0&apos; cellpadding=&apos;0&apos;
+class=&apos;boxoutside&apos;&gt;
+@@ -292,21 +291,13 @@
+ &lt;/td&gt;
+ &lt;td&gt;
+ &lt;div class=&quot;tabletext&quot;&gt;
+- &lt;#if partyRow.containsKey(&quot;lastName&quot;)&gt;
+ &lt;#if partyRow.lastName?has_content&gt;
+ ${partyRow.lastName}&lt;#if
+partyRow.firstName?has_content&gt;, ${partyRow.firstName}&lt;/#if&gt;
+- &lt;#else&gt;
+- (No Name Found)
+- &lt;/#if&gt;
+- &lt;#elseif partyRow.containsKey(&quot;groupName&quot;)&gt;
+- &lt;#if partyRow.groupName?has_content&gt;
++ &lt;#elseif partyRow.groupName?has_content&gt;
+ ${partyRow.groupName}
+ &lt;#else&gt;
+- (No Name Found)
++ (Not Selected)
+ &lt;/#if&gt;
+- &lt;#else&gt;
+- (Not Selected)
+- &lt;/#if&gt;
+ &lt;/td&gt;
+ &lt;#if extInfo?default(&quot;&quot;) == &quot;P&quot;&gt;
+ &lt;td&gt;&lt;div
+class=&quot;tabletext&quot;&gt;${partyRow.postalCode?if_exists}&lt;/div&gt;&lt;/td&gt;</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:36:38</issue_when>
+ <thetext>This page has been changed from using the left joins in the dynamic view. Using left joins performs too
+poorly for actual use. This patch has been rejected; a new task will be opened for fixing the problem of
+the name not being displayed.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:36:38</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:36:38</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>WONTFIX</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>57</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040308174641</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>ajzeneski</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-08 17:36:18</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Find Party - Show all does not show name</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:36:18</issue_when>
+ <thetext>The name is not displayed when selecting show all in the party manager.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-03-08 17:46:41</issue_when>
+ <thetext>reassigned</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-08 17:46:41</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>58</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040308185722</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>vivalinux</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-08 18:57:22</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Inherited hidden fields overide child fields when they have use-when</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>vivalinux</who>
+ <issue_when>2004-03-08 18:57:22</issue_when>
+ <thetext>In working with inherited forms I noticed that hidden fields are hard
+to override if the overriding field has a use-when attribute:
+
+ Since the HtmlFormRenderer gives precedence to hidden fields, and new
+fields with &quot;use-when&quot; are only placed in front of existing fields
+but not merged with, the resulting behavior is that hidden fields of
+parent forms always get rendered even when the use-when condition is
+true. This causes the hidden field to take precedence over the user
+input when the form is submitted.
+
+ Here is a posible solution:
+
+Index: components/content/src/org/ofbiz/content/widget/form/ModelForm.java
+===================================================================
+RCS file:
+/usr/local/cvsrepos/newriverbiz/components/content/src/org/ofbiz/content/widget/form/ModelForm.java,v
+retrieving revision 1.1.1.4
+diff -u -r1.1.1.4 ModelForm.java
+--- components/content/src/org/ofbiz/content/widget/form/ModelForm.java
+2004/01/08 14:19:55 1.1.1.4
++++ components/content/src/org/ofbiz/content/widget/form/ModelForm.java
+2004/01/29 20:23:20
+@@ -277,15 +277,25 @@
+ public ModelFormField addUpdateField(ModelFormField modelFormField) {
+ if (!modelFormField.isUseWhenEmpty()) {
+ // is a conditional field, add to the List but don&apos;t worry about
+the Map
+- //for adding to list, see if there is another field with that name
+in the list and if so, put it before that one
++ //for adding to list, see if there is another field with that name
++ //in the list and if so, put it before that one
+ boolean inserted = false;
+ for (int i = 0; i &lt; this.fieldList.size(); i++) {
+ ModelFormField curField = (ModelFormField) this.fieldList.get(i);
++ // BUG FIX: parent hidden fields are left and rendered even when they
++ // are overriden with fields that have a use-when
+ if (curField.getName() != null &amp;&amp;
+curField.getName().equals(modelFormField.getName())) {
+- this.fieldList.add(i, modelFormField);
+- inserted = true;
+- break;
++ if ((curField.getFieldInfo().getFieldType() !=
+ModelFormField.FieldInfo.HIDDEN) &amp;&amp;
++ (curField.getFieldInfo().getFieldType() != ModelFormField.FieldInfo.IGNORED)) {
++ this.fieldList.add(i, modelFormField);
++ inserted = true;
++ break;
++ } else {
++ curField.mergeOverrideModelFormField(modelFormField);
++ break;
++ }
+ }
++ //End of BUG fix
+ }
+ if (!inserted) {
+ this.fieldList.add(modelFormField);</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>59</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P1</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040318120354</delta_ts>
+ <subcomponent>Workflow</subcomponent>
+ <reporter>mbennani</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-09 06:47:17</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Serious Problem in Sub-flow Implementation: in-Memory Requester Used!!</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>mbennani</who>
+ <issue_when>2004-03-09 06:47:17</issue_when>
+ <thetext>I am running ofbiz almost v.3 :-) (image from late 2003 from cvs).
+(subflow implementation did not change since 1.2 anyways, I believe)
+
+Quick Description:
+------------------
+Subflows are using the in-memory requester object which
+does not persist over server re-starts. This is serious one guys.
+
+More Description (Scenario):
+---------------------------
+I have a main process with 3 steps(step1,step2-subflow,step3). A subflow
+process being the second step. This second step calls another process that I
+call sub. sub has 2 simple steps (substep1,substep2).
+
+Now, in normal time (i.e no server restart), it all works fine and my main
+process runs fine, calls the subflow, subflow runs, the call returns and my
+step3 of the main process runs successfully and main completes fine.
+
+The problem arises when say I run step 1 of main process, subflow gets
+initiated, substep1 is executed, and before substep2 is executed, I stop the
+server (faking a server problem..., connection lost...whatever).
+When I restart the server, the subflow resumes at substep2 which executes fine,
+and eventually completes the subflow process. But, step-subflow activity in the
+workeffort table still shows WF_RUNNING. Therefore, my main process is hanging
+there and will never move along. The waitForResult() is not executed anymore
+after server restart.
+This is happening in WfActivitySubFlowImplementation on runService.
+
+Even More Details, code wise, if you want to look at it:
+-------------------------------------------------------
+In a normal scenario (no server stopped), the runService of
+WfActivitySubFlowImplementation eventually calls the runSync in WorkflowEngine
+and then waitForResult. I put a system out message in the waiter class and I
+can see my message being displayed in the console forever (&quot;waiting...&quot;), until
+the subflow process finishes. And that&apos;s ok, that&apos;s what we want. When the
+subflow process finishes, the call is returned back to the runService in
+WfActivitySubFlowImplementation() and the setComplete is called, which changes
+the status of my step2-subflow activity in the main process to WF_COMPLETED to
+advance the main process. It also calls setResults() to propagate the results
+from the subflow up to the main process.
+
+BUT, now if I stop my server during that wait, and restart it the call never
+reachs the setComplete nor the setResults, making therefore my main process
+unusable anymore.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:03:54</when>
+ <field_name>op_sys</field_name>
+ <field_desc>OS/Version</field_desc>
+ <oldvalue>Windows 2000</oldvalue>
+ <newvalue>All</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:03:54</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>60</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040707152609</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 07:09:04</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Replace simplistic caching with complex reverse dependency resolver</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:09:04</issue_when>
+ <thetext>This patch removes all simple caching from GenericDelegator, and replaces
+it with a stand-alone class, that handles all entity cache management. It
+uses new features in the entity model, that keeps track of view entities
+that are referenced by regular entities. As entities are updated, all
+cached lists of views or condition caches are cleared.
+
+With this patch applied, view entities can be cached, without worry that
+they will become stale. Which then allows very complex views to be
+created, that emulate complex code patterns, while still allowing for
+caching. This can speed up code tremendously.
+
+Additionally, since cache clearing now works, it almost always makes more
+sense to use the cache variation of the methods.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:14:24</issue_when>
+ <thetext>Created an attachment (id=16)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 15:44:46</issue_when>
+ <thetext>This patch is on hold, until some other patches are committed. Some of them
+need to have bugs filed, which I am working on. Plus, this patch needs to be
+updated to the latest code base(not a big task, done locally).</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-07 15:26:09</issue_when>
+ <thetext>This is now in cvs.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>16</attachid>
+ <date>2004-03-09 07:14:24</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>EntityCache.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/16/EntityCache.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:14:24</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=16)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 15:44:46</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>STARTED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:01</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-07-07 15:26:09</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>STARTED</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-07-07 15:26:09</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>61</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422222023</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 07:18:26</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allow for easier extension of this class.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:18:26</issue_when>
+ <thetext>This patch makes a protected writeValues() method, which allows sub-classes
+to redirect the output to other places, as needed.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:18:49</issue_when>
+ <thetext>Created an attachment (id=17)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-22 22:20:23</issue_when>
+ <thetext>Applied the patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>17</attachid>
+ <date>2004-03-09 07:18:49</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>EntitySaxReader-extension.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/17/EntitySaxReader-extension.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:18:49</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=17)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:20:23</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:20:23</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>62</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422223418</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 07:34:07</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allow for UPPER() and LOWER() sorting</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:34:07</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:34:26</issue_when>
+ <thetext>Created an attachment (id=18)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-22 22:34:18</issue_when>
+ <thetext>Applied patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>18</attachid>
+ <date>2004-03-09 07:34:26</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>EntityUtil-UPPER_LOWER.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/18/EntityUtil-UPPER_LOWER.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:34:26</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=18)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:34:18</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:34:18</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>63</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429160209</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 07:36:19</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add support for turning off schemas completely</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:36:19</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:36:42</issue_when>
+ <thetext>Created an attachment (id=19)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:02:09</issue_when>
+ <thetext>Applied this patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>19</attachid>
+ <date>2004-03-09 07:36:42</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>use-schemas.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/19/use-schemas.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:36:42</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=19)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:02:09</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:02:09</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>64</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422222810</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 07:43:55</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Make the code look like the rest of the file.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:43:55</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:44:21</issue_when>
+ <thetext>Created an attachment (id=20)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-22 22:28:10</issue_when>
+ <thetext>Applied patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>20</attachid>
+ <date>2004-03-09 07:44:21</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>SqlJdbcUtil-Cast.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/20/SqlJdbcUtil-Cast.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:44:21</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=20)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:28:10</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:28:10</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>65</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429163146</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 07:46:14</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add java.util.Date support.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:46:14</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:46:39</issue_when>
+ <thetext>Created an attachment (id=21)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:31:46</issue_when>
+ <thetext>Applied the patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>21</attachid>
+ <date>2004-03-09 07:46:39</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>SqlJdbcUtil-Java_Util_Date.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/21/SqlJdbcUtil-Java_Util_Date.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:46:39</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=21)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:03</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:31:45</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:31:45</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>66</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422221943</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 07:47:46</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Use UtilValidate.isNotEmpty.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:47:46</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:48:06</issue_when>
+ <thetext>Created an attachment (id=22)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-22 22:19:43</issue_when>
+ <thetext>Applied patch, which uses UtilValidate.isNotEmpty in SqlJdbcUtil.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>22</attachid>
+ <date>2004-03-09 07:48:06</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>SqlJdbcUtil-UtilValidate.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/22/SqlJdbcUtil-UtilValidate.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:48:06</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=22)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:19:43</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:19:43</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>67</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429161604</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 07:49:20</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add support for &lt;constraint&gt; on relations and views.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:49:20</issue_when>
+ <thetext>When defining a view or relation, you can now constrain the returned
+values to those that match an EntityCondition. This is really helpful
+for complex views.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:49:42</issue_when>
+ <thetext>Created an attachment (id=23)
+The patch
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>23</attachid>
+ <date>2004-03-09 07:49:42</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>model-constraint.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/23/model-constraint.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:49:42</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=23)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:04</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>68</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040423074926</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 07:51:20</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Use a NumberFormat for casting number objects to strings.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:51:20</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:51:40</issue_when>
+ <thetext>Created an attachment (id=24)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-23 07:49:26</issue_when>
+ <thetext>Applied patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>24</attachid>
+ <date>2004-03-09 07:51:40</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>GenericEntity-NumberFormat.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/24/GenericEntity-NumberFormat.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:51:40</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=24)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-23 07:49:26</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-23 07:49:26</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>69</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040423075223</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 07:52:20</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add addToXmlElement method</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:52:20</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:52:42</issue_when>
+ <thetext>Created an attachment (id=25)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-23 07:52:23</issue_when>
+ <thetext>Applied patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>25</attachid>
+ <date>2004-03-09 07:52:42</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>GenericEntity-addToXmlElement.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/25/GenericEntity-addToXmlElement.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:52:42</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=25)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-23 07:52:23</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-23 07:52:23</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>70</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422221512</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-09 07:54:40</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Fix modelEntity dereferencing</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:54:40</issue_when>
+ <thetext>When GenericEntities have been deserialized, modelEntity will be null.
+getModelEntity() should be called, to repopulate it.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:54:57</issue_when>
+ <thetext>Created an attachment (id=26)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-22 22:15:12</issue_when>
+ <thetext>Applied patch, plus fixed it in a few other areas.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>26</attachid>
+ <date>2004-03-09 07:54:57</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>GenericEntity-getModelEntity.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/26/GenericEntity-getModelEntity.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:54:57</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=26)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:15:12</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:15:12</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>71</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501214447</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 07:56:46</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Factor out the code</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:56:46</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 07:57:40</issue_when>
+ <thetext>Created an attachment (id=27)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:51</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 06:06:43</issue_when>
+ <thetext>Not adding this patch, breaks the Server Stats Since Start page in WebTools, and not totally sure the
+cleanup is worth it yet.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-05-01 21:44:47</issue_when>
+ <thetext>I&apos;ll fix that page then, and submit a revised patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>27</attachid>
+ <date>2004-03-09 07:57:40</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>ServerHitBin-factor.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/27/ServerHitBin-factor.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 07:57:40</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=27)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:02</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:51</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:07:05</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P2</oldvalue>
+ <newvalue>P4</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>72</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422223139</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 08:04:05</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add a matches(condition) helper method.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:04:05</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:04:31</issue_when>
+ <thetext>Created an attachment (id=28)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-22 22:31:39</issue_when>
+ <thetext>Applied patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>28</attachid>
+ <date>2004-03-09 08:04:31</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>GenericEntity-matches-condition.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/28/GenericEntity-matches-condition.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:04:31</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=28)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:31:39</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:31:39</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>73</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422221835</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-09 08:05:30</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Fix deserializing of these objects.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:05:30</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:05:51</issue_when>
+ <thetext>Created an attachment (id=29)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-22 22:18:35</issue_when>
+ <thetext>Applied patch, which set delegatorName to &quot;default&quot; when it is null.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>29</attachid>
+ <date>2004-03-09 08:05:50</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>GenericDelegator-fix-serialization.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/29/GenericDelegator-fix-serialization.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:05:51</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=29)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:18:35</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:18:35</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>74</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P2</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429200642</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 08:08:00</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Fix all fetchers of shopping cart to use a static method</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:08:00</issue_when>
+ <thetext>This patch fixes all code that fetches the ShoppingCart from the session,
+to use a static method instead. It also adds the beginning of named
+ShoppingCart support.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:08:22</issue_when>
+ <thetext>Created an attachment (id=30)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:51</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 20:05:04</issue_when>
+ <thetext>This patch depends on EntityCache, which isn&apos;t ready for inclussion yet,
+reducing priority.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 20:06:42</issue_when>
+ <thetext>Oops, modified wrong issue.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>30</attachid>
+ <date>2004-03-09 08:08:22</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>ShoppingCart-getShoppingCart.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/30/ShoppingCart-getShoppingCart.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:08:22</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=30)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:03</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:51</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 20:05:04</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P2</oldvalue>
+ <newvalue>P3</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 20:06:41</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>75</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429171641</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 08:09:21</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allow code to detect whether a cacheline has expired.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:09:21</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:09:41</issue_when>
+ <thetext>Created an attachment (id=31)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:57:47</issue_when>
+ <thetext>Changing priority to P2, as I need these applied before I can commit my entity
+cache work.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-29 17:16:41</issue_when>
+ <thetext>Now in CVS, thanks Adam.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>31</attachid>
+ <date>2004-03-09 08:09:41</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-hasExpired.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/31/UtilCache-hasExpired.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:09:41</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=31)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:04</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:57:47</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:16:41</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:16:41</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>76</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429171643</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 08:10:31</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allow code to get the values stored in the cache.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:10:31</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:10:58</issue_when>
+ <thetext>Created an attachment (id=32)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:57:47</issue_when>
+ <thetext>Changing priority to P2, as I need these applied before I can commit my entity
+cache work.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-29 17:16:43</issue_when>
+ <thetext>Now in CVS, thanks Adam.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>32</attachid>
+ <date>2004-03-09 08:10:58</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-getCacheLineValues.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/32/UtilCache-getCacheLineValues.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:10:58</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=32)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:05</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:57:47</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:16:43</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:16:43</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>77</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429171648</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 08:11:52</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allow registering of listeners for the various events on caches.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:11:52</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:12:13</issue_when>
+ <thetext>Created an attachment (id=33)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:57:48</issue_when>
+ <thetext>Changing priority to P2, as I need these applied before I can commit my entity
+cache work.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-29 17:16:48</issue_when>
+ <thetext>Now in CVS, thanks Adam.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>33</attachid>
+ <date>2004-03-09 08:12:12</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-listeners.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/33/UtilCache-listeners.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:12:13</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=33)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:05</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:57:48</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:16:48</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:16:48</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>78</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040423080723</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-09 08:19:59</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Some additional methods to manipulate the embedded cache.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:19:59</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:20:20</issue_when>
+ <thetext>Created an attachment (id=34)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-23 08:07:23</issue_when>
+ <thetext>Add some more methods to GenericValue to manipulate the cache.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>34</attachid>
+ <date>2004-03-09 08:20:20</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>GenericValue-EmbeddedCache.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/34/GenericValue-EmbeddedCache.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:20:20</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=34)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-23 08:07:23</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-23 08:07:23</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>79</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429200727</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 08:21:27</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>methods to fetch the list of available catalogs.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:21:27</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:21:46</issue_when>
+ <thetext>Created an attachment (id=35)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:52</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 20:07:27</issue_when>
+ <thetext>This patch depends on EntityCache, which isn&apos;t ready for inclussion yet,
+reducing priority.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>35</attachid>
+ <date>2004-03-09 08:21:46</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>CatalogWorker-getCatalogsAvailable.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/35/CatalogWorker-getCatalogsAvailable.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:21:46</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=35)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:05</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:52</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 20:07:27</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P2</oldvalue>
+ <newvalue>P3</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>80</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422222535</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-09 08:22:53</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Create a separate makeIndexName helper method.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:22:53</issue_when>
+ <thetext>This patch also truncates the index name, based on the clipping value.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:23:14</issue_when>
+ <thetext>Created an attachment (id=36)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-22 22:25:35</issue_when>
+ <thetext>Applied patch.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>36</attachid>
+ <date>2004-03-09 08:23:14</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>DatabaseUtil-makeIndexName.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/36/DatabaseUtil-makeIndexName.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:23:14</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=36)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:25:35</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-22 22:25:35</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>81</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429172408</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 08:23:52</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add support for writing elements.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:23:52</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:24:13</issue_when>
+ <thetext>Created an attachment (id=37)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:57:47</issue_when>
+ <thetext>Changing priority to P2, as I need these applied before I can commit my entity
+cache work.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-29 17:24:08</issue_when>
+ <thetext>Now in CVS, thanks Adam.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>37</attachid>
+ <date>2004-03-09 08:24:12</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilXml-writeElement.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/37/UtilXml-writeElement.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:24:13</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=37)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:03</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:57:47</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:24:08</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:24:08</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>82</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P2</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429195752</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 08:25:06</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Services/etc for manipulating PartyAttributes.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:25:06</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-09 08:25:27</issue_when>
+ <thetext>Created an attachment (id=38)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:52</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>38</attachid>
+ <date>2004-03-09 08:25:27</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>PartyAttributes.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/38/PartyAttributes.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-09 08:25:27</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=38)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:16:04</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>FEATURE</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:52</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>83</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P5</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040309095844</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-09 09:58:44</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Problems displaying the Euro symbol in order confirmation by email with MS Outlook</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-09 09:58:44</issue_when>
+ <thetext>Problems displaying the Euro symbol in order confirmation by email with MS
+Outlook: instead of the beautyful Euro symbol you see a &apos;?&apos;.
+Ok, maybe I should create an issue to the Microsoft issue tracker... however
+I&apos;ve reported this for two reasons:
+1) other users reported this some time ago in the mailing lists
+2) maybe, in general, for the currency symbols in ftl templates we should use
+the html entity references (i.e. &amp;euro; for the Euro symbol): this will solve
+all the display problems with virtually any client software.</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>84</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040309101202</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-09 10:12:02</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In shipment, it&apos;s possible to issue to shipment items with negative reservations (atp &lt; 0); as a consequence of this, also the inventory items&apos; quantity on hand can be negative.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-09 10:12:02</issue_when>
+ <thetext>In shipment, it&apos;s possible to issue to shipment items with negative
+reservations (atp &lt; 0); as a consequence of this, also the inventory items&apos;
+quantity on hand can be negative.
+In fact, when the issuance is performed, the (negative) reservation is deleted
+and a new issuance is created and the inventory&apos;s qoh is decremented.
+In my opinion, in this situation a warning message should be provided.
+Also, David Jones has suggested to create a report of all negative QOH
+InventoryItems and add a link for each one to get a physical inventory variance
+started.</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>85</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040730212116</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-03-11 08:14:35</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>The showvisits page in the Party Manager is very slow when there are many visits</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-11 08:14:35</issue_when>
+ <thetext>The showvisits page is not coded to efficiently display a subset of the visits when there are many active.
+When there are tens of thousands the current code doesn&apos;t work very efficiently.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 21:21:16</issue_when>
+ <thetext>The code for visit display utilized the entity list iterator and pulls a subset for each page. The query
+fields are indexed (as of now) so depending on the JDBC driver being used this should be quite efficient.
+If you experience further problems, send more information to the DEV list.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:04:04</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 21:21:16</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 21:21:16</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>86</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040312164734</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-12 16:45:26</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Error Message (esp Map) Improvements from Quake Wang</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-12 16:45:26</issue_when>
+ <thetext>A description from an email from Quake:
+
+================================
+David,
+ The attachment is my patch. The main changes are:
+
+1. Now the event and the service invoke will use the same message fields in SimpleMethod.
+2. Add the errorMessageMap and successMessageMap for the message handling
+
+ I only change the envsetup.bsh and errormsg.ftl in the ecommerce component, please use the
+ecommerce to review the backward compatiblity.
+
+Regards
+Quake
+=============================</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-12 16:47:34</issue_when>
+ <thetext>Created an attachment (id=39)
+Error Message patch from Quake Wang
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>39</attachid>
+ <date>2004-03-12 16:47:34</date>
+ <desc>Error Message patch from Quake Wang</desc>
+ <ispatch>1</ispatch>
+ <filename>quake.errormessages.patch</filename>
+ <submitter_id>3</submitter_id>
+ <submitting_username>jonesde</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/39/quake.errormessages.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-12 16:47:34</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=39)
+Error Message patch from Quake Wang
+</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>87</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040312165745</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-12 16:56:52</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>bsf.jar in base is old</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-12 16:56:52</issue_when>
+ <thetext>bsf is no longer part of IBM. Instead, it has moved to jakarta.
+
+Attached patch changes imports, etc. It can&apos;t change the bsf.jar in
+base/lib/scripting/, however.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-03-12 16:57:45</issue_when>
+ <thetext>Created an attachment (id=40)
+The patch.
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>40</attachid>
+ <date>2004-03-12 16:57:45</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>IBM-Jakarta-BSF.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/40/IBM-Jakarta-BSF.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-03-12 16:57:45</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=40)
+The patch.
+</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>88</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040312165737</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-12 16:57:37</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Promotion/other adjustments not as expected when cancelling order items</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-12 16:57:37</issue_when>
+ <thetext>When order items are cancelled some order level adjustments are not changed, like order level
+promotion adjustments. Because of this order totals can easily become negative. The question is what
+to do about it?
+
+Andy wrote this at one point in an email:
+
+============================
+I was aware of this; the only order level adjustments which are currently re-calculated are shipping and
+tax, order level promotions are not done at this time so we will need to add this in. In order to do this
+promotion evaluation will need to be able to be done without a shopping cart.
+============================
+
+I&apos;m not sure I totally agree with this, I think short of that it would still be good to at least pro-rate these
+order adjustments like we do with tax and shipping.
+
+Or would it be better on any order change to just cancel the order and create a new one with full re-
+calculations, including promotions, tax, shipping, etc, etc? If that is done should we apply promotions,
+etc as if it was the original order date, or using today&apos;s date? (could be a big difference based on
+promotions that come and go over time)</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>89</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040312171315</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-12 17:10:18</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In product detail show variant prices (from Brian Johnson)</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-12 17:10:18</issue_when>
+ <thetext>Here is a description from an email from Brian Johnson:
+
+===================================
+I&apos;ve changed productdetail to better handle variants with different prices. When you first bring-up the
+page it says &quot;make selections&quot;, then when you select the features from the drop-downs it&apos;ll show the
+price for the product with those features.
+--
+Brian Johnson
+===================================</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-12 17:13:15</issue_when>
+ <thetext>Created an attachment (id=41)
+Show prices for variants along with drop down, patch from Brian Johnson
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>41</attachid>
+ <date>2004-03-12 17:13:15</date>
+ <desc>Show prices for variants along with drop down, patch from Brian Johnson</desc>
+ <ispatch>1</ispatch>
+ <filename>productdetail-variantprices.patch</filename>
+ <submitter_id>3</submitter_id>
+ <submitting_username>jonesde</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/41/productdetail-variantprices.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-12 17:11:11</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>DEFECT</oldvalue>
+ <newvalue>PATCH</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-12 17:13:15</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=41)
+Show prices for variants along with drop down, patch from Brian Johnson
+</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>90</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040312172159</delta_ts>
+ <subcomponent>E-Commerce</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-12 17:21:59</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Web/order/etc marketing reports like Core Metrics</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-12 17:21:59</issue_when>
+ <thetext>The feature here is to create a standard set of reports commonly used to keep tabs on a web content
+and/or ecommerce site. These reports would be similar to what a company like Core Metrics offers.
+
+Would include reports for a given time period such as for things like hits, visits/sessions, orders,
+tracking codes, percent of customers that order, orders per customer, pages/products/etc viewed,
+searches done, referring sites &amp; search strings, etc, etc, etc.</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>91</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040315011245</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-15 01:12:45</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Shipment: potential problem when issuing negative reservations (quantityNotAvailable could be lost)</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-15 01:12:45</issue_when>
+ <thetext>This is a potential problem when you issue negative reservation to a shipment.
+Here is the scenario:
+
+1) inventory item 9000 for product WG-1111 with atp/qoh = 10/10
+2) two orders are received for WG-1111: the first for 8 items, the second
+for 5 items
+3) two reservations are made: the first for 8 items and the second for 5
+items but with quantityNotAvailable = 3
+4) the inventory item 9000 is now: atp/qoh = -3/10
+5) only the second order is issued to shipment: the reservation record is
+deleted and the qoh is decremented
+6) the inventory item 9000 is now: atp/qoh = -3/5 but the reservation for
+the first order (for quantity = 8) has quantityNotAvailable = 0 (ERROR: it
+should be 3)
+
+A possible patch: if we issue a negative reservation we should try to assign
+the quantityNotAvailable to another reservation in the same inventory item.
+
+In order to do this, David Jones has proposed to do a re-reservation whenever a
+reservation is issued to a shipment, considering that (like in this scenario)
+shipments may occur in a different order than reservations.
+
+In fact, when new inventory is received a re-reservation is already done for
+all OIIR that are associated to inventory items (of the same product) that have
+negative ATP.
+In a similar way, when we issue a OIIR, we could do a re-reservation for all
+the OIIR associated to the inventory item.</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>92</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20040416115022</delta_ts>
+ <subcomponent>E-Commerce</subcomponent>
+ <reporter>holivier</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-16 06:35:41</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Simple Update for localization</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 06:35:41</issue_when>
+ <thetext>In the ecommerce component
+2 UiLabels change (the # is now in the label)
+and some french UiLabel correction</thetext>
+ </long_desc>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 06:38:00</issue_when>
+ <thetext>Created an attachment (id=42)
+the Ecommerce UiLabel patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-16 11:50:22</issue_when>
+ <thetext>Patch is in CVS. Thanks for doing these Olivier.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>42</attachid>
+ <date>2004-03-16 06:38:00</date>
+ <desc>the Ecommerce UiLabel patch</desc>
+ <ispatch>1</ispatch>
+ <filename>EcommerceUiLabel.update.patch</filename>
+ <submitter_id>165</submitter_id>
+ <submitting_username>holivier</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/42/EcommerceUiLabel.update.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>holivier</user>
+ <when>2004-03-16 06:38:00</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=42)
+the Ecommerce UiLabel patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:04:15</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-16 11:50:22</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-16 11:50:22</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>93</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20040416115029</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>holivier</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-16 08:00:55</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Simple Update for localization</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 08:00:55</issue_when>
+ <thetext>Order component, some french UiLabels correction</thetext>
+ </long_desc>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 08:02:07</issue_when>
+ <thetext>Created an attachment (id=43)
+The OrderUilabel properties patch file
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-16 11:50:29</issue_when>
+ <thetext>Patch is in CVS. Thanks for doing these Olivier.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>43</attachid>
+ <date>2004-03-16 08:02:07</date>
+ <desc>The OrderUilabel properties patch file</desc>
+ <ispatch>1</ispatch>
+ <filename>OrderUilabelCorrection.patch</filename>
+ <submitter_id>165</submitter_id>
+ <submitting_username>holivier</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/43/OrderUilabelCorrection.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>holivier</user>
+ <when>2004-03-16 08:02:07</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=43)
+The OrderUilabel properties patch file
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:04:26</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-16 11:50:29</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-16 11:50:29</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>94</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20040416115037</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>holivier</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-16 09:28:27</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Simple Update for localization</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 09:28:27</issue_when>
+ <thetext>simple french correction &amp; translation in the Party and workeffort components</thetext>
+ </long_desc>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 09:29:26</issue_when>
+ <thetext>Created an attachment (id=44)
+the PartyUiLabel correction patch file
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 09:30:03</issue_when>
+ <thetext>Created an attachment (id=45)
+the workeffortUilabel correction patch file
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-16 11:50:37</issue_when>
+ <thetext>Patch is in CVS. Thanks for doing these Olivier.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>44</attachid>
+ <date>2004-03-16 09:29:26</date>
+ <desc>the PartyUiLabel correction patch file</desc>
+ <ispatch>1</ispatch>
+ <filename>PartyUiLabelCorrection040316.patch</filename>
+ <submitter_id>165</submitter_id>
+ <submitting_username>holivier</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/44/PartyUiLabelCorrection040316.patch</attachment_iz_url>
+ </attachment>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>45</attachid>
+ <date>2004-03-16 09:30:03</date>
+ <desc>the workeffortUilabel correction patch file</desc>
+ <ispatch>1</ispatch>
+ <filename>WorkeffortUiLabelCorrection040316.patch</filename>
+ <submitter_id>165</submitter_id>
+ <submitting_username>holivier</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/45/WorkeffortUiLabelCorrection040316.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>holivier</user>
+ <when>2004-03-16 09:29:26</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=44)
+the PartyUiLabel correction patch file
+</newvalue>
+ </activity>
+ <activity>
+ <user>holivier</user>
+ <when>2004-03-16 09:30:03</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=45)
+the workeffortUilabel correction patch file
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:04:35</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-16 11:50:37</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-16 11:50:37</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>95</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20040416115047</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>holivier</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-16 09:32:59</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Simple Update for localization</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 09:32:59</issue_when>
+ <thetext>Product components internationalization and the UiLabel files associated</thetext>
+ </long_desc>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 09:36:08</issue_when>
+ <thetext>Created an attachment (id=46)
+the patch file for produt bsh, xml, ftl and properties
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-16 11:50:47</issue_when>
+ <thetext>Patch is in CVS. Thanks for doing these Olivier.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>46</attachid>
+ <date>2004-03-16 09:36:08</date>
+ <desc>the patch file for produt bsh, xml, ftl and properties</desc>
+ <ispatch>1</ispatch>
+ <filename>ProductUiLabelMigration040316.patch</filename>
+ <submitter_id>165</submitter_id>
+ <submitting_username>holivier</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/46/ProductUiLabelMigration040316.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>holivier</user>
+ <when>2004-03-16 09:36:08</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=46)
+the patch file for produt bsh, xml, ftl and properties
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:04:46</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-16 11:50:47</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-16 11:50:47</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>96</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jonesde</assigned_to>
+ <delta_ts>20040730204543</delta_ts>
+ <subcomponent>Security Extensions</subcomponent>
+ <reporter>holivier</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-16 13:30:49</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Typo error correction in emailPassword (bcc in place of cc)</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 13:30:49</issue_when>
+ <thetext>just a simple typo correction.In the emailPassword method when reading and
+populated the service fields they was an error.
+ serviceContext.put(&quot;sendBcc&quot;, productStoreEmail.get(&quot;ccAddress&quot;));
+I have change cc to bcc</thetext>
+ </long_desc>
+ <long_desc>
+ <who>holivier</who>
+ <issue_when>2004-03-16 13:31:26</issue_when>
+ <thetext>Created an attachment (id=47)
+the patch file
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 20:45:43</issue_when>
+ <thetext>this has already been fixed in cvs.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>47</attachid>
+ <date>2004-03-16 13:31:26</date>
+ <desc>the patch file</desc>
+ <ispatch>1</ispatch>
+ <filename>EmailPassword040316.patch</filename>
+ <submitter_id>165</submitter_id>
+ <submitting_username>holivier</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/47/EmailPassword040316.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>holivier</user>
+ <when>2004-03-16 13:31:26</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=47)
+the patch file
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-03-18 12:04:54</when>
+ <field_name>version</field_name>
+ <field_desc>Version</field_desc>
+ <oldvalue>Pre3.0.0</oldvalue>
+ <newvalue>CVS</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 20:45:43</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 20:45:43</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>97</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040527234819</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-18 06:59:56</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Error when creating an invoice with billing account payment type.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-18 06:59:56</issue_when>
+ <thetext>The following error is generated when you try to create an invoice for an order
+with payment type == billing account:
+
+----------------------------------------
+803495[ InvoiceServices.java:583:ERROR] Problems storing invoice items
+org.ofbiz.entity.GenericEntityException: Exception occurred in storeAll (while i
+nserting: [GenericEntity:InvoiceContactMech][createdTxStamp,2004-03-18 15:29:46.
+156(java.sql.Timestamp)][invoiceId,10010(java.lang.String)][contactMechPurposeTy
+peId,BILLING_LOCATION(java.lang.String)][lastUpdatedTxStamp,2004-03-18 15:29:46.
+156(java.sql.Timestamp)][contactMechId,null()][createdStamp,2004-03-18 15:29:46.
+977(java.sql.Timestamp)][lastUpdatedStamp,2004-03-18 15:29:46.977(java.sql.Times
+tamp)] (SQL Exception while executing the following:INSERT INTO INVOICE_CONTACT_
+MECH (INVOICE_ID, CONTACT_MECH_PURPOSE_TYPE_ID, CONTACT_MECH_ID, LAST_UPDATED_ST
+AMP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?,
+ ?, ?, ?) ([-5005] (at 83): Missing non-NULL value)))
+----------------------------------------
+
+I think I&apos;ve tracked down the source of this problem:
+the field contactMechId for the billing account entry in BillingAccount entity
+is empty.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-05-26 10:12:53</issue_when>
+ <thetext>The error happens when no Billing Contact Mechanism is specified in the billing
+account.
+In order to fix this issue the input field &quot;Billing Contact Mech&quot; in the
+EditBillingAccount page should be marked as mandatory.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-27 23:48:19</issue_when>
+ <thetext>Fixed by changing the code to not try to create that record when the BillingAccount.contactMechId is
+empty.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-27 23:48:18</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-27 23:48:18</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>98</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040322173551</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-03-19 07:41:21</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>New Shipment Plan feature for the shipment process.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-19 07:41:21</issue_when>
+ <thetext>New Shipment Plan feature for the shipment process.
+
+In order to support some of the tasks in the manufacturing industry there was
+the need of some simple shipment planning functionality: we need to assign a
+group of customer order items to a scheduled shipment (but without actually
+picking and issuing the items from warehouse).
+
+The patches in the attached zip file add this functionality to the shipment ui.
+This is the list of changes:
+
+NEW FILES (new page, within the shipment ui, for ShipmentPlan management)
+
+product/webapp/facility/shipment/EditShipmentPlan.ftl
+product/webapp/facility/WEB-INF/actions/shipment/EditShipmentPlan.bsh
+product/webapp/facility/WEB-INF/pagedefs/shipment/EditShipmentPlan.xml
+
+PATCHES
+product/webapp/facility/shipment/ShipmentTabBar.ftl (added new link to
+EditShipmentPlan page)
+
+product/webapp/facility/shipment/ShipmentForms.xml (some new forms for the
+EditShipmentPlan page)
+
+product/webapp/facility/WEB-INF/controller.xml (controller definitions for the
+EditShipmentPlan page)
+
+product/webapp/facility/shipment/AddItemsFromOrder.ftl (added some info, also
+fixed issues #47 and #55)
+product/webapp/facility/WEB-INF/actions/shipment/AddItemsFromOrder.bsh (added
+code to get reservations also from shipment plan)
+
+product/servicedef/services_shipment.xml (definitions for two new services to
+add/delete entries in the Shipment Plan)
+product/scripts/org/ofbiz/shipment/shipment/ShipmentSerices.xml (implementation
+of the two new services)
+
+product/entitydef/entitygroup.xml (declaration of the new entity ShipmentPlan)
+product/entitydef/entitymodel_shipment.xml (definition of the new entity
+ShipmentPlan)
+
+product/config/ProductUiLabels.properties (some new labels)
+product/config/ProductUiLabels_fr.properties (some new labels in ENGLISH)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-19 07:42:41</issue_when>
+ <thetext>Created an attachment (id=48)
+The patches and new files
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-03-22 17:35:51</issue_when>
+ <thetext>This patch is now in place. Thanks for sending it in Jacopo. BTW, for future patches a consolidated
+patch file is nice.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>application/x-compressed</mimetype>
+ <attachid>48</attachid>
+ <date>2004-03-19 07:42:41</date>
+ <desc>The patches and new files</desc>
+ <ispatch></ispatch>
+ <filename>ShipmentPlan.zip</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/48/ShipmentPlan.zip</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-19 07:42:41</when>
+ <field_name>attachments.thedata</field_name>
+ <field_desc>Attachment Data</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=48)
+The patches and new files
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-22 17:35:51</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-03-22 17:35:51</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>99</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P4</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040806160304</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-03-28 01:13:10</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>New html report that shows inventory availability by product</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-28 01:13:10</issue_when>
+ <thetext>This is a new html report (patches are in the attached zip file) for the
+Facility Manager Application that shows info about stock levels and
+reservations from a product point of view (instead of inventory item).
+The action code is very simple (the bsh action calls a service to
+compute atp and qoh per product); the report is formatted by the form widget
+stuff.
+It is not internationalized.
+In my local setup I&apos;ve added a link to it from the Inventory Item page but fell
+free to modify it and put it where you want.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-03-28 01:14:46</issue_when>
+ <thetext>Created an attachment (id=49)
+Files and patches for the new report.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-08-06 16:03:04</issue_when>
+ <thetext>Okay, this is in CVS, and I added a link to it from the facility inventory items page. Thanks for sending
+this over.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>application/x-compressed</mimetype>
+ <attachid>49</attachid>
+ <date>2004-03-28 01:14:46</date>
+ <desc>Files and patches for the new report.</desc>
+ <ispatch></ispatch>
+ <filename>inventory_report.zip</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/49/inventory_report.zip</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-03-28 01:14:46</when>
+ <field_name>attachments.thedata</field_name>
+ <field_desc>Attachment Data</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=49)
+Files and patches for the new report.
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-06 16:03:04</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-06 16:03:04</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>100</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>REL 3.0.0</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040403232241</delta_ts>
+ <subcomponent>E-Commerce</subcomponent>
+ <reporter>dlouzado</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-03-28 13:50:10</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>crash on Shipping Information page</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>dlouzado</who>
+ <issue_when>2004-03-28 13:50:10</issue_when>
+ <thetext>I was logged as &quot;admin&quot; user and buying something on the test store on ofbiz
+instance running on a standalone machine (no connection with the internet).
+
+I was filling the shipping information and when I clicked &apos;continue&apos; the
+following exception was thrown:
+
+
+&quot;org.ofbiz.base.util.GeneralException: JPublish execution error (BeanShell
+script error: Sourced file:
+C:\jtools\ofbiz\components\ecommerce\webapp\ecommerce\WEB-INF\actions\order\optionsettings.bsh
+: Error in method invocation: Attempt to pass void argument (position 0) to
+method: getContactMechByType : at Line: 65 : in file:
+C:\jtools\ofbiz\components\ecommerce\webapp\ecommerce\WEB-INF\actions\order\optionsettings.bsh
+: ContactHelper .getContactMechByType ( party , &quot;EMAIL_ADDRESS&quot; , false )
+BSF info:
+C:\jtools\ofbiz\components\ecommerce\webapp\ecommerce\WEB-INF\actions\order\optionsettings.bsh
+at line: 0 column: 0)&quot;</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-03 23:22:41</issue_when>
+ <thetext>Fixed so that &quot;party&quot; would exist where it is referenced there.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-03 23:22:41</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-03 23:22:41</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>101</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P5</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040730152858</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>eckardjf</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-04-02 09:44:46</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>https Website Settings Ignored</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>eckardjf</who>
+ <issue_when>2004-04-02 09:44:46</issue_when>
+ <thetext>org.ofbiz.content.webapp.control.RequestHandler.doRequest() checks to see if a request should be
+secure, but is not - and will redirect to a secure url if necessary. However, when rewriting the url to
+make it secure, it does not check the website settings for the enableHttps, httpsHost and httpsPort. It
+uses the global defaults from url.properties instead, which means the website settings have no effect.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 15:28:58</issue_when>
+ <thetext>this has now been corrected in CVS.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:43:50</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 15:28:58</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 15:28:58</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>102</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P4</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>REL 3.0.0</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040403233556</delta_ts>
+ <subcomponent>Entity Extensions</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-03 23:35:56</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Easy way to disabling Entity Sync oriented information</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-03 23:35:56</issue_when>
+ <thetext>Need an easy way to disable the saving of Entity Sync oriented information such as the entity remove
+information. May not want to disable the auto tx and individual timestamps because they are used in
+other code that takes advantage of the fact that they are always present (though we still need to get rid
+of the last updated and created timestamps that were added to various entities).</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>103</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040405070601</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>bryce_nz</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-04-05 00:05:28</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Nasty little error in PaymentGatewayServices</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>bryce_nz</who>
+ <issue_when>2004-04-05 00:05:28</issue_when>
+ <thetext>In PaymentGatewayServices.refundPayment there is a section of code for creating
+the payment for the refund, then at line 1255 there is the following:
+
+ Map result = ServiceUtil.returnSuccess();
+ result.put(&quot;paymentId&quot;, &quot;10000&quot;);
+ return result;
+
+Obviously the payment id being returned shouldn&apos;t be hardcoded in, should read:
+
+ Map result = ServiceUtil.returnSuccess();
+ result.put(&quot;paymentId&quot;, paymentId);
+ return result;</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 07:06:01</issue_when>
+ <thetext>This has been corrected in CVS, thank you.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 07:05:36</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 07:06:01</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 07:06:01</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>104</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405134511</delta_ts>
+ <subcomponent>Workflow</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-05 13:22:20</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Job Definition</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 13:22:20</issue_when>
+ <thetext>This request might fit to the section &quot;Service Engine Tools&quot; on the page
+&quot;http://ofbiz.org/feature-list.html&quot;.
+
+Would you like to support the JDF
+standard?
+http://en.wikipedia.org/wiki/Job_Definition_Format</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 13:45:11</issue_when>
+ <thetext>Not sure what this is supposed to be requesting. This issue contains no specific feature request.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 13:45:11</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 13:45:11</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>105</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405134741</delta_ts>
+ <subcomponent>Service</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-05 13:28:41</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Support for dynamic Service Configuration</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 13:28:41</issue_when>
+ <thetext>Would you like to use a service configurator for your server?
+-
+http://www.cs.wustl.edu/~schmidt/ACE-papers.html
+-
+http://java.sun.com/j2se/1.5.0/docs/guide/jmx/tutorial/tutorialTOC.html
+
+Can this
+request solved with JMX?
+http://en.wikipedia.org/wiki/Java_Management_eXtensions</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 13:47:41</issue_when>
+ <thetext>This issue contains no specific feature request. Not sure what you are requesting, so there is no way to
+determine if JMX will solve the problem. </thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 13:47:41</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 13:47:41</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>106</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405134845</delta_ts>
+ <subcomponent>WebTools</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-05 13:42:12</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Portlet Interface</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 13:42:12</issue_when>
+ <thetext>Would you like to integrate components with web portals?
+
+-
+http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-portlet2.html
+-
+http://www.javaworld.net/javaworld/jw-11-2003/jw-1114-jsfredux.html
+-
+http://en.wikipedia.org/wiki/Portlet</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 13:48:45</issue_when>
+ <thetext>Sure we would love to integrate with web portals, however this issue contains no specific feature
+request.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 13:48:45</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 13:48:45</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>107</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405135106</delta_ts>
+ <subcomponent>WebTools</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-05 13:47:12</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Vector graphics and XForms</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 13:47:12</issue_when>
+ <thetext>Will the application support .svgz or .x3dz files that contain XForms?
+
+-
+http://en.wikipedia.org/wiki/Scalable_Vector_Graphics
+-
+http://en.wikipedia.org/wiki/X3D
+- http://en.wikipedia.org/wiki/XForms
+-
+http://xml.apache.org/batik/
+
+See also the request &quot;XForms&quot; in the discussion forum by
+Britton LaRoche from &quot;August 28, 2003 12:38:36 AM
+GMT&quot;.
+https://ofbiz.dev.java.net/servlets/ProjectForumMessageView?forumID=282&amp;messageID=1065</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 13:51:06</issue_when>
+ <thetext>This issue contains no specific feature request. No information was provided regarding how support for
+these file types is desired and where the desired functionality is needed. </thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 13:51:06</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 13:51:06</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>108</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405140048</delta_ts>
+ <subcomponent>Rules</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-05 13:51:31</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Integration with Knowledge Representation</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 13:51:31</issue_when>
+ <thetext>What is the current state of your support for this technology?
+-
+http://en.wikipedia.org/wiki/Knowledge_representation
+-
+http://en.wikipedia.org/wiki/Expert_system</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 14:00:48</issue_when>
+ <thetext>This issue is not a valid feature request, questions of this sort should be discussed on the mailing lists.
+In addition, do expect readers to follow links and read articles to get your point across it is highly
+unlikely that people will spent the time to research something for you. Your best bet is to read the
+articles and post a question asking something specific, then your chances of getting an intelligent
+response is greater.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:00:48</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:00:48</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>109</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405140138</delta_ts>
+ <subcomponent>Service</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-05 13:52:57</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Open Services Gateway</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 13:52:57</issue_when>
+ <thetext>Would you like to cooperate with these service APIs so that your software can be used over these
+interfaces?
+http://www.osgi.org/about/faqs.asp
+http://en.wikipedia.org/wiki/OSGi</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 14:01:37</issue_when>
+ <thetext>This issue contains no specific feature request.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:01:37</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:01:37</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>110</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405140228</delta_ts>
+ <subcomponent>Entity</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-05 13:56:20</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Content Storage API</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 13:56:20</issue_when>
+ <thetext>Would you like to support the programming interface &quot;Content
+Repository&quot;?
+http://jcp.org/en/jsr/detail?id=170
+
+This topic can be perhaps combined
+with requests for CVS and Subversion integration.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 14:02:28</issue_when>
+ <thetext>This issue contains no specific feature request; please see issue #108 for more suggestions.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:02:28</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:02:28</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>111</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405140305</delta_ts>
+ <subcomponent>Workflow</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-05 14:02:16</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Workflow Management</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 14:02:17</issue_when>
+ <thetext>How do you think about workflow modelling patterns?
+Which of them are supported by your
+software? (Is cooperation with other standards like BPML besides WfMC XPDL
+possible?)
+http://tmitwww.tm.tue.nl/research/patterns/</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 14:03:05</issue_when>
+ <thetext>see issue #108</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:03:05</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:03:05</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>112</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040405141257</delta_ts>
+ <subcomponent>Entity Extensions</subcomponent>
+ <reporter>elfring</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-05 14:07:40</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>relationships and object mapping</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>elfring</who>
+ <issue_when>2004-04-05 14:07:40</issue_when>
+ <thetext>I&apos;ve got the impression from the discussion about the topic &quot;entity-engine: thoughts on extends
+(IS A) pattern and relationships&quot; that there might be something useful from other information
+sources.
+
+1. CORBA: Relationship Service
+Specification
+http://www.omg.org/technology/documents/formal/relationship_service.htm
+
+2.
+ObJectRelationalBridge
+http://db.apache.org/ojb/
+
+3. alternative open source
+implementation for JDO
+http://speedo.objectweb.org/
+
+4. Citations from
+CiteSeer
+http://citeseer.ist.psu.edu/cis?q=object+and+relational+and+mapping+and+database
+
+5.
+a detailed Wiki
+http://en.wikipedia.org/wiki/Object_database
+
+Would you like to reuse
+anything from those implementations and experiences?
+
+How does your use of the Java Open
+Transaction Manager (http://jotm.objectweb.org/) fit into this picture?</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-05 14:12:57</issue_when>
+ <thetext>No specific enhancement requested.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:12:57</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-04-05 14:12:57</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>113</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>WORKSFORME</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040406101817</delta_ts>
+ <subcomponent>WebTools</subcomponent>
+ <reporter>ajzeneski</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-04-06 07:00:29</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>EditEntity.jsp displays wrong field length</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-04-06 07:00:29</issue_when>
+ <thetext>Reported by prozelit@yahoo.com:
+
+On EditEntity.jsp, there is a fields table. It is
+supposed to display the length of each field, but it
+looks like it displays the length of the field name
+instead. It seems to me there is a bug at line 347.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-06 10:18:17</issue_when>
+ <thetext>
+This is the expected behavior. The length in parenthesis there is meant to show you the length of the
+column name so that you can tell if it is within the required length of the database, we generally
+recommend (and always use) equal or less than 30 characters.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-06 10:18:17</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-06 10:18:17</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>WORKSFORME</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>114</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>PC</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040406100126</delta_ts>
+ <subcomponent>WorkEffort</subcomponent>
+ <reporter>vivalinux</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-04-06 10:01:26</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc>http://&lt;ofbiz_URL&gt;/workeffort/control/month?start=1083297600000</issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Daylight savings and the calendar</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>vivalinux</who>
+ <issue_when>2004-04-06 10:01:26</issue_when>
+ <thetext>On the months when daylight savings takes place, or stops taking place
+(April/September in the US), the way the start of the period is computed in the
+WorkEffortServices.getWorkEffortsByPeriod yields one extra hour after dayligh
+savings kicks in.
+The reason for this is that the absolute time is interpreted differently once
+daylight savings is in place.
+So I suggest using the attached patch which relies on UtilDateTime.getDayStart
+to get the period start/end.</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>115</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040730150719</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>lykins</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-06 13:56:51</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Product to Order Lookup Link</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>lykins</who>
+ <issue_when>2004-04-06 13:56:51</issue_when>
+ <thetext>Something that should bring great benefit is the ability to link the product to
+the orders from the product maintenance screen. It would be very beneficial to
+know what purchase order the product came from. I noticed that there are links
+to almost all other relations besides this.
+
+Thanks,
+Patrick</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 15:07:19</issue_when>
+ <thetext>good idea; now in CVS</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 15:07:19</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 15:07:19</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>116</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040417174533</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-04-17 00:19:59</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Implementation of getProductVariant service.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-04-17 00:19:59</issue_when>
+ <thetext>Implementation of getProductVariant service.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-04-17 00:20:48</issue_when>
+ <thetext>Created an attachment (id=50)
+Patch for the java implementation
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-04-17 00:21:21</issue_when>
+ <thetext>Created an attachment (id=51)
+Patch for the service definition.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-17 17:45:33</issue_when>
+ <thetext>It&apos;s in. Thanks Jacopo.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>50</attachid>
+ <date>2004-04-17 00:20:48</date>
+ <desc>Patch for the java implementation</desc>
+ <ispatch>1</ispatch>
+ <filename>ProductServices.java.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/50/ProductServices.java.patch</attachment_iz_url>
+ </attachment>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>51</attachid>
+ <date>2004-04-17 00:21:21</date>
+ <desc>Patch for the service definition.</desc>
+ <ispatch>1</ispatch>
+ <filename>services.xml.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/51/services.xml.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-04-17 00:20:48</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=50)
+Patch for the java implementation
+</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-04-17 00:21:21</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=51)
+Patch for the service definition.
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-17 17:45:33</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-17 17:45:33</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>117</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040422201817</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>colt_nz</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-04-20 14:45:56</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>editPayment has wrongly named fields</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>colt_nz</who>
+ <issue_when>2004-04-20 14:45:56</issue_when>
+ <thetext>/accounting/webapp/accounting/payment/editPayment.ftl
+
+Input fields partyIdTo and partyIdFrom are round the wrong way. ie switch &apos;em.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-22 20:18:17</issue_when>
+ <thetext>
+Thanks for reporting this, the fix is in CVS. Looks like it was perhaps an issue with the i18n...</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-22 20:18:17</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-22 20:18:17</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>118</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P4</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040819001212</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>jonesde</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-04-23 21:32:35</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Make QuickAddVariants Easier to Use</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-23 21:32:35</issue_when>
+ <thetext>Make QuickAddVariants Easier to Use:
+
+1. Change to multi-form
+2. Allow enter pattern to use to pre-populate the various IDs</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-08-19 00:12:11</issue_when>
+ <thetext>Some time ago I did this and you put all the stuff in CVS, so now it&apos;s done.</thetext>
+ </long_desc>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-08-19 00:12:10</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-08-19 00:12:10</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>119</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jacopo</assigned_to>
+ <delta_ts>20040717041328</delta_ts>
+ <subcomponent>Manufacturing</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-24 00:15:36</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Refactoring of the BOMEvent class that manages all the related to bill of materials editing.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-04-24 00:15:36</issue_when>
+ <thetext>Refactoring of the BOMEvent class that manages all the related to bill of
+materials editing.
+
+Three new (simple) services should be created (create, update, delete).
+An sECA rule should be added to the create and update services to update the
+low level code.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-07-17 04:13:28</issue_when>
+ <thetext>Ok, the BOMEvent class has gone away; I have implemented some simple services
+to add/update/remove/copy boms (performing all the needed checks for loops and
+updating the product&apos;s llc).
+</thetext>
+ </long_desc>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-17 04:13:28</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-17 04:13:28</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>120</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jacopo</assigned_to>
+ <delta_ts>20040424001903</delta_ts>
+ <subcomponent>Manufacturing</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-24 00:19:03</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>searchDuplicateAncenstor service should resolve also virtual to variant products to search for loops.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-04-24 00:19:03</issue_when>
+ <thetext>searchDuplicateAncenstor service should resolve also virtual to variant
+products to search for loops.</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>121</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jacopo</assigned_to>
+ <delta_ts>20040717041557</delta_ts>
+ <subcomponent>Manufacturing</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-24 00:24:11</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Refactoring of the Bill of Material editor&apos;s ui: migration to the forms widget.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-04-24 00:24:11</issue_when>
+ <thetext>Refactoring of the Bill of Material editor&apos;s ui: migration to the forms widget.
+
+This will also include:
+- i18n and l10n issues
+- management of all the relavant fields that are missing
+- lookup fields
+- fields validation</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-07-17 04:15:57</issue_when>
+ <thetext>I have not used the form widget (maybe in the future, together with some more
+clean ups) here, but most of these points has been fixed.</thetext>
+ </long_desc>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-17 04:15:57</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-17 04:15:57</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>122</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jacopo</assigned_to>
+ <delta_ts>20040424002537</delta_ts>
+ <subcomponent>Manufacturing</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-24 00:25:37</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>updateLowLevelCode service - it should also update the low level code for variant products </short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-04-24 00:25:37</issue_when>
+ <thetext>updateLowLevelCode service - it should also update the low level code for
+variant products</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>123</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501062848</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:05:20</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add methods to check against classes, instead of only objects.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:05:20</issue_when>
+ <thetext>This patch adds new versions of interfaceOf, isOrSubOf, and instanceOf, that
+check against a class, instead of an Object.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:06:57</issue_when>
+ <thetext>Created an attachment (id=52)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:52</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 06:28:48</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>52</attachid>
+ <date>2004-04-29 16:06:57</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>ObjectType-check-against-class.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/52/ObjectType-check-against-class.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:06:57</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=52)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:15:14</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>DEFECT</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:52</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:28:48</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:28:48</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>124</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501062855</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:08:48</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Handle is-* operators when value1 is null</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:08:48</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:09:11</issue_when>
+ <thetext>Created an attachment (id=53)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:53</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 06:28:55</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>53</attachid>
+ <date>2004-04-29 16:09:11</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>ObjectType-is-compare-value1-null.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/53/ObjectType-is-compare-value1-null.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:09:11</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=53)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:15:14</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>DEFECT</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:53</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:28:55</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:28:55</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>125</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501062903</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:10:04</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Convert classnames to full names.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:10:04</issue_when>
+ <thetext>See $summary.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:10:21</issue_when>
+ <thetext>Created an attachment (id=54)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:48</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 06:29:03</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>54</attachid>
+ <date>2004-04-29 16:10:21</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>ObjectType-convert-classname-to-full.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/54/ObjectType-convert-classname-to-full.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:10:21</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=54)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:15:13</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>DEFECT</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:48</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:29:03</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:29:03</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>126</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501062243</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:13:25</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add some helper methods for objects implementing their own equals, compareTo, and hashCode</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:13:25</issue_when>
+ <thetext>Name: UtilObject.patch
+Prune: 1
+Description: Add some helper methods for objects implementing their own equals,
+compareTo, and hashCode.
+DiffStat:
+ base/src/base/org/ofbiz/base/util/UtilObject.java | 35 ++++++++++++++++++++++
+ 1 files changed, 35 insertions(+)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:13:45</issue_when>
+ <thetext>Created an attachment (id=55)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:49</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 06:22:43</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>55</attachid>
+ <date>2004-04-29 16:13:45</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilObject.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/55/UtilObject.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:13:45</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=55)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:15:13</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>DEFECT</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:49</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:22:43</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:22:43</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>127</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501055554</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:18:14</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Simplify the top-level build.xml</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:18:14</issue_when>
+ <thetext>Name: simpler-build.xml.patch
+Prune: 1
+Description: Simplifies the top-level build.xml
+ This patch makes use of ant 1.6 features, to automate calling of sub
+ build.xmls. It also adds a &apos;test&apos; target; note, however, that the
+ listed sub build.xmls don&apos;t actually have that test target yet.
+DiffStat:
+ build.xml | 494 ++++----------------------------------------------------------
+ 1 files changed, 32 insertions(+), 462 deletions(-)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:18:43</issue_when>
+ <thetext>Created an attachment (id=56)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:50</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 05:55:54</issue_when>
+ <thetext>This is now in, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>56</attachid>
+ <date>2004-04-29 16:18:43</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>simpler-build.xml.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/56/simpler-build.xml.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:18:43</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=56)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:19:44</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>DEFECT</oldvalue>
+ <newvalue>ENHANCEMENT</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:50</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 05:55:54</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 05:55:54</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>128</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501051820</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:20:39</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add support for formatting time intervals with human words</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:20:39</issue_when>
+ <thetext>Name: UtilDateTime-time-interval.patch
+Prune: 1
+Description: Add support for formatting time intervals with human words
+DiffStat:
+ base/config/DateTimeLabels.properties | 10 ++
+ base/src/base/org/ofbiz/base/util/UtilDateTime.java | 90 ++++++++++++++++++++
+ 2 files changed, 100 insertions(+)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:20:57</issue_when>
+ <thetext>Created an attachment (id=57)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:51</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 05:18:20</issue_when>
+ <thetext>These are now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>57</attachid>
+ <date>2004-04-29 16:20:57</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilDateTime-time-interval.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/57/UtilDateTime-time-interval.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:20:58</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=57)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:51</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 05:18:20</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 05:18:20</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>129</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429172414</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:22:10</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add more childElementList and firstChildElement variants.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:22:10</issue_when>
+ <thetext>Name: UtilXml-childElementList-firstChildElement.patch
+Prune: 1
+Depends: UtilXml-writeElement.patch
+Description: Add more childElementList and firstChildElement variants.
+DiffStat:
+ base/src/base/org/ofbiz/base/component/ComponentLoaderConfig.java
+ | 2
+ base/src/base/org/ofbiz/base/util/UtilXml.java
+ | 80 ++++++++++
+ components/content/src/org/ofbiz/content/widget/form/ModelFormField.java
+ | 4
+ components/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
+ | 2
+ components/minilang/src/org/ofbiz/minilang/SimpleMethod.java
+ | 2
+ components/minilang/src/org/ofbiz/minilang/method/callops/CallClassMethod.java
+ | 2
+ components/minilang/src/org/ofbiz/minilang/method/callops/CallObjectMethod.java
+ | 2
+ components/minilang/src/org/ofbiz/minilang/method/callops/CreateObject.java
+ | 2
+ components/minilang/src/org/ofbiz/minilang/method/conditional/CombinedCondition.java
+| 2
+ components/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java
+ | 2
+ components/minilang/src/org/ofbiz/minilang/method/otherops/Calculate.java
+ | 4
+ components/minilang/src/org/ofbiz/minilang/method/otherops/Log.java
+ | 2
+ components/minilang/src/org/ofbiz/minilang/operation/MakeInString.java
+ | 2
+ components/minilang/src/org/ofbiz/minilang/operation/SimpleMapProcess.java
+ | 2
+ 14 files changed, 95 insertions(+), 15 deletions(-)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:22:50</issue_when>
+ <thetext>Created an attachment (id=58)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:57:47</issue_when>
+ <thetext>Changing priority to P2, as I need these applied before I can commit my entity
+cache work.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-29 17:24:14</issue_when>
+ <thetext>Now in CVS, thanks Adam.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>58</attachid>
+ <date>2004-04-29 16:22:50</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilXml-childElementList-firstChildElement.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/58/UtilXml-childElementList-firstChildElement.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:22:50</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=58)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:57:47</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:24:14</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:24:14</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>130</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429174623</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:24:36</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>put now returns the previous value of the object, if it exists</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:24:36</issue_when>
+ <thetext>Name: UtilCache-put-returns-object.patch
+Prune: 1
+Depends: UtilCache-listeners.patch
+Description: put now returns the previous value of the object, if it exists
+DiffStat:
+ base/src/base/org/ofbiz/base/util/UtilCache.java | 16 ++++++++++------
+ 1 files changed, 10 insertions(+), 6 deletions(-)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:24:58</issue_when>
+ <thetext>Created an attachment (id=59)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:57:48</issue_when>
+ <thetext>Changing priority to P2, as I need these applied before I can commit my entity
+cache work.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-29 17:46:23</issue_when>
+ <thetext>Now in CVS, thanks Adam.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>59</attachid>
+ <date>2004-04-29 16:24:58</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-put-returns-object.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/59/UtilCache-put-returns-object.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:24:58</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=59)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:57:48</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:46:23</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:46:23</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>131</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040429174619</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 16:55:31</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add getCacheLineKeys method.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:55:31</issue_when>
+ <thetext>Name: UtilCache-getCacheLineKeys.patch
+Prune: 1
+Depends: UtilCache-put-returns-object.patch
+Description: Add getCacheLineKeys method.
+DiffStat:
+ base/src/base/org/ofbiz/base/util/UtilCache.java | 4 ++++
+ 1 files changed, 4 insertions(+)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:55:56</issue_when>
+ <thetext>Created an attachment (id=60)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 16:57:48</issue_when>
+ <thetext>Changing priority to P2, as I need these applied before I can commit my entity
+cache work.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-04-29 17:46:19</issue_when>
+ <thetext>Now in CVS, thanks Adam.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>60</attachid>
+ <date>2004-04-29 16:55:56</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-getCacheLineKeys.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/60/UtilCache-getCacheLineKeys.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:55:56</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=60)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 16:57:48</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:46:19</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-04-29 17:46:19</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>132</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501051751</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 19:39:13</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add entrySet(), which functions like Map.entrySet().</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:39:13</issue_when>
+ <thetext>Name: UtilCache-entrySet.patch
+Prune: 1
+Description: Add entrySet(), which functions like Map.entrySet().
+DiffStat:
+ base/src/base/org/ofbiz/base/util/UtilCache.java | 4 ++++
+ 1 files changed, 4 insertions(+)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:41:28</issue_when>
+ <thetext>Created an attachment (id=61)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:53</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 05:17:51</issue_when>
+ <thetext>These are now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>61</attachid>
+ <date>2004-04-29 19:41:27</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-entrySet.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/61/UtilCache-entrySet.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:41:28</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=61)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:53</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 05:17:51</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 05:17:51</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>133</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501042628</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 19:42:19</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Add a new constructor.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:42:19</issue_when>
+ <thetext>Name: UtilCache-new-constructor.patch
+Prune: 1
+Depends: UtilCache-entrySet.patch
+Description: Add a new constructor.
+DiffStat:
+ base/src/base/org/ofbiz/base/util/UtilCache.java | 13 +++++++++++++
+ 1 files changed, 13 insertions(+)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:42:45</issue_when>
+ <thetext>Created an attachment (id=62)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:48</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-30 10:42:15</issue_when>
+ <thetext>Changing these issuses, as they are needed by EntityCache.patch.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 04:26:28</issue_when>
+ <thetext>These are now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>62</attachid>
+ <date>2004-04-29 19:42:45</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-new-constructor.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/62/UtilCache-new-constructor.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:42:45</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=62)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:48</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-30 10:42:15</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P2</oldvalue>
+ <newvalue>P1</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 04:26:28</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 04:26:28</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>134</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501062248</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 19:43:49</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Change utilCacheTable to a WeakHashMap.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:43:49</issue_when>
+ <thetext>Name: UtilCache-WeakHashMap.patch
+Prune: 1
+Depends: UtilCache-new-constructor.patch
+Description: Change utilCacheTable to a WeakHashMap.
+DiffStat:
+ base/src/base/org/ofbiz/base/util/UtilCache.java | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletion(-)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:44:39</issue_when>
+ <thetext>Created an attachment (id=63)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:49</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 06:22:48</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>63</attachid>
+ <date>2004-04-29 19:44:39</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-WeakHashMap.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/63/UtilCache-WeakHashMap.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:44:39</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=63)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:49</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:22:48</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:22:48</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>135</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P1</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501042633</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 19:45:22</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Methods that clear a cache by name or pattern.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:45:22</issue_when>
+ <thetext>Name: UtilCache-clearCache-helpers.patch
+Prune: 1
+Depends: UtilCache-WeakHashMap.patch
+Description: Methods that clear a cache by name or pattern.
+DiffStat:
+ base/src/base/org/ofbiz/base/util/UtilCache.java | 22 ++++++++++++++++++++++
+ 1 files changed, 22 insertions(+)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:45:43</issue_when>
+ <thetext>Created an attachment (id=64)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:49</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-30 10:42:16</issue_when>
+ <thetext>Changing these issuses, as they are needed by EntityCache.patch.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 04:26:33</issue_when>
+ <thetext>These are now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>64</attachid>
+ <date>2004-04-29 19:45:43</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-clearCache-helpers.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/64/UtilCache-clearCache-helpers.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:45:43</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=64)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:49</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-30 10:42:16</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P2</oldvalue>
+ <newvalue>P1</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 04:26:33</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 04:26:33</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>136</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040501064335</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-04-29 19:46:54</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Place the loaded document object in a UtilCache instance.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:46:54</issue_when>
+ <thetext>Name: ResourceLoader-document-in-cache.patch
+Prune: 1
+Depends: UtilCache-clearCache-helpers.patch
+Description: Place the loaded document object in a UtilCache instance.
+DiffStat:
+ base/src/base/org/ofbiz/base/config/ResourceLoader.java | 11 ++++-------
+ 1 files changed, 4 insertions(+), 7 deletions(-)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:47:17</issue_when>
+ <thetext>Created an attachment (id=65)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-04-29 19:57:50</issue_when>
+ <thetext>Changing priority, so that someone else can see the ones I want applied next.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-01 06:43:35</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>65</attachid>
+ <date>2004-04-29 19:47:17</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>ResourceLoader-document-in-cache.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/65/ResourceLoader-document-in-cache.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:47:17</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=65)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>doogie</user>
+ <when>2004-04-29 19:57:50</when>
+ <field_name>priority</field_name>
+ <field_desc>Priority</field_desc>
+ <oldvalue>P3</oldvalue>
+ <newvalue>P2</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:43:35</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-01 06:43:35</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>137</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040527233355</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-05-03 14:48:41</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>createInvoiceForOrder not get correct fields for terms</short_desc>
+ <keywords></keywords>
+ <has_duplicates>
+ <issue_id>141</issue_id>
+ <who>jacopo</who>
+ <when>2004-05-26 10:48:21</when>
+ </has_duplicates>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-05-03 14:48:41</issue_when>
+ <thetext>InvoiceServices.createInvoiceForOrder is not getting correct fields for terms.
+It is not automatically generating a key for InvoiceTerm entity and is also
+looking for &quot;termType&quot; from BillingAccount when the field is actually &quot;termTypeId.&quot;</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-05-03 14:50:09</issue_when>
+ <thetext>Created an attachment (id=66)
+Patch fixes defect and allows invoices to be created correctly
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-05-04 00:50:17</issue_when>
+ <thetext>See also issue #97</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-05-26 10:48:20</issue_when>
+ <thetext>*** Issue 141 has been marked as a duplicate of this issue. ***</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-05-27 23:33:55</issue_when>
+ <thetext>It&apos;s now in CVS, thanks to both Si Chen and Jacopo Cappellato for reporting/fixing this.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>66</attachid>
+ <date>2004-05-03 14:50:09</date>
+ <desc>Patch fixes defect and allows invoices to be created correctly</desc>
+ <ispatch>1</ispatch>
+ <filename>InvoiceServices.java.patch</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/66/InvoiceServices.java.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-05-03 14:50:09</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=66)
+Patch fixes defect and allows invoices to be created correctly
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-03 23:03:12</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-27 23:33:55</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-05-27 23:33:55</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>138</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>WORKSFORME</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040713022331</delta_ts>
+ <subcomponent>Manufacturing</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-05-04 17:45:50</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>Windows XP</op_sys>
+ <short_desc>Null delegator in FindProductRun</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-05-04 17:45:50</issue_when>
+ <thetext>I am getting a
+4269781[ VisitHandler.java:130:ERROR] Could not find delegator with
+delegatorName [null] in session, not creating Visit entity
+
+Is this a Windows problem or a bug?
+
+Thanks,
+
+Si Chen</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-05-04 17:46:33</issue_when>
+ <thetext>Created an attachment (id=67)
+error log from running FindProductRun in Manufacturing
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-07-13 02:23:31</issue_when>
+ <thetext>I couldn&apos;t recreate this error.
+However, from the log it seems something related to the Visit stuff.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>67</attachid>
+ <date>2004-05-04 17:46:33</date>
+ <desc>error log from running FindProductRun in Manufacturing</desc>
+ <ispatch></ispatch>
+ <filename>findproductrun.log</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/67/findproductrun.log</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-05-04 17:46:33</when>
+ <field_name>attachments.thedata</field_name>
+ <field_desc>Attachment Data</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=67)
+error log from running FindProductRun in Manufacturing
+</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-13 02:23:31</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-13 02:23:31</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>WORKSFORME</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>139</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>david</assigned_to>
+ <delta_ts>20040509064322</delta_ts>
+ <subcomponent>E-Commerce</subcomponent>
+ <reporter>arukala</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-05-09 06:43:22</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Reading UiLable Properties in Email templates</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>arukala</who>
+ <issue_when>2004-05-09 06:43:22</issue_when>
+ <thetext>Hallo David,
+
+We are looking for your suggestions. on how should i call the UiLabel
+Properties in eCommerce Email Templates. we are eager to see this feature in
+email Confirmation after placing an order for customers?. suggest us how to?</thetext>
+ </long_desc>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>140</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>jacopo</assigned_to>
+ <delta_ts>20040518040000</delta_ts>
+ <subcomponent>Manufacturing</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-05-11 08:26:52</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Remove all the checks against the isVariant field.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-05-11 08:26:52</issue_when>
+ <thetext>Remove all the checks against the isVariant field: the best way to see if a
+product is variant is to check the ProductAssoc entity.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-05-18 04:00:00</issue_when>
+ <thetext>Committed with the last changes a few days ago.</thetext>
+ </long_desc>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-05-18 04:00:00</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-05-18 04:00:00</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>141</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>DUPLICATE</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040526104821</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-05-26 09:01:42</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Patch for bug in invoice creation when terms are specified for a billing account.</short_desc>
+ <keywords></keywords>
+ <is_duplicate>
+ <issue_id>137</issue_id>
+ <who>jacopo</who>
+ <when>2004-05-26 10:48:21</when>
+ </is_duplicate>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-05-26 09:01:42</issue_when>
+ <thetext>Patch for bug in invoice creation when terms are specified for billing account:
+A wrong field name was used.
+Also a non-null field was not set.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-05-26 09:02:49</issue_when>
+ <thetext>Created an attachment (id=68)
+The patch file in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-05-26 10:48:21</issue_when>
+ <thetext>Ok, Si Chen had already fixed this!!!
+
+*** This issue has been marked as a duplicate of 137 ***</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>68</attachid>
+ <date>2004-05-26 09:02:49</date>
+ <desc>The patch file in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>InvoiceServices.java.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/68/InvoiceServices.java.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-05-26 09:02:49</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=68)
+The patch file in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-05-26 10:48:21</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-05-26 10:48:21</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>DUPLICATE</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>142</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>PC</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040630194530</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>jackhung</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-06-15 03:33:20</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>Linux</op_sys>
+ <short_desc>Party Profile [New Communication] throws exception</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jackhung</who>
+ <issue_when>2004-06-15 03:33:20</issue_when>
+ <thetext>Error: The application script threw an exception: Sourced file:
+/mnt/hda6/jackwork/ofbiz3/workspace/ofbiz/components/party/webapp/partymgr/WEB-INF/actions/communication/editCommunication.bsh
+: null : at Line: 47 : in file:
+/mnt/hda6/jackwork/ofbiz3/workspace/ofbiz/components/party/webapp/partymgr/WEB-INF/actions/communication/editCommunication.bsh
+: party .getRelatedOne ( &quot;Person&quot; ) Target exception:
+java.lang.NullPointerException: Null Pointer in Method Invocation BSF info:
+/mnt/hda6/jackwork/ofbiz3/workspace/ofbiz/components/party/webapp/partymgr/WEB-INF/actions/communication/editCommunication.bsh
+at line: 0 column: 0
+
+
+URL: https://jhpc:18443/partymgr/control/viewCommunicationEvent?partyIdFrom=ltdadmin
+
+partyId = request.getParameter(&quot;party_id&quot;);
+...
+party = delegator.findByPrimaryKey(&quot;Party&quot;, UtilMisc.toMap(&quot;partyId&quot;, partyId));
+context.put(&quot;party&quot;, party);
+context.put(&quot;lookupPerson&quot;, party.getRelatedOne(&quot;Person&quot;)); &lt;---</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-06-30 19:45:30</issue_when>
+ <thetext>This has been fixed in CVS</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-06-15 03:39:27</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:45:30</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:45:30</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>143</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040630194322</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>FEATURE</issue_type>
+ <creation_ts>2004-06-17 10:51:48</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allows orders to have shipBeforeDate and shipAfterDate</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-06-17 10:51:48</issue_when>
+ <thetext>Changed ShoppingCart.java and CheckoutHelper.java to allow ship before and
+after dates to be set using the OrderShipmentPreference entity.
+OrderServices.java is modified as well to allow these dates to go on the order
+confirmation email.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-06-17 10:53:16</issue_when>
+ <thetext>Created an attachment (id=69)
+Patches ShoppingCart.java, CheckoutHelper.java, OrderServices.java,
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>69</attachid>
+ <date>2004-06-17 10:53:16</date>
+ <desc>Patches ShoppingCart.java, CheckoutHelper.java, OrderServices.java,</desc>
+ <ispatch>1</ispatch>
+ <filename>order_dating_patch.txt</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/69/order_dating_patch.txt</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-06-17 10:53:16</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=69)
+Patches ShoppingCart.java, CheckoutHelper.java, OrderServices.java,
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:43:22</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:43:22</when>
+ <field_name>short_desc</field_name>
+ <field_desc>Summary</field_desc>
+ <oldvalue>Allows orders to have shipBeforeDate and shipAfterDate </oldvalue>
+ <newvalue>Allows orders to have shipBeforeDate and shipAfterDate</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>144</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>WORKSFORME</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>PC</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040630194017</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>jackhung</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-06-18 02:57:10</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>Linux</op_sys>
+ <short_desc>https connection broke Mozilla 1.3 and 1.4</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jackhung</who>
+ <issue_when>2004-06-18 02:57:10</issue_when>
+ <thetext>I&apos;m getting a strange problem lately (2 days). I&apos;m at the ecommerce&apos;s main page
+and try to [Login] (url
+https://www.myhost.net:8443/ecommerce/control/checkLogin/main). The
+certification stuff comes up and I accepted it. On one of my system using
+Mozilla 1.3, the browser popup a dialog saying:
+ &quot;www.myhost.net has received an incorrect or unexpected message. Error Code:
+-12229&quot;
+For all subsequent attempt, the browser popup a dialog saying:
+ &quot;The Document contains no data&quot;
+It appears that the browser is not sending any request to the server on
+subsequent attempt.
+
+On another system using Mozilla 1.4, i did not get the &quot;unexpected message&quot;, but
+still got the &quot;no data&quot; one.
+
+I have an Crozilla 1.3a browser around (from the Mozilla SVG project). I tried
+it and it works!!
+
+As a matter of fact, i&apos;m having the same problem with any of the secure
+components (webtools, partymgr, ...)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-06-30 19:40:17</issue_when>
+ <thetext>I cannot duplicate this issue with FireFox. It could be a bug in that version of mozilla. Is this still an
+issue w/ the 1.5-1.7?</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:40:17</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:40:17</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>WORKSFORME</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>145</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040619093839</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-06-18 09:57:41</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Fixes duplicated PartyContactMechPurposes when using updatePartyContactMech</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-06-18 09:57:41</issue_when>
+ <thetext>Fixes duplicated PartyContactMechPurposes when using updatePartyContactMech to
+move a party&apos;s contact information from an old contactMechId to a
+newContactMechId by checking to make sure the PartyContactMechPurpose does not
+already exist.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-06-18 09:58:34</issue_when>
+ <thetext>Created an attachment (id=70)
+Patches PartyContactMechServices.xml
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-06-19 09:38:39</issue_when>
+ <thetext>It&apos;s in CVS now. Thanks Si.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>70</attachid>
+ <date>2004-06-18 09:58:34</date>
+ <desc>Patches PartyContactMechServices.xml</desc>
+ <ispatch>1</ispatch>
+ <filename>PartyContactMechServices.patch</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/70/PartyContactMechServices.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-06-18 09:58:34</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=70)
+Patches PartyContactMechServices.xml
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-06-19 09:38:39</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-06-19 09:38:39</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>146</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040622094557</delta_ts>
+ <subcomponent>Party</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-06-21 17:56:29</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Passes partyId into updatePostalAddress from updatepartyPostalAddress</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-06-21 17:56:29</issue_when>
+ <thetext>Passes partyId into updatePostalAddress from updatePartyPostalAddress, to
+preserve it for updateCreditCard later.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-06-21 17:57:02</issue_when>
+ <thetext>Created an attachment (id=71)
+Passes partyId from updatePartyPostalAddress to updatePostalAddress
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-06-22 09:45:57</issue_when>
+ <thetext>It&apos;s in. Thanks Si Chen.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>71</attachid>
+ <date>2004-06-21 17:57:02</date>
+ <desc>Passes partyId from updatePartyPostalAddress to updatePostalAddress</desc>
+ <ispatch>1</ispatch>
+ <filename>PartyContactMechServices.patch</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/71/PartyContactMechServices.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-06-21 17:57:02</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=71)
+Passes partyId from updatePartyPostalAddress to updatePostalAddress
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-06-22 09:45:57</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-06-22 09:45:57</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>147</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040623161518</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-06-22 15:58:48</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Minor additions to calculateProductPrice</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-06-22 15:58:48</issue_when>
+ <thetext>Implements a &quot;Percent of Default Price&quot; price action for price rules and checks
+both default and list prices when there is a &quot;Promotional Price Override&quot; price
+action.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-06-22 15:59:22</issue_when>
+ <thetext>Created an attachment (id=72)
+minor additions to calculateProductPrice
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-06-23 16:15:18</issue_when>
+ <thetext>Okay, this patch is in. Thanks for working on this and sending it over Si.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>72</attachid>
+ <date>2004-06-22 15:59:22</date>
+ <desc>minor additions to calculateProductPrice</desc>
+ <ispatch>1</ispatch>
+ <filename>calculateProductPrice.patch</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/72/calculateProductPrice.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-06-22 15:59:22</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=72)
+minor additions to calculateProductPrice
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-06-23 16:15:18</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-06-23 16:15:18</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>148</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>WORKSFORME</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040730233418</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-06-23 05:42:27</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Duplicate invoices for the same order under some cicumstances.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-23 05:42:27</issue_when>
+ <thetext>With &quot;Offline Payments&quot;, from the order detail page it is possible to
+receive payments: when the payments cover the order&apos;s grand total an invoice
+is generated; also when the shipment to which the order is issued changes
+its status to PACKED an invoice is created: this can cause the creation
+of two different invoices for the same order.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 21:11:52</issue_when>
+ <thetext>I cannot duplicate this problem; I attempted an offline order, received the payment - no invoice was
+created; issued a quick ship a single invoice was created. Please provide more details.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-07-30 23:34:18</issue_when>
+ <thetext>I cannot believe... I have tried again and the problem is gone away.
+However I&apos;m totally sure (99%) that this was an issue...
+</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-06-23 16:16:30</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-30 23:34:18</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-30 23:34:18</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>WORKSFORME</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>149</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040818085225</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-06-26 01:51:16</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Patch for bug that happens when you try to cancel an order item.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-26 01:51:16</issue_when>
+ <thetext>In revision 1.30 of the services.xml file for the order component, the require-
+new-transaction=&quot;true&quot; was added to the resetGrandTotal service: this causes
+problems when you cancel an order item because the resetGrandTotal is one of
+the services that are triggered and it seems to hang up the process waiting for
+a transaction (at least this happens with SAP-DB).
+
+The attached patch removes the require-new-transaction=&quot;true&quot; parameter and
+this solves the problem; however I don&apos;t know if this could cause other
+problems in different parts of the system.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-26 01:51:58</issue_when>
+ <thetext>Created an attachment (id=73)
+Patch in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-08-18 08:52:25</issue_when>
+ <thetext>The patch has been applied.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>73</attachid>
+ <date>2004-06-26 01:51:58</date>
+ <desc>Patch in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>services.xml.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/73/services.xml.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-06-26 01:51:58</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=73)
+Patch in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-08-18 08:52:25</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-08-18 08:52:25</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>150</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040630190556</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-06-26 01:56:29</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>When you receive a purchase order the order lines are declared completed (also multiple times) even if it&apos;s not true.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-26 01:56:29</issue_when>
+ <thetext>The attached patch fixes two bugs that caused the problem.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-26 01:56:53</issue_when>
+ <thetext>Created an attachment (id=74)
+Tha patch in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-06-30 19:05:56</issue_when>
+ <thetext>patch applied to CVS</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>74</attachid>
+ <date>2004-06-26 01:56:53</date>
+ <desc>Tha patch in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>OrderSimpleMethods.xml.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/74/OrderSimpleMethods.xml.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-06-26 01:56:53</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=74)
+Tha patch in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:05:56</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:05:56</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>151</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040630224402</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-06-26 02:01:14</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In order entry, if no party is selected, during the checkout process some errors are generated: this patch fix the problem by disabling the checkout link if the party is missing.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-26 02:01:14</issue_when>
+ <thetext>In order entry, if no party is selected, during the checkout process some
+errors are generated: this patch fix the problem by disabling the checkout link
+if the party is missing.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-26 02:01:41</issue_when>
+ <thetext>Created an attachment (id=75)
+Patch in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-06-30 19:19:39</issue_when>
+ <thetext>I cannot duplicate this issue; is it still a problem?</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-30 22:44:02</issue_when>
+ <thetext>Hmmm, now it seems to work for me, too.
+I&apos;m wondering if something is changed during the last 10 days... I was quite
+sure about this problem.
+By the way, I&apos;m going to declare resolved this issue, thanks.
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>75</attachid>
+ <date>2004-06-26 02:01:41</date>
+ <desc>Patch in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>noparty.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/75/noparty.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-06-26 02:01:41</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=75)
+Patch in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-06-30 22:44:02</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-06-30 22:44:02</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>152</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P4</priority>
+ <resolution>LATER</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040630192805</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>jacopo</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-06-26 02:13:57</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Shipping location is missing in purchase orders: this causes problems when you try to cancel an order item.</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-26 02:13:57</issue_when>
+ <thetext>In purchase order the shipping location address is not set and this causes
+problems when you try to cancel order items (the shipping location is used is
+some service that are triggered in this situation, such as the calcTax service
+etc...).
+In my opinion the best solution is to add a shipping location address to the
+purchase order.
+The address could be that of the facility that will receive the po.
+
+I have also attached a patch (not a good one, so probably you shouldn&apos;t apply
+it) that fix this problem by allowing, during order entry, to select one of the
+addresses of the facility that is linked to the productStore for which the
+purchase order is taken: so in the checkinits page the store selection should
+be enabled for purchase orders too.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-06-26 02:14:21</issue_when>
+ <thetext>Created an attachment (id=76)
+Patch in UOF
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-06-30 19:28:05</issue_when>
+ <thetext>Sounds like there are more issues here. First off most likely tax should not be calculated for purchase
+orders; nor should the same shipping charges which apply to sales orders should not apply to purchase
+orders.
+
+I will see what I can do when working on some additional PO enhancements.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>76</attachid>
+ <date>2004-06-26 02:14:20</date>
+ <desc>Patch in UOF</desc>
+ <ispatch>1</ispatch>
+ <filename>shipping_address.patch</filename>
+ <submitter_id>194</submitter_id>
+ <submitting_username>jacopo</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/76/shipping_address.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-06-26 02:14:22</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=76)
+Patch in UOF
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:28:05</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-06-30 19:28:05</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>LATER</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>153</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P5</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040707011403</delta_ts>
+ <subcomponent>Service</subcomponent>
+ <reporter>eckardjf</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-07-05 12:19:00</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>purgeOldJobs service leaves artifacts</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>eckardjf</who>
+ <issue_when>2004-07-05 12:19:00</issue_when>
+ <thetext>The purgeOldJobs service will remove qualifying JobSandbox entities, but will not remove the related
+RuntimeData, RecurrenceInfo and RecurrenceRule entities (even if they are not referenced by an
+existing WorkEffort).</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:14:03</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>154</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040707150844</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-07-06 12:49:26</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Unknown import</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-06 12:49:26</issue_when>
+ <thetext>Region.java imports com.sun.rsasign.r. When compiling with jikes, this class is
+not available. Removing the import, and the class compiles fine, so it&apos;s
+obviously not needed.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-06 12:49:58</issue_when>
+ <thetext>Created an attachment (id=77)
+Remove the bad import
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-07 15:08:44</issue_when>
+ <thetext>This import has now been removed, not even sure why it was there in the first place... Thanks Adam.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>77</attachid>
+ <date>2004-07-06 12:49:58</date>
+ <desc>Remove the bad import</desc>
+ <ispatch>1</ispatch>
+ <filename>Region.java.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/77/Region.java.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-07-06 12:49:58</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=77)
+Remove the bad import
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 15:08:44</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 15:08:44</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>155</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040707011249</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-07-06 14:27:26</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>UtilCache does not allow for null keys</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-06 14:27:26</issue_when>
+ <thetext>UtilCache doesn&apos;t allow null keys to be stored. This is sub-optimal, and
+actually causes problems with my enhanced entity cache code. Attached patch fixes.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-06 14:28:17</issue_when>
+ <thetext>Created an attachment (id=78)
+Allow for null keys
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-07 01:12:49</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>78</attachid>
+ <date>2004-07-06 14:28:17</date>
+ <desc>Allow for null keys</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-null-key.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/78/UtilCache-null-key.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-07-06 14:28:17</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=78)
+Allow for null keys
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:12:49</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:12:49</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>156</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040707011312</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-07-06 14:30:09</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allow specifying the expire time on put in UtilCache</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-06 14:30:09</issue_when>
+ <thetext>Add a new put method, that takes an expireTime parameter.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-06 14:30:31</issue_when>
+ <thetext>Created an attachment (id=79)
+The patch.
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-07 01:13:12</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>79</attachid>
+ <date>2004-07-06 14:30:31</date>
+ <desc>The patch.</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-put-takes-expireTime.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/79/UtilCache-put-takes-expireTime.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-07-06 14:30:31</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=79)
+The patch.
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:13:12</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:13:12</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>157</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040707011225</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-07-06 14:35:33</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>In UtilCache, allow for a list of property bases to be specified</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-06 14:35:33</issue_when>
+ <thetext>When a UtilCache instance is created, it currently will only look for a single
+matching property value, by name. This patch allows for a list of base property
+names to be specified, and the first one found will be used.
+
+I make use of this in my entity cache code. For instance:
+==
+Cache.entity-list.${delegator-name}.${entity-name}.expireTime=1800000
+Cache.entity-list.${delegator-name}.${entity-name}.maxSize=500
+
+# high count, low access
+# 5 minute cache time
+Cache.entity-list.${delegator-name}.PartyAttribute=300000
+==</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-06 14:35:48</issue_when>
+ <thetext>Created an attachment (id=80)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-07 01:12:25</issue_when>
+ <thetext>This is now in CVS, thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>80</attachid>
+ <date>2004-07-06 14:35:48</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>UtilCache-wildcard-config.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/80/UtilCache-wildcard-config.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-07-06 14:35:48</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=80)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:12:25</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:12:25</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>158</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040707011838</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-07-06 17:08:44</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>distinct attribute for getProductFeatures is not working</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-07-06 17:08:44</issue_when>
+ <thetext>distinct attribute for getProductFeatures service does not work because it is
+trying to use ProductFeatureType rather than ProductFeatureTypeId in
+ProductServices.prodGetFeatures</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-07-06 17:16:51</issue_when>
+ <thetext>Created an attachment (id=81)
+Corrects productFeatureType to productFeatureTypeId
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-07 01:18:38</issue_when>
+ <thetext>It&apos;s in CVS now, thanks Si!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>81</attachid>
+ <date>2004-07-06 17:16:51</date>
+ <desc>Corrects productFeatureType to productFeatureTypeId</desc>
+ <ispatch>1</ispatch>
+ <filename>ProductServices_1.patch</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/81/ProductServices_1.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-07-06 17:16:51</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=81)
+Corrects productFeatureType to productFeatureTypeId
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:18:38</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:18:38</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>159</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040707012137</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-07-06 17:26:05</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Adds productFeatureApplTypeId field to getProductFeatureSet service</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-07-06 17:26:05</issue_when>
+ <thetext>Adds productFeatureApplTypeId as optional field to getProductFeatureSet service.
+ If none is specified, it will still search for &quot;SELECTABLE_FEATURE&quot;s (to be
+compatible with existing code), but if one is specified, it will use that
+productFeatureApplTypeId, so the same service can now be used to search for
+STANDARD, DISTINGUISHING, OPTIONAL features.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-07-06 17:27:49</issue_when>
+ <thetext>Created an attachment (id=82)
+Extends getProductFeatures with optional productFeatureApplTypeId field
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-07 01:21:37</issue_when>
+ <thetext>It&apos;s in CVS now, thanks Si!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>82</attachid>
+ <date>2004-07-06 17:27:49</date>
+ <desc>Extends getProductFeatures with optional productFeatureApplTypeId field</desc>
+ <ispatch>1</ispatch>
+ <filename>ProductServices_2.patch</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/82/ProductServices_2.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-07-06 17:27:49</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=82)
+Extends getProductFeatures with optional productFeatureApplTypeId field
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:21:37</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 01:21:37</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>160</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040707144701</delta_ts>
+ <subcomponent>Entity Extensions</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-07-07 07:27:45</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>implement condition versions of functions in entityext</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-07 07:27:45</issue_when>
+ <thetext>I had sent an earlier version of this patch to the mailing list. I&apos;m now adding
+it as an issue, as I have for all the other patches.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-07 07:28:22</issue_when>
+ <thetext>Created an attachment (id=83)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-07 14:47:01</issue_when>
+ <thetext>This is now in CVS. Thanks Adam!</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>83</attachid>
+ <date>2004-07-07 07:28:22</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>cache-entityext.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/83/cache-entityext.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-07-07 07:28:22</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=83)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 14:47:01</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-07 14:47:01</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>161</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040708153407</delta_ts>
+ <subcomponent>WebTools</subcomponent>
+ <reporter>doogie</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-07-08 11:51:01</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>NPE in FindUtilCacheElements.jsp</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-08 11:51:01</issue_when>
+ <thetext>Missed one NPE when key is null(calls key.toString()).</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-08 11:51:22</issue_when>
+ <thetext>Created an attachment (id=84)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-08 15:34:07</issue_when>
+ <thetext>Thanks Adam, it is now in CVS.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>84</attachid>
+ <date>2004-07-08 11:51:22</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>FindUtilCacheElements.jsp.patch</filename>
+ <submitter_id>270</submitter_id>
+ <submitting_username>doogie</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/84/FindUtilCacheElements.jsp.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>doogie</user>
+ <when>2004-07-08 11:51:22</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=84)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-08 15:34:07</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-08 15:34:07</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>162</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>WORKSFORME</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040713170819</delta_ts>
+ <subcomponent>Workflow</subcomponent>
+ <reporter>ktippetts</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-07-12 09:32:42</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>Linux</op_sys>
+ <short_desc>NoSuchMethodError in Entity Data Maintenance</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ktippetts</who>
+ <issue_when>2004-07-12 09:32:42</issue_when>
+ <thetext>Getting this error when trying to view entity data in Webtools | Entity Data
+Maintenance:
+
+&lt;snip&gt;
+Exception: java.lang.NoSuchMethodError
+Message:
+org.ofbiz.entity.condition.EntityFieldMap.&lt;init&gt;(Ljava/util/Map;Lorg/ofbiz/entity/condition/EntityOperator;)V
+----- stack trace ----------------------------------------
+java.lang.NoSuchMethodError:
+org.ofbiz.entity.condition.EntityFieldMap.&lt;init&gt;(Ljava/util/Map;Lorg/ofbiz/entity/condition/EntityOperator;)V
+org.apache.jsp.entity.FindGeneric_jsp._jspService(FindGeneric_jsp.java:159)
+&lt;snip&gt;
+
+To duplicate Using CVS code as of 09Jul2004:
+* Webtools &gt; Entity Data Maintenance
+* Click &apos;All&apos; on any entity.
+
+Possible Solution:
+* in FindGeneric.jsp (line 94) change 2nd parameter to EntityJoinOperator.AND</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-07-12 20:41:10</issue_when>
+ <thetext>This works fine from a clean compile, but if have partial old code and partial new code in a build it may
+have problems. Try an &quot;ant clean&quot; and then an &quot;ant&quot;.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>doogie</who>
+ <issue_when>2004-07-13 17:08:19</issue_when>
+ <thetext>The signature of the constructor changed. It used to take an EntityOperator.
+However, the code only accepted an EntityJoinOperator. Passing in an
+EntityComparisonOperator would have caused it to fail.
+
+Also, running ant clean will *not* fix the problem. The parsed/compiled jsp
+pages need to be cleaned out.</thetext>
+ </long_desc>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-12 20:41:10</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-12 20:41:10</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>WORKSFORME</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>163</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Documentation</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040730150851</delta_ts>
+ <subcomponent>website</subcomponent>
+ <reporter>michaelrempel</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>TASK</issue_type>
+ <creation_ts>2004-07-13 11:11:43</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>cant get csv instructions</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>michaelrempel</who>
+ <issue_when>2004-07-13 11:11:43</issue_when>
+ <thetext>When I pull up csv instructions for either the wincsv or command line, I get a
+logon request screen, even though I am logged on.
+
+Thx
+
+Michael Rempel</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 15:08:51</issue_when>
+ <thetext>This is a java.net related issue not OFBiz; please contact the Java.Net team for help.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 15:08:51</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 15:08:51</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>164</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040730204811</delta_ts>
+ <subcomponent>Security</subcomponent>
+ <reporter>adrianc</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-07-14 12:24:23</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>SecurityData.xml File</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>adrianc</who>
+ <issue_when>2004-07-14 12:24:23</issue_when>
+ <thetext>From mailing list:
+
+On Jul 14, 2004, at 12:03 PM, Adrian Crum wrote:
+
+&gt; I was just wondering...
+&gt;
+&gt; Why is the security data for ALL components in the SecurityData.xml file? This
+file looks monolithic. Shouldn&apos;t each component load its own security data?
+&gt;
+&gt; -Adrian
+
+
+Adrian,
+
+Yes, good point, monolithic is a good word for this. Ideally it should be split
+up, I think that&apos;s a good idea.
+
+If anyone wants to work on this please do... In the mean time it might be a good
+idea to create an issue for it.
+
+-David</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 20:48:11</issue_when>
+ <thetext>applied patch file(s); now in CVS</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 20:48:11</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 20:48:11</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>165</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P4</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040730065021</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>pgoron</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-07-15 06:34:37</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allow user to specify default value for desired delivery date and comment fields in order entry GUI</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-07-15 06:34:37</issue_when>
+ <thetext>This patch allows user to define default desired delivery date and default
+comment during quickaddform filling in OrderEntry page. Thus, users are not
+obliged any more to reinput these informations for each order item.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-07-15 06:35:35</issue_when>
+ <thetext>Created an attachment (id=85)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-07-30 06:50:21</issue_when>
+ <thetext>The patch is in CVS.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>85</attachid>
+ <date>2004-07-15 06:35:35</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>order20040707.patch</filename>
+ <submitter_id>392</submitter_id>
+ <submitting_username>pgoron</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/85/order20040707.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>pgoron</user>
+ <when>2004-07-15 06:35:35</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=85)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-15 16:16:54</when>
+ <field_name>assigned_to</field_name>
+ <field_desc>Assigned To</field_desc>
+ <oldvalue>issues@ofbiz</oldvalue>
+ <newvalue>ajzeneski</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-07-15 16:16:54</when>
+ <field_name>issue_type</field_name>
+ <field_desc>Issue Type</field_desc>
+ <oldvalue>ENHANCEMENT</oldvalue>
+ <newvalue>PATCH</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-30 06:50:21</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-30 06:50:21</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>166</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040730115233</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>pgoron</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-07-21 02:46:56</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Allow user to associate parties to an order in OrderEntry website</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-07-21 02:46:56</issue_when>
+ <thetext>Hi,
+
+Currently, I did not found any way to associate additional parties to an order.
+That&apos;s why I&apos;ve written this enhancement patch.
+
+
+This patch adds a new step during order entry in which user can associate
+additional party&amp;role to order. Then, these informations are stored in OrderRole
+entity.
+
+
+List of modifications :
+- I&apos;ve written a new view in which user can select a party and party&apos;s role to
+associate to order
++ webapp/ordermgr/entry/SetAdditionalParty.ftl
++ webapp/ordermgr/WEB-INF/actions/entry/SetAdditionalParty.bsh
++ webapp/ordermgr/WEB-INF/pagedefs/entry/SetAdditionalParty.xml
++ webapp/ordermgr/entry/AdditionalPartyListing.ftl
++ webapp/ordermgr/WEB-INF/actions/entry/AdditionalPartyListing.bsh
++ webapp/ordermgr/entry/PartySettingsForm.xml
+M webapp/ordermgr/WEB-INF/controller.xml
+
+- I&apos;ve included list of additional parties associated to order in confimorder view
+M webapp/ordermgr/entry/confirmorder.ftl
+M webapp/ordermgr/WEB-INF/pagedefs/entry/confirmorder.xml
+
+- I&apos;ve modified these files so that my view is shown before order confirmation
+M src/org/ofbiz/order/shoppingcart/CheckOutEvents.java
+M webapp/ordermgr/entry/showcart.ftl
+
+- I&apos;ve modified storeOrder service and ShoppingCart to take in account
+additional parties.
+M servicedef/services.xml
+M src/org/ofbiz/order/order/OrderServices.java
+M src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java
+M src/org/ofbiz/order/shoppingcart/ShoppingCart.java
+
+- I&apos;ve copied some files from content module to be able to use GenericLookup.
++ src/org/ofbiz/order/lookupParams.java
++ webapp/ordermgr/lookup/FieldLookupForms.xml
++ webapp/ordermgr/lookup/GenericLookup.ftl
++ webapp/ordermgr/templates/lookup.ftl
++ webapp/ordermgr/templates/lookup.xml
++ webapp/ordermgr/WEB-INF/actions/includes/findprepLk.bsh
++ webapp/ordermgr/WEB-INF/actions/includes/formprep.bsh
++ webapp/ordermgr/WEB-INF/actions/includes/pagelistprepLk.bsh
++ webapp/ordermgr/WEB-INF/pagedefs/lookup/GenericLookup.xml</thetext>
+ </long_desc>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-07-21 02:47:42</issue_when>
+ <thetext>Created an attachment (id=86)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-07-22 00:38:39</issue_when>
+ <thetext>I&apos;ve found some minor mistakes. I am correcting them and I will send a new patch
+as soon as possible.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-07-22 01:29:07</issue_when>
+ <thetext>Created an attachment (id=87)
+The corrected patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jacopo</who>
+ <issue_when>2004-07-30 11:52:33</issue_when>
+ <thetext>The patches are in CVS.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>86</attachid>
+ <date>2004-07-21 02:47:42</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>order20040721.patch</filename>
+ <submitter_id>392</submitter_id>
+ <submitting_username>pgoron</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/86/order20040721.patch</attachment_iz_url>
+ </attachment>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>87</attachid>
+ <date>2004-07-22 01:29:07</date>
+ <desc>The corrected patch</desc>
+ <ispatch>1</ispatch>
+ <filename>order20040722.patch</filename>
+ <submitter_id>392</submitter_id>
+ <submitting_username>pgoron</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/87/order20040722.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>pgoron</user>
+ <when>2004-07-21 02:47:42</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=86)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>pgoron</user>
+ <when>2004-07-22 01:29:07</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=87)
+The corrected patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-30 11:52:33</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jacopo</user>
+ <when>2004-07-30 11:52:33</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>167</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040730145814</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-07-28 17:15:09</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Fixes a couple of other getNextSeqId methods</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-07-28 17:15:09</issue_when>
+ <thetext>getNextSeqId now returns a string(), so .toString() is no longer needed and will
+cause runtime exceptions.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-07-28 17:19:29</issue_when>
+ <thetext>Created an attachment (id=88)
+Changes getNextSeqId usage to PaymentGatewayServices and GenericAsyncEngine
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 14:58:14</issue_when>
+ <thetext>patch applied</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>88</attachid>
+ <date>2004-07-28 17:19:29</date>
+ <desc>Changes getNextSeqId usage to PaymentGatewayServices and GenericAsyncEngine</desc>
+ <ispatch>1</ispatch>
+ <filename>changes.txt</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/88/changes.txt</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-07-28 17:19:29</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=88)
+Changes getNextSeqId usage to PaymentGatewayServices and GenericAsyncEngine
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 14:58:14</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 14:58:14</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>168</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040730144804</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>pgoron</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-07-29 02:43:55</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>FreeMarker localization issues</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-07-29 02:43:55</issue_when>
+ <thetext>Hi,
+
+This patch resolves some localization issues. Currently, FreeMarker formats
+number according to the machine&apos;s locale. My patch forces FreeMarker to use the
+user session&apos;s locale.
+
+It must be applied in ofbiz/components/content/src/org/ofbiz/content/webapp/ftl
+folder.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-07-29 02:45:19</issue_when>
+ <thetext>Created an attachment (id=89)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 14:48:04</issue_when>
+ <thetext>This has been fixed in CVS</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>89</attachid>
+ <date>2004-07-29 02:45:19</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>locale-freemaker-200040727.patch</filename>
+ <submitter_id>392</submitter_id>
+ <submitting_username>pgoron</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/89/locale-freemaker-200040727.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>pgoron</user>
+ <when>2004-07-29 02:45:19</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=89)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 14:48:04</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 14:48:04</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>169</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>PC</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040730220642</delta_ts>
+ <subcomponent>E-Commerce</subcomponent>
+ <reporter>amheiss</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-07-30 09:53:11</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc>https://localhost:8443/ecommerce/control/finalizeOrder</issue_file_loc>
+ <votes></votes>
+ <op_sys>Linux</op_sys>
+ <short_desc>Party/Userlogin issues</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>amheiss</who>
+ <issue_when>2004-07-30 09:53:11</issue_when>
+ <thetext>Application will not allow run of createPartyPostalAddress (due to null user
+login?). Sequence of events from july 30th, 11am build: goto ecommerce,
+login, then logout. attempt to use anonymous checkout after this, and shipping
+address feilds prepopulated with previous logins settings. After adjusting and
+trying to save, get error &apos;User authorization is required for this service:
+createPartyPostalAddress &apos; .
+
+Debug output from shipsettings.bsh:
+Debug.log(&quot;party ID : &quot; + partyId); ---&gt; output admin ( i logged in as admin,
+then logged out)
+Debug.log(&quot;ul: &quot; + session.getAttribute(&quot;userLogin&quot;)); ---&gt; (null)</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-07-30 22:06:42</issue_when>
+ <thetext>Yes, if there is an autoUserLogin attribute available that will break anonymous checkout. In theory, the
+anonymous checkout links should not be displayed if there is an auto-userlogin. However, I have added
+some code to clear this when entering the anonymous checkout process.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 22:06:42</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-07-30 22:06:42</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>170</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040804093020</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>ENHANCEMENT</issue_type>
+ <creation_ts>2004-08-03 17:02:41</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Optionally duplicates ProductContent when duplicating a Product</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-08-03 17:02:41</issue_when>
+ <thetext>Will now optionally duplicate ProductContent entries when duplicating a Product</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-08-03 17:03:19</issue_when>
+ <thetext>Created an attachment (id=90)
+Patches services.xml, EditProduct.ftl, and ProductServices.xml
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-08-04 09:30:20</issue_when>
+ <thetext>Thanks Si. This is now in CVS. I also did a content remove option, and fixed an issue I noticed with the
+product IDs (GoodIdentification). BTW, this is from a slightly earlier version of OFBiz than the current
+CVS as this form has been moved to the file EditProductDupForm.ftl.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>90</attachid>
+ <date>2004-08-03 17:03:19</date>
+ <desc>Patches services.xml, EditProduct.ftl, and ProductServices.xml</desc>
+ <ispatch>1</ispatch>
+ <filename>duplicateProduct.patch</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/90/duplicateProduct.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-08-03 17:03:19</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=90)
+Patches services.xml, EditProduct.ftl, and ProductServices.xml
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-04 09:30:20</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-04 09:30:20</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>171</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P2</priority>
+ <resolution>FIXED</resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040804091929</delta_ts>
+ <subcomponent>Product</subcomponent>
+ <reporter>pgoron</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-08-04 00:59:53</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Comparaison bug in InventoryServices.xml minilang script</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-08-04 00:59:53</issue_when>
+ <thetext>Some if-compare element forget to declare type used to compare fields. By
+default, string comparison is used whereas Double is required.
+
+
+Applying patch :
+cd /ofbiz/components/product/script/org/ofbiz/product/inventory
+patch -p0 &lt; InventoryServices.xml.patch</thetext>
+ </long_desc>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-08-04 01:01:13</issue_when>
+ <thetext>Created an attachment (id=91)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-08-04 09:19:29</issue_when>
+ <thetext>Thanks, it&apos;s now in CVS.</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>91</attachid>
+ <date>2004-08-04 01:01:13</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>InventoryServices.xml.patch</filename>
+ <submitter_id>392</submitter_id>
+ <submitting_username>pgoron</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/91/InventoryServices.xml.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>pgoron</user>
+ <when>2004-08-04 01:01:13</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=91)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-04 09:19:29</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-04 09:19:29</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>172</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P2</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040819033400</delta_ts>
+ <subcomponent>Order</subcomponent>
+ <reporter>pgoron</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-08-05 07:09:49</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Bug in shippableWeight calculation from OrderReadHelper.getShippableWeight method</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-08-05 07:09:49</issue_when>
+ <thetext>Hi,
+
+The purpose of this patch is to solve a bug in
+OrderReadHelper.getShippableWeight method. The algorithm of shippable weight
+calculation don&apos;t care of order item&apos;s quantity. So there is an inconsistency
+with ShoppingCart.getShippableWeight method when order is modified after his
+creation (for example, by RecalcShippingTotal service).
+
+Applying patch:
+cd ofbiz/components/order/src/org/ofbiz/order/order
+patch -p0 &lt; OrderReadHelper-20040805.patch
+
+Peter Goron</thetext>
+ </long_desc>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-08-05 07:10:36</issue_when>
+ <thetext>Created an attachment (id=92)
+The patch
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>pgoron</who>
+ <issue_when>2004-08-19 03:34:00</issue_when>
+ <thetext>Created an attachment (id=96)
+An up to date patch
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>92</attachid>
+ <date>2004-08-05 07:10:36</date>
+ <desc>The patch</desc>
+ <ispatch>1</ispatch>
+ <filename>OrderReadHelper-20040805.patch</filename>
+ <submitter_id>392</submitter_id>
+ <submitting_username>pgoron</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/92/OrderReadHelper-20040805.patch</attachment_iz_url>
+ </attachment>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>96</attachid>
+ <date>2004-08-19 03:34:00</date>
+ <desc>An up to date patch</desc>
+ <ispatch>1</ispatch>
+ <filename>OrderReadHelper-200408019.patch</filename>
+ <submitter_id>392</submitter_id>
+ <submitting_username>pgoron</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/96/OrderReadHelper-200408019.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>pgoron</user>
+ <when>2004-08-05 07:10:36</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=92)
+The patch
+</newvalue>
+ </activity>
+ <activity>
+ <user>pgoron</user>
+ <when>2004-08-19 03:34:00</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=96)
+An up to date patch
+</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>173</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>INVALID</resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>PC</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040809165336</delta_ts>
+ <subcomponent>Startup</subcomponent>
+ <reporter>mn</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-08-09 13:38:08</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>Linux</op_sys>
+ <short_desc>typo in base/config/debug.properties</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>mn</who>
+ <issue_when>2004-08-09 13:38:08</issue_when>
+ <thetext>Index: base/config/debug.properties
+===================================================================
+RCS file: /cvs/ofbiz/base/config/debug.properties,v
+retrieving revision 1.10
+diff -u -r1.10 debug.properties
+--- base/config/debug.properties 9 Jun 2004 18:12:59 -0000 1.10
++++ base/config/debug.properties 9 Aug 2004 19:32:33 -0000
+@@ -7,7 +7,7 @@
+ pack.exception=true
+
+ # These top level switches are used before calling Log4J, or if Log4J is not used
+-print.verbose=ftrue
++print.verbose=true
+ print.timing=true
+ print.info=true
+ print.important=true</thetext>
+ </long_desc>
+ <long_desc>
+ <who>mn</who>
+ <issue_when>2004-08-09 13:40:09</issue_when>
+ <thetext>Created an attachment (id=93)
+corerct typo for print.verbose property
+</thetext>
+ </long_desc>
+ <long_desc>
+ <who>jonesde</who>
+ <issue_when>2004-08-09 16:25:29</issue_when>
+ <thetext>In this case &quot;ftrue&quot; is not a misspelling of &quot;true&quot;, we add the &quot;f&quot; before &quot;true&quot; so that it is easier to switch
+between true and false than it would be to type out &quot;true&quot; and &quot;false&quot;. In other words, anything but
+&quot;true&quot; is false.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>mn</who>
+ <issue_when>2004-08-09 16:53:36</issue_when>
+ <thetext>What about placing comment into debug.properties about this decision?</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>93</attachid>
+ <date>2004-08-09 13:40:09</date>
+ <desc>corerct typo for print.verbose property</desc>
+ <ispatch>1</ispatch>
+ <filename>debug.properties.patch</filename>
+ <submitter_id>377</submitter_id>
+ <submitting_username>mn</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/93/debug.properties.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>mn</user>
+ <when>2004-08-09 13:40:09</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=93)
+corerct typo for print.verbose property
+</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-09 16:25:29</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>jonesde</user>
+ <when>2004-08-09 16:25:29</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>INVALID</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>174</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040810161004</delta_ts>
+ <subcomponent>Accounting</subcomponent>
+ <reporter>amheiss</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>PATCH</issue_type>
+ <creation_ts>2004-08-10 16:08:36</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>retry failed auths fix</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>amheiss</who>
+ <issue_when>2004-08-10 16:08:36</issue_when>
+ <thetext>retryFailedAuths service was creating superfluous retryFailedOrderAuth
+services. I&apos;ll see if i can attach the patch to check on order status before
+dispatching retryFailedOrderAuth service. If not, patch will be to dev list
+soon enough.</thetext>
+ </long_desc>
+ <long_desc>
+ <who>amheiss</who>
+ <issue_when>2004-08-10 16:10:04</issue_when>
+ <thetext>Created an attachment (id=94)
+Patch for retryFailedAuth fix
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>94</attachid>
+ <date>2004-08-10 16:10:04</date>
+ <desc>Patch for retryFailedAuth fix</desc>
+ <ispatch>1</ispatch>
+ <filename>retryAuth.patch</filename>
+ <submitter_id>336</submitter_id>
+ <submitting_username>amheiss</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/94/retryAuth.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>amheiss</user>
+ <when>2004-08-10 16:10:04</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=94)
+Patch for retryFailedAuth fix
+</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>175</issue_id>
+ <issue_status>RESOLVED</issue_status>
+ <priority>P3</priority>
+ <resolution>FIXED</resolution>
+ <component>foo</component>
+ <version>unspecified</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>ajzeneski</assigned_to>
+ <delta_ts>20040817213241</delta_ts>
+ <subcomponent>bar</subcomponent>
+ <reporter>ajzeneski</reporter>
+ <target_milestone>milestone 1</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-08-17 21:31:38</creation_ts>
+ <qa_contact>ajzeneski</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>bar</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-08-17 21:31:38</issue_when>
+ <thetext>foo</thetext>
+ </long_desc>
+ <long_desc>
+ <who>ajzeneski</who>
+ <issue_when>2004-08-17 21:32:41</issue_when>
+ <thetext>.</thetext>
+ </long_desc>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-08-17 21:32:41</when>
+ <field_name>issue_status</field_name>
+ <field_desc>Status</field_desc>
+ <oldvalue>NEW</oldvalue>
+ <newvalue>RESOLVED</newvalue>
+ </activity>
+ <activity>
+ <user>ajzeneski</user>
+ <when>2004-08-17 21:32:41</when>
+ <field_name>resolution</field_name>
+ <field_desc>Resolution</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>FIXED</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>176</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Components</component>
+ <version>CVS</version>
+ <rep_platform>All</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040818174622</delta_ts>
+ <subcomponent>Content</subcomponent>
+ <reporter>sichen</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>DEFECT</issue_type>
+ <creation_ts>2004-08-18 17:45:44</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>All</op_sys>
+ <short_desc>Possible bug in renderContentAsText</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-08-18 17:45:44</issue_when>
+ <thetext>It seems that renderContentAsText is still trying to do a findByAnd on
+SubContentDataResourceView with a fromDate as the orderBy, whereas
+renderContentAsTextCache no longer does (it passes a null.) We got an
+exception from this in ProductContentWrapper and made this change to fix it.
+Is this a defect?</thetext>
+ </long_desc>
+ <long_desc>
+ <who>sichen</who>
+ <issue_when>2004-08-18 17:46:22</issue_when>
+ <thetext>Created an attachment (id=95)
+Changes findByAnd of SubContentDataResourceView
+</thetext>
+ </long_desc>
+ <attachment encoding='Base64'>
+ <mimetype>text/plain</mimetype>
+ <attachid>95</attachid>
+ <date>2004-08-18 17:46:22</date>
+ <desc>Changes findByAnd of SubContentDataResourceView</desc>
+ <ispatch>1</ispatch>
+ <filename>ContentWorker.patch</filename>
+ <submitter_id>178</submitter_id>
+ <submitting_username>sichen</submitting_username>
+ <data></data>
+ <attachment_iz_url>https://ofbiz.dev.java.net/nonav/issues/showattachment.cgi/95/ContentWorker.patch</attachment_iz_url>
+ </attachment>
+ <activity>
+ <user>sichen</user>
+ <when>2004-08-18 17:46:22</when>
+ <field_name>attachments.ispatch</field_name>
+ <field_desc>Attachment is Patch</field_desc>
+ <oldvalue></oldvalue>
+ <newvalue>Created an attachment (id=95)
+Changes findByAnd of SubContentDataResourceView
+</newvalue>
+ </activity>
+</issue>
+<issue status_code="200" status_message="OK">
+ <issue_id>177</issue_id>
+ <issue_status>NEW</issue_status>
+ <priority>P3</priority>
+ <resolution></resolution>
+ <component>Base</component>
+ <version>CVS</version>
+ <rep_platform>Other</rep_platform>
+ <assigned_to>issues@ofbiz</assigned_to>
+ <delta_ts>20040910075014</delta_ts>
+ <subcomponent>Base</subcomponent>
+ <reporter>lrawley</reporter>
+ <target_milestone>not determined</target_milestone>
+ <issue_type>TASK</issue_type>
+ <creation_ts>2004-09-10 07:50:14</creation_ts>
+ <qa_contact>issues@ofbiz</qa_contact>
+ <status_whiteboard></status_whiteboard>
+ <issue_file_loc></issue_file_loc>
+ <votes></votes>
+ <op_sys>Windows XP</op_sys>
+ <short_desc>HTTP Header needs Expires</short_desc>
+ <keywords></keywords>
+ <long_desc>
+ <who>lrawley</who>
+ <issue_when>2004-09-10 07:50:14</issue_when>
+ <thetext>Using Internet Explorer 6.0 with settings for automatically obtaining newer
+versions of page.
+
+Images are cached and if changed are not refreshed on visits to the same page.
+Pages get cached with login page because the first time a user requested they
+were prompted to login first and then redirected to the page.
+
+This behavior is resolved if set to obtain newer versions on every visit,
+however, this causes performance issues. So, automatically is the desired
+browser setting.
+
+I would like to be able to set the EXPIRE in the HTTP header. I&apos;m not sure
+where this change needs to occur. Can you assist? Is this available in 3.0?
+I am using 2.1.1.
+
+Please contact me at lrawley@tla.com.
+
+Lisa Rawley</thetext>
+ </long_desc>
+</issue>
+</issuezilla>
diff --git a/test/rexml/data/pi.xml b/test/rexml/data/pi.xml
new file mode 100644
index 0000000000..980bbf98ec
--- /dev/null
+++ b/test/rexml/data/pi.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<foo>
+ <?cheese is tasty?>
+ <bar>
+ <baz/>
+ <cheese/>
+ <baz/>
+ <?toast is tasty?>
+ <cheese/>
+ <baz/>
+ </bar>
+ <?cheese is gooey?>
+</foo>
diff --git a/test/rexml/data/pi2.xml b/test/rexml/data/pi2.xml
new file mode 100644
index 0000000000..46bce4505f
--- /dev/null
+++ b/test/rexml/data/pi2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<a>
+ <b>foo</b>
+ <?toc order-by="x"?>
+ <c>bar</c>
+</a>
diff --git a/test/rexml/data/project.xml b/test/rexml/data/project.xml
new file mode 100644
index 0000000000..a02582fde5
--- /dev/null
+++ b/test/rexml/data/project.xml
@@ -0,0 +1 @@
+<Project id="17" Name="dave test" Deprecated="false"><Creator User="etools" Date="10/24/00 10:54 AM"></Creator><LastModifier User="Default" Date="Fri Jun 22 14:01:54 PDT 2001"></LastModifier><Description>tool testing</Description><Purpose> </Purpose><Datasets><link name="Test data 1" idref="18"></link><link name="veg plot data" idref="21"></link></Datasets></Project>
diff --git a/test/rexml/data/simple.xml b/test/rexml/data/simple.xml
new file mode 100644
index 0000000000..3cff71a02b
--- /dev/null
+++ b/test/rexml/data/simple.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" ?>
+<root><a>a</a><b>b</b><c><d>d</d></c></root>
diff --git a/test/rexml/data/stream_accents.xml b/test/rexml/data/stream_accents.xml
new file mode 100644
index 0000000000..6def54ee55
--- /dev/null
+++ b/test/rexml/data/stream_accents.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<g>
+<f a="é" />
+</g>
diff --git a/test/rexml/data/t63-1.xml b/test/rexml/data/t63-1.xml
new file mode 100644
index 0000000000..f8d0c543ef
--- /dev/null
+++ b/test/rexml/data/t63-1.xml
Binary files differ
diff --git a/test/rexml/data/t63-2.svg b/test/rexml/data/t63-2.svg
new file mode 100644
index 0000000000..706c0e96bd
--- /dev/null
+++ b/test/rexml/data/t63-2.svg
@@ -0,0 +1,2828 @@
+ÿþ<?xml version="1.0" encoding="UTF-16"?>
+<svg height="647px" width="1024px" viewBox="-800000 -505508 1600000 1011016" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:rgr="http://www.abbnm.com/ranger">
+ <defs>
+ <font id="pedDef" horiz-adv-x="1470">
+ <font-face font-family="PED2" units-per-em="2048" panose-1="0 0 0 0 0 0 0 0 0 0" ascent="1536" descent="-348" alphabetic="0"/>
+ <missing-glyph horiz-adv-x="1024"/>
+ <glyph unicode="“!" glyph-name="down-arrow" horiz-adv-x="848" d="M14 819L424 0L834 819L526 614V1434H322V614L14 819Z"/>
+ <glyph unicode="’!" glyph-name="right-arrow" horiz-adv-x="1460" d="M625 410L1444 819L625 1229L829 922H10V717H829L625 410Z"/>
+ <glyph unicode="!" glyph-name="left-arrow" horiz-adv-x="1460" d="M836 1229L16 819L836 410L631 717H1450V922H631L836 1229Z"/>
+ <glyph unicode="‘!" glyph-name="up-arrow" horiz-adv-x="848" d="M834 614L424 1434L14 614L322 819V0H526V819L834 614Z"/>
+ <glyph unicode="—!" glyph-name="ne-arrow" horiz-adv-x="1118" d="M809 360L1098 1229L229 940L592 868L12 289L158 143L737 723L809 360Z"/>
+ <glyph unicode="˜!" glyph-name="se-arrow" horiz-adv-x="1118" d="M229 494L1098 205L809 1073L737 711L158 1290L12 1145L592 565L229 494Z"/>
+ <glyph unicode="–!" glyph-name="nw-arrow" horiz-adv-x="1118" d="M889 940L20 1229L309 360L381 723L961 143L1106 289L526 868L889 940Z"/>
+ <glyph unicode="™!" glyph-name="sw-arrow" horiz-adv-x="1118" d="M309 1073L20 205L889 494L526 565L1106 1145L961 1290L381 711L309 1073Z"/>
+ <glyph unicode="%" glyph-name="vert-bar" horiz-adv-x="2355" d="M1229 -410H1126V1843H1229V-410Z"/>
+ <glyph unicode="%" glyph-name="sw-corner" horiz-adv-x="2355" d="M1126 1843V614H2355V717H1229V1843H1126Z"/>
+ <glyph unicode="%" glyph-name="horiz-bar" horiz-adv-x="2355" d="M0 614H2355V717H0V614Z"/>
+ <glyph unicode="%" glyph-name="right-t" horiz-adv-x="2355" d="M1229 614H2355V717H1229V1843H1126V-410H1229V614Z"/>
+ <!-- The following glyphs reside in the private use area of the Unicode standard -->
+ <glyph unicode="à" glyph-name="thin-rt-arrow" horiz-adv-x="1808" d="M1741 666L1024 307L1229 614H0V717H1229L1024 1024L1741 666Z"/>
+ <glyph unicode="à" glyph-name="ground" horiz-adv-x="1128" d="M463 -51H666V-51V51H463V-51V-51ZM819 307V205H309V307H819ZM973 563V461H156V563H973ZM2 717H1126V819H614V1434H514V819H2V717Z"/>
+ <glyph unicode="à" glyph-name="ground-right" horiz-adv-x="1509" d="M1491 666V868V868H1389V666H1491V666ZM1133 1022H1235V512H1133V1022ZM877 1176H979V358H877V1176ZM723 205V1329H621V817H6V717H621V205H723Z"/>
+ </font>
+ <g id="symbol639">
+ <title>SYMBOL 640</title>
+ <g stroke="none" transform=" translate(27, -27)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">OFF</text>
+ </g>
+ </g>
+ <g id="symbol641">
+ <title>SYMBOL 642</title>
+ <g stroke="none">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">NORMAL</text>
+ </g>
+ </g>
+ <g id="symbol642">
+ <title>SYMBOL 643</title>
+ <g stroke="none" transform=" translate(27, -27)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">ARMED</text>
+ </g>
+ </g>
+ <g id="symbol643">
+ <title>SYMBOL 644</title>
+ <g stroke="none">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">ALARM</text>
+ </g>
+ </g>
+ <g id="symbol645">
+ <title>SYMBOL 646</title>
+ <g stroke="none">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">FAILED</text>
+ </g>
+ </g>
+ <g id="symbol651">
+ <title>SYMBOL 652</title>
+ <g stroke="none" transform=" translate(27, -27)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">ON</text>
+ </g>
+ </g>
+ <g id="symbol659">
+ <title>SYMBOL 660</title>
+ <g stroke="none" transform=" translate(27, -27)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">AUTO</text>
+ </g>
+ </g>
+ <g id="symbol674">
+ <title>SYMBOL 675</title>
+ <g stroke="none">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">MARGINAL</text>
+ </g>
+ </g>
+ <g id="symbol834">
+ <title>SYMBOL 835</title>
+ <g stroke="none" transform=" translate(0, 0)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">TRIPPED</text>
+ </g>
+ </g>
+ <g id="symbol921">
+ <title>SYMBOL 922</title>
+ <g stroke="none">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">MANUAL</text>
+ </g>
+ </g>
+ <g id="symbol1679">
+ <title>Select</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">S</text>
+ </g>
+ </g>
+ <g id="symbol1680">
+ <title>Unack</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">U</text>
+ </g>
+ </g>
+ <g id="symbol1681">
+ <title>Alarm</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">A</text>
+ </g>
+ </g>
+ <g id="symbol1682">
+ <title>Deact</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">D</text>
+ </g>
+ </g>
+ <g id="symbol1683">
+ <title>Alinh</title>
+ <g stroke="none" transform=" translate(-1790, 6666)">
+ <text font-size="24357" font-family="PED2, Times New Roman" xml:space="preserve">I</text>
+ </g>
+ </g>
+ <g id="symbol1684">
+ <title>Telem</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">E</text>
+ </g>
+ </g>
+ <g id="symbol1685">
+ <title>Manual</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">M</text>
+ </g>
+ </g>
+ <g id="symbol1686">
+ <title>TagInfo</title>
+ <g stroke="none" transform=" translate(-1751, 2911)">
+ <text font-size="9955" font-family="PED2, Times New Roman" xml:space="preserve">I</text>
+ </g>
+ <g fill="none" stroke-width="1000" style=" stroke-dasharray: 16000 0 ;">
+ <polygon points="-5833,-335 -509,5833 4659,-335 -509,-6326 -5833,-335 ">
+ </polygon>
+ </g>
+ </g>
+ <g id="symbol1687">
+ <title>TagCtl</title>
+ <g fill="none" stroke-width="1000" style=" stroke-dasharray: 16000 0 ;">
+ <polygon points="-5000,81 323,6249 5493,81 323,-5909 -5000,81 ">
+ </polygon>
+ </g>
+ <g stroke="none" transform=" translate(-3418, 3327)">
+ <text font-size="9955" font-family="PED2, Arial" xml:space="preserve">N</text>
+ </g>
+ </g>
+ <g id="symbol1688">
+ <title>TagCls</title>
+ <g fill="none" stroke-width="1000" style=" stroke-dasharray: 16000 0 ;">
+ <polygon points="-5000,81 323,6249 5493,81 323,-5909 -5000,81 ">
+ </polygon>
+ </g>
+ <g stroke="none" transform=" translate(-3418, 3327)">
+ <text font-size="9955" font-family="PED2, Arial" xml:space="preserve">H</text>
+ </g>
+ </g>
+ <g id="symbol1689">
+ <title>TagOpn</title>
+ <g stroke="none" transform=" translate(-3418, 3327)">
+ <text font-size="9955" font-family="PED2, Arial" xml:space="preserve">O</text>
+ </g>
+ <g fill="none" stroke-width="1000" style=" stroke-dasharray: 16000 0 ;">
+ <polygon points="-5000,81 323,6249 5493,81 323,-5909 -5000,81 ">
+ </polygon>
+ </g>
+ </g>
+ <g id="symbol1690">
+ <title>RDV</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">R</text>
+ </g>
+ </g>
+ <g id="symbol1691">
+ <title>Gmerr</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">G</text>
+ </g>
+ </g>
+ <g id="symbol1692">
+ <title>Limovr</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">O</text>
+ </g>
+ </g>
+ <g id="symbol1693">
+ <title>Limit1</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">1</text>
+ </g>
+ </g>
+ <g id="symbol1694">
+ <title>Kimit2</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">2</text>
+ </g>
+ </g>
+ <g id="symbol1695">
+ <title>Limit3</title>
+ <g stroke="none" transform=" translate(-8456, 6666)">
+ <text font-size="24357" font-family="PED2, Arial" xml:space="preserve">3</text>
+ </g>
+ </g>
+ </defs>
+ <rgr:update display="A118TH-SO1">
+ </rgr:update>
+ <rgr:timestamp date="10301" time="57116000">
+ </rgr:timestamp>
+ <rect id="background" x="-800000" y="-505508" height="1011016" width="1600000" fill="#000000">
+ </rect>
+ <g id="layer32">
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -313333)">
+ <text font-size="18018" font-family="PED2, Arial" xml:space="preserve">03/16/06 ADDED DFK 6 -- K. POPE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -353333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">01/05/05 FIXED DFK'S -- K. POPE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -373333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">10/14/04 CHANGED ACRONYM FOR REG CONTROL TO MANUAL / AUTO -- O. WAHLSTROM</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -473333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">12/24/03 DISPLAY BUILT AND DATA ADDED -- K. POPE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -453333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">01/06/04 DISPLAY CORRECTED PER R. MCCORMICK -- N. FISHER</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -433333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">03/18/04 DISPLAY UPDATED/DFK'S FIXED/APPENDED SYMBOLS MOVED -- T. TURNER</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -413333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">03/29/04 REVIEWED -- O. WAHLSTROM</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -393333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">05/11/04 RTU BOX FIXED AND DISPLAY UPDATED -- K. POPE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-780000, -333333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">10/18/05 REMOVED BUS VOLT MAXIMUM ALARM -- K. POPE</text>
+ </g>
+ </g>
+ </g>
+ <g id="layer1">
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-179999, -466666)">
+ <text font-size="30029" font-family="PED2, Arial" xml:space="preserve">118TH SOUTH (118TH-SO)</text>
+ </g>
+ </g>
+ <g>
+ <g fill="none" stroke-width="1000" style=" stroke-dasharray: 16000 0 ;" stroke="#e1d3b3">
+ <rect x="-753333" y="-500000" height="46666" width="1506666">
+ </rect>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(481450, -466666)">
+ <text font-size="25825" font-family="PED2, Arial" xml:space="preserve">Salt Lake County, Utah</text>
+ </g>
+ </g>
+ <g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#e1d3b3">
+ <rect x="-753333" y="-26666" height="520791" width="1506666">
+ </rect>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-600000, 180000)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">REG 1 AUTOMATIC (C)</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-600000, 73333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">To control regulator, right click on the tap position</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-600000, 100000)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">indication and select the regulation option.</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(19999, -226666)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 TEMPERATURE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(19999, -199999)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 NITROGEN CYL LOW</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(19999, -253333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 LOW OIL LEVEL</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(19999, -173333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 NITROGEN PRESSURE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(20000, -146666)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 PRESSURE FAULT</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(20000, -119999)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 LTC CONTROL LOSS</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -93333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">RELAY LOSS OF AC</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -119999)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">STATION SERVICE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(20000, -279999)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 LTC FAIL</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(20000, -306666)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 WINDING TEMP TRIP</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(20000, -333333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 LOCKOUT</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -253333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">CONTROL SYSTEM FAIL</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -279999)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">UNDER FREQ TRIP RELAY</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -306666)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">CB LOW SPRING CHARGE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -333333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">RELAY FAILURE</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -146666)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">CAP 1 VOLT CONTROL (C)</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -173333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">HMI PLC STALLED</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -199999)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">XFMR 1 LTC FILTER</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-406666, -226666)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">CONTROL SYSTEM NON CRITICAL</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-86666, -406666)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">Station Alarms</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-140000, 20000)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">Regulator 1 Control and Tap Position</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-600000, 213333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">REG 1 TAP POSITION</text>
+ </g>
+ </g>
+ <g transform="translate(-260000, 180000)" id="elm139">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol921" stroke="#ff0000" fill="#ff0000" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol659" stroke="#00ffff" fill="#00ffff" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(77484, -6019) scale(0.678085)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(91920, -6019) scale(0.678085)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="REG 1 AUTOMATIC">
+ </rgr:ranger>
+ </g>
+ <g>
+ <g stroke="none" fill="#ba8864">
+ <polygon points="-59607,187500 -59607,212499 59607,212499 59607,187500 -59607,187500 ">
+ </polygon>
+ </g>
+ <g stroke="none" fill="#ffedb5">
+ <polygon points="63333,183333 -63333,183333 -59607,187500 59607,187500 63333,183333 ">
+ </polygon>
+ </g>
+ <g stroke="none" fill="#96825a">
+ <polyline points="63333,216666 59607,212499 59607,187500 63333,183333 ">
+ </polyline>
+ </g>
+ <g stroke="none" fill="#ffedb5">
+ <polygon points="-63333,183333 -59607,187500 -59607,212499 -63333,216666 -63333,183333 ">
+ </polygon>
+ </g>
+ <g stroke="none" fill="#96825a">
+ <polyline points="-63333,216666 -59607,212500 59607,212500 63333,216666 ">
+ </polyline>
+ </g>
+ </g>
+ <g id="elm141">
+ <g id="appended" transform="translate(-266371, 214890)">
+ <g transform="translate(33332, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(43242, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <g stroke="none" fill="#00ffff" transform=" translate(-266371, 214890)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">- 12 </text>
+ </g>
+ <rgr:ranger type="analog" presentation="numeric" leftJust="false" pos=" " neg="-" substation="118TH.SO" point="REG 1 TAP POSITION">
+ </rgr:ranger>
+ </g>
+ <g id="elm142">
+ <g id="appended" transform="translate(-366666, 400000)">
+ <g transform="translate(66365, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(76274, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <g stroke="none" fill="#00ffff" transform=" translate(-366666, 400000)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">- 1234.6 </text>
+ </g>
+ <rgr:ranger type="analog" presentation="numeric" leftJust="false" pos=" " neg="-" substation="118TH.SO" point="REG 1 A.PH 12KV BV">
+ </rgr:ranger>
+ </g>
+ <g id="elm143">
+ <g id="appended" transform="translate(-199999, 400000)">
+ <g transform="translate(66365, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(76274, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <g stroke="none" fill="#00ffff" transform=" translate(-199999, 400000)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">- 1234.6 </text>
+ </g>
+ <rgr:ranger type="analog" presentation="numeric" leftJust="false" pos=" " neg="-" substation="118TH.SO" point="REG 1 B.PH 12KV BV">
+ </rgr:ranger>
+ </g>
+ <g id="elm144">
+ <g id="appended" transform="translate(-39999, 400000)">
+ <g transform="translate(66365, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(76274, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <g stroke="none" fill="#00ffff" transform=" translate(-39999, 400000)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">- 1234.6 </text>
+ </g>
+ <rgr:ranger type="analog" presentation="numeric" leftJust="false" pos=" " neg="-" substation="118TH.SO" point="REG 1 C.PH 12KV BV">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -119999)" id="elm145">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 LTC CONTRL LOSS">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -146666)" id="elm146">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 PRESSURE FAULT">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -173333)" id="elm147">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 NITROGEN PRESS.">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -199999)" id="elm148">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 NITROGEN CYL LO">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -226666)" id="elm149">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 TEMP">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -253333)" id="elm150">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 LOW OIL LEVEL">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -333333)" id="elm151">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 LOCKOUT">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -306666)" id="elm152">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 WINDING TEMP">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(306666, -279999)" id="elm153">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 LTC FAIL">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-120000, -93333)" id="elm154">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="RELAY LOSS OF AC">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119999, -119999)" id="elm155">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="STATION SERVICE">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119704, -146666)" id="elm156">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol639" stroke="#ff0000" fill="#ff0000" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol651" stroke="#00ffff" fill="#00ffff" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(44470, -6033) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(58885, -6033) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="CAP 1 VOLT CTRL">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119999, -173333)" id="elm157">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="HMI PLC STALLED">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119999, -199999)" id="elm158">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="XFMR 1 LTC FILTER">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119999, -226666)" id="elm159">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="CTRL SYSTEM NON CRIT">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119999, -253333)" id="elm160">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="CTRL SYSTEM FAIL">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119999, -279999)" id="elm161">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="UNDER FREQ TRIP RELAY">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119999, -306666)" id="elm162">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="CB LOW SPRING CHARGE">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-119999, -333333)" id="elm163">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(80479, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(94893, -6005) scale(0.677063)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="RELAY FAIL">
+ </rgr:ranger>
+ </g>
+ <g id="elm164">
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 49201)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">16</text>
+ </g>
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 99717)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">12</text>
+ </g>
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 150234)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">8</text>
+ </g>
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 200750)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">4</text>
+ </g>
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 251267)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">0</text>
+ </g>
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 301783)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">-4</text>
+ </g>
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 352300)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">-8</text>
+ </g>
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 402816)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">-12</text>
+ </g>
+ <g stroke="none" fill="#bfbfbf" transform=" translate(476402, 453333)">
+ <text font-size="29514" font-family="PED2, Arial" xml:space="preserve">-16</text>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="414435,445954 414435,41822 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,41822 414435,41822 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,92339 414435,92339 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,142855 414435,142855 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,193372 414435,193372 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,243888 414435,243888 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,294405 414435,294405 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,344921 414435,344921 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,395438 414435,395438 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="462930,445954 414435,445954 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,54451 414435,54451 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,67081 414435,67081 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,79710 414435,79710 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,104968 414435,104968 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,117597 414435,117597 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,130226 414435,130226 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,155484 414435,155484 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,168113 414435,168113 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,180743 414435,180743 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,206001 414435,206001 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,218630 414435,218630 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,231259 414435,231259 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,256517 414435,256517 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,269146 414435,269146 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,281776 414435,281776 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,307034 414435,307034 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,319663 414435,319663 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,332292 414435,332292 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,357550 414435,357550 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,370179 414435,370179 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,382808 414435,382808 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,408067 414435,408067 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,420696 414435,420696 ">
+ </polyline>
+ </g>
+ <g fill="none" stroke-width="2000" style=" stroke-dasharray: 16000 0 ;" stroke="#bfbfbf">
+ <polyline points="438683,433325 414435,433325 ">
+ </polyline>
+ </g>
+ <rgr:ranger type="analog" presentation="meter" min="-16.000000" max="16.000000" propagationDir="0" displayDir="1" substation="118TH.SO" point="REG 1 TAP POSITION">
+ </rgr:ranger>
+ <g fill="none" stroke="#ff0000" stroke-width="2000">
+ <polyline points="0,0 0,0 0,0 0,0 0,0">
+ </polyline>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-599290, 400000)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">REG 1 12KV BUS VOLTS</text>
+ </g>
+ </g>
+ <g id="elm166">
+ <g id="appended" transform="translate(-26371, 208223)">
+ <g transform="translate(33332, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(43242, -6005) scale(0.677048)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <g stroke="none" fill="#1a1a1a" transform=" translate(-26371, 208223)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">- 12 </text>
+ </g>
+ <rgr:ranger type="analog" presentation="numeric" leftJust="false" pos=" " neg="-" substation="118TH.SO" point="REG 1 TAP POSITION">
+ </rgr:ranger>
+ </g>
+ <g transform="translate(-506666, -353333)" id="elm167">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol834" stroke="#ff0000" fill="#ff0000" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol642" stroke="#00ffff" fill="#00ffff" visibility="hidden">
+ </use>
+ </g>
+ <g id="appended">
+ <g transform="translate(83490, -6019) scale(0.678085)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ <g transform="translate(97926, -6019) scale(0.678085)">
+ <use visibility="hidden" xlink:href="#symbol1679" stroke="#ffea00" fill="#ffea00">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1680" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1681" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1682" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1683" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1684" stroke="#377800" fill="#377800">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1685" stroke="#00ffff" fill="#00ffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1686" stroke="#ffffff" fill="#ffffff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1687" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1688" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1689" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1690" stroke="#5555ff" fill="#5555ff">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1691" stroke="#fe00fe" fill="#fe00fe">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1692" stroke="#ff6e05" fill="#ff6e05">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1693" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1694" stroke="#ff0000" fill="#ff0000">
+ </use>
+ <use visibility="hidden" xlink:href="#symbol1695" stroke="#ff0000" fill="#ff0000">
+ </use>
+ </g>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="118TH.SO" point="ENTRY">
+ </rgr:ranger>
+ </g>
+ <g>
+ <g stroke="none" fill="#ffffff" transform=" translate(-740000, -393333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">RTU STATUS:</text>
+ </g>
+ </g>
+ <g transform="translate(-506666, -393333)" id="elm169">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol639" stroke="#ff0000" fill="#ff0000" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol651" stroke="#00ffff" fill="#00ffff" visibility="hidden">
+ </use>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="RTUERR.SE" point="481">
+ </rgr:ranger>
+ </g>
+ <g>
+ <g stroke="none" fill="#ffffff" transform=" translate(-740000, -373333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">RTU COMMUNICATIONS:</text>
+ </g>
+ </g>
+ <g>
+ <g stroke="none" fill="#eeeeee" transform=" translate(-740000, -353333)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">ENTRY</text>
+ </g>
+ </g>
+ <g>
+ <g fill="none" stroke-width="1000" style=" stroke-dasharray: 16000 0 ;" stroke="#e1d3b3">
+ <rect x="-753333" y="-446666" height="106666" width="339999">
+ </rect>
+ </g>
+ </g>
+ <g>
+ <g fill="none" stroke-width="1000" style=" stroke-dasharray: 16000 0 ;" stroke="#e1d3b3">
+ <polyline points="-413333,-419999 -753333,-419999 ">
+ </polyline>
+ </g>
+ </g>
+ <g transform="translate(-506666, -373333)" id="elm174">
+ <g id="status" transform="translate(0, 0)">
+ <use xlink:href="#symbol645" stroke="#ff0000" fill="#ff0000" visibility="inherit">
+ </use>
+ <use xlink:href="#symbol641" stroke="#00ffff" fill="#00ffff" visibility="hidden">
+ </use>
+ <use xlink:href="#symbol674" stroke="#ffea00" fill="#ffea00" visibility="hidden">
+ </use>
+ <use xlink:href="#symbol643" stroke="#ff0000" fill="#ff0000" visibility="hidden">
+ </use>
+ </g>
+ <rgr:ranger type="discrete" pos="+" neg="-" presentation="symbolic" substation="RTUERR.COM" point="481">
+ </rgr:ranger>
+ </g>
+ <g>
+ <g stroke="none" fill="#e1d3b3" transform=" translate(-626666, -426666)">
+ <text font-size="18017" font-family="PED2, Arial" xml:space="preserve">RTU - 481</text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/test/rexml/data/t75.xml b/test/rexml/data/t75.xml
new file mode 100644
index 0000000000..0911fb1b1a
--- /dev/null
+++ b/test/rexml/data/t75.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><?pos="3"?>
+<!-- generated by hnb 1.9.17 (http://hnb.sourceforge.net) -->
+
+<!DOCTYPE tree[
+ <!ELEMENT tree (node*)>
+ <!ELEMENT data (#PCDATA)> <!-- (max 4096 bytes long) -->
+ <!ELEMENT node (data?,node*)>
+ <!ATTLIST node done (yes|no) #IMPLIED
+ type CDATA #IMPLIED
+ >]>
+
+<tree>
+<node done="no" type="todo"><data>Next_Actions</data>
+ <node done="no" type="todo"><data>@class</data></node>
+ <node done="no" type="todo"><data>@agenda</data>
+ <node done="yes" type="todo"><data>this is something I&apos;d like to do</data></node>
+ </node>
+ <node done="no" type="todo"><data>@dorm</data>
+ <node done="no" type="todo"><data>clean room</data></node>
+ </node>
+ <node done="no" type="todo"><data>@computer</data>
+ <node done="no" type="todo"><data>Write general makefile for cs projects</data></node>
+ <node done="no" type="todo"><data>Set up bash podder</data></node>
+ </node>
+ <node done="no" type="todo"><data>@errands</data>
+ <node done="no" type="todo"><data>Purchase geo lab book</data></node>
+ </node>
+ <node done="no" type="todo"><data>@dublin</data></node>
+</node>
+<node><data>projects</data></node>
+</tree>
diff --git a/test/rexml/data/test/tests.xml b/test/rexml/data/test/tests.xml
new file mode 100644
index 0000000000..cf03b42b0b
--- /dev/null
+++ b/test/rexml/data/test/tests.xml
@@ -0,0 +1,683 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tests xmlns:var="http://jaxen.org/test-harness/var">
+ <!-- test for jaxen-24 -->
+ <document url="xml/jaxen24.xml">
+ <context select="/body/div">
+ <test select="preceding::*[1]" count="1"/>
+ <valueOf select="local-name(preceding::*[1])">span</valueOf>
+ </context>
+ <!-- jaxen-58 -->
+ <context select="/">
+ <test select="//preceding::x" count="0"/>
+ <test select="//following::x" count="0"/>
+ <test select="/descendant::*/preceding::x" count="0"/>
+ <test select="/descendant::node()/preceding::x" count="0"/>
+ </context>
+ </document>
+
+ <!-- test for jaxen-3 -->
+ <document url="xml/simple.xml">
+ <context select="/">
+ <valueOf select="string()">abd</valueOf>
+ </context>
+ <context select="/root">
+ <valueOf select="string()">abd</valueOf>
+ </context>
+ <context select="/root/a">
+ <valueOf select="string()">a</valueOf>
+ </context>
+ <context select="/root/c">
+ <valueOf select="string()">d</valueOf>
+ </context>
+ </document>
+
+
+ <!-- test for jaxen-3 -->
+ <document url="xml/jaxen3.xml">
+ <context select="/">
+ <test select="/Configuration/hostname/attrlist/hostname[. = 'CE-A'] " count="1"/>
+ </context>
+ </document>
+
+ <!-- parser test cases all of which should fail-->
+ <document url="xml/numbers.xml">
+ <context select="/">
+ <!-- repeated xpaths, jaxen-35 -->
+ <test exception="true" select="/numbers numbers" count="0"/>
+ <!-- invalid xpath, jaxen-34 -->
+ <test exception="true" select="/a/b[c > d]efg" count="0"/>
+ <!-- invalid xpath, jaxen-27 -->
+ <test exception="true" select="/inv/child::" count="0"/>
+ <!-- invalid xpath, jaxen-26 -->
+ <!--
+
+ <test exception="true" select="/invoice/@test[abcd" count="0"/>
+ <test exception="true" select="/invoice/@test[abcd > x" count="0"/>
+
+ <test exception="true" select="string-length('a" count="0"/>
+ <test exception="true" select="/descendant::()" count="0"/>
+ <test exception="true" select="(1 + 1" count="0"/>
+
+ -->
+ </context>
+ </document>
+
+
+ <!-- test cases for the use of underscores in names -->
+ <document url="xml/underscore.xml">
+ <context select="/">
+ <test select="/root/@a" count="1"/>
+ <test select="/root/@_a" count="1"/>
+ <test select="/root/b" count="1"/>
+ <test select="/root/_b" count="1"/>
+ <valueOf select="/root/@a">1</valueOf>
+ <valueOf select="/root/@_a">2</valueOf>
+ <valueOf select="/root/b">1</valueOf>
+ <valueOf select="/root/_b">2</valueOf>
+ </context>
+ </document>
+
+ <!-- test cases for the use of = with nodesets -->
+ <document url="xml/web.xml">
+ <context select="/">
+ <valueOf select="/web-app/servlet/servlet-name = 'file'">true</valueOf>
+ <valueOf select="/web-app/servlet/servlet-name = 'snoop'">true</valueOf>
+ </context>
+ </document>
+
+ <document url="xml/numbers.xml">
+ <context select="/">
+ <valueOf select="/numbers/set/nr = '-3'">true</valueOf>
+ <valueOf select="/numbers/set/nr = -3">true</valueOf>
+ <valueOf select="/numbers/set/nr = 24">true</valueOf>
+ <valueOf select="/numbers/set/nr/@value = '9999'">true</valueOf>
+ <valueOf select="/numbers/set/nr/@value = 9999.0">true</valueOf>
+ <valueOf select="/numbers/set/nr/@value = 66">true</valueOf>
+ </context>
+ </document>
+
+ <!-- test basic math... -->
+ <document url="xml/numbers.xml">
+ <context select="/">
+ <valueOf select="(8 * 2 + 1) = 17">true</valueOf>
+ <valueOf select="(1 + 8 * 2) = 17">true</valueOf>
+ <valueOf select="(7 - 3 + 1) = 5">true</valueOf>
+ <valueOf select="(8 - 4 + 5 - 6) = 3">true</valueOf>
+ <!-- left-assoc tests, comments show WRONG evaluation -->
+ <!-- 3 - 2 - 1 != 2 -->
+ <valueOf select="3 - 2 - 1">0</valueOf>
+ <!-- 8 div 4 div 2 != 4 -->
+ <valueOf select="8 div 4 div 2">1</valueOf>
+ <!-- 3 mod 5 mod 7 != 1 -->
+ <valueOf select="3 mod 7 mod 5">3</valueOf>
+ <!-- 1=(2=2) is true-->
+ <valueOf select="1 = 2 = 2">false</valueOf>
+ <!-- 2!=(3!=1) => 2!=1 => true, (2!=3)!=1 => 1!=1 => false -->
+ <valueOf select="2 != 3 != 1">false</valueOf>
+ <!-- 3 > (2 > 1) is true -->
+ <valueOf select="3 &gt; 2 &gt; 1">false</valueOf>
+ <!-- 3 >= (2 >= 2) is true -->
+ <valueOf select="3 &gt;= 2 &gt;= 2">false</valueOf>
+ <!-- 1 < (2 < 3) is false -->
+ <valueOf select="1 &lt; 2 &lt; 3">true</valueOf>
+ <!-- 0 <= (2 <= 3) is true -->
+ <valueOf select="2 &lt;= 2 &lt;= 3">true</valueOf>
+ </context>
+ </document>
+
+ <!-- test cases for preceding axis with different node types -->
+ <document url="xml/pi2.xml">
+ <context select="/a/c">
+ <test select="//processing-instruction()" count="1"/>
+ <test select="preceding-sibling::*" count="1"/>
+ <test select="preceding-sibling::node()" count="5"/>
+ <test select="preceding-sibling::*[1]" count="1"/>
+ <test select="preceding-sibling::processing-instruction()" count="1"/>
+ <valueOf select="preceding-sibling::processing-instruction()">order-by="x"</valueOf>
+ <valueOf select="preceding-sibling::*[1]">foo</valueOf>
+ <valueOf select="preceding-sibling::node()[2]">order-by="x"</valueOf>
+ </context>
+ </document>
+
+ <document url="xml/id.xml">
+ <context select="/"
+ var:foobar="foobar"
+ var:foo="foo">
+ <valueOf select="$foobar">foobar</valueOf>
+ <test select="/foo[@id=$foobar]" count="1"/>
+ <test select="/foo[@id='$foobar']" count="0"/>
+ <test select="/foo[concat($foo, 'bar')=@id]" count="1"/>
+ <test select="CD_Library/artist[@name=$artist]" count="0"/>
+ </context>
+ </document>
+
+ <document url="xml/id.xml">
+ <context select="/">
+ <!-- attributes have a parent: their element -->
+ <test select="/foo/@id/parent::foo" count="1"/>
+ </context>
+ <!-- attributes can also be used as context nodes -->
+ <context select="/foo/@id">
+ <test select="parent::foo" count="1"/>
+ </context>
+ </document>
+
+ <document url="xml/pi.xml">
+ <context select="/">
+ <test select="//processing-instruction()" count="3"/>
+ <test select="//processing-instruction('cheese')" count="2"/>
+ <test select="//processing-instruction('toast')" count="1">
+ <valueOf select="string()">is tasty</valueOf>
+ </test>
+ </context>
+
+ </document>
+
+ <!-- test evaluate() extension function -->
+ <document url="xml/evaluate.xml">
+ <context select="/">
+ <test select="evaluate('//jumps/*')" count="3"/>
+ <test select="evaluate('//jumps/object/dog')" count="1"/>
+ <test select="evaluate('//jumps/object')/evaluate" count="0"/>
+ <test select="evaluate('//jumps/object')/dog" count="1"/>
+ <test select="evaluate('//jumps/*')/dog" count="1"/>
+ <test select="//metatest[ evaluate(@select) = . ]" count="1"/>
+ </context>
+ </document>
+
+ <document url="xml/numbers.xml">
+ <context select="/numbers/set[1]">
+ <test select="*[-3 = .]" count="1"/>
+ <valueOf select="54 &lt; *">true</valueOf>
+ <valueOf select="55 &lt;= *">true</valueOf>
+ <valueOf select="69 &lt; *">false</valueOf>
+ <valueOf select="-2 &gt; *">true</valueOf>
+ <valueOf select="-3 &gt;= *">true</valueOf>
+ <valueOf select="-4 &gt;= *">false</valueOf>
+ </context>
+ <!-- TODO
+ This context should work, but needs a fixed version of saxpath to parse the right-hand side
+ of the greater-than expression.
+ <context select="/numbers/set[2]">
+ <valueOf select="1 &gt; nr/@value">false</valueOf>
+ <valueOf select="55 &gt; nr/@value">false</valueOf>
+ <valueOf select="55 &gt;= nr/@value">true</valueOf>
+ <valueOf select="1000000 &gt; nr/@value">true</valueOf>
+ </context>
+ -->
+ </document>
+
+
+ <!-- test sibling axes -->
+ <document url="xml/axis.xml">
+
+ <context select="/root">
+ <test select="preceding-sibling::*" count="0"/>
+ </context>
+
+ <context select="/root/a/a.3">
+ <test select="preceding::*" count="2"/>
+ </context>
+
+ <context select="/root/a/a.3">
+ <test select="preceding-sibling::*" count="2"/>
+ </context>
+
+ <context select="/">
+ <valueOf select="name(/root/a/a.3/preceding-sibling::*[1])">a.2</valueOf>
+ <valueOf select="name(/root/a/a.3/preceding-sibling::*[2])">a.1</valueOf>
+ </context>
+
+ <context select="/">
+ <valueOf select="name(/root/a/a.3/following-sibling::*[1])">a.4</valueOf>
+ <valueOf select="name(/root/a/a.3/following-sibling::*[2])">a.5</valueOf>
+ </context>
+
+ </document>
+
+
+ <document url="xml/web.xml">
+
+ <context select="/">
+ <valueOf select="/web-app/servlet[1]/servlet-name">snoop</valueOf>
+ <valueOf select="/web-app/servlet[1]/servlet-name/text()">snoop</valueOf>
+ <valueOf select="/web-app/servlet[2]/servlet-name">file</valueOf>
+ <valueOf select="/web-app/servlet[2]/servlet-name/text()">file</valueOf>
+ </context>
+
+ <context select="/web-app/servlet[1]">
+ <valueOf select="servlet-name">snoop</valueOf>
+ <valueOf select="servlet-name/text()">snoop</valueOf>
+ </context>
+
+ <context select="/web-app/servlet[2]/servlet-name">
+ <test select="preceding::*" count="3"/>
+ </context>
+
+ <context select="/web-app/servlet[2]/servlet-name">
+ <test select="following::*" count="13"/>
+ </context>
+
+ </document>
+
+
+ <!-- test name -->
+
+ <document url="xml/web.xml">
+ <context select="/">
+
+ <test select="*" count="1">
+ <valueOf select="name()">web-app</valueOf>
+ </test>
+
+ <!-- NOTE that the child::node() tests only work if the
+ XML document does not comments or PIs
+ -->
+
+ <test select="./*" count="1">
+ <valueOf select="name()">web-app</valueOf>
+ </test>
+ <test select="child::*" count="1">
+ <valueOf select="name()">web-app</valueOf>
+ </test>
+ <test select="/*" count="1">
+ <valueOf select="name()">web-app</valueOf>
+ </test>
+ <test select="/child::node()" count="1">
+ <valueOf select="name(.)">web-app</valueOf>
+ </test>
+ <test select="child::node()" count="1">
+ <valueOf select="name(.)">web-app</valueOf>
+ </test>
+
+ <!-- empty names -->
+
+ <valueOf select="name()"></valueOf>
+ <valueOf select="name(.)"></valueOf>
+ <valueOf select="name(parent::*)"></valueOf>
+ <valueOf select="name(/)"></valueOf>
+ <valueOf select="name(/.)"></valueOf>
+ <valueOf select="name(/self::node())"></valueOf>
+
+ <!-- name of root elemet -->
+ <valueOf select="name(node())">web-app</valueOf>
+ <valueOf select="name(/node())">web-app</valueOf>
+ <valueOf select="name(/*)">web-app</valueOf>
+ <valueOf select="name(/child::*)">web-app</valueOf>
+ <valueOf select="name(/child::node())">web-app</valueOf>
+ <valueOf select="name(/child::node())">web-app</valueOf>
+ <valueOf select="name(child::node())">web-app</valueOf>
+ <valueOf select="name(./*)">web-app</valueOf>
+ <valueOf select="name(*)">web-app</valueOf>
+
+ </context>
+
+ <context select="/*">
+ <!-- empty names -->
+ <valueOf select="name(..)"></valueOf>
+ <valueOf select="name(parent::node())"></valueOf>
+ <valueOf select="name(parent::*)"></valueOf>
+
+ <!-- name of root elemet -->
+ <valueOf select="name()">web-app</valueOf>
+ <valueOf select="name(.)">web-app</valueOf>
+ <valueOf select="name(../*)">web-app</valueOf>
+ <valueOf select="name(../child::node())">web-app</valueOf>
+ </context>
+ </document>
+
+
+
+ <!-- test predicates -->
+
+ <document url="xml/nitf.xml">
+ <context select="/nitf/head/docdata">
+ <test select="doc-id[@regsrc='AP' and @id-string='D76UIMO80']" count="1"/>
+ </context>
+ <context select="/nitf/head">
+ <test select="meta[@name='ap-cycle']" count="1"/>
+ <test select="meta[@content='AP']" count="1"/>
+ <test select="meta[@name and @content]" count="8"/>
+ <test select="meta[@name='ap-cycle' and @content='AP']" count="1"/>
+ <test select="meta[@name != 'ap-cycle']" count="7"/>
+ </context>
+ <context select="/">
+ <test select="/nitf/head/meta[@name='ap-cycle']" count="1"/>
+ <test select="/nitf/head/meta[@content='AP']" count="1"/>
+ <test select="/nitf/head/meta[@name and @content]" count="8"/>
+ <test select="/nitf/head/meta[@name='ap-cycle' and @content='AP']" count="1"/>
+ <test select="/nitf/head/meta[@name != 'ap-cycle']" count="7"/>
+ </context>
+ </document>
+
+
+ <document url="xml/moreover.xml">
+ <context select="/">
+ <test select="/child::node()" count="1"/>
+ <test select="/*" count="1"/>
+
+ <test select="/*/article" count="20"/>
+ <test select="//*" count="221"/>
+ <test select="//*[local-name()='article']" count="20"/>
+ <test select="//article" count="20"/>
+ <test select="/*/*[@code]" count="20"/>
+
+ <test select="/moreovernews/article[@code='13563275']" count="1"/>
+
+ <test select="/moreovernews/article[@code='13563275']">
+ <valueOf select="url">http://c.moreover.com/click/here.pl?x13563273</valueOf>
+ </test>
+ <test select="/*/article[@code='13563275']">
+ <valueOf select="url">http://c.moreover.com/click/here.pl?x13563273</valueOf>
+ </test>
+ <test select="//article[@code='13563275']">
+ <valueOf select="url">http://c.moreover.com/click/here.pl?x13563273</valueOf>
+ </test>
+ <test select="//*[@code='13563275']">
+ <valueOf select="url">http://c.moreover.com/click/here.pl?x13563273</valueOf>
+ </test>
+ <test select="/child::node()/child::node()[@code='13563275']">
+ <valueOf select="url">http://c.moreover.com/click/here.pl?x13563273</valueOf>
+ </test>
+ <test select="/*/*[@code='13563275']">
+ <valueOf select="url">http://c.moreover.com/click/here.pl?x13563273</valueOf>
+ </test>
+ </context>
+ </document>
+
+
+
+ <!-- test other node types-->
+
+ <document url="xml/contents.xml">
+ <context select="/">
+ <test select="processing-instruction()" count="3"/>
+ <test select="/processing-instruction()" count="3"/>
+ <test select="/comment()" count="1"/>
+ <test select="comment()" count="1"/>
+ <test select="/child::node()/comment()" count="2"/>
+ <test select="/*/comment()" count="2"/>
+ <test select="//comment()" count="3"/>
+ </context>
+ </document>
+
+
+
+ <!-- test positioning -->
+
+ <document url="xml/fibo.xml">
+ <context select="/">
+ <test select="/*/fibonacci[position() &lt; 10]" count="9"/>
+ <valueOf select="sum(//fibonacci)">196417</valueOf>
+ <valueOf select="sum(//fibonacci/@index)">325</valueOf>
+ <valueOf select="/*/fibonacci[2]">1</valueOf>
+ <valueOf select="/*/fibonacci[ count(/*/fibonacci) ]">75025</valueOf>
+ <valueOf select="/*/fibonacci[ count(/*/fibonacci) - 1 ]">46368</valueOf>
+ </context>
+ </document>
+
+
+ <!-- test number functions -->
+
+ <!-- test Axes -->
+
+ <document url="xml/web.xml">
+ <context select="/">
+ <test select="descendant-or-self::*" count="19"/>
+ <test select="descendant::*" count="19"/>
+ <test select="/descendant::*" count="19"/>
+ <test select="/descendant-or-self::*" count="19"/>
+ <test select="/descendant::servlet" count="2"/>
+ <test select="/descendant-or-self::servlet" count="2"/>
+ <test select="descendant-or-self::servlet" count="2"/>
+ <test select="descendant::servlet" count="2"/>
+ <test select="/*/servlet" count="2"/>
+ <valueOf select="count(/*/servlet)">2</valueOf>
+ <test select="//servlet" count="2"/>
+ <valueOf select="count(//servlet)">2</valueOf>
+ </context>
+ <context select="/web-app">
+ <test select="/descendant::servlet" count="2"/>
+ <test select="/descendant-or-self::servlet" count="2"/>
+ <test select="descendant-or-self::servlet" count="2"/>
+ <test select="descendant::servlet" count="2"/>
+ </context>
+ </document>
+
+ <document url="xml/much_ado.xml">
+ <context select="/">
+ <test select="/descendant::ACT" count="5"/>
+ <test select="descendant::ACT" count="5"/>
+ <valueOf select="/PLAY/TITLE">Much Ado about Nothing</valueOf>
+ <valueOf select="2+2">4</valueOf>
+ <valueOf select="5 * 4 + 1">21</valueOf>
+ <valueOf select="count(descendant::ACT)">5</valueOf>
+ <valueOf select="10 + count(descendant::ACT) * 5">35</valueOf>
+ <valueOf select="(10 + count(descendant::ACT)) * 5">75</valueOf>
+ </context>
+ <context select="/PLAY/ACT[2]/SCENE[1]">
+ <test select="/descendant::ACT" count="5"/>
+ <test select="../../descendant::ACT" count="5"/>
+ <test select="/PLAY/ACT[2]/SCENE[1]/descendant::SPEAKER" count="141"/>
+ <test select="descendant::SPEAKER" count="141"/>
+ <valueOf select="count(descendant::*)+1">646</valueOf>
+ <valueOf select="count(descendant::SPEAKER)+1">142</valueOf>
+ <valueOf select="count(ancestor::*)">2</valueOf>
+ <valueOf select="count(ancestor::PLAY)">1</valueOf>
+ <valueOf select="count(ancestor-or-self::*)">3</valueOf>
+ <valueOf select="count(ancestor-or-self::PLAY)">1</valueOf>
+ <valueOf select="5+count(ancestor::*)-1">6</valueOf>
+ </context>
+ <context select="/">
+ <!-- Test correct predicate application -->
+ <valueOf select="count(/PLAY/ACT/SCENE[1])">5</valueOf>
+ </context>
+ </document>
+
+ <!-- test axis node ordering -->
+ <document url="xml/web.xml">
+ <context select="/">
+ <!-- Reported as Jira issue JAXEN-24 -->
+ <test select="//servlet-mapping/preceding::*[1][name()='description']" count="1"/>
+ <test select="/web-app/servlet//description/following::*[1][name()='servlet-mapping']" count="1"/>
+ <test select="/web-app/servlet//description/following::*[2][name()='servlet-name']" count="1"/>
+ </context>
+ </document>
+
+ <!-- test document function -->
+ <document url="xml/text.xml">
+ <context select="/">
+ <test select="document('xml/web.xml')" count="1">
+ <valueOf select="/web-app/servlet[1]/servlet-name">snoop</valueOf>
+ <valueOf select="/web-app/servlet[1]/servlet-name/text()">snoop</valueOf>
+ </test>
+ <valueOf select="document('xml/web.xml')/web-app/servlet[1]/servlet-name">snoop</valueOf>
+ </context>
+ <!-- Test to check if the context changes when an extension function is used.
+ First test is an example, second is the actual test.
+ -->
+ <context select="/foo/bar/cheese[1]">
+ <valueOf select="concat(./@id,'foo',@id)">3foo3</valueOf>
+ <valueOf select="concat(./@id,document('xml/web.xml')/web-app/servlet[1]/servlet-name,./@id)">3snoop3</valueOf>
+ </context>
+ </document>
+
+ <document url="xml/message.xml">
+ <context select="/">
+ <valueOf select="/message/body/data/items/item[name/text()='parentinfo']/value">Pruefgebiete</valueOf>
+ <valueOf select="document('xml/message.xml')/message/body/data/items/item[name/text()='parentinfo']/value">Pruefgebiete</valueOf>
+ </context>
+ </document>
+
+ <document url="xml/simple.xml">
+
+ <!-- test behaviour of AbsoluteLocationPath -->
+ <context select="/root/a">
+ <valueOf select="concat( ., /root/b )">ab</valueOf>
+ <valueOf select="concat( ../b, . )">ba</valueOf>
+ <valueOf select="concat( /root/b, . )">ba</valueOf>
+ <valueOf select="concat( /root/c/d, ../b )">db</valueOf>
+ </context>
+
+ <!-- test the translate() function -->
+ <context select="/">
+ <valueOf select="translate( '', '', '' )"></valueOf>
+ <valueOf select="translate( 'abcd', '', '' )">abcd</valueOf>
+ <valueOf select="translate( 'abcd', 'abcd', 'abcd' )">abcd</valueOf>
+ <valueOf select="translate( 'abcd', 'dcba', 'dcba' )">abcd</valueOf>
+ <valueOf select="translate( 'abcd', 'abcd', 'dcba' )">dcba</valueOf>
+ <valueOf select="translate( 'abcd', 'abcd', 'ab' )">ab</valueOf>
+ <valueOf select="translate( 'abcd', 'cdab', 'cd' )">cd</valueOf>
+ <valueOf select="translate( 'abcd', 'acbd', 'xy' )">xy</valueOf>
+ <valueOf select="translate( 'abcd', 'abcdb', 'abcdb' )">abcd</valueOf>
+ <valueOf select="translate( 'abcd', 'abcd', 'abcdb' )">abcd</valueOf>
+ </context>
+
+ <context select="/">
+ <valueOf select="substring('12345', 1.5, 2.6)">234</valueOf>
+ <valueOf select="substring('12345', 0, 3)">12</valueOf>
+ <valueOf select="substring('12345', 0 div 0, 3)"></valueOf>
+ <valueOf select="substring('12345', 1, 0 div 0)"></valueOf>
+ <valueOf select="substring('12345', -42, 1 div 0)">12345</valueOf>
+ <valueOf select="substring('12345', -1 div 0, 1 div 0)"></valueOf>
+ <valueOf select="substring('12345', 3)">345</valueOf>
+ <valueOf select="substring('12345',1,15)">12345</valueOf>
+ </context>
+
+ <!-- Some tests for the normalize-space() function -->
+
+ <context select="/">
+ <valueOf select="normalize-space(' abc ')">abc</valueOf>
+ <valueOf select="normalize-space(' a b c ')">a b c</valueOf>
+ <valueOf select="normalize-space(' a &#x0d; b &#x0a; c ')">a b c</valueOf>
+ <!-- Next test case addresses issue JAXEN-22 -->
+ <valueOf select="normalize-space(' ')"></valueOf>
+ <!-- Next test case addresses issue JAXEN-29 -->
+ <valueOf select="normalize-space('')"></valueOf>
+ </context>
+ </document>
+
+
+
+ <!-- test cases for String extension functions -->
+ <document url="xml/web.xml">
+ <context select="/web-app/servlet[1]">
+ <valueOf select="upper-case( servlet-class )">SNOOPSERVLET</valueOf>
+ <valueOf select="lower-case( servlet-class )">snoopservlet</valueOf>
+ <valueOf select="upper-case( servlet-class, 'fr' )">SNOOPSERVLET</valueOf>
+ <valueOf select="upper-case( servlet-class, 'fr-CA' )">SNOOPSERVLET</valueOf>
+ <valueOf select="upper-case( servlet-class, 'es-ES-Traditional_WIN' )">SNOOPSERVLET</valueOf>
+ <valueOf select="ends-with( servlet-class, 'Servlet' )">true</valueOf>
+ <valueOf select="ends-with( servlet-class, 'S' )">false</valueOf>
+ </context>
+ </document>
+
+ <!-- test cases for the lang() function -->
+ <document url="xml/lang.xml">
+ <context select="/">
+ <test select="/e1/e2[lang('hr')]" count="0"/>
+ <test select="/e1/e2/e3[lang('en')]" count="1"/>
+ <test select="/e1/e2/e3[lang('en-US')]" count="1"/>
+ <test select="/e1/e2/e3[lang('en-GB')]" count="0"/>
+ <test select="/e1/e2/e3[lang('hu')]" count="2"/>
+ <test select="/e1/e2/e3[lang('hu-HU')]" count="0"/>
+ <test select="/e1/e2/e3[lang('es')]" count="1"/>
+ <test select="/e1/e2/e3[lang('es-BR')]" count="0"/>
+ </context>
+ </document>
+
+ <!-- test namespace -->
+ <document url="xml/namespaces.xml">
+ <context select="/"
+ xmlns:foo="http://fooNamespace/"
+ xmlns:voo="http://fooNamespace/"
+ xmlns:bar="http://barNamespace/"
+ xmlns:alias="http://fooNamespace/">
+ <test select="/*" count="1"/>
+ <test select="/foo:a" count="1"/>
+ <test select="/foo:a/b" count="1"/>
+ <test select="/voo:a/b/c" count="1"/>
+ <test select="/voo:a/bar:f" count="1"/>
+ <test select="/*[namespace-uri()='http://fooNamespace/' and local-name()='a']" count="1"/>
+ <test select="/*[local-name()='a' and namespace-uri()='http://fooNamespace/']/*[local-name()='x' and namespace-uri()='http://fooNamespace/']" count="1"/>
+ <test select="/*[local-name()='a' and namespace-uri()='http://fooNamespace/']/*[local-name()='x' and namespace-uri()='http://fooNamespace/']/*[local-name()='y' and namespace-uri()='http://fooNamespace/']" count="1"/>
+ </context>
+ <!-- the prefix here and in the document have no relation; it's their
+ namespace-uri binding that counts -->
+ <context select="/" xmlns:foo="http://somethingElse/">
+ <test select="/foo:a/b/c" count="0"/>
+ </context>
+
+ <context select="/"
+ xmlns:foo="http://fooNamespace/"
+ xmlns:bar="http://barNamespace/"
+ xmlns:alias="http://fooNamespace/">
+ <valueOf select="/foo:a/b/c">Hello</valueOf>
+ <valueOf select="/foo:a/foo:d/foo:e">Hey</valueOf>
+ <valueOf select="/foo:a/alias:x/alias:y">Hey3</valueOf>
+ <valueOf select="/foo:a/foo:x/foo:y">Hey3</valueOf>
+ <valueOf select="/*[local-name()='a' and namespace-uri()='http://fooNamespace/']/*[local-name()='x' and namespace-uri()='http://fooNamespace/']/*[local-name()='y' and namespace-uri()='http://fooNamespace/']">Hey3</valueOf>
+ </context>
+
+ </document>
+
+ <document url="xml/defaultNamespace.xml">
+ <context select="/">
+ <!-- NOTE: /a/b/c selects elements in no namespace only! -->
+ <test select="/a/b/c" count="0"/>
+ <!--
+ The following test uses an unbound prefix 'x' and should throw an exception.
+ Addresses issue JAXEN-18.
+ Turns out this isn't really tested as the test didn't fail when the exception wasn't thrown.
+ <test select="/x:a/x:b/x:c" count="0" exception="true"/>
+ -->
+ </context>
+ <context select="/"
+ xmlns:dummy="http://dummyNamespace/">
+ <test select="/dummy:a/dummy:b/dummy:c" count="1"/>
+ </context>
+ </document>
+ <document url="xml/text.xml">
+ <context select="/">
+ <test select="/foo/bar/text()" count="3"/>
+ <valueOf select="normalize-space(/foo/bar/text())">baz</valueOf>
+ </context>
+ </document>
+
+ <document url="xml/testNamespaces.xml">
+ <context select="/">
+ <!-- the root is not an element, so no namespaces -->
+ <test select="namespace::*" count="0" debug="off"/>
+ <test select="/namespace::*" count="0" debug="off"/>
+ <test select="/Template/Application1/namespace::*" count="3" debug="off"/>
+ <test select="/Template/Application2/namespace::*" count="3" debug="off"/>
+
+ <test select="//namespace::*" count="25" debug="off"/>
+ </context>
+
+ <!--
+ <context select="/Template/Application1">
+ <test select="namespace::*" count="3" debug="off"/>
+ <test select="/namespace::*" count="0" debug="off"/>
+ <test select="/Template/Application1/namespace::*" count="3" debug="off"/>
+ <test select="/Template/Application2/namespace::*" count="3" debug="off"/>
+ <test select="//namespace::*" count="25" debug="off"/>
+ <test select="//namespace::xplt" count="8" debug="off"/>
+ <test xmlns:somethingelse="http://www.xxxx.com/"
+ select="//namespace::somethingelse" count="0" debug="off"/>
+ </context>
+ -->
+ </document>
+
+ <document url="xml/testNamespaces.xml">
+ <context select="/">
+ <!-- namespace nodes have their element as their parent -->
+ <test select="/Template/namespace::xml/parent::Template" count="1"/>
+ </context>
+ <!-- namespace nodes can also be used as context nodes -->
+ <context select="/Template/namespace::xml">
+ <test select="parent::Template" count="1"/>
+ </context>
+ </document>
+
+</tests>
diff --git a/test/rexml/data/test/tests.xsl b/test/rexml/data/test/tests.xsl
new file mode 100644
index 0000000000..3ecd648b3b
--- /dev/null
+++ b/test/rexml/data/test/tests.xsl
@@ -0,0 +1,369 @@
+<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:var="http://jaxen.org/test-harness/var">
+<!-- this is what I used to generate XPathTestBase. After generating I fixed the illegal strings (its quicker
+than fixing the xsl for that few errors) and reformatted the code. Its unlikely this code will be needed
+again, its just in cvs for completeness -->
+ <output method="text"/>
+ <template match="/">
+ <text>
+ /*
+ * $Header: /home/projects/jaxen/scm/jaxen/src/java/test/org/jaxen/XPathTestBase.java,v 1.32 2005/06/15 23:52:40 bewins Exp $
+ * $Revision: 1.32 $
+ * $Date: 2005/06/15 23:52:40 $
+ *
+ * ====================================================================
+ *
+ * Copyright (C) 2000-2002 bob mcwhirter &amp; James Strachan.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions, and the disclaimer that follows
+ * these conditions in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. The name "Jaxen" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact license@jaxen.org.
+ *
+ * 4. Products derived from this software may not be called "Jaxen", nor
+ * may "Jaxen" appear in their name, without prior written permission
+ * from the Jaxen Project Management (pm@jaxen.org).
+ *
+ * In addition, we request (but do not require) that you include in the
+ * end-user documentation provided with the redistribution and/or in the
+ * software itself an acknowledgement equivalent to the following:
+ * "This product includes software developed by the
+ * Jaxen Project (http://www.jaxen.org/)."
+ * Alternatively, the acknowledgment may be graphical using the logos
+ * available at http://www.jaxen.org/
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE Jaxen AUTHORS OR THE PROJECT
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * ====================================================================
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Jaxen Project and was originally
+ * created by bob mcwhirter &lt;bob@werken.com> and
+ * James Strachan &lt;jstrachan@apache.org>. For more information on the
+ * Jaxen Project, please see &lt;http://www.jaxen.org/>.
+ *
+ * $Id: XPathTestBase.java,v 1.32 2005/06/15 23:52:40 bewins Exp $
+ */
+
+
+package org.jaxen;
+
+import junit.framework.TestCase;
+import org.jaxen.function.StringFunction;
+import org.jaxen.saxpath.helpers.XPathReaderFactory;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public abstract class XPathTestBase extends TestCase
+{
+ protected static String VAR_URI = "http://jaxen.org/test-harness/var";
+ protected static String TESTS_XML = "xml/test/tests.xml";
+
+ protected static boolean verbose = true;
+ protected static boolean debug = true;
+ private ContextSupport contextSupport;
+
+ public XPathTestBase(String name)
+ {
+ super( name );
+ }
+
+ public void setUp() throws ParserConfigurationException
+ {
+ this.contextSupport = null;
+ System.setProperty( XPathReaderFactory.DRIVER_PROPERTY,
+ "" );
+ log( "-----------------------------" );
+ }
+
+ public void log(String text)
+ {
+ log( verbose,
+ text );
+ }
+
+ public void log(boolean actualVerbose,
+ String text)
+ {
+ if ( ! actualVerbose )
+ {
+ return;
+ }
+
+ System.out.println( text );
+ }
+
+ protected void assertCountXPath(int expectedSize, Object context, String xpathStr) throws JaxenException {
+ try
+ {
+ assertCountXPath2(expectedSize, context, xpathStr);
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug,
+ " ## SKIPPED -- Unsupported Axis" );
+ }
+ }
+
+ protected Object assertCountXPath2(int expectedSize, Object context, String xpathStr) throws JaxenException {
+ log ( debug,
+ " Select :: " + xpathStr );
+ BaseXPath xpath = new BaseXPath( xpathStr );
+ List results = xpath.selectNodes( getContext( context ) );
+ log ( debug,
+ " Expected Size :: " + expectedSize );
+ log ( debug,
+ " Result Size :: " + results.size() );
+
+ if ( expectedSize != results.size() )
+ {
+ log ( debug,
+ " ## FAILED" );
+ log ( debug,
+ " ## xpath: " + xpath + " = " + xpath.debug() );
+
+ Iterator resultIter = results.iterator();
+
+ while ( resultIter.hasNext() )
+ {
+ log ( debug,
+ " --> " + resultIter.next() );
+ }
+ }
+ assertEquals( xpathStr,
+ expectedSize,
+ results.size() );
+ if (expectedSize > 0) {
+ return results.get(0);
+ }
+ return null;
+ }
+
+ protected void assertInvalidXPath(Object context, String xpathStr) throws JaxenException {
+ try
+ {
+ log ( debug,
+ " Select :: " + xpathStr );
+ BaseXPath xpath = new BaseXPath( xpathStr );
+ List results = xpath.selectNodes( getContext( context ) );
+ log ( debug,
+ " Result Size :: " + results.size() );
+ fail("An exception was expected.");
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug,
+ " ## SKIPPED -- Unsupported Axis" );
+ }
+ catch (JaxenException e) {
+ log (debug, " Caught expected exception "+e.getMessage());
+ }
+ }
+
+ protected void assertValueOfXPath(String expected, Object context, String xpathStr) throws JaxenException {
+ try
+ {
+ BaseXPath xpath = new BaseXPath( xpathStr );
+ Object node = xpath.evaluate( getContext( context ) );
+
+ String result = StringFunction.evaluate( node,
+ getNavigator() );
+
+ log ( debug,
+ " Select :: " + xpathStr );
+ log ( debug,
+ " Expected :: " + expected );
+ log ( debug,
+ " Result :: " + result );
+
+ if ( ! expected.equals( result ) )
+ {
+ log ( debug,
+ " ## FAILED" );
+ log ( debug,
+ " ## xpath: " + xpath + " = " + xpath.debug() );
+ }
+
+ assertEquals( xpathStr,
+ expected,
+ result );
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug,
+ " ## SKIPPED -- Unsupported Axis " );
+
+ }
+ }
+ protected Context getContext(Object contextNode)
+ {
+ Context context = new Context( getContextSupport() );
+
+ List list = new ArrayList( 1 );
+ list.add( contextNode );
+ context.setNodeSet( list );
+
+ return context;
+ }
+
+ public ContextSupport getContextSupport()
+ {
+ if ( this.contextSupport == null )
+ {
+ this.contextSupport = new ContextSupport( new SimpleNamespaceContext(),
+ XPathFunctionContext.getInstance(),
+ new SimpleVariableContext(),
+ getNavigator() );
+ }
+
+ return this.contextSupport;
+ }
+
+ public abstract Navigator getNavigator();
+
+ public abstract Object getDocument(String url) throws Exception;
+
+ public void testGetNodeType() throws FunctionCallException, UnsupportedAxisException
+ {
+ Navigator nav = getNavigator();
+ Object document = nav.getDocument("xml/testNamespaces.xml");
+ int count = 0;
+ Iterator descendantOrSelfAxisIterator = nav.getDescendantOrSelfAxisIterator(document);
+ while (descendantOrSelfAxisIterator.hasNext()) {
+ Object node = descendantOrSelfAxisIterator.next();
+ Iterator namespaceAxisIterator = nav.getNamespaceAxisIterator(node);
+ while (namespaceAxisIterator.hasNext()) {
+ count++;
+ assertEquals("Node type mismatch", Pattern.NAMESPACE_NODE, nav.getNodeType(namespaceAxisIterator.next()));
+ }
+ }
+ assertEquals(25, count);
+ }
+
+ </text>
+ <apply-templates select="node()|@*"/>
+ <text>
+}
+ </text>
+ </template>
+ <template match="context">
+ <text>
+ public void test</text><value-of select="generate-id()"/><text>() throws JaxenException {
+ Navigator nav = getNavigator();
+ String url = "</text><value-of select="../@url"/><text>";
+ log( "Document [" + url + "]" );
+ Object document = nav.getDocument(url);
+
+ XPath contextpath = new BaseXPath("</text><value-of select="@select"/><text>", nav);
+ log( "Initial Context :: " + contextpath );
+ List list = contextpath.selectNodes(document);
+ </text>
+ <if test="count(namespace::*) > count(../namespace::*)">
+ <text>
+ SimpleNamespaceContext nsContext = new SimpleNamespaceContext();</text>
+ <for-each select="namespace::*[local-name() != 'var' and local-name() != 'xml']">
+ <text>
+ nsContext.addNamespace( "</text><value-of select="local-name()"/><text>", "</text><value-of select="."/><text>" );</text>
+ </for-each>
+ <text>
+ getContextSupport().setNamespaceContext( nsContext );</text>
+ </if>
+ <if test="@*[namespace-uri() = 'http://jaxen.org/test-harness/var']">
+ <text>
+ SimpleVariableContext varContext = new SimpleVariableContext();</text>
+ <for-each select="@*[namespace-uri() = 'http://jaxen.org/test-harness/var']">
+ <text>
+ varContext.setVariableValue(null, "</text><value-of select="local-name()"/><text>", "</text><value-of select="."/><text>" );</text>
+ </for-each>
+ <text>
+ getContextSupport().setVariableContext( varContext );</text>
+ </if>
+ <text>
+ Iterator iter = list.iterator();
+ while (iter.hasNext()) {
+ Object context = iter.next();</text>
+ <apply-templates select="node()|@*"/>
+ <text>
+ }
+ }</text>
+ </template>
+ <template match="test[@exception]">
+ <text>
+ assertInvalidXPath(context, "</text><value-of select='@select'/><text>");</text>
+ </template>
+ <template match="test[valueOf]">
+ <choose>
+ <when test="@count">
+ <text>
+ try
+ {
+ Object result = assertCountXPath2(</text><value-of select="@count"/><text>, context, "</text><value-of select="@select"/><text>");</text>
+ <for-each select="valueOf">
+ <text>
+ assertValueOfXPath("</text><value-of select="."/><text>", result, "</text><value-of select="@select"/><text>");</text>
+ </for-each>
+ <text>
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug, " ## SKIPPED -- Unsupported Axis" );
+ }</text>
+ </when>
+ <otherwise>
+ <text>
+ try
+ {
+ BaseXPath xpath = new BaseXPath( "</text><value-of select="@select"/><text>" );
+ List results = xpath.selectNodes( getContext( context ) );
+ Object result = results.get(0);</text>
+ <for-each select="valueOf">
+ <text>
+ assertValueOfXPath("</text><value-of select="."/><text>", result, "</text><value-of select="@select"/><text>");</text>
+ </for-each>
+ <text>
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug, " ## SKIPPED -- Unsupported Axis" );
+ }</text>
+ </otherwise>
+ </choose>
+ </template>
+ <template match="test">
+ <text>
+ assertCountXPath(</text><value-of select="@count"/><text>, context, "</text><value-of select="@select"/><text>");</text>
+ </template>
+ <template match="valueOf">
+ <text>
+ assertValueOfXPath("</text><value-of select="."/>", context, "<value-of select="@select"/><text>");</text>
+ </template>
+ <template match="comment()"><text>
+ /*</text><value-of select="."/><text>
+ */</text>
+ </template>
+ <template match="node()|@*"><apply-templates select="node()|@*"/></template>
+</stylesheet> \ No newline at end of file
diff --git a/test/rexml/data/testNamespaces.xml b/test/rexml/data/testNamespaces.xml
new file mode 100644
index 0000000000..50f7c9306b
--- /dev/null
+++ b/test/rexml/data/testNamespaces.xml
@@ -0,0 +1,22 @@
+<Template>
+ <Application1 xmlns:xplt="http://www.xxxx.com/"
+ xmlns:xpl="http://www.xxxx.com/"
+ version="3.0"
+ randomAttribute="foo"
+ >
+ <xpl:insertText/>
+ <xplt:anyElement>
+ <Name/>
+ </xplt:anyElement>
+ </Application1>
+
+ <Application2 xmlns:xplt="http://www.xxxx.com/"
+ xmlns:xpl="http://www.xxxx.com/"
+ version="3.0"
+ >
+ <xpl:insertText/>
+ <xplt:anyElement>
+ <Name/>
+ </xplt:anyElement>
+ </Application2>
+</Template>
diff --git a/test/rexml/data/testsrc.xml b/test/rexml/data/testsrc.xml
new file mode 100644
index 0000000000..e18ba20dae
--- /dev/null
+++ b/test/rexml/data/testsrc.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"
+ "http://my.netscape.com/publish/formats/rss-0.91.dtd">
+<rss version="0.91">
+ <channel>
+ <title>xmlhack</title>
+ <link>http://www.xmlhack.com</link>
+ <description>Developer news from the XML community</description>
+ <language>en-us</language>
+ <copyright>Copyright 1999-2001, xmlhack team.</copyright>
+ <managingEditor>editor@xmlhack.com</managingEditor>
+ <webMaster>webmaster@xmlhack.com</webMaster>
+ <image>
+ <title>xmlhack</title>
+ <url>http://www.xmlhack.com/images/mynetscape88.gif</url>
+ <link>http://www.xmlhack.com</link>
+ <width>88</width>
+ <height>31</height>
+ <description>News, opinions, tips and issues concerning XML development</description>
+ </image>
+<item x='0'>
+<title>Experimental non-XML syntax for RELAX NG</title>
+<link>http://www.xmlhack.com/read.php?item=1343</link>
+<description>
+ James Clark has announced the release of an experimental non-XML syntax for RELAX
+ NG and a Java translator implementation that converts
+ instances of the syntax into RELAX NG's XML syntax.
+</description>
+<category>Schemas</category>
+</item>
+<item x='1'>
+<title>Long-awaited entity-resolver Java classes finally released</title>
+<link>http://www.xmlhack.com/read.php?item=1342</link>
+<description>Norman Walsh has
+ announced the release of SAX entityResolver() and JAXP
+ URIResolver() Java
+ classes he wrote to implement the OASIS XML Catalogs
+ Committee Specification (in addition to the TR9401 and
+ Apache XCatalogs specifications).
+</description>
+<category>SGML/XML</category>
+<category>Java</category>
+</item>
+<item x='3'>
+
+<title>Beepcore-C framework released</title>
+<link>http://www.xmlhack.com/read.php?item=1341</link>
+<description>Invisible Worlds have announced the publication of Beepcore-C, an implementation of the BEEP framework written in C.</description>
+<category>Protocols</category>
+<category>C++</category>
+</item>
+<item>
+<title>SVG and XSL-FO by example</title>
+<link>http://www.xmlhack.com/read.php?item=1340</link>
+<description>Jirka Jirat has announced the
+addition of an XSL-FO and SVG examples repository to the Zvon developer
+reference site.</description>
+<category>SVG</category>
+<category>XSL-FO</category>
+</item>
+
+
+</channel>
+</rss>
diff --git a/test/rexml/data/text.xml b/test/rexml/data/text.xml
new file mode 100644
index 0000000000..e1865c7977
--- /dev/null
+++ b/test/rexml/data/text.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<foo>
+ <bar>
+ baz
+ <cheese id="3"/>
+ baz
+ <cheese/>
+ baz
+ </bar>
+</foo>
diff --git a/test/rexml/data/ticket_110_utf16.xml b/test/rexml/data/ticket_110_utf16.xml
new file mode 100644
index 0000000000..f7e5e90d0c
--- /dev/null
+++ b/test/rexml/data/ticket_110_utf16.xml
Binary files differ
diff --git a/test/rexml/data/ticket_61.xml b/test/rexml/data/ticket_61.xml
new file mode 100644
index 0000000000..10ab7ebb4b
--- /dev/null
+++ b/test/rexml/data/ticket_61.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<HTML>
+<body onload="RunOnLoads()" ms_positioning="FlowLayout"><form id="CollectiveForm" name="CollectiveForm" action="Matter_List.aspx" method="post" defaultbutton="btSearch"><input type="hidden" name="LinkID"/> <input type="hidden" name="Param"/><input type="hidden" name="__EVENTTARGET"/> <input type="hidden" name="__EVENTARGUMENT"/><input type="hidden" value="dDwtMjA3ODMxNDk3NDt0PDtsPGk8MD47aTwxPjs+O2w8dDxAPC9BSU1TL3N0eWxlc2hlZXRzL0RhdGFDZXJ0U3R5bGUuYXNweDs+Ozs+O3Q8cDxsPGRlZmF1bHRCdXR0b247PjtsPGJ0U2VhcmNoOz4+O2w8aTwxPjtpPDM+O2k8ND47aTw4PjtpPDExPjtpPDEzPjtpPDE1Pjs+O2w8dDxAPC9BSU1TL2ltYWdlcy9oZWFkZXItYWltc2xvZ28uZ2lmOy9BSU1TL2ltYWdlcy9oZWFkZXItYmtnZC5naWY7Pjs7Pjt0PEA8L0FJTVMvaW1hZ2VzL2hlYWRlci1yaWdodGVuZC5naWY7Oz47Oz47dDw7bDxpPDI+Oz47bDx0PDtsPGk8MT47aTwyPjs+O2w8dDxwPDtwPGw8b25wcm9wZXJ0eWNoYW5nZTs+O2w8Q29sbGVjdGl2ZVZhbGlkYXRpb25TdW1tYXJ5X09uUHJvcGVydHlDaGFuZ2UoKTs+Pj47Oz47dDxAPC9BSU1TL2ltYWdlcy9hbGVydExlZnRUb3AuZ2lmOy9BSU1TL2ltYWdlcy9hbGVydEhvcml6b250YWwuZ2lmOy9BSU1TL2ltYWdlcy9hbGVydC5naWY7L0FJTVMvaW1hZ2VzL2FsZXJ0SG9yaXpvbnRhbC5naWY7L0FJTVMvaW1hZ2VzL2FsZXJ0UmlnaHRUb3AuZ2lmOy9BSU1TL2ltYWdlcy9hbGVydExlZnRWZXJ0aWNhbC5naWY7L0FJTVMvaW1hZ2VzL2FsZXJ0UmlnaHRWZXJ0aWNhbC5naWY7L0FJTVMvaW1hZ2VzL2FsZXJ0TGVmdEJvdHRvbS5naWY7L0FJTVMvaW1hZ2VzL2FsZXJ0SG9yaXpvbnRhbC5naWY7L0FJTVMvaW1hZ2VzL2FsZXJ0UmlnaHRCb3R0b20uZ2lmOz47Oz47Pj47Pj47dDw7bDxpPDE+O2k8Mz47aTw3Pjs+O2w8dDxwPHA8bDxUZXh0O2luRXJyb3JTdGF0ZTs+O2w8WTtvPGY+Oz4+O3A8bDxvbmNoYW5nZTtjdXJyZW50dmFsdWU7PjtsPEluZGljYXRlQ2hhbmdlZCh0aGlzLCcnKVw7O1k7Pj4+Ozs+O3Q8cDxwPGw8VGV4dDtpbkVycm9yU3RhdGU7PjtsPE9wZW47bzxmPjs+PjtwPGw8b25jaGFuZ2U7Y3VycmVudHZhbHVlOz47bDxJbmRpY2F0ZUNoYW5nZWQodGhpcywnJylcOztPcGVuOz4+Pjs7Pjt0PHA8cDxsPFRvb2xUaXA7PjtsPFxlOz4+Oz47Oz47Pj47dDw7bDxpPDE+O2k8Mz47aTw1PjtpPDY+O2k8Nz47PjtsPHQ8cDxwPGw8aW5FcnJvclN0YXRlO1RleHQ7PjtsPG88Zj47XGU7Pj47cDxsPG9uY2hhbmdlO2N1cnJlbnR2YWx1ZTs+O2w8SW5kaWNhdGVDaGFuZ2VkKHRoaXMsJycpXDs7XGU7Pj4+Ozs+O3Q8cDxwPGw8aW5FcnJvclN0YXRlO1RleHQ7PjtsPG88Zj47XGU7Pj47cDxsPG9uY2hhbmdlO2N1cnJlbnR2YWx1ZTs+O2w8SW5kaWNhdGVDaGFuZ2VkKHRoaXMsJycpXDs7XGU7Pj4+Ozs+O3Q8cDxwPGw8aW5FcnJvclN0YXRlO1RleHQ7PjtsPG88Zj47XGU7Pj47cDxsPG9uY2hhbmdlO2N1cnJlbnR2YWx1ZTs+O2w8SW5kaWNhdGVDaGFuZ2VkKHRoaXMsJycpXDs7XGU7Pj4+Ozs+O3Q8QDxQcm9mZXNzaW9uYWwgaW4gQ2hhcmdlOz47Oz47dDxwPHA8bDxpbkVycm9yU3RhdGU7VGV4dDs+O2w8bzxmPjtcZTs+PjtwPGw8b25jaGFuZ2U7Y3VycmVudHZhbHVlOz47bDxJbmRpY2F0ZUNoYW5nZWQodGhpcywnJylcOztcZTs+Pj47Oz47Pj47dDxAMDxwPHA8bDxEYXRhS2V5cztQYWdpbmdWaWV3O1RvdGFsUmVjb3JkcztQYWdlQ291bnQ7UGFnZVNpemU7U29ydERpcmVjdGlvbjtVbmlxdWVJZDtTb3J0RXhwcmVzc2lvbjtDdXJyZW50UGFnZTtfIUl0ZW1Db3VudDtfIURhdGFTb3VyY2VJdGVtQ291bnQ7TWF4UGFnZU1vZGU7PjtsPGw8PjtPcGVuO2k8MD47aTwwPjtpPDIwPjtpPDE+O2MxNjA4M2Y4LTkwZjgtNDQ1Ni04YzM0LTc5ZTFhNjg2ZDhlMjttYXR0ZXJfbm87aTwxPjtpPC0xPjtpPC0xPjtEYXRhQ2VydC5XZWIuQ29udHJvbHMuTWF4UGFnZU1vZGUsIERhdGFDZXJ0LldlYiwgVmVyc2lvbj0xLjYuMi4xNCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsPE5PUk1BTD47Pj47PjtAMDw7OztAMDxwPGw8SGVhZGVyVGV4dDs+O2w8UHJvZmVzc2lvbmFsIGluIENoYXJnZTs+Pjs7Ozs+O0AwPHA8bDxWaXNpYmxlOz47bDxvPHQ+Oz4+Ozs7Oz47Oz47Ozs7Ozs7Ozs+Ozs+O3Q8QDwvQUlNUy9pbWFnZXMvZm9vdGVyLWJrZ2QuZ2lmOy9BSU1TL2ltYWdlcy9mb290ZXItYmtnZC5naWY7MjAwNjs7Pjs7Pjs+Pjs+Pjs+2T4SCaJMpmBYZKv3iwMGME7j8M0=" name="__VIEWSTATE"/> <input id="PageGuid" type="hidden" value="659179a1-bdcc-41f3-8f27-0495ae9356fd" name="PageGuid"/> <table style="BORDER-COLLAPSE: collapse" height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0"><tbody ><tr ><td ><table cellSpacing="0" cellPadding="0" width="100%" border="0"><tbody ><tr ><td vAlign="top" align="left" width="325"><br /></td><td align="right" background="/AIMS/images/header-bkgd.gif"><table style="DISPLAY: inline" cellSpacing="0" cellPadding="0" border="0"><tbody ><tr ><td ><img src="/Aims/images/nav-leftend.gif"/></td><td background="/Aims/images/nav-center.gif"><span ><table id="NavControl__ctl0_group_1" style="Z-INDEX: 999" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl0_group_1', null, null, 0);" cellSpacing="0" cellPadding="0" border="0"><tbody ><tr ></tr></tbody></table></span><span ><table style="LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px"><tbody ><tr ><td ><br /></td></tr></tbody></table></span><span ><table class="MenuGroup" id="NavControl__ctl1_group_1" style="Z-INDEX: 999" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_1', null, null, 250);" cellSpacing="0" cellPadding="0" border="0"><tbody ><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_1" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_1', 'NavControl__ctl1_group_2', 'belowleft', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '10', '', 'MyWork/Inbox.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_1', 'NavControl__ctl1_group_1', 'NavControl__ctl1_group_2', 250, null);">MY WORK</td><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_6" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_6', 'NavControl__ctl1_group_7', 'belowleft', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '1', '', 'Matter/Matter_List.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_6', 'NavControl__ctl1_group_1', 'NavControl__ctl1_group_7', 250, null);">MATTER</td><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_7" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_7', 'NavControl__ctl1_group_8', 'belowleft', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '2', '', 'Administrator/Admin_Home.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_7', 'NavControl__ctl1_group_1', 'NavControl__ctl1_group_8', 250, null);">ADMINISTRATOR</td><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_20" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_20', 'NavControl__ctl1_group_21', 'belowleft', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '15', '', 'MyWork/AIE.aspx?ClearForm=true'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_20', 'NavControl__ctl1_group_1', 'NavControl__ctl1_group_21', 250, null);">AIE</td><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_21" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_21', 'NavControl__ctl1_group_22', 'belowleft', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '16', '', 'Reports/ReportsFrontPage.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_21', 'NavControl__ctl1_group_1', 'NavControl__ctl1_group_22', 250, null);">REPORTS</td><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_22" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_22', 'NavControl__ctl1_group_23', 'belowleft', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '17', '', 'javascript:window.open(&quot;[appRoot]/Documentation/PubAIMS_3_02/AIMS_Master_Page.htm&quot;)'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_22', 'NavControl__ctl1_group_1', 'NavControl__ctl1_group_23', 250, null);">HELP</td><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_23" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_23', 'NavControl__ctl1_group_24', 'belowleft', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '34', '', 'Logon.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_23', 'NavControl__ctl1_group_1', 'NavControl__ctl1_group_24', 250, null);">LOGOFF</td></tr></tbody></table></span><span ><table class="MenuGroup" id="NavControl__ctl1_group_2" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_2')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_2', 'NavControl__ctl1_item_1', 'NavControl__ctl1_group_1', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_2" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_2', 'NavControl__ctl1_group_3', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '11', '', 'MyWork/Inbox.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_2', 'NavControl__ctl1_group_2', 'NavControl__ctl1_group_3', 250, null);">INBOX</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_3" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_3', 'NavControl__ctl1_group_4', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '12', '', 'MyWork/Coordinator.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_3', 'NavControl__ctl1_group_2', 'NavControl__ctl1_group_4', 250, null);">COORDINATOR</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_4" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_4', 'NavControl__ctl1_group_5', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '13', '', 'MyWork/ErrorManagement.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_4', 'NavControl__ctl1_group_2', 'NavControl__ctl1_group_5', 250, null);">ERROR MANAGER</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_5" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_5', 'NavControl__ctl1_group_6', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '14', '', 'MyWork/Invoice_Search.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_5', 'NavControl__ctl1_group_2', 'NavControl__ctl1_group_6', 250, null);">SEARCH</td></tr></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_3" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_3')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_3', 'NavControl__ctl1_item_2', 'NavControl__ctl1_group_2', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_4" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_4')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_4', 'NavControl__ctl1_item_3', 'NavControl__ctl1_group_2', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_5" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_5')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_5', 'NavControl__ctl1_item_4', 'NavControl__ctl1_group_2', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_6" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_6')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_6', 'NavControl__ctl1_item_5', 'NavControl__ctl1_group_2', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_7" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_7')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_7', 'NavControl__ctl1_item_6', 'NavControl__ctl1_group_1', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_8" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_8')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_8', 'NavControl__ctl1_item_7', 'NavControl__ctl1_group_1', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_8" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_8', 'NavControl__ctl1_group_9', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '19', '', 'Administrator/GeneralSettings_View.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_8', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_9', 250, null);">GENERAL SETTINGS</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_9" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_9', 'NavControl__ctl1_group_10', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '30', '', 'Integration/Log_View.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_9', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_10', 250, null);">INTEGRATION LOG</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_10" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_10', 'NavControl__ctl1_group_11', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '20', '', 'Administrator/Lookup_List.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_10', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_11', 250, null);">LOOKUPS</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_11" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_11', 'NavControl__ctl1_group_12', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '37', '', 'NotificationLog/Log_View.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_11', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_12', 250, null);">NOTIFICATION LOG</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_12" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_12', 'NavControl__ctl1_group_13', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '7', '', 'Administrator/MatterType_List.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_12', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_13', 250, null);">MATTER TYPES</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_13" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_13', 'NavControl__ctl1_group_14', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '6', '', 'Professional/Prof_List.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_13', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_14', 250, null);">PROFESSIONALS</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_14" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_14', 'NavControl__ctl1_group_15', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '9', '', 'Vendor/Vendor_List.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_14', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_15', 250, null);">VENDORS</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_15" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_15', 'NavControl__ctl1_group_16', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '32', '', 'Workflow/WorkflowTitle_List.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_15', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_16', 250, null);">WORKFLOW TITLES</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_16" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_16', 'NavControl__ctl1_group_17', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '36', '', 'Professional/Prof_SubList.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_16', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_17', 250, null);">WORKFLOW SEARCH-REPLACE</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_17" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_17', 'NavControl__ctl1_group_18', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '5', '', 'Workgroup/Workgroup_List.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_17', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_18', 250, null);">WORKGROUPS</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_18" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_18', 'NavControl__ctl1_group_19', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '33', '', 'Administrator/System_View.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_18', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_19', 250, null);">SYSTEM POLICY</td></tr><tr ><td class="MenuItem" onmousemove="return false;" id="NavControl__ctl1_item_19" ondblclick="return false;" onmouseover="this.className='MenuItemOver';if (document.readyState == 'complete') aspnm_itemMsOver('NavControl__ctl1_item_19', 'NavControl__ctl1_group_20', 'rightdown', 0, 0, 250, null);" onclick="aspnm_hideAllGroups();Link_OnClick(this.id, '18', '', 'Timekeeper/TimekeeperClassification_List.aspx'); " onmouseout="this.className='MenuItem';if (document.readyState == 'complete') aspnm_itemMsOut('NavControl__ctl1_item_19', 'NavControl__ctl1_group_8', 'NavControl__ctl1_group_20', 250, null);">TIMEKEEPER CLASSIFICATIONS</td></tr></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_9" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_9')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_9', 'NavControl__ctl1_item_8', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_10" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_10')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_10', 'NavControl__ctl1_item_9', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_11" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_11')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_11', 'NavControl__ctl1_item_10', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_12" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_12')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_12', 'NavControl__ctl1_item_11', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_13" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_13')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_13', 'NavControl__ctl1_item_12', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_14" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_14')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_14', 'NavControl__ctl1_item_13', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_15" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_15')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_15', 'NavControl__ctl1_item_14', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_16" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_16')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_16', 'NavControl__ctl1_item_15', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_17" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_17')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_17', 'NavControl__ctl1_item_16', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_18" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_18')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_18', 'NavControl__ctl1_item_17', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_19" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_19')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_19', 'NavControl__ctl1_item_18', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_20" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_20')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_20', 'NavControl__ctl1_item_19', 'NavControl__ctl1_group_8', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_21" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_21')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_21', 'NavControl__ctl1_item_20', 'NavControl__ctl1_group_1', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_22" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_22')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_22', 'NavControl__ctl1_item_21', 'NavControl__ctl1_group_1', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_23" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_23')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_23', 'NavControl__ctl1_item_22', 'NavControl__ctl1_group_1', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table class="MenuGroup" id="NavControl__ctl1_group_24" onmouseover="aspnm_groupMsOver('NavControl__ctl1_group_24')" style="Z-INDEX: 999; LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px" onmouseout="if (document.readyState == 'complete') aspnm_groupMsOut('NavControl__ctl1_group_24', 'NavControl__ctl1_item_23', 'NavControl__ctl1_group_1', 250, null);" cellSpacing="0" cellPadding="0" border="0"><tbody ></tbody></table><table style="LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px"><tbody ><tr ><td ><br /></td></tr></tbody></table></span></td><td ><img src="/Aims/images/nav-rightend.gif"/></td></tr></tbody></table></td><td vAlign="top" align="left" width="20"><img height="70" alt="" src="/AIMS/images/header-rightend.gif" width="20" border="0"/></td></tr></tbody></table></td></tr><tr ><td width="100%" height="100%"><table height="100%" width="100%" border="0"><tbody ><tr ><td vAlign="top" align="middle"><table border="0"><tbody ><tr ><td align="left"><center ><div id="CustomValidationSummary" style="DISPLAY: none"><div style="DISPLAY: none"></div><table style="BORDER-COLLAPSE: collapse" cellSpacing="0" cellPadding="0"><tbody ><tr ><td ><img src="/AIMS/images/alertLeftTop.gif"/><br /><br /></td><td ><table style="BORDER-COLLAPSE: collapse" cellSpacing="0" cellPadding="0"><tbody ><tr ><td width="50%" background="/AIMS/images/alertHorizontal.gif"><br /><br /></td><td ><img src="/AIMS/images/alert.gif"/><br /><br /></td><td width="50%" background="/AIMS/images/alertHorizontal.gif"><br /><br /></td></tr></tbody></table><br /><br /></td><td ><img src="/AIMS/images/alertRightTop.gif"/><br /><br /></td></tr><tr ><td background="/AIMS/images/alertLeftVertical.gif"><br /><br /></td><td vAlign="center" align="middle"><div id="ValidationSummaryHeader">     Header Text    <br /><br /></div><div id="ValidationSummaryItem" style="DISPLAY: none">    - Item Text    <br /></div><br /><br /></td><td background="/AIMS/images/alertRightVertical.gif"><br /><br /></td></tr><tr ><td ><img src="/AIMS/images/alertLeftBottom.gif"/><br /><br /></td><td background="/AIMS/images/alertHorizontal.gif"><br /><br /></td><td ><img src="/AIMS/images/alertRightBottom.gif"/><br /><br /></td></tr></tbody></table></div></center><input id="Version_FetchMatterVendorSummaryBO" type="hidden" value="0" name="Version_FetchMatterVendorSummaryBO"/><input id="Version_DocumentBO" type="hidden" value="0" name="Version_DocumentBO"/><input id="Version_MatterBO" type="hidden" value="0" name="Version_MatterBO"/><input id="Version_CustomSettingsBO" type="hidden" value="0" name="Version_CustomSettingsBO"/> <table class="Clear"><tbody ><tr ><td class="Title">List Matters</td></tr></tbody></table><br /><div id="Panel1" style="WIDTH: 400px; HEIGHT: 21px"><span class="DCViewListActive">Open</span> <span class="DCViewListActive"> |</span> <a class="DCViewListInactive" id="DCViewLink2" onclick="setView('Closed',this);" href="javascript:__doPostBack('DCViewLink2','')" pagecontext="">Closed</a> <span class="DCViewListActive"> |</span> <a class="DCViewListInactive" id="DCViewLink3" onclick="setView('All',this);" href="javascript:__doPostBack('DCViewLink3','')" pagecontext="">All</a> </div></td></tr><tr ><td ><div id="pnOpen" style="DISPLAY: block; WIDTH: 160px"><table class="Normal"><tbody ><tr class="Header"><td class="Header">Open Matters </td><td align="right"><table class="Invisible"><tbody ><tr ><td ><div id="DCImageButton1" title="Add Matter" onclick="DCImageButton1_onclick(this);return true;" anchorclicked="false"><table style="BORDER-COLLAPSE: collapse" cellSpacing="0" cellPadding="0" width="28" border="0"><tbody ><tr ><td width="1%"><img src="/AIMS/images/bt2Left26gray.gif" border="0"/></td><td style="PADDING-RIGHT: 2px; PADDING-LEFT: 4px" vAlign="center" align="middle" width="98%" background="/AIMS/images/bt2Center26gray.gif"><a class="ButtonText" id="imgbtaDCImageButton1" href="#AimsStandardLink"><nobr ><div class="ButtonText" id="dvbtDCImageButton1Text" style="DISPLAY: inline">Add</div></nobr></a></td><td style="PADDING-RIGHT: 4px; PADDING-LEFT: 2px" vAlign="center" align="middle" width="98%" background="/AIMS/images/bt2Center26gray.gif"><img id="imgbtDCImageButton1" src="/AIMS/images/add.gif" border="0"/></td><td width="1%"><img src="/AIMS/images/bt2Right26gray.gif" border="0"/></td></tr></tbody></table></div></td><td ><div id="DCCollapseButton1" title="" onclick="DCCollapseButton1_onclick(this);return true;" anchorclicked="false"><table style="BORDER-COLLAPSE: collapse" cellSpacing="0" cellPadding="0" width="0" border="0"><tbody ><tr ><td width="1%"><img src="/AIMS/images/bt2Left26gray.gif" border="0"/></td><td style="PADDING-RIGHT: 4px; PADDING-LEFT: 4px" vAlign="center" align="middle" width="98%" background="/AIMS/images/bt2Center26gray.gif"><a class="ButtonText" id="imgbtaDCCollapseButton1" href="#AimsStandardLink"><img id="imgbtDCCollapseButton1" src="/AIMS/images/blue-chevron_up.gif" border="0"/></a></td><td width="1%"><img src="/AIMS/images/bt2Right26gray.gif" border="0"/></td></tr></tbody></table></div><input id="SearchState" type="hidden" value="False" name="SearchState"/></td></tr></tbody></table></td></tr></tbody></table></div><div id="panelSearch" style="DISPLAY: block"><table class="Normal" id="Table1"><tbody ><tr class="Report"><td class="Report"><br /></td><td class="Report"><br /></td><td class="Report"><br /></td><td class="Report" style="WIDTH: 287px"><br /></td><td class="Report"><br /></td></tr><tr class="Report"><td class="Report"><br /></td><td class="Report"><br /></td><td class="Report"><br /></td><td class="Report" style="WIDTH: 283px"><br /></td><td class="Report" align="right"><br /></td></tr></tbody></table></div></td></tr></tbody></table></td></tr></tbody></table></td></tr><tr ><td ><table cellSpacing="0" cellPadding="0" width="100%"><tbody ><tr ><td vAlign="top" align="left" background="/AIMS/images/footer-bkgd.gif" colSpan="3"><img height="17" alt="" src="/AIMS/images/footer-bkgd.gif" width="50" border="0"/></td></tr><tr ><td vAlign="top" align="left" colSpan="3"><font face="verdana" color="#666666" size="1"><br /></font></td></tr></tbody></table></td></tr></tbody></table><input id="ViewLinkId" type="hidden" name="ViewLinkId"/><input id="View" type="hidden" value="Default" name="View"/><input id="CausesValidation" type="hidden" name="CausesValidation"/><input id="RenderLocation" type="hidden" value="Server" name="RenderLocation"/> </form></body>
+</HTML>
diff --git a/test/rexml/data/ticket_68.xml b/test/rexml/data/ticket_68.xml
new file mode 100644
index 0000000000..7ab34b08cd
--- /dev/null
+++ b/test/rexml/data/ticket_68.xml
@@ -0,0 +1,590 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Rev 1.05
+ Changed the <gram> element name to <pos>
+ Added the g_gend attribute
+ moved the s_inf element
+-->
+<!-- Rev 1.04
+ Changes:
+ Rename the project "JMdict" and add the g_lang attribute to the
+ <gloss> entity - 08 May 1999
+ Moved the <gram>, <field> and <misc> elements down to be in the
+ <sense> region, as suggested by Chris Czeyka. I have also tidied up
+ some of the "*" as he suggested. - 27 May 2000
+ Added the re_nokanji element - Sep 2003.
+ -->
+<!DOCTYPE JMdict [
+<!ELEMENT JMdict (entry*)>
+<!-- -->
+<!ELEMENT entry (ent_seq, k_ele*, r_ele+, info*, sense+)>
+ <!-- Entries consist of kanji elements, reading elements,
+ general information and sense elements. Each entry must have at
+ least one reading element and one sense element. Others are optional.
+ -->
+<!ELEMENT ent_seq (#PCDATA)>
+ <!-- A unique numeric sequence number for each entry
+ -->
+<!ELEMENT k_ele (keb, ke_inf*, ke_pri*)>
+ <!-- The kanji element, or in its absence, the reading element, is
+ the defining component of each entry.
+ The overwhelming majority of entries will have a single kanji
+ element associated with a word in Japanese. Where there are
+ multiple kanji elements within an entry, they will be orthographical
+ variants of the same word, either using variations in okurigana, or
+ alternative and equivalent kanji. Common "mis-spellings" may be
+ included, provided they are associated with appropriate information
+ fields. Synonyms are not included; they may be indicated in the
+ cross-reference field associated with the sense element.
+ -->
+<!ELEMENT keb (#PCDATA)>
+ <!-- This element will contain a word or short phrase in Japanese
+ which is written using at least one kanji. The valid characters are
+ kanji, kana, related characters such as chouon and kurikaeshi, and
+ in exceptional cases, letters from other alphabets.
+ -->
+<!ELEMENT ke_inf (#PCDATA)>
+ <!-- This is a coded information field related specifically to the
+ orthography of the keb, and will typically indicate some unusual
+ aspect, such as okurigana irregularity.
+ -->
+<!ELEMENT ke_pri (#PCDATA)>
+ <!-- This and the equivalent re_pri field are provided to record
+ information about the relative priority of the entry, and consist
+ of codes indicating the word appears in various references which
+ can be taken as an indication of the frequency with which the word
+ is used. This field is intended for use either by applications which
+ want to concentrate on entries of a particular priority, or to
+ generate subset files.
+ The current values in this field are:
+ - news1/2: appears in the "wordfreq" file compiled by Alexandre Girardi
+ from the Mainichi Shimbun. (See the Monash ftp archive for a copy.)
+ Words in the first 12,000 in that file are marked "news1" and words
+ in the second 12,000 are marked "news2".
+ - ichi1/2: appears in the "Ichimango goi bunruishuu", Senmon Kyouiku
+ Publishing, Tokyo, 1998.
+ - spec1 and spec2: a small number of words use this marker when they
+ are detected as being common, but are not included in other lists.
+ - gai1: common loanwords, based on the wordfreq file.
+ - nfxx: this is an indicator of frequency-of-use ranking in the
+ wordfreq file. "xx" is the number of the set of 500 words in which
+ the entry can be found, with "01" assigned to the first 500, "02"
+ to the second, and so on.
+
+ The reason both the kanji and reading elements are tagged is because
+ on occasions a priority is only associated with a particular
+ kanji/reading pair.
+ -->
+<!-- -->
+<!ELEMENT r_ele (reb, re_nokanji?, re_restr*, re_inf*, re_pri*)>
+ <!-- The reading element typically contains the valid readings
+ of the word(s) in the kanji element using modern kanadzukai.
+ Where there are multiple reading elements, they will typically be
+ alternative readings of the kanji element. In the absence of a
+ kanji element, i.e. in the case of a word or phrase written
+ entirely in kana, these elements will define the entry.
+ -->
+<!ELEMENT reb (#PCDATA)>
+ <!-- this element content is restricted to kana and related
+ characters such as chouon and kurikaeshi. Kana usage will be
+ consistent between the keb and reb elements; e.g. if the keb
+ contains katakana, so too will the reb.
+ -->
+<!ELEMENT re_nokanji (#PCDATA)>
+ <!-- This element, which will usually have a null value, indicates
+ that the reb, while associated with the keb, cannot be regarded
+ as a true reading of the kanji. It is typically used for words
+ such as foreign place names, gairaigo which can be in kanji or
+ katakana, etc.
+ -->
+<!ELEMENT re_restr (#PCDATA)>
+ <!-- This element is used to indicate when the reading only applies
+ to a subset of the keb elements in the entry. In its absence, all
+ readings apply to all kanji elements. The contents of this element
+ must exactly match those of one of the keb elements.
+ -->
+<!ELEMENT re_inf (#PCDATA)>
+ <!-- General coded information pertaining to the specific reading.
+ Typically it will be used to indicate some unusual aspect of
+ the reading. -->
+<!ELEMENT re_pri (#PCDATA)>
+ <!-- See the comment on ke_pri above. -->
+<!-- -->
+<!ELEMENT info (lang*, dial*, links*, bibl*, etym*, audit*)>
+ <!-- general coded information relating to the entry as a whole.-->
+<!ELEMENT lang (#PCDATA)>
+ <!-- For loan-words, the ISO 639 two-letter code for the originating
+ language. -->
+<!ELEMENT dial (#PCDATA)>
+ <!-- For words specifically associated with regional dialects in
+ Japanese, the entity code for that dialect, e.g. ksb for Kansaiben.
+ -->
+<!ELEMENT bibl (bib_tag?, bib_txt?)>
+<!ELEMENT bib_tag (#PCDATA)>
+<!ELEMENT bib_txt (#PCDATA)>
+ <!-- Bibliographic information about the entry. The bib_tag will a
+ coded reference to an entry in an external bibliographic database.
+ The bib_txt field may be used for brief (local) descriptions.-->
+<!ELEMENT etym (#PCDATA)>
+ <!-- This field is used to hold information about the etymology
+ of the entry. -->
+<!ELEMENT links (link_tag, link_desc, link_uri)>
+<!ELEMENT link_tag (#PCDATA)>
+<!ELEMENT link_desc (#PCDATA)>
+<!ELEMENT link_uri (#PCDATA)>
+ <!-- This element holds details of linking information to
+ entries in other electronic repositories. The link_tag will be
+ coded to indicate the type of link (text, image, sound), the
+ link_desc will provided a textual label for the link, and the
+ link_uri contains the actual URI. -->
+<!ELEMENT audit (upd_date, upd_detl)>
+<!ELEMENT upd_date (#PCDATA)>
+<!ELEMENT upd_detl (#PCDATA)>
+ <!-- The audit element will contain the date and other information
+ about updates to the entry. Can be used to record the source of
+ the material. -->
+<!-- -->
+<!ELEMENT sense (stagk*, stagr*, pos*, xref*, ant*, field*, misc*, s_inf*, gloss*, example*)>
+ <!-- The sense element will record the translational equivalent
+ of the Japanese word, plus other related information. Where there
+ are several distinctly different meanings of the word, multiple
+ sense elements will be employed.
+ -->
+<!ELEMENT stagk (#PCDATA)>
+<!ELEMENT stagr (#PCDATA)>
+ <!-- These elements, if present, indicate that the sense is restricted
+ to the lexeme represented by the keb and/or reb. -->
+<!ELEMENT xref (#PCDATA)*>
+ <!-- This element is used to indicate a cross-reference to another
+ entry with a similar or related meaning or sense. The content of
+ this element must exactly match that of a keb or reb element in
+ another entry.
+ -->
+<!ELEMENT ant (#PCDATA)*>
+ <!-- This element is used to indicate another entry which is an
+ antonym of the current entry/sense. The content of this element
+ must exactly match that of a keb or reb element in another entry.
+ -->
+<!ELEMENT pos (#PCDATA)>
+ <!-- Part-of-speech information about the entry/sense. Should use
+ appropriate entity codes.
+ -->
+<!ELEMENT field (#PCDATA)>
+ <!-- Information about the field of application of the entry. When
+ absent, general application is implied. Entity coding for specific
+ fields of application. -->
+<!ELEMENT misc (#PCDATA)>
+ <!-- This element is used for other relevant information about
+ the entry. -->
+<!ELEMENT gloss (#PCDATA | pri)*>
+ <!-- Within each sense will be one or more "glosses", i.e.
+ target-language words or phrases which are equivalents to the
+ Japanese word. This element would normally be present, however it
+ may be omitted in entries which are purely for a cross-reference.
+ -->
+<!ATTLIST gloss g_lang CDATA "en">
+ <!-- The g_lang attribute defines the target language of the
+ gloss. It will be coded using the two-letter language code from
+ the ISO 639 standard. When absent, the value "en" (i.e. English)
+ is the default value. -->
+<!ATTLIST gloss g_gend CDATA #IMPLIED>
+ <!-- The g_gend attribute defines the gender of the gloss (typically
+ a noun in the target language. When absent, the gender is either
+ not relevant or has yet to be provided.
+ -->
+<!ELEMENT pri (#PCDATA)>
+ <!-- These elements highlight particular target-language words which
+ are strongly associated with the Japanese word. The purpose is to
+ establish a set of target-language words which can effectively be
+ used as head-words in a reverse target-language/Japanese relationship.
+ -->
+<!ELEMENT example (#PCDATA)>
+ <!-- The example elements provide for pairs of short Japanese and
+ target-language phrases or sentences which exemplify the usage of the
+ Japanese head-word and the target-language gloss. Words in example
+ fields would typically not be indexed by a dictionary application.
+ -->
+<!ELEMENT s_inf (#PCDATA)>
+ <!-- The sense-information elements provided for additional
+ information to be recorded about a sense. Typical usage would
+ be to indicate such things as level of currency of a sense, the
+ regional variations, etc.
+ -->
+<!-- The following entity codes are used for common elements within the
+various information fields.
+-->
+<!ENTITY MA "martial arts term">
+<!ENTITY X "rude or X-rated term (not displayed in educational software)">
+<!ENTITY abbr "abbreviation">
+<!ENTITY adj "adjective (keiyoushi)">
+<!ENTITY adj-na "adjectival nouns or quasi-adjectives (keiyodoshi)">
+<!ENTITY adj-no "nouns which may take the genitive case particle `no'">
+<!ENTITY adj-pn "pre-noun adjectival (rentaishi)">
+<!ENTITY adj-t "`taru' adjective">
+<!ENTITY adv "adverb (fukushi)">
+<!ENTITY adv-n "adverbial noun">
+<!ENTITY adv-to "adverb taking the `to' particle">
+<!ENTITY arch "archaism">
+<!ENTITY ateji "ateji (phonetic) reading">
+<!ENTITY aux "auxiliary">
+<!ENTITY aux-v "auxiliary verb">
+<!ENTITY aux-adj "auxiliary adjective">
+<!ENTITY Buddh "Buddhist term">
+<!ENTITY chn "children's language">
+<!ENTITY col "colloquialism ">
+<!ENTITY comp "computer terminology">
+<!ENTITY conj "conjunction">
+<!ENTITY derog "derogatory">
+<!ENTITY ek "exclusively kanji">
+<!ENTITY exp "Expressions (phrases, clauses, etc.)">
+<!ENTITY fam "familiar language ">
+<!ENTITY fem "female term or language">
+<!ENTITY food "food term">
+<!ENTITY geom "geometry term">
+<!ENTITY gikun "gikun (meaning) reading">
+<!ENTITY gram "grammatical term">
+<!ENTITY hon "honorific or respectful (sonkeigo) language ">
+<!ENTITY hum "humble (kenjougo) language ">
+<!ENTITY iK "word containing irregular kanji usage">
+<!ENTITY id "idiomatic expression ">
+<!ENTITY ik "word containing irregular kana usage">
+<!ENTITY int "interjection (kandoushi)">
+<!ENTITY io "irregular okurigana usage">
+<!ENTITY iv "irregular verb">
+<!ENTITY ling "linguistics terminology">
+<!ENTITY m-sl "manga slang">
+<!ENTITY male "male term or language">
+<!ENTITY male-sl "male slang">
+<!ENTITY math "mathematics">
+<!ENTITY mil "military">
+<!ENTITY n "noun (common) (futsuumeishi)">
+<!ENTITY n-adv "adverbial noun (fukushitekimeishi)">
+<!ENTITY n-suf "noun, used as a suffix">
+<!ENTITY n-pref "noun, used as a prefix">
+<!ENTITY n-t "noun (temporal) (jisoumeishi)">
+<!ENTITY neg "negative (in a negative sentence, or with negative verb)">
+<!ENTITY neg-v "negative verb (when used with)">
+<!ENTITY num "numeric">
+<!ENTITY oK "word containing out-dated kanji ">
+<!ENTITY obs "obsolete term">
+<!ENTITY obsc "obscure term">
+<!ENTITY ok "out-dated or obsolete kana usage">
+<!ENTITY pol "polite (teineigo) language ">
+<!ENTITY pref "prefix ">
+<!ENTITY prt "particle ">
+<!ENTITY physics "physics terminology">
+<!ENTITY qv "quod vide (see another entry)">
+<!ENTITY rare "rare">
+<!ENTITY sl "slang">
+<!ENTITY suf "suffix ">
+<!ENTITY uK "word usually written using kanji alone ">
+<!ENTITY uk "word usually written using kana alone ">
+<!ENTITY v1 "Ichidan verb">
+<!ENTITY v5 "Godan verb (not completely classified)">
+<!ENTITY v5aru "Godan verb - -aru special class">
+<!ENTITY v5b "Godan verb with `bu' ending">
+<!ENTITY v5g "Godan verb with `gu' ending">
+<!ENTITY v5k "Godan verb with `ku' ending">
+<!ENTITY v5k-s "Godan verb - Iku/Yuku special class">
+<!ENTITY v5m "Godan verb with `mu' ending">
+<!ENTITY v5n "Godan verb with `nu' ending">
+<!ENTITY v5r "Godan verb with `ru' ending">
+<!ENTITY v5r-i "Godan verb with `ru' ending (irregular verb)">
+<!ENTITY v5s "Godan verb with `su' ending">
+<!ENTITY v5t "Godan verb with `tsu' ending">
+<!ENTITY v5u "Godan verb with `u' ending">
+<!ENTITY v5u-s "Godan verb with `u' ending (special class)">
+<!ENTITY v5uru "Godan verb - Uru old class verb (old form of Eru)">
+<!ENTITY vi "intransitive verb ">
+<!ENTITY vk "Kuru verb - special class">
+<!ENTITY vs "noun or participle which takes the aux. verb suru">
+<!ENTITY vs-s "suru verb - special class">
+<!ENTITY vs-i "suru verb - irregular">
+<!ENTITY vz "zuru verb - (alternative form of -jiru verbs)">
+<!ENTITY vt "transitive verb">
+<!ENTITY vulg "vulgar expression or word ">
+<!ENTITY mg "masculine gender">
+<!ENTITY fg "feminine gender">
+<!ENTITY ng "neuter gender">
+]>
+<!-- JMdict created: 2006-09-11 -->
+<JMdict>
+<!-- JMdict Japanese-Multilingual Dictionary file (XML format) -->
+<!-- Using V1.05 of the DTD -->
+<!-- Copyright J.W. Breen (jwb@csse.monash.edu.au) -->
+<entry>
+<ent_seq>1000000</ent_seq>
+<k_ele>
+<keb>ヽ</keb>
+</k_ele>
+<r_ele>
+<reb>ãã‚Šã‹ãˆã—</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>repetition mark in katakana</gloss>
+<gloss g_lang="de">Wiederholungszeichen für Katakana</gloss>
+<gloss g_lang="de">normalerweise nur in vertikaler Schreibweise verwendet</gloss>
+<gloss g_lang="fr">marque de la répétition dans katakana</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000010</ent_seq>
+<k_ele>
+<keb>ヾ</keb>
+</k_ele>
+<r_ele>
+<reb>ãã‚Šã‹ãˆã—</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>voiced repetition mark in katakana</gloss>
+<gloss g_lang="de">stimmhaftes Wiederholungszeichen für Katakana</gloss>
+<gloss g_lang="de">normalerweise nur in vertikaler Schreibweise verwendet</gloss>
+<gloss g_lang="fr">marque de la répétition sonore dans katakana</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000020</ent_seq>
+<k_ele>
+<keb>ã‚</keb>
+</k_ele>
+<r_ele>
+<reb>ãã‚Šã‹ãˆã—</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>repetition mark in hiragana</gloss>
+<gloss g_lang="de">Wiederholungszeichen für Hiragana</gloss>
+<gloss g_lang="de">normalerweise nur in vertikaler Schreibweise verwendet</gloss>
+<gloss g_lang="fr">marque de la répétition dans hiragana</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000030</ent_seq>
+<k_ele>
+<keb>ã‚ž</keb>
+</k_ele>
+<r_ele>
+<reb>ãã‚Šã‹ãˆã—</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>voiced repetition mark in hiragana</gloss>
+<gloss g_lang="de">stimmhaftes Wiederholungszeichen für Hiragana</gloss>
+<gloss g_lang="de">normalerweise nur in vertikaler Schreibweise verwendet</gloss>
+<gloss g_lang="fr">marque de la répétition sonore dans hiragana</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000040</ent_seq>
+<k_ele>
+<keb>〃</keb>
+</k_ele>
+<r_ele>
+<reb>ãŠãªã˜ã</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>ditto mark</gloss>
+<gloss g_lang="ru">знак "то же Ñамое"</gloss>
+<gloss g_lang="de">Wiederholungszeichen in Tabellen</gloss>
+<gloss g_lang="fr">idem marque</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000050</ent_seq>
+<k_ele>
+<keb>ä»</keb>
+</k_ele>
+<r_ele>
+<reb>ã©ã†ã˜ã‚‡ã†</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>"as above" mark</gloss>
+<gloss g_lang="de">Abkürzung für "siehe oben"</gloss>
+<gloss g_lang="fr">comme au-dessus</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000060</ent_seq>
+<k_ele>
+<keb>々</keb>
+</k_ele>
+<r_ele>
+<reb>ãã‚Šã‹ãˆã—</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>repetition of kanji (sometimes voiced)</gloss>
+<gloss g_lang="de">Wiederholungszeichen für Kanji</gloss>
+<gloss g_lang="de">(Laut wird durch Wiederholung manchmal stimmhaft)</gloss>
+<gloss g_lang="fr">répétition de kanji(quelquefois a exprimé)</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000070</ent_seq>
+<k_ele>
+<keb>〆</keb>
+</k_ele>
+<r_ele>
+<reb>ã—ã‚</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>end or closure mark</gloss>
+<gloss g_lang="de">Zeichen als eine Art Versiegelung über der zugeklebten Lasche auf der Rückseite eines Briefumschlages</gloss>
+<gloss g_lang="fr">fin ou marque de la fermeture</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000080</ent_seq>
+<k_ele>
+<keb>〇</keb>
+</k_ele>
+<k_ele>
+<keb>â—‹</keb>
+<ke_inf>&iK;</ke_inf>
+</k_ele>
+<r_ele>
+<reb>ã‹ã‚“ã™ã†ã˜ã‚¼ãƒ­</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<xref>漢数字</xref>
+<xref>ゼロ</xref>
+<gloss>"kanji" zero</gloss>
+<gloss g_lang="de">Kanji-Ziffer für Null</gloss>
+<gloss g_lang="fr">kanji</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000090</ent_seq>
+<k_ele>
+<keb>â—‹</keb>
+</k_ele>
+<k_ele>
+<keb>〇</keb>
+<ke_inf>&iK;</ke_inf>
+</k_ele>
+<r_ele>
+<reb>ã¾ã‚‹</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>circle (sometimes used for zero)</gloss>
+<gloss g_lang="ru">круг</gloss>
+<gloss g_lang="ru">ноÌль</gloss>
+<gloss g_lang="de">Kreis</gloss>
+<gloss g_lang="de">Markierung für "richtig"</gloss>
+<gloss g_lang="de">Maru</gloss>
+<gloss g_lang="de">(ein japan. Schriftfont hat mindestens drei verschiedene Codierungen und Darstellungen für "maru")</gloss>
+<gloss g_lang="fr">entourez</gloss>
+<gloss g_lang="fr">mettez à zéro</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000100</ent_seq>
+<k_ele>
+<keb>ABC順</keb>
+</k_ele>
+<r_ele>
+<reb>エービーシーã˜ã‚…ã‚“</reb>
+</r_ele>
+<r_ele>
+<reb>ãˆãˆã³ã„ã—ã„ã˜ã‚…ã‚“</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>alphabetical order</gloss>
+<gloss g_lang="de">alphabetische Ordnung</gloss>
+<gloss g_lang="de">alphabetische Reihenfolge</gloss>
+<gloss g_lang="fr">ordre alphabétique</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000110</ent_seq>
+<k_ele>
+<keb>CDプレーヤー</keb>
+</k_ele>
+<r_ele>
+<reb>シーディープレーヤー</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>CD player</gloss>
+<gloss g_lang="ru">CD плеер</gloss>
+<gloss g_lang="ru">проигрыватель компакт-диÑков</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000120</ent_seq>
+<k_ele>
+<keb>Hãªæ˜ ç”»</keb>
+</k_ele>
+<k_ele>
+<keb>エッãƒãªæ˜ ç”»</keb>
+</k_ele>
+<r_ele>
+<reb>エッãƒãªãˆã„ãŒ</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>pornographic film</gloss>
+<gloss>salacious film</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000130</ent_seq>
+<k_ele>
+<keb>N響</keb>
+</k_ele>
+<r_ele>
+<reb>エヌãょã†</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<misc>&abbr;</misc>
+<gloss>NHK Symphony Orchestra</gloss>
+<gloss g_lang="fr">NHK Symphonie Orchestre(abbr)</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000140</ent_seq>
+<r_ele>
+<reb>Oãƒãƒƒã‚¯</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>O-back</gloss>
+<gloss>skirt with peek-a-boo hole in rump</gloss>
+<gloss g_lang="fr">O En arrière</gloss>
+<gloss g_lang="fr">contournez avec coucou trou dans croupe</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+<entry>
+<ent_seq>1000150</ent_seq>
+<r_ele>
+<reb>RS232ケーブル</reb>
+</r_ele>
+<sense>
+<pos>&n;</pos>
+<gloss>rs232 cable</gloss>
+<gloss g_lang="fr">les rs232 câblent</gloss>
+<gloss g_lang="fr">(JF2)</gloss>
+</sense>
+</entry>
+</JMdict>
diff --git a/test/rexml/data/tutorial.xml b/test/rexml/data/tutorial.xml
new file mode 100644
index 0000000000..43784d2f02
--- /dev/null
+++ b/test/rexml/data/tutorial.xml
@@ -0,0 +1,678 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/css"
+href="../../documentation/documentation.css"
+?>
+<?xml-stylesheet type="text/xsl"
+href="../../documentation/documentation.xsl"
+?>
+<!DOCTYPE documentation SYSTEM "http://www.germane-software.com/software/documentation/documentation.dtd">
+<documentation>
+ <head>
+ <title>REXML Tutorial</title>
+
+ <version>$Revision: 1.1.2.1 $</version>
+
+ <date>*2001-296+594</date>
+
+ <home>http://www.germane-software.com/~ser/software/rexml</home>
+
+ <base></base>
+
+ <language>ruby</language>
+
+ <author email="ser@germane-software.com"
+ href="http://www.germane-software.com/~ser">Sean Russell</author>
+ </head>
+
+ <overview>
+ <purpose lang="en">
+ <p>This is a tutorial for using <link
+ href="http://www.germane-software.com/~ser/software/rexml">REXML</link>,
+ a pure Ruby XML processor.</p>
+ </purpose>
+
+ <general>
+ <p>REXML was inspired by the Electric XML library for Java, which
+ features an easy-to-use API, small size, and speed. Hopefully, REXML,
+ designed with the same philosophy, has these same features. I've tried
+ to keep the API as intuitive as possible, and have followed the Ruby
+ methodology for method naming and code flow, rather than mirroring the
+ Java API.</p>
+
+ <p>REXML supports both tree and stream document parsing. Stream parsing
+ is faster (about 1.5 times as fast). However, with stream parsing, you
+ don't get access to features such as XPath.</p>
+
+ <p>The <link href="../doc/index.html">API</link> documentation also
+ contains code snippits to help you learn how to use various methods.
+ This tutorial serves as a starting point and quick guide to using
+ REXML.</p>
+
+ <subsection title="Tree Parsing XML and accessing Elements">
+ <p>We'll start with parsing an XML document</p>
+
+ <example>require "rexml/document"
+file = File.new( "mydoc.xml" )
+doc = REXML::Document.new file</example>
+
+ <p>Line 3 creates a new document and parses the supplied file. You can
+ also do the following</p>
+
+ <example>require "rexml/document"
+include REXML # so that we don't have to prefix everything with REXML::...
+string = &lt;&lt;EOF
+ &lt;mydoc&gt;
+ &lt;someelement attribute="nanoo"&gt;Text, text, text&lt;/someelement&gt;
+ &lt;/mydoc&gt;
+EOF
+doc = Document.new string</example>
+
+ <p>So parsing a string is just as easy as parsing a file. For future
+ examples, I'm going to omit both the <code>require</code> and
+ <code>include</code> lines.</p>
+
+ <p>Once you have a document, you can access elements in that document
+ in a number of ways:</p>
+
+ <list>
+ <item>The <code>Element</code> class itself has
+ <code>each_element_with_attribute</code>, a common way of accessing
+ elements.</item>
+
+ <item>The attribute <code>Element.elements</code> is an
+ <code>Elements</code> class instance which has the <code>each</code>
+ and <code>[]</code> methods for accessing elements. Both methods can
+ be supplied with an XPath for filtering, which makes them very
+ powerful.</item>
+
+ <item>Since <code>Element</code> is a subclass of Parent, you can
+ also access the element's children directly through the Array-like
+ methods <code>Element[], Element.each, Element.find,
+ Element.delete</code>. This is the fastest way of accessing
+ children, but note that, being a true array, XPath searches are not
+ supported, and that all of the element children are contained in
+ this array, not just the Element children.</item>
+ </list>
+
+ <p>Here are a few examples using these methods. First is the source
+ document used in the examples. Save this as mydoc.xml before running
+ any of the examples that require it:</p>
+
+ <example title="The source document">&lt;inventory title="OmniCorp Store #45x10^3"&gt;
+ &lt;section name="health"&gt;
+ &lt;item upc="123456789" stock="12"&gt;
+ &lt;name&gt;Invisibility Cream&lt;/name&gt;
+ &lt;price&gt;14.50&lt;/price&gt;
+ &lt;description&gt;Makes you invisible&lt;/description&gt;
+ &lt;/item&gt;
+ &lt;item upc="445322344" stock="18"&gt;
+ &lt;name&gt;Levitation Salve&lt;/name&gt;
+ &lt;price&gt;23.99&lt;/price&gt;
+ &lt;description&gt;Levitate yourself for up to 3 hours per application&lt;/description&gt;
+ &lt;/item&gt;
+ &lt;/section&gt;
+ &lt;section name="food"&gt;
+ &lt;item upc="485672034" stock="653"&gt;
+ &lt;name&gt;Blork and Freen Instameal&lt;/name&gt;
+ &lt;price&gt;4.95&lt;/price&gt;
+ &lt;description&gt;A tasty meal in a tablet; just add water&lt;/description&gt;
+ &lt;/item&gt;
+ &lt;item upc="132957764" stock="44"&gt;
+ &lt;name&gt;Grob winglets&lt;/name&gt;
+ &lt;price&gt;3.56&lt;/price&gt;
+ &lt;description&gt;Tender winglets of Grob. Just add water&lt;/description&gt;
+ &lt;/item&gt;
+ &lt;/section&gt;
+&lt;/inventory&gt;</example>
+
+ <example title="Accessing Elements">doc = Document.new File.new("mydoc.xml")
+doc.elements.each("inventory/section") { |element| puts element.attributes["name"] }
+# -&gt; health
+# -&gt; food
+doc.elements.each("*/section/item") { |element| puts element.attributes["upc"] }
+# -&gt; 123456789
+# -&gt; 445322344
+# -&gt; 485672034
+# -&gt; 132957764
+root = doc.root
+puts root.attributes["title"]
+# -&gt; OmniCorp Store #45x10^3
+puts root.elements["section/item[@stock='44']"].attributes["upc"]
+# -&gt; 132957764
+puts root.elements["section"].attributes["name"]
+# -&gt; health (returns the first encountered matching element)
+puts root.elements[1].attributes["name"]
+# -&gt; health (returns the FIRST child element)
+root.detect {|node| node.kind_of? Element and node.attributes["name"] == "food" }</example>
+
+ <p>Notice the second-to-last line of code. Element children in REXML
+ are indexed starting at 1, not 0. This is because XPath itself counts
+ elements from 1, and REXML maintains this relationship; IE,
+ <code>root.elements['*[1]'] == root.elements[1]</code>. The last line
+ finds the first child element with the name of "food". As you can see
+ in this example, accessing attributes is also straightforward.</p>
+
+ <p>You can also access xpaths directly via the XPath class.</p>
+
+ <example title="Using XPath"># The invisibility cream is the first &lt;item&gt;
+invisibility = XPath.first( doc, "//item" )
+# Prints out all of the prices
+XPath.each( doc, "//price") { |element| puts element.text }
+# Gets an array of all of the "name" elements in the document.
+names = XPath.match( doc, "//name" ) </example>
+
+ <p>Another way of getting an array of matching nodes is through
+ Element.elements.to_a(). Although this is a method on elements, if
+ passed an XPath it can return an array of arbitrary objects. This is
+ due to the fact that XPath itself can return arbitrary nodes
+ (Attribute nodes, Text nodes, and Element nodes).</p>
+
+ <example title="Using to_a()">all_elements = doc.elements.to_a
+all_children = doc.to_a
+all_upc_strings = doc.elements.to_a( "//item/attribute::upc" )
+all_name_elements = doc.elements.to_a( "//name" )</example>
+ </subsection>
+
+ <subsection title="Text Nodes">
+ <p>REXML attempts to make the common case simple, but this means that
+ the uncommon case can be complicated. This is especially true with
+ Text nodes.</p>
+
+ <p>Text nodes have a lot of behavior, and in the case of internal
+ entities, what you get may be different from what you expect. When
+ REXML reads an XML document, in parses the DTD and creates an internal
+ table of entities. If it finds any of these entities in the document,
+ it replaces them with their values:</p>
+
+ <example title="Entity Replacement">doc = Document.new '&lt;!DOCTYPE foo [
+&lt;!ENTITY ent "replace"&gt;
+]&gt;&lt;a&gt;&amp;ent;&lt;/a&gt;'
+doc.root.text #-&gt; "replace"
+</example>
+
+ <p>When you write the document back out, REXML replaces the values
+ with the entity reference:</p>
+
+ <example>doc.to_s
+# Generates:
+# &lt;!DOCTYPE foo [
+# &lt;!ENTITY ent "replace"&gt;
+# ]&gt;&lt;a&gt;&amp;ent;&lt;/a&gt;</example>
+
+ <p>But there's a problem. What happens if only some of the words are
+ also entity reference values?</p>
+
+ <example>doc = Document.new '&lt;!DOCTYPE foo [
+&lt;!ENTITY ent "replace"&gt;
+]&gt;&lt;a&gt;replace &amp;ent;&lt;/a&gt;'
+doc.root.text #-&gt; "replace replace"
+</example>
+
+ <p>Well, REXML does the only thing it can:</p>
+
+ <example>doc.to_s
+# Generates:
+# &lt;!DOCTYPE foo [
+# &lt;!ENTITY ent "replace"&gt;
+# ]&gt;&lt;a&gt;&amp;ent; &amp;ent;&lt;/a&gt;</example>
+
+ <p>This is probably not what you expect. However, when designing
+ REXML, I had a choice between this behavior, and using immutable text
+ nodes. The problem is that, if you can change the text in a node,
+ REXML can never tell which tokens you want to have replaced with
+ entities. There is a wrinkle: REXML will write what it gets in as long
+ as you don't access the text. This is because REXML does lazy
+ evaluation of entities. Therefore,</p>
+
+ <example title="Lazy Evaluation">doc = Document.new( '&lt;!DOCTYPE foo
+ [ &lt;!ENTITY ent "replace"&gt; ]&gt;&lt;a&gt;replace
+ &amp;ent;&lt;/a&gt;' ) doc.to_s # Generates: # &lt;!DOCTYPE foo [ #
+ &lt;!ENTITY ent "replace"&gt; # ]&gt;&lt;a&gt;<emphasis>replace
+ &amp;ent;</emphasis>&lt;/a&gt; doc.root.text #-&gt; Now accessed,
+ entities have been resolved doc.to_s # Generates: # &lt;!DOCTYPE foo [
+ # &lt;!ENTITY ent "replace"&gt; # ]&gt;&lt;a&gt;<emphasis>&amp;ent;
+ &amp;ent;</emphasis>&lt;/a&gt;</example>
+
+ <p>There is a programmatic solution: <code>:raw</code>. If you set the
+ <code>:raw</code> flag on any Text or Element node, the entities
+ within that node will not be processed. This means that you'll have to
+ deal with entities yourself:</p>
+
+ <example title="Entity Replacement">doc = Document.new('&lt;!DOCTYPE
+ foo [ &lt;!ENTITY ent "replace"&gt; ]&gt;&lt;a&gt;replace
+ &amp;ent;&lt;/a&gt;',<emphasis>{:raw=&gt;:all})</emphasis>
+ doc.root.text #-&gt; "replace &amp;ent;" doc.to_s # Generates: #
+ &lt;!DOCTYPE foo [ # &lt;!ENTITY ent "replace"&gt; #
+ ]&gt;&lt;a&gt;replace &amp;ent;&lt;/a&gt;</example>
+ </subsection>
+
+ <subsection title="Creating XML documents">
+ <p>Again, there are a couple of mechanisms for creating XML documents
+ in REXML. Adding elements by hand is faster than the convenience
+ method, but which you use will probably be a matter of aesthetics.</p>
+
+ <example title="Creating elements">el = someelement.add_element "myel"
+# creates an element named "myel", adds it to "someelement", and returns it
+el2 = el.add_element "another", {"id"=&gt;"10"}
+# does the same, but also sets attribute "id" of el2 to "10"
+el3 = Element.new "blah"
+el1.elements &lt;&lt; el3
+el3.attributes["myid"] = "sean"
+# creates el3 "blah", adds it to el1, then sets attribute "myid" to "sean"</example>
+
+ <p>If you want to add text to an element, you can do it by either
+ creating Text objects and adding them to the element, or by using the
+ convenience method <code>text=</code></p>
+
+ <example title="Adding text">el1 = Element.new "myelement"
+el1.text = "Hello world!"
+# -&gt; &lt;myelement&gt;Hello world!&lt;/myelement&gt;
+el1.add_text "Hello dolly"
+# -&gt; &lt;myelement&gt;Hello world!Hello dolly&lt;/element&gt;
+el1.add Text.new("Goodbye")
+# -&gt; &lt;myelement&gt;Hello world!Hello dollyGoodbye&lt;/element&gt;
+el1 &lt;&lt; Text.new(" cruel world")
+# -&gt; &lt;myelement&gt;Hello world!Hello dollyGoodbye cruel world&lt;/element&gt;</example>
+
+ <p>But note that each of these text objects are still stored as
+ separate objects; <code>el1.text</code> will return "Hello world!";
+ <code>el1[2]</code> will return a Text object with the contents
+ "Goodbye".</p>
+
+ <p>Please be aware that all text nodes in REXML are UTF-8 encoded, and
+ all of your code must reflect this. You may input and output other
+ encodings (UTF-8, UTF-16, ISO-8859-1, and UNILE are all supported,
+ input and output), but within your program, you must pass REXML UTF-8
+ strings.</p>
+
+ <p>I can't emphasize this enough, because people do have problems with
+ this. REXML can't possibly alway guess correctly how your text is
+ encoded, so it always assumes the text is UTF-8. It also does not warn
+ you when you try to add text which isn't properly encoded, for the
+ same reason. You must make sure that you are adding UTF-8 text.
+ &#160;If you're adding standard 7-bit ASCII, which is most common, you
+ don't have to worry. &#160;If you're using ISO-8859-1 text (characters
+ above 0x80), you must convert it to UTF-8 before adding it to an
+ element. &#160;You can do this with the shard:
+ <code>text.unpack("C*").pack("U*")</code>. If you ignore this warning
+ and add 8-bit ASCII characters to your documents, your code may
+ work... or it may not. &#160;In either case, REXML is not at fault.
+ You have been warned.</p>
+
+ <p>One last thing: alternate encoding output support only works from
+ Document.write() and Document.to_s(). If you want to write out other
+ nodes with a particular encoding, you must wrap your output object
+ with Output:</p>
+
+ <example title="Encoded Output">e = Element.new "&lt;a/&gt;"
+e.text = "f\xfcr" # ISO-8859-1 'ü'
+o = ''
+e.write( Output.new( o, "ISO-8859-1" ) )
+</example>
+
+ <p>You can pass Output any of the supported encodings.</p>
+
+ <p>If you want to insert an element between two elements, you can use
+ either the standard Ruby array notation, or
+ <code>Parent.insert_before</code> and
+ <code>Parent.insert_after</code>.</p>
+
+ <example title="Inserts">doc = Document.new "&lt;a&gt;&lt;one/&gt;&lt;three/&gt;&lt;/a&gt;"
+doc.root[1,0] = Element.new "two"
+# -&gt; &lt;a&gt;&lt;one/&gt;&lt;two/&gt;&lt;three/&gt;&lt;/a&gt;
+three = doc.elements["a/three"]
+doc.root.insert_after three, Element.new "four"
+# -&gt; &lt;a&gt;&lt;one/&gt;&lt;two/&gt;&lt;three/&gt;&lt;four/&gt;&lt;/a&gt;
+# A convenience method allows you to insert before/after an XPath:
+doc.root.insert_after( "//one", Element.new("one-five") )
+# -&gt; &lt;a&gt;&lt;one/&gt;&lt;one-five/&gt;&lt;two/&gt;&lt;three/&gt;&lt;four/&gt;&lt;/a&gt;
+# Another convenience method allows you to insert after/before an element:
+four = doc.elements["//four"]
+four.previous_sibling = Element.new("three-five")
+# -&gt; &lt;a&gt;&lt;one/&gt;&lt;one-five/&gt;&lt;two/&gt;&lt;three/&gt;&lt;three-five/&gt;&lt;four/&gt;&lt;/a&gt;</example>
+
+ <p>The <code>raw</code> flag in the <code>Text</code> constructor can
+ be used to tell REXML to leave strings which have entities defined for
+ them alone.</p>
+
+ <example title="Raw text">doc = Document.new( "&lt;?xml version='1.0?&gt;
+&lt;!DOCTYPE foo SYSTEM 'foo.dtd' [
+&lt;!ENTITY % s "Sean"&gt;
+]&gt;
+&lt;a/&gt;"
+t = Text.new( "Sean", false, nil, false )
+doc.root.text = t
+t.to_s # -&gt; &amp;s;
+t = Text.new( "Sean", false, nil, true )
+doc.root.text = t
+t.to_s # -&gt; Sean</example>
+
+ <p>Note that, in all cases, the <code>value()</code> method returns
+ the text with entities expanded, so the <code>raw</code> flag only
+ affects the <code>to_s()</code> method. If the <code>raw</code> is set
+ for a text node, then <code>to_s()</code> will not entities will not
+ normalize (turn into entities) entity values. You can not create raw
+ text nodes that contain illegal XML, so the following will generate a
+ parse error:</p>
+
+ <example>t = Text.new( "&amp;", false, nil, true )</example>
+
+ <p>You can also tell REXML to set the Text children of given elements
+ to raw automatically, on parsing or creating:</p>
+
+ <example title="Automatic raw text handling">doc = REXML::Document.new( source, { :raw =&gt; %w{ tag1 tag2 tag3 } }</example>
+
+ <p>In this example, all tags named "tag1", "tag2", or "tag3" will have
+ any Text children set to raw text. If you want to have all of the text
+ processed as raw text, pass in the :all tag:</p>
+
+ <example title="Raw documents">doc = REXML::Document.new( source, { :raw =&gt; :all })</example>
+ </subsection>
+
+ <subsection title="Writing a tree">
+ <p>There aren't many things that are more simple than writing a REXML
+ tree. Simply pass an object that supports <code>&lt;&lt;( String
+ )</code> to the <code>write</code> method of any object. In Ruby, both
+ IO instances (File) and String instances support &lt;&lt;.</p>
+
+ <example>doc.write $stdout
+output = ""
+doc.write output</example>
+
+ <p>If you want REXML to pretty-print output, pass <code>write()</code>
+ an indent value greater than -1:</p>
+
+ <example title="Write with pretty-printing">doc.write( $stdout, 0 )</example>
+
+ <p>REXML will not, by default, write out the XML declaration unless
+ you specifically ask for them. If a document is read that contains an
+ XML declaration, that declaration <emphasis>will</emphasis> be written
+ faithfully. The other way you can tell REXML to write the declaration
+ is to specifically add the declaration:</p>
+
+ <example title="Adding an XML Declaration to a Document">doc = Document.new
+doc.add_element 'foo'
+doc.to_s #-&gt; &lt;foo/&gt;
+doc &lt;&lt; XMLDecl.new
+doc.to_s #-&gt; &lt;?xml version='1.0'?&gt;&lt;foo/&gt;</example>
+ </subsection>
+
+ <subsection title="Iterating">
+ <p>There are four main methods of iterating over children.
+ <code>Element.each</code>, which iterates over all the children;
+ <code>Element.elements.each</code>, which iterates over just the child
+ Elements; <code>Element.next_element</code> and
+ <code>Element.previous_element</code>, which can be used to fetch the
+ next Element siblings; and <code>Element.next_sibling</code> and
+ <code>Eleemnt.previous_sibling</code>, which fetches the next and
+ previous siblings, regardless of type.</p>
+ </subsection>
+
+ <subsection title="Stream Parsing">
+ <p>REXML stream parsing requires you to supply a Listener class. When
+ REXML encounters events in a document (tag start, text, etc.) it
+ notifies your listener class of the event. You can supply any subset
+ of the methods, but make sure you implement method_missing if you
+ don't implement them all. A StreamListener module has been supplied as
+ a template for you to use.</p>
+
+ <example title="Stream parsing">list = MyListener.new
+source = File.new "mydoc.xml"
+REXML::Document.parse_stream(source, list)</example>
+
+ <p>Stream parsing in REXML is much like SAX, where events are
+ generated when the parser encounters them in the process of parsing
+ the document. When a tag is encountered, the stream listener's
+ <code>tag_start()</code> method is called. When the tag end is
+ encountered, <code>tag_end()</code> is called. When text is
+ encountered, <code>text()</code> is called, and so on, until the end
+ of the stream is reached. One other note: the method
+ <code>entity()</code> is called when an <code>&amp;entity;</code> is
+ encountered in text, and only then.</p>
+
+ <p>Please look at the <link
+ href="../doc/classes/REXML/StreamListener.html">StreamListener
+ API</link> for more information.<footnote>You must generate the API
+ documentation with rdoc or download the API documentation from the
+ REXML website for this documentation.</footnote></p>
+ </subsection>
+
+ <subsection title="Whitespace">
+ <p>By default, REXML respects whitespace in your document. In many
+ applications, you want the parser to compress whitespace in your
+ document. In these cases, you have to tell the parser which elements
+ you want to respect whitespace in by passing a context to the
+ parser:</p>
+
+ <example title="Compressing whitespace">doc = REXML::Document.new( source, { :compress_whitespace =&gt; %w{ tag1 tag2 tag3 } }</example>
+
+ <p>Whitespace for tags "tag1", "tag2", and "tag3" will be compressed;
+ all other tags will have their whitespace respected. Like :raw, you
+ can set :compress_whitespace to :all, and have all elements have their
+ whitespace compressed.</p>
+
+ <p>You may also use the tag <code>:respect_whitespace</code>, which
+ flip-flops the behavior. If you use <code>:respect_whitespace</code>
+ for one or more tags, only those elements will have their whitespace
+ respected; all other tags will have their whitespace compressed.</p>
+ </subsection>
+
+ <subsection title="Automatic Entity Processing">
+ <p>REXML does some automatic processing of entities for your
+ convenience. The processed entities are &amp;, &lt;, &gt;, ", and '.
+ If REXML finds any of these characters in Text or Attribute values, it
+ automatically turns them into entity references when it writes them
+ out. Additionally, when REXML finds any of these entity references in
+ a document source, it converts them to their character equivalents.
+ All other entity references are left unprocessed. If REXML finds an
+ &amp;, &lt;, or &gt; in the document source, it will generate a
+ parsing error.</p>
+
+ <example title="Entity processing">bad_source = "&lt;a&gt;Cats &amp; dogs&lt;/a&gt;"
+good_source = "&lt;a&gt;Cats &amp;amp; &amp;#100;ogs&lt;/a&gt;"
+doc = REXML::Document.new bad_source
+# Generates a parse error
+doc = REXML::Document.new good_source
+puts doc.root.text
+# -&gt; "Cats &amp; &amp;#100;ogs"
+doc.root.write $stdout
+# -&gt; "&lt;a&gt;Cats &amp;amp; &amp;#100;ogs&lt;/a&gt;"
+doc.root.attributes["m"] = "x'y\"z"
+puts doc.root.attributes["m"]
+# -&gt; "x'y\"z"
+doc.root.write $stdout
+# -&gt; "&lt;a m='x&amp;apos;y&amp;quot;z'&gt;Cats &amp;amp; &amp;#100;ogs&lt;/a&gt;"</example>
+ </subsection>
+
+ <subsection title="Namespaces">
+ <p>Namespaces are fully supported in REXML and within the XPath
+ parser. There are a few caveats when using XPath, however:</p>
+
+ <list>
+ <item>If you don't supply a namespace mapping, the default namespace
+ mapping of the context element is used. This has its limitations,
+ but is convenient for most purposes.</item>
+
+ <item>If you need to supply a namespace mapping, you must use the
+ XPath methods <code>each</code>, <code>first</code>, and
+ <code>match</code> and pass them the mapping.</item>
+ </list>
+
+ <example title="Using namespaces">source = "&lt;a xmlns:x='foo' xmlns:y='bar'&gt;&lt;x:b id='1'/&gt;&lt;y:b id='2'/&gt;&lt;/a&gt;"
+doc = Document.new source
+doc.elements["/a/x:b"].attributes["id"] # -&gt; '1'
+XPath.first(doc, "/a/m:b", {"m"=&gt;"bar"}).attributes["id"] # -&gt; '2'
+doc.elements["//x:b"].prefix # -&gt; 'x'
+doc.elements["//x:b"].namespace # -&gt; 'foo'
+XPath.first(doc, "//m:b", {"m"=&gt;"bar"}).prefix # -&gt; 'y'</example>
+ </subsection>
+
+ <subsection title="Pull parsing">
+ <p>The pull parser API is not yet stable. When it settles down, I'll
+ fill in this section. For now, you'll have to bite the bullet and read
+ the <link
+ href="http://www.germane-software.com/software/rexml_doc/classes/REXML/PullParser.html">PullParser</link>
+ API docs. Ignore the PullListener class; it is a private helper
+ class.</p>
+ </subsection>
+
+ <subsection title="SAX2 Stream Parsing">
+ <p>The original REXML stream parsing API is very minimal. This also
+ means that it is fairly fast. For a more complex, more "standard" API,
+ REXML also includes a streaming parser with a SAX2+ API. This API
+ differs from SAX2 in a couple of ways, such as having more filters and
+ multiple notification mechanisms, but the core API is SAX2.</p>
+
+ <p>The two classes in the SAX2 API are <link
+ href="http://www.germane-software.com/software/rexml_doc/classes/REXML/SAX2Parser.html"><code>SAX2Parser</code></link>
+ and <link
+ href="http://www.germane-software.com/software/rexml_doc/classes/REXML/SAX2Listener.html"><code>SAX2Listener</code></link>.
+ You can use the parser in one of five ways, depending on your needs.
+ Three of the ways are useful if you are filtering for a small number
+ of events in the document, such as just printing out the names of all
+ of the elements in a document, or getting all of the text in a
+ document. The other two ways are for more complex processing, where
+ you want to be notified of multiple events. The first three involve
+ Procs, and the last two involve listeners. The listener mechanisms are
+ very similar to the original REXML streaming API, with the addition of
+ filtering options, and are faster than the proc mechanisms.</p>
+
+ <p>An example is worth a thousand words, so we'll just take a look at
+ a small example of each of the mechanisms. The first example involves
+ printing out only the text content of a document.</p>
+
+ <example title="Filtering for Events with Procs">require 'rexml/sax2parser'
+parser = REXML::SAX2Parser.new( File.new( 'documentation.xml' ) )
+parser.listen( :characters ) {|text| puts text }
+parser.parse</example>
+
+ <p>In this example, we tell the parser to call our block for every
+ <code>characters</code> event. "characters" is what SAX2 calls Text
+ nodes. The event is identified by the symbol <code>:characters</code>.
+ There are a number of these events, including
+ <code>:element_start</code>, <code>:end_prefix_mapping</code>, and so
+ on; the events are named after the methods in the
+ <code>SAX2Listener</code> API, so refer to that document for a
+ complete list.</p>
+
+ <p>You can additionally filter for particular elements by passing an
+ array of tag names to the <code>listen</code> method. In further
+ examples, we will not include the <code>require</code> or parser
+ construction lines, as they are the same for all of these
+ examples.</p>
+
+ <example title="Filtering for Events on Particular Elements with Procs">parser.listen( :characters, %w{ changelog todo } ) {|text| puts text }
+parser.parse</example>
+
+ <p>In this example, only the text content of changelog and todo
+ elements will be printed. The array of tag names can also contain
+ regular expressions which the element names will be matched
+ against.</p>
+
+ <p>Finally, as a shortcut, if you do not pass a symbol to the listen
+ method, it will default to <code>:element_start</code></p>
+
+ <example title="Default Events">parser.listen( %w{ item }) do |uri,localname,qname,attributes|
+ puts attributes['version']
+end
+parser.parse</example>
+
+ <p>This example prints the "version" attribute of all "item" elements
+ in the document. Notice that the number of arguments passed to the
+ block is larger than for <code>:text</code>; again, check the
+ SAX2Listener API for a list of what arguments are passed the blocks
+ for a given event.</p>
+
+ <p>The last two mechanisms for parsing use the SAX2Listener API. Like
+ StreamListener, SAX2Listener is a <code>module</code>, so you can
+ <code>include</code> it in your class to give you an adapter. To use
+ the listener model, create a class that implements some of the
+ SAX2Listener methods, or all of them if you don't include the
+ SAX2Listener model. Add them to a parser as you would blocks, and when
+ the parser is run, the methods will be called when events occur.
+ Listeners do not use event symbols, but they can filter on element
+ names.</p>
+
+ <example title="Filtering for Events with Listeners">listener1 = MySAX2Listener.new
+listener2 = MySAX2Listener.new
+parser.listen( listener1 )
+parser.listen( %{ changelog, todo, credits }, listener2 )
+parser.parse</example>
+
+ <p>In the previous example, <code>listener1</code> will be notified of
+ all events that occur, and <code>listener2</code> will only be
+ notified of events that occur in <code>changelog</code>,
+ <code>todo</code>, and <code>credits</code> elements. We also see that
+ multiple listeners can be added to the same parser; multiple blocks
+ can also be added, and listeners and blocks can be mixed together.</p>
+
+ <p>There is, as yet, no mechanism for recursion. Two upcoming features
+ of the SAX2 API will be the ability to filter based on an XPath, and
+ the ability to specify filtering on an elemnt and all of its
+ descendants.</p>
+
+ <p><em>WARNING:</em> The SAX2 API for dealing with doctype (DTD)
+ events almost <em>certainly</em> will change.</p>
+ </subsection>
+
+ <subsection title="Convenience methods">
+ <p>Michael Neumann contributed some convenience functions for nodes,
+ and they are general enough that I've included. Michael's use-case
+ examples follow: <example title="Node convenience functions">#
+ Starting with +root_node+, we recursively look for a node with the
+ given # +tag+, the given +attributes+ (a Hash) and whoose text equals
+ or matches the # +text+ string or regular expression. # # To find the
+ following node: # # &lt;td class='abc'&gt;text&lt;/td&gt; # # We use:
+ # # find_node(root, 'td', {'class' =&gt; 'abc'}, "text") # # Returns
+ +nil+ if no matching node was found. def find_node(root_node, tag,
+ attributes, text) root_node.find_first_recursive {|node| node.name ==
+ tag and attributes.all? {|attr, val| node.attributes[attr] == val} and
+ text === node.text } end # # Extract specific columns (specified by
+ the position of it's corrensponding # header column) from a table. # #
+ Given the following table: # # &lt;table&gt; # &lt;tr&gt; #
+ &lt;td&gt;A&lt;/td&gt; # &lt;td&gt;B&lt;/td&gt; #
+ &lt;td&gt;C&lt;/td&gt; # &lt;/tr&gt; # &lt;tr&gt; #
+ &lt;td&gt;A.1&lt;/td&gt; # &lt;td&gt;B.1&lt;/td&gt; #
+ &lt;td&gt;C.1&lt;/td&gt; # &lt;/tr&gt; # &lt;tr&gt; #
+ &lt;td&gt;A.2&lt;/td&gt; # &lt;td&gt;B.2&lt;/td&gt; #
+ &lt;td&gt;C.2&lt;/td&gt; # &lt;/tr&gt; # &lt;/table&gt; # # To extract
+ the first (A) and last (C) column: # # extract_from_table(root_node,
+ ["A", "C"]) # # And you get this as result: # # [ # ["A.1", "C.1"], #
+ ["A.2", "C.2"] # ] # def extract_from_table(root_node, headers) #
+ extract and collect all header nodes header_nodes = headers.collect {
+ |header| find_node(root_node, 'td', {}, header) } raise "some headers
+ not found" if header_nodes.compact.size &lt; headers.size # assert
+ that all headers have the same parent 'header_row', which is the row #
+ in which the header_nodes are contained. 'table' is the surrounding
+ table tag. header_row = header_nodes.first.parent table =
+ header_row.parent raise "different parents" unless header_nodes.all?
+ {|n| n.parent == header_row} # we now iterate over all rows in the
+ table that follows the header_row. # for each row we collect the
+ elements at the same positions as the header_nodes. # this is what we
+ finally return from the method. (header_row.index_in_parent+1 ..
+ table.elements.size).collect do |inx| row = table.elements[inx]
+ header_nodes.collect { |n| row.elements[ n.index_in_parent ].text }
+ end end</example></p>
+ </subsection>
+
+ <subsection title="Conclusion">
+ <p>This isn't everything there is to REXML, but it should be enough to
+ get started. Check the <link href="../doc/index.html">API
+ documentation</link><footnote>You must generate the API documentation
+ with rdoc or download the API documentation from the REXML website for
+ this documentation.</footnote> for particulars and more examples.
+ There are plenty of unit tests in the <code>test/</code> directory,
+ and these are great sources of working examples.</p>
+ </subsection>
+ </general>
+ </overview>
+
+ <credits>
+ <p>Among the people who've contributed to this document are:</p>
+
+ <list>
+ <item><link href="mailto:deicher@sandia.gov">Eichert, Diana</link> (bug
+ fix)</item>
+ </list>
+ </credits>
+</documentation> \ No newline at end of file
diff --git a/test/rexml/data/underscore.xml b/test/rexml/data/underscore.xml
new file mode 100644
index 0000000000..111446f4bd
--- /dev/null
+++ b/test/rexml/data/underscore.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" ?>
+<root a="1" _a="2">
+ <b>1</b>
+ <_b>2</_b>
+</root>
+
diff --git a/test/rexml/data/web.xml b/test/rexml/data/web.xml
new file mode 100644
index 0000000000..972cf5d272
--- /dev/null
+++ b/test/rexml/data/web.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<web-app>
+ <servlet>
+ <servlet-name>snoop</servlet-name>
+ <servlet-class>SnoopServlet</servlet-class>
+ </servlet>
+ <servlet>
+ <servlet-name>file</servlet-name>
+ <servlet-class>ViewFile</servlet-class>
+ <init-param>
+ <param-name>initial</param-name>
+ <param-value>
+ 1000
+ </param-value>
+ <description>
+ The initial value for the counter <!-- optional -->
+ </description>
+ </init-param>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>
+ mv
+ </servlet-name>
+ <url-pattern>
+ *.wm
+ </url-pattern>
+ </servlet-mapping>
+
+ <distributed/>
+
+ <security-role>
+ <role-name>
+ manager
+ </role-name>
+ <role-name>
+ director
+ </role-name>
+ <role-name>
+ president
+ </role-name>
+ </security-role>
+</web-app>
diff --git a/test/rexml/data/web2.xml b/test/rexml/data/web2.xml
new file mode 100644
index 0000000000..7d479d37e9
--- /dev/null
+++ b/test/rexml/data/web2.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<root>
+ <b>
+ <d />
+ </b>
+ <c />
+</root>
diff --git a/test/rexml/data/working.rss b/test/rexml/data/working.rss
new file mode 100644
index 0000000000..b38c45f5d8
--- /dev/null
+++ b/test/rexml/data/working.rss
@@ -0,0 +1,202 @@
+<?xml version="1.0"?>
+
+<rss version="0.92">
+<channel>
+ <title>Paul Duncan</title>
+ <link>http://www.paulduncan.org/</link>
+ <description>Paul Duncan's personal blog.</description>
+</channel>
+
+ <item>
+ <title>Fun With Tense
+</title>
+ <date>Wed Sep 3 19:37:18 2003</date>
+ <creator>paul@paulduncan.org</creator>
+ <link>http://www.paulduncan.org/?id=23</link>
+ <description>
+&lt;pre&gt;
+&amp;lt;richlowe&amp;gt; blah.
+&amp;lt;richlowe&amp;gt; that's what I say.
+&amp;lt;pabs&amp;gt; if i say it too then what happens?
+&amp;lt;richlowe&amp;gt; then &quot;that's what we say&quot;
+&amp;lt;richlowe&amp;gt; duh.
+&amp;lt;pabs&amp;gt; what if i say it, then retract it?
+&amp;lt;richlowe&amp;gt; Did they teach you nothing in school!
+&amp;lt;richlowe&amp;gt; &quot;that's what I say, and he said&quot;
+&amp;lt;pabs&amp;gt; :(
+&amp;lt;pabs&amp;gt; okay what if i say it, retract it, but then plan on saying it
+ again at some point in the indeterminite future?
+&amp;lt;richlowe&amp;gt; &quot;that's what I say, and he has said, and will possibly say
+ again&quot;?
+&amp;lt;pabs&amp;gt; see now that's not concise at all
+&lt;/pre&gt;
+
+ </description>
+ </item>
+
+ <item>
+ <title>We'll Miss You, Michael
+</title>
+ <date>Mon Aug 25 09:52:41 2003</date>
+ <creator>paul@paulduncan.org</creator>
+ <link>http://www.paulduncan.org/?id=22</link>
+ <description>
+&lt;p&gt;
+Perhaps &lt;a href='http://www.dash-dash.org/pix/death.jpg'&gt;the image&lt;/a&gt;
+on &lt;a href='http://www.dash-dash.org/'&gt;his site&lt;/a&gt; was a bit more
+fitting than we realized. I'm frustrated that nothing and noone around
+him could help ease the pain that he was going through. We can take
+comfort in knowing that he felt the decision he made was best for him.
+We'll miss you, Michael.
+&lt;/p&gt;
+
+ </description>
+ </item>
+
+ <item>
+ <title>Horis, Isis, Osiris, Oh My!
+</title>
+ <date>Fri Aug 22 22:39:23 2003</date>
+ <creator>paul@paulduncan.org</creator>
+ <link>http://www.paulduncan.org/?id=21</link>
+ <description>
+&lt;p&gt;
+I started reading one of the several mythology books I checked out
+earlier this week (as part of a personal research project, the results
+of which will be available here eventually). I've only made it through
+about 60 pages of Egyptian mythology so far, but it's interesting stuff.
+One thing that's impressive to me is how the sexes appear to be on much
+more equal footing (as compared to the Judeo/Christian mythology we've
+been innundated with for most of our lives). For example, Isis revives
+her husband Osiris by collecting his body parts, which are scattered
+throughout Egypt. She also saves her son Horus from death and nurtures
+him until he can fend for himself. Really interesting stuff. Anyway,
+I'll have more about the project as I get farther along.
+&lt;/p&gt;
+
+ </description>
+ </item>
+
+ <item>
+ <title>Nature Sucks
+</title>
+ <date>Fri Aug 22 08:33:41 2003</date>
+ <creator>paul@paulduncan.org</creator>
+ <link>http://www.paulduncan.org/?id=20</link>
+ <description>
+&lt;p&gt;
+&lt;a href='http://www.linuxbrit.co.uk/'&gt;Tom&lt;/a&gt; has been having a rough
+couple of weeks. Apparently he's got &lt;a
+href='http://www.ninds.nih.gov/health_and_medical/disorders/bells_doc.htm'&gt;Bell's
+Palsy&lt;/a&gt; (link from ljlane), which, while treatable and rarely
+permanent, still leaves his face partially paralyzed. If you have a few
+minutes, you might consider sending him an &lt;abbr title='Electronic
+Card'&gt;E-Card&lt;/abbr&gt; or an &lt;a
+href='mailto:dr_spock@linuxbrit.co.uk'&gt;email&lt;/a&gt;.
+&lt;/p&gt;
+
+ </description>
+ </item>
+
+ <item>
+ <title>Or Maybe He Does
+</title>
+ <date>Thu Aug 21 23:45:40 2003</date>
+ <creator>paul@paulduncan.org</creator>
+ <link>http://www.paulduncan.org/?id=19</link>
+ <description>
+&lt;p&gt;
+Okay, apparently Ed &lt;em&gt;does&lt;/em&gt; read this page. :-D
+&lt;/p&gt;
+
+ </description>
+ </item>
+
+ <item>
+ <title>Ed Got Married!!
+</title>
+ <date>Thu Aug 21 15:52:34 2003</date>
+ <creator>paul@paulduncan.org</creator>
+ <link>http://www.paulduncan.org/?id=18</link>
+ <description>
+&lt;p&gt;
+Ed got married in the Bahamas! Here's a picture from the honeymoon:
+&lt;/p&gt;
+
+&lt;img src='/files/ed_dolphin.jpg' width='252' height='288'
+ title='Ed on his honeymoon!' alt='Ed on his honeymoon!' /&gt;
+
+&lt;p&gt;
+(Fortunately he doesn't read this site).
+&lt;/p&gt;
+
+&lt;p&gt;
+One other thing. I weigh 186&lt;abbr title='Pounds'&gt;lbs&lt;/abbr&gt; now.
+The &lt;a href='http://www.pablotron.org/weight/'&gt;weight page&lt;/a&gt; has been
+updated.
+&lt;/p&gt;
+
+ </description>
+ </item>
+
+ <item>
+ <title>Gratuitous Douglas Adams Reference, #32427!
+</title>
+ <date>Tue Aug 19 08:25:42 2003</date>
+ <creator>paul@paulduncan.org</creator>
+ <link>http://www.paulduncan.org/?id=17</link>
+ <description>
+&lt;p&gt;
+Just saw this &lt;acronym title='Uniform Resource Locator'&gt;URL&lt;/acronym&gt;
+on &lt;a href='http://www.diveintomark.org/'&gt;Dive Into
+Mark&lt;/a&gt;:
+&lt;/p&gt;
+
+&lt;p&gt;
+&lt;a
+href='http://www.google.com/search?q=answer+to+life+the+universe+and+everything'&gt;http://www.google.com/search?q=answer+to+life+the+universe+and+everything&lt;/a&gt;
+&lt;/p&gt;
+
+&lt;p&gt;
+&lt;a href='http://www.bbc.co.uk/h2g2/guide/'&gt;&lt;acronym title='Hitchhikers
+Guide to the Galaxy'&gt;H2G2&lt;/acronym&gt;&lt;/a&gt; references never get old for me.
+&lt;/p&gt;
+
+ </description>
+ </item>
+
+ <item>
+ <title>Weekend Update, sans Norm McDonald
+</title>
+ <date>Tue Aug 19 08:18:32 2003</date>
+ <creator>paul@paulduncan.org</creator>
+ <link>http://www.paulduncan.org/?id=16</link>
+ <description>
+&lt;p&gt;
+What a nutty weekend. A friend of mine went to the &lt;acronym
+title='Emergency Room'&gt;ER&lt;/acronym&gt; on Friday night, so I spent 4 hours
+down there. It's really frustrating to see that many sick and injured
+people in once place, and not really be able to do anything about it.
+Also, for that much chaos, both the atmosphere and the staff are
+disturbingly calm.
+&lt;/p&gt;
+
+&lt;p&gt;
+I finally got &lt;a href='http://www.raggle.org/'&gt;Raggle&lt;/a&gt; to a point
+worthy of a new release. I'm not going to blather on about the new
+stuff; if you're interested you can &lt;a
+href='http://www.raggle.org/'&gt;check it out&lt;/a&gt; on your own.
+&lt;/p&gt;
+
+&lt;p&gt;
+&lt;a href='http://www.pablotron.org/weight/'&gt;The war against obesity&lt;/a&gt;
+continues! I'm down to 188 pounds now, a total of 75 pounds lost since
+the beginning of March. I've been having trouble losing these last 10
+pounds, so this week is officially &quot;Go to the Gym Every Night or Else&quot;
+week. 2 days down, 5 to go.
+&lt;/p&gt;
+
+ </description>
+ </item>
+
+</rss>
diff --git a/test/rexml/data/xmlfile-bug.xml b/test/rexml/data/xmlfile-bug.xml
new file mode 100644
index 0000000000..d4396682f7
--- /dev/null
+++ b/test/rexml/data/xmlfile-bug.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<intranet>
+<position><aktuell datum="01-10-11">Technik</aktuell></position>
+<hauptspalte>
+<headline>Technik</headline>
+Die Technik ist das Rückgrat der meisten Geschäftsprozesse bei Home of the Brave. Deshalb sollen hier alle relevanten technischen Abläufe, Daten und Einrichtungen beschrieben werden, damit jeder im Bedarfsfall die nötigen Informationen, Anweisungen und Verhaltensempfehlungen nachlesen und/oder abrufen kann.
+</hauptspalte>
+<nebenspalte>
+ <link ziel="Flash/">Flash</link><umbruch/>
+ Nützliches von Flashern für Flasher.<umbruch/>
+ <link neu="ja" ziel="Cvs/">CVS-FAQ</link><umbruch/>
+ FAQ zur Benutzung von CVS bei HOB
+</nebenspalte>
+</intranet>
+
diff --git a/test/rexml/data/xp.tst b/test/rexml/data/xp.tst
new file mode 100644
index 0000000000..fb670010b2
--- /dev/null
+++ b/test/rexml/data/xp.tst
@@ -0,0 +1,27 @@
+/
+/rss
+//rss
+/rss/channel
+//link
+//image/*
+//link[2]
+//link[last()]
+rss/channel/link[last()]
+rss/channel/item/link[last()]
+rss/channel/item/link[1]
+rss/channel/item[@x='1']
+rss/channel/item[@x]
+//item[@x]
+//item[normalize-space(@name)='x']
+//*[count(title)=1]
+//*[name()='link']
+//*[starts-with(name(),'li')]
+//*[contains(name(),'y')]
+//*[string-length(name()) = 4]
+//copyright | //title
+/child::rss
+/descendant::*
+//language/parent::*
+/rss/channel/ancestor::*
+//item[position() mod 2 = 0 ]
+//item/ancestor::* \ No newline at end of file
diff --git a/test/rexml/data/yahoo.xml b/test/rexml/data/yahoo.xml
new file mode 100644
index 0000000000..b63a9440bc
--- /dev/null
+++ b/test/rexml/data/yahoo.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<rss version="2.0">
+<channel>
+<title><![CDATA[Yahoo! News Search Results for market]]></title>
+<link>http://news.search.yahoo.com/search/news?p=market&amp;ei=UTF-8</link>
+<description><![CDATA[Yahoo! News Search Results for market]]></description>
+<language>en-us</language>
+<copyright>Copyright (c) 2004 Yahoo! Inc. All rights reserved.</copyright>
+<lastBuildDate>Sun, 03 Sep 2006 16:34:54 GMT</lastBuildDate>
+<ttl>5</ttl>
+<image>
+<title>Yahoo! News</title>
+<width>142</width>
+<height>18</height>
+<link>http://news.search.yahoo.com/news</link>
+<url>http://us.i1.yimg.com/us.yimg.com/i/us/nws/th/main_142.gif</url>
+</image>
+<incremental xmlns="http://purl.org/syndication/history/1.0">false</incremental><item>
+<title><![CDATA[Toyota increases share in US auto market (Manila Bulletin)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=13ck33lrk/*http%3A//www.mb.com.ph/archive_pages.php?url=http://www.mb.com.ph/issues/2006/09/04/BSNS2006090473427.html</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=13ck33lrk/*http%3A//www.mb.com.ph/archive_pages.php?url=http://www.mb.com.ph/issues/2006/09/04/BSNS2006090473427.html</guid>
+<pubDate>Sun, 03 Sep 2006 16:21:30 GMT</pubDate>
+<description><![CDATA[DETROIT (AP) — With a model lineup that consumers love, Toyota Motor Corp. continued to take market share from other automakers last month, posting an industry-best 17 percent increase in sales.]]></description>
+</item><item>
+<title><![CDATA[ANALYSIS - North Korea finds market for missiles shrinking (Reuters via Yahoo! Asia News)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=11ibfq78e/*http%3A//asia.news.yahoo.com/060903/3/2pd1j.html</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=11ibfq78e/*http%3A//asia.news.yahoo.com/060903/3/2pd1j.html</guid>
+<pubDate>Sun, 03 Sep 2006 08:37:33 GMT</pubDate>
+<description><![CDATA[ SEOUL (Reuters) - The missile market is not what it used to be for North Korea, with fewer buyers for a key export product and a loss in prestige when its top-end rocket fizzled after a short test flight, U.S. officials and experts said.]]></description>
+</item><item>
+<title><![CDATA[Broward labor market's a solid performer (Miami Herald)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=13671c2t8/*http%3A//www.miami.com/mld/miamiherald/business/15427113.htm?source=rss&amp;channel=miamiherald_business</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=13671c2t8/*http%3A//www.miami.com/mld/miamiherald/business/15427113.htm?source=rss&amp;channel=miamiherald_business</guid>
+<pubDate>Sun, 03 Sep 2006 07:39:53 GMT</pubDate>
+<description><![CDATA[In looking at South Florida's labor market, it's a tale of two cities, with Fort Lauderdale coming out on top, by far, according to an annual Labor Day report by Florida International University's Bruce Nissen.]]></description>
+</item><item>
+<title><![CDATA[NID to help Jharkhand e-market crafts (Yahoo! India News)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=11hg1j19f/*http%3A//in.news.yahoo.com/060903/43/6780a.html</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=11hg1j19f/*http%3A//in.news.yahoo.com/060903/43/6780a.html</guid>
+<pubDate>Sun, 03 Sep 2006 10:02:54 GMT</pubDate>
+<description><![CDATA[Ranchi, Sep 3 (IANS) Jharkhand will e-market its indigenous products with the help of National Institute of Design (NID), Ahmedabad.]]></description>
+</item><item>
+<title><![CDATA[Reinsurance market goes high-tech to predict disasters (The Herald-Tribune)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=12j43rdgp/*http%3A//www.heraldtribune.com/apps/pbcs.dll/article?AID=/20060903/NEWS/609030458</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=12j43rdgp/*http%3A//www.heraldtribune.com/apps/pbcs.dll/article?AID=/20060903/NEWS/609030458</guid>
+<pubDate>Sun, 03 Sep 2006 10:34:36 GMT</pubDate>
+<description><![CDATA[Hurricane outlooks are closely watched at such places as the Lloyd's of London insurance market building.]]></description>
+</item><item>
+<title><![CDATA[Government warned against going into property market (Sunday Business Post)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=12pru5k6v/*http%3A//www.sbpost.ie/breakingnews/breaking_story.asp?j=4126020&amp;p=4yz6x35&amp;n=4126112&amp;x=</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=12pru5k6v/*http%3A//www.sbpost.ie/breakingnews/breaking_story.asp?j=4126020&amp;p=4yz6x35&amp;n=4126112&amp;x=</guid>
+<pubDate>Sun, 03 Sep 2006 09:31:34 GMT</pubDate>
+<description><![CDATA[A new report is expected to warn the Government not to intervene in the property market. The report by IIB Bank, which is due to be published tomorrow, will argue that it doesn't make sense for the Government to try and stop speculators buying new homes for profit.]]></description>
+</item><item>
+<title><![CDATA[Farmers Market gets shoulder-to-shoulder crowds on Saturdays (Great Falls Tribune)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=12pfls0n1/*http%3A//www.greatfallstribune.com/apps/pbcs.dll/article?AID=/20060903/NEWS01/609030306</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=12pfls0n1/*http%3A//www.greatfallstribune.com/apps/pbcs.dll/article?AID=/20060903/NEWS01/609030306</guid>
+<pubDate>Sun, 03 Sep 2006 11:12:36 GMT</pubDate>
+<description><![CDATA[The produce is bountiful at the Great Falls Farmers Market and so are the customers, vendors say. "Business is booming," said Heather Sands of Little Creek Nursery in Fort Shaw.]]></description>
+</item><item>
+<title><![CDATA[City Hall takes Plan B for SF market rehab (Sun Star)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=138rfnhvi/*http%3A//www.sunstar.com.ph/static/pam/2006/09/03/news/city.hall.takes.plan.b.for.sf.market.rehab.html</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=138rfnhvi/*http%3A//www.sunstar.com.ph/static/pam/2006/09/03/news/city.hall.takes.plan.b.for.sf.market.rehab.html</guid>
+<pubDate>Sun, 03 Sep 2006 08:18:46 GMT</pubDate>
+<description><![CDATA[CITY OF SAN FERNANDO -- The City Government here shelved an earlier proposal of constructing the old public market through a bond flotation scheme and instead took Plan B, which is the rehabilitation of the market's wet section.]]></description>
+</item><item>
+<title><![CDATA[Market watch (AG Weekly)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=12ahobgi6/*http%3A//www.agweekly.com/articles/2006/09/02/news/markets/markets01.txt</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=12ahobgi6/*http%3A//www.agweekly.com/articles/2006/09/02/news/markets/markets01.txt</guid>
+<pubDate>Sun, 03 Sep 2006 04:20:37 GMT</pubDate>
+<description><![CDATA[The Market Sentiment Index can be an invaluable tool in forecasting important price tops and bottoms in the market. The index was developed by Market Vane, a California-based research company, in the 1960s and is still published by a variety of reliable sources.]]></description>
+</item><item>
+<title><![CDATA[Catholic War Vets Ladies Club sets flea market (Times Leader)]]></title>
+<link>http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=1383flil1/*http%3A//www.timesleader.com/mld/timesleader/living/15431391.htm?source=rss&amp;channel=timesleader_living</link>
+<guid isPermaLink="false">http://us.rd.yahoo.com/dailynews/rss/search/market/SIG=1383flil1/*http%3A//www.timesleader.com/mld/timesleader/living/15431391.htm?source=rss&amp;channel=timesleader_living</guid>
+<pubDate>Sun, 03 Sep 2006 07:07:50 GMT</pubDate>
+<description><![CDATA[Catholic War Veterans, Post 274, Ashley, Ladies Club will hold a flea market from 7 a.m. until 2 p.m. Sept. 10, Sept. 24 and Oct. 1 on the grounds of the Catholic War Veterans. The event will take place rain or shine. For more information, vendor information or to reserve a table, call Marsha Panetta at 823-6232 or Dorothy Liberaski at 474-9969. From left, members of the planning committee are ]]></description>
+</item></channel>
+</rss>
+<!-- s8.news.dcn.yahoo.com uncompressed/chunked Sun Sep 3 09:34:54 PDT 2006 -->
diff --git a/test/rexml/listener.rb b/test/rexml/listener.rb
new file mode 100644
index 0000000000..a89205fe5d
--- /dev/null
+++ b/test/rexml/listener.rb
@@ -0,0 +1,50 @@
+class Listener
+ attr_reader :ts, :te
+ attr_reader :normalize
+ def initialize
+ @ts = false
+ @te = false
+ end
+ def tag_start name, attrs
+ @ts = true if name=="subsection" and attrs["title"]=="Namespaces"
+ end
+ def tag_end name
+ @te = true if name=="documentation"
+ end
+ def text text
+ @normalize = text
+ #text.tr! "\n", ' '
+ #puts "text #{text[0..10]}..."
+ end
+ def instruction name, instruction
+ #puts "instruction"
+ end
+ def comment comment
+ #puts "comment #{comment[0..10]}..."
+ end
+ def doctype name, pub_sys, long_name, uri
+ #puts "doctype #{name}"
+ end
+ def attlistdecl content
+ #puts "attlistdecl"
+ end
+ def elementdecl content
+ #puts "elementdecl"
+ end
+ def entitydecl content
+ #puts "entitydecl"
+ end
+ def notationdecl content
+ #puts "notationdecl"
+ end
+ def entity content
+ #puts "entity"
+ end
+ def cdata content
+ #puts "cdata"
+ end
+ def xmldecl version, encoding, standalone
+ #puts "xmldecl #{version}"
+ end
+end
+
diff --git a/test/rexml/test_attributes.rb b/test/rexml/test_attributes.rb
new file mode 100644
index 0000000000..56b45576aa
--- /dev/null
+++ b/test/rexml/test_attributes.rb
@@ -0,0 +1,198 @@
+require 'test/unit/testcase'
+require 'rexml/document'
+
+class AttributesTester < Test::Unit::TestCase
+ include REXML
+ def test_accessor
+ doc = Document.new("<a xmlns:foo='a' xmlns:bar='b' foo:att='1' bar:att='2' att='3'/>")
+ assert_equal '3', doc.root.attributes['att']
+ assert_equal '2', doc.root.attributes['bar:att']
+ doc.root.attributes['att'] = 5
+ assert_equal '5', doc.root.attributes['att']
+ end
+
+ def test_each_attribute
+ doc = Document.new('<a x="1" y="2"/>')
+ doc.root.attributes.each_attribute {|attr|
+ if attr.expanded_name == 'x'
+ assert_equal '1', attr.value
+ elsif attr.expanded_name == 'y'
+ assert_equal '2', attr.value
+ else
+ assert_fail "No such attribute!!"
+ end
+ }
+ end
+
+ def test_each
+ doc = Document.new('<a x="1" y="2"/>')
+ doc.root.attributes.each {|name, value|
+ if name == 'x'
+ assert_equal '1', value
+ elsif name == 'y'
+ assert_equal '2', value
+ else
+ assert_fail "No such attribute!!"
+ end
+ }
+ end
+
+ def test_get_attribute
+ doc = Document.new('<a xmlns:x="a" x:foo="1" foo="2" bar="3"/>')
+ assert_equal '2', doc.root.attributes.get_attribute("foo").value
+ assert_equal '1', doc.root.attributes.get_attribute("x:foo").value
+ end
+
+ def test_size
+ doc = Document.new("<a xmlns:foo='a' x='1' y='2' foo:x='3'/>")
+ assert_equal 4, doc.root.attributes.length
+ end
+
+ def test_setter
+ doc = Document.new("<a xmlns:x='a' x:foo='1' foo='3'/>")
+ doc.root.attributes['y:foo'] = '2'
+ assert_equal '2', doc.root.attributes['y:foo']
+ doc.root.attributes['foo'] = '4'
+ assert_equal '4', doc.root.attributes['foo']
+ doc.root.attributes['x:foo'] = nil
+ assert_equal 3, doc.root.attributes.size
+ end
+
+ def test_delete
+ doc = Document.new("<a xmlns:y='a' xmlns:x='b' xmlns:z='c' y:foo='0' x:foo='1' foo='3' z:foo='4'/>")
+ doc.root.attributes.delete 'foo'
+ assert_equal 6, doc.root.attributes.size
+ assert_equal '1', doc.root.attributes['x:foo']
+
+ doc.root.attributes.delete 'x:foo'
+ assert_equal 5, doc.root.attributes.size
+
+ attr = doc.root.attributes.get_attribute('y:foo')
+ doc.root.attributes.delete attr
+ assert_equal 4, doc.root.attributes.size
+
+ assert_equal '4', doc.root.attributes['z:foo']
+ end
+
+ def test_prefixes
+ doc = Document.new("<a xmlns='foo' xmlns:x='bar' xmlns:y='twee' z='glorp' x:k='gru'/>")
+ prefixes = doc.root.attributes.prefixes
+ assert_equal 2, prefixes.size
+ assert_equal 0, (prefixes - ['x', 'y']).size
+ end
+
+ # Contributed by Mike Stok
+ def test_values_with_apostrophes
+ doc = Document.new(%q#<tag h1="1'2'" h2='1"2'/>#)
+ s = doc.to_s
+ assert(s =~ /h1='1&apos;2&apos;'/)
+ assert(s =~ /h2='1"2'/)
+ end
+
+ # Submitted by Kou
+ def test_namespace_conflict
+ assert_raise( ParseException,
+ "Declaring two attributes with the same namespace should be an error" ) do
+ REXML::Document.new <<-XML
+ <x xmlns:n1="http://www.w3.org"
+ xmlns:n2="http://www.w3.org" >
+ <bad n1:a="1" n2:a="2" />
+ </x>
+ XML
+ end
+
+ REXML::Document.new("<a xmlns:a='a' xmlns:b='a'></a>")
+ end
+
+ # Submitted by Kou
+ def test_attribute_deletion
+ e = REXML::Element.new
+ e.add_namespace("a", "http://a/")
+ e.add_namespace("b", "http://b/")
+ e.add_attributes({"c" => "cc", "a:c" => "cC", "b:c" => "CC"})
+
+ e.attributes.delete("c")
+ assert_nil(e.attributes.get_attribute("c"))
+
+ before_size = e.attributes.size
+ e.attributes.delete("c")
+ assert_nil(e.attributes.get_attribute("c"))
+ assert_equal(before_size, e.attributes.size)
+
+ e.attributes.delete(e.attributes.get_attribute("a:c"))
+ assert_nil(e.attributes.get_attribute("a:c"))
+
+ e.attributes.delete("b:c")
+ assert_nil(e.attributes.get_attribute("b:c"))
+
+ before_size = e.attributes.size
+ e.attributes.delete(e.attributes.get_attribute("b:c"))
+ assert_nil(e.attributes.get_attribute("b:c"))
+ assert_equal(before_size, e.attributes.size)
+
+ before_size = e.attributes.size
+ e.attributes.delete("c")
+ assert_nil(e.attributes.get_attribute("c"))
+ assert_equal(before_size, e.attributes.size)
+
+ e.add_attribute("c", "cc")
+
+ e.attributes.delete(e.attributes.get_attribute("c"))
+ assert_nil(e.attributes.get_attribute("c"))
+ end
+
+ # Submitted by Kou
+ def test_element_usage
+ attr = Attribute.new("name", "value")
+ elem = Element.new("elem")
+ a = Attribute.new(attr, elem)
+ assert_equal(elem, a.element)
+ end
+
+ def attr_test(attr_name,attr_value)
+ a1 = REXML::Attribute.new(attr_name,attr_value)
+
+ s1 = a1.value
+ s2 = a1.value
+
+ #p s1
+ #p s2
+ assert_equal(s1,s2)
+
+ a2 = REXML::Attribute.new(attr_name,attr_value)
+
+ a2.to_s # NB invocation of to_s
+ s1 = a2.value
+ s2 = a2.value
+
+ #p s1
+ #p s2
+ assert_equal(s1,s2)
+ end
+
+ def test_amp_attributes
+ attr_test('name','value with &amp; ampersand only')
+ end
+
+ def test_amp_and_lf_attributes
+ attr_test('name','value with LF &#x000a; &amp; ampersand')
+ end
+
+ def test_quoting
+ d = Document.new(%q{<a x='1' y="2"/>})
+ assert_equal( %q{<a x='1' y='2'/>}, d.to_s )
+ d.root.context[:attribute_quote] = :quote
+ assert_equal( %q{<a x="1" y="2"/>}, d.to_s )
+
+ d = Document.new(%q{<a x='1' y="2"><b z='3'/></a>})
+ assert_equal( %q{<a x='1' y='2'><b z='3'/></a>}, d.to_s )
+ d.root.context[:attribute_quote] = :quote
+ assert_equal( %q{<a x="1" y="2"><b z="3"/></a>}, d.to_s )
+ end
+
+ def test_ticket_127
+ doc = Document.new
+ doc.add_element 'a', { 'v' => 'x & y' }
+ assert doc.to_s.index(';')
+ end
+end
diff --git a/test/rexml/test_attributes_mixin.rb b/test/rexml/test_attributes_mixin.rb
new file mode 100644
index 0000000000..44ab4f0d89
--- /dev/null
+++ b/test/rexml/test_attributes_mixin.rb
@@ -0,0 +1,34 @@
+#! /usr/local/bin/ruby
+
+
+require 'test/unit'
+require 'rexml/document'
+
+class TestAttributes < Test::Unit::TestCase
+
+ def setup
+ @ns_a = "urn:x-test:a"
+ @ns_b = "urn:x-test:b"
+ element_string = <<-"XMLEND"
+ <test xmlns:a="#{@ns_a}"
+ xmlns:b="#{@ns_b}"
+ a = "1"
+ b = '2'
+ a:c = "3"
+ a:d = '4'
+ a:e = "5"
+ b:f = "6"/>
+ XMLEND
+ @attributes = REXML::Document.new(element_string).root.attributes
+ end
+
+ def test_get_attribute_ns
+ assert_equal("1", @attributes.get_attribute_ns("", "a").value)
+ assert_equal("2", @attributes.get_attribute_ns("", "b").value)
+ assert_equal("3", @attributes.get_attribute_ns(@ns_a, "c").value)
+ assert_equal("4", @attributes.get_attribute_ns(@ns_a, "d").value)
+ assert_equal("5", @attributes.get_attribute_ns(@ns_a, "e").value)
+ assert_equal("6", @attributes.get_attribute_ns(@ns_b, "f").value)
+ end
+
+end
diff --git a/test/rexml/test_changing_encoding.rb b/test/rexml/test_changing_encoding.rb
new file mode 100644
index 0000000000..f83247afb1
--- /dev/null
+++ b/test/rexml/test_changing_encoding.rb
@@ -0,0 +1,46 @@
+#!/usr/bin/ruby -Ku
+# -*- coding: utf-8 -*-
+
+require 'kconv'
+require 'iconv'
+require 'rexml/encoding'
+
+
+class ChangingEncodings < Test::Unit::TestCase
+ def initialize a
+ @u = 'テスト ã»ã’ ãµãŒ 美ã—ã„'
+ @e = Kconv.toeuc(@u)
+ @f = Foo.new
+ super
+ end
+
+ class Foo
+ include REXML::Encoding
+ end
+
+ # Note that these tests must be executed in order for the third one to
+ # actually test anything.
+ def test_0_euc
+ @f.encoding = 'EUC-JP'
+ assert_equal( @u, @f.decode(@e) )
+ # This doesn't happen anymore, for some reason
+ #assert_raises( Iconv::IllegalSequence, "Decoding unicode should fail" ) {
+ # @f.decode(@u) == @u
+ #}
+ end
+
+ def test_1_utf
+ @f.encoding = 'UTF-8'
+ assert_not_equal( @u, @f.decode( @e ) )
+ assert_equal( @u, @f.decode( @u ) )
+ end
+
+ def test_2_euc
+ @f.encoding = 'EUC-JP'
+ assert_equal( @u, @f.decode(@e) )
+ # This doesn't happen anymore, for some reason
+ #assert_raises( Iconv::IllegalSequence, "Decoding unicode should fail" ) {
+ # @f.decode(@u) == @u
+ #}
+ end
+end
diff --git a/test/rexml/test_contrib.rb b/test/rexml/test_contrib.rb
new file mode 100644
index 0000000000..1559f45a5b
--- /dev/null
+++ b/test/rexml/test_contrib.rb
@@ -0,0 +1,581 @@
+# coding: binary
+require "test/unit/testcase"
+
+require "rexml/document"
+require "rexml/parseexception"
+require "rexml/formatters/default"
+
+class ContribTester < Test::Unit::TestCase
+ include REXML
+
+XML_STRING_01 = <<DELIMITER
+<?xml version="1.0" encoding="UTF-8"?>
+<biblio>
+ <entry type="Book">
+ <author>Thomas, David; Hunt, Andrew</author>
+ <language>english</language>
+ <publisher>Addison-Wesley</publisher>
+ <title>Programming Ruby. The Pragmatic Programmer's Guide</title>
+ <year>2000</year>
+ </entry>
+ <entry type="Book">
+ <author>Blammo, Blah</author>
+ <language>english</language>
+ <publisher>Hubbabubba</publisher>
+ <title>Foozboozer's Life</title>
+ <type>Book</type>
+ <year>2002</year>
+ </entry>
+</biblio>
+DELIMITER
+
+XML_STRING_02 = <<DELIMITER
+<biblio>
+ <entry type="Book">
+ <language>english</language>
+ <publisher>Addison-Wesley</publisher>
+ <title>Programming Ruby. The Pragmatic Programmer's Guide</title>
+ <type>Book</type>
+ <year>2000</year>
+ </entry>
+ <entry type="Book">
+ <author>Blammo, Blah</author>
+ <language>english</language>
+ <publisher>Hubbabubba</publisher>
+ <title>Foozboozer's Life</title>
+ <type>Book</type>
+ <year>2002</year>
+ </entry>
+</biblio>
+DELIMITER
+
+ # Tobias Reif <tobiasreif@pinkjuice.com>
+ def test_bad_doctype_Tobias
+ source = <<-EOF
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
+ "http://www.w3.org/TR/SVG/DTD/svg10.dtd"
+ [
+ <!-- <!ENTITY % fast-slow "0 0 .5 1">-->
+ <!--<!ENTITY % slow-fast ".5 0 1 1">-->
+ <!ENTITY hover_ani
+ '<animateTransform attributeName="transform"
+ type="scale" restart="whenNotActive" values="1;0.96"
+ dur="0.5s" calcMode="spline" keySplines="0 0 .5 1"
+ fill="freeze" begin="mouseover"/>
+ <animateTransform attributeName="transform"
+ type="scale" restart="whenNotActive" values="0.96;1"
+ dur="0.5s" calcMode="spline" keySplines=".5 0 1 1"
+ fill="freeze" begin="mouseover+0.5s"/>'
+ >
+ ]
+ >
+ EOF
+ doc = REXML::Document.new source
+ doc.write(out="")
+ assert(out[/>'>/] != nil, "Couldn't find >'>")
+ assert(out[/\]>/] != nil, "Couldn't find ]>")
+ end
+
+ # Peter Verhage
+ def test_namespace_Peter
+ source = <<-EOF
+ <?xml version="1.0"?>
+ <config:myprog-config xmlns:config="http://someurl/program/version">
+ <!-- main options -->
+ <config:main>
+ <config:parameter name="name" value="value"/>
+ </config:main>
+ </config:myprog-config>
+ EOF
+ doc = REXML::Document.new source
+ assert_equal "myprog-config", doc.root.name
+ count = 0
+ REXML::XPath.each(doc, "x:myprog-config/x:main/x:parameter",
+ {"x"=>"http://someurl/program/version"}) { |element|
+ assert_equal "name", element.attributes["name"]
+ count += 1;
+ }
+ assert_equal 1, count
+ assert_equal "myprog-config", doc.elements["config:myprog-config"].name
+ end
+
+ # Tobias Reif <tobiasreif@pinkjuice.com>
+ def test_complex_xpath_Tobias
+ source = <<-EOF
+ <root>
+ <foo>
+ <bar style="baz"/>
+ <blah style="baz"/>
+ <blam style="baz"/>
+ </foo>
+ <wax>
+ <fudge>
+ <noodle/>
+ </fudge>
+ </wax>
+ </root>
+ EOF
+ # elements that have child elements
+ # but not grandchildren
+ # and not children that don't have a style attribute
+ # and not children that have a unique style attribute
+ complex_path = "*[* "+
+ "and not(*/node()) "+
+ "and not(*[not(@style)]) "+
+ "and not(*/@style != */@style)]"
+ doc = REXML::Document.new source
+ results = REXML::XPath.match( doc.root, complex_path )
+ assert(results)
+ assert_equal 1, results.size
+ assert_equal "foo", results[0].name
+ end
+
+ # "Chris Morris" <chrismo@charter.net>
+ def test_extra_newline_on_read_Chris
+ text = 'test text'
+ e = REXML::Element.new('Test')
+ e.add_text(text)
+ REXML::Formatters::Default.new.write(e,out="")
+
+ doc = REXML::Document.new(out)
+ outtext = doc.root.text
+
+ assert_equal(text, outtext)
+ end
+
+ # Tobias Reif <tobiasreif@pinkjuice.com>
+ def test_other_xpath_Tobias
+ schema = <<-DELIM
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified">
+ <xs:element name="rect">
+ <xs:complexType>
+ <xs:attribute name="width" type="xs:byte" use="required"/>
+ <xs:attribute name="height" type="xs:byte" use="required"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="svg">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="rect"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:schema>
+ DELIM
+
+ doc = REXML::Document.new schema
+
+ result = REXML::XPath.first(doc.root, 'xs:element[descendant::xs:element[@ref]]')
+ assert result
+ assert_equal "svg", result.attributes['name']
+ result = REXML::XPath.first(doc, 'element[descendant::element[@ref]]')
+ assert_nil result
+ end
+
+ #this first test succeeds, to check if stuff is set up correctly
+ def test_xpath_01_TobiasReif
+ doc = Document.new XML_STRING_01.dup
+ desired_result = Document.new '<author>Thomas, David; Hunt, Andrew</author>'
+ xpath = '//author'
+ result = XPath.first(doc, xpath)
+ assert_equal desired_result.to_s, result.to_s
+ end
+
+ def test_xpath_whitespace_TobiasReif
+ # same as above, with whitespace in XPath
+ doc = Document.new(XML_STRING_01.dup)
+ desired_result = Document.new('<author>Thomas, David; Hunt, Andrew</author>')
+ xpath = "\/\/author\n \n"
+ result = XPath.first(doc, xpath)
+ failure_message = "\n[[[TR: AFAIK, whitespace should be allowed]]]\n"
+ assert_equal(desired_result.to_s, result.to_s, failure_message)
+ end
+
+ def test_xpath_02_TobiasReif
+ doc = Document.new XML_STRING_01.dup
+ desired_result = Document.new '<author>Thomas, David; Hunt, Andrew</author>'
+ # Could that quirky
+ # Programmer',&quot;'&quot;,'s
+ # be handled automatically, somehow?
+ # Or is there a simpler way? (the below XPath should match the author element above,
+ # AFAIK; I tested it inside an XSLT)
+ xpath = %q{/biblio/entry[
+ title/text()=concat('Programming Ruby. The Pragmatic Programmer',"'",'s Guide')
+ and
+ year='2000'
+ ]/author}
+ result = XPath.first(doc, xpath)
+ failure_message = "\nHow to handle the apos inside the string inside the XPath?\nXPath = #{xpath}\n"
+ assert_equal desired_result.to_s, result.to_s, failure_message
+ end
+
+ def test_xpath_03_TobiasReif
+ doc = Document.new XML_STRING_02.dup
+ desired_result_string = "<entry type='Book'>
+ <language>english</language>
+ <publisher>Addison-Wesley</publisher>
+ <title>Programming Ruby. The Pragmatic Programmer's Guide</title>
+ <type>Book</type>
+ <year>2000</year>
+ </entry>"
+ desired_result_tree = Document.new desired_result_string
+ xpath = "/biblio/entry[not(author)]"
+ result = XPath.first(doc, xpath)
+ assert_equal desired_result_string, result.to_s
+ end
+
+ def test_umlaut
+ koln_iso = "K\xf6ln"
+ koln_utf = "K\xc3\xb6ln"
+ source_iso = "<?xml version='1.0' encoding='ISO-8859-1'?><test>#{koln_iso}</test>"
+ source_utf = "<?xml version='1.0' encoding='UTF-8'?><test>#{koln_utf}</test>"
+
+ if String.method_defined? :encode
+ koln_iso.force_encoding('iso-8859-1')
+ koln_utf.force_encoding('utf-8')
+ source_iso.force_encoding('iso-8859-1')
+ source_utf.force_encoding('utf-8')
+ end
+
+ doc = REXML::Document.new(source_iso)
+ assert_equal('ISO-8859-1', doc.xml_decl.encoding)
+ assert_equal(koln_utf, doc.root.text)
+ doc.write(out="")
+ assert_equal(source_iso, out )
+ doc.xml_decl.encoding = 'UTF-8'
+ doc.write(out="")
+ assert_equal(source_utf, out)
+
+ doc = Document.new <<-EOF
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<intranet>
+<position><aktuell datum="01-10-11">Technik</aktuell></position>
+<hauptspalte>
+<headline>Technik</headline>
+Die Technik ist das Rückgrat der meisten Geschäftsprozesse bei Home of the Brave. Deshalb sollen hier alle relevanten technischen Abläufe, Daten und Einrichtungen beschrieben werden, damit jeder im Bedarfsfall die nötigen Informationen, Anweisungen und Verhaltensempfehlungen nachlesen und/oder abrufen kann.
+</hauptspalte>
+<nebenspalte>
+ <link ziel="Flash/">Flash</link><umbruch/>
+ Nützliches von Flashern für Flasher.<umbruch/>
+ <link neu="ja" ziel="Cvs/">CVS-FAQ</link><umbruch/>
+ FAQ zur Benutzung von CVS bei HOB
+</nebenspalte>
+</intranet>
+EOF
+ tn = XPath.first(doc, "//nebenspalte/text()[2]")
+ expected_iso = "Nützliches von Flashern für Flasher."
+ expected_utf = expected_iso.unpack('C*').pack('U*')
+ if expected_utf.respond_to? :encode
+ expected_iso.force_encoding("iso-8859-1")
+ expected_utf.force_encoding(Encoding::UTF_8)
+ end
+ assert_equal(expected_utf, tn.to_s.strip)
+ f = REXML::Formatters::Default.new
+ f.write( tn, Output.new(o = "", "ISO-8859-1") )
+ assert_equal(expected_iso, o.strip)
+
+ doc = Document.new File.new('test/data/xmlfile-bug.xml')
+ tn = XPath.first(doc, "//nebenspalte/text()[2]")
+ assert_equal(expected_utf, tn.to_s.strip)
+ f.write( tn, Output.new(o = "", "ISO-8859-1") )
+ assert_equal(expected_iso, o.strip)
+ end
+
+ def test_element_cloning_namespace_Chris
+ aDoc = REXML::Document.new '<h1 tpl:content="title" xmlns:tpl="1">Dummy title</h1>'
+
+ anElement = anElement = aDoc.elements[1]
+ elementAttrPrefix = anElement.attributes.get_attribute('content').prefix
+
+ aClone = anElement.clone
+ cloneAttrPrefix = aClone.attributes.get_attribute('content').prefix
+
+ assert_equal( elementAttrPrefix , cloneAttrPrefix )
+ end
+
+ def test_namespaces_in_attlist_tobias
+ in_string = File.open('test/data/foo.xml', 'r') do |file|
+ file.read
+ end
+
+ doc = Document.new in_string
+
+ assert_nil XPath.first(doc,'//leg')
+ assert_equal 'http://www.foo.com/human', doc.root.elements[1].namespace
+ assert_equal 'human leg',
+ XPath.first(doc, '//x:leg/text()', {'x'=>'http://www.foo.com/human'}).to_s
+ end
+
+ # Alun ap Rhisiart
+ def test_less_than_in_element_content
+ source = File.new('test/data/ProductionSupport.xml')
+ h = Hash.new
+ doc = REXML::Document.new source
+ doc.elements.each("//CommonError") { |el|
+ h[el.elements['Key'].text] = 'okay'
+ }
+ assert(h.include?('MotorInsuranceContract(Object)>>#error:'))
+ end
+
+ # XPaths provided by Thomas Sawyer
+ def test_various_xpath
+ #@doc = REXML::Document.new('<r a="1"><p><c b="2"/></p></r>')
+ doc = REXML::Document.new('<r a="1"><p><c b="2">3</c></p></r>')
+
+ [['/r', REXML::Element],
+ ['/r/p/c', REXML::Element],
+ ['/r/attribute::a', Attribute],
+ ['/r/@a', Attribute],
+ ['/r/attribute::*', Attribute],
+ ['/r/@*', Attribute],
+ ['/r/p/c/attribute::b', Attribute],
+ ['/r/p/c/@b', Attribute],
+ ['/r/p/c/attribute::*', Attribute],
+ ['/r/p/c/@*', Attribute],
+ ['//c/attribute::b', Attribute],
+ ['//c/@b', Attribute],
+ ['//c/attribute::*', Attribute],
+ ['//c/@*', Attribute],
+ ['.//node()', REXML::Node ],
+ ['.//node()[@a]', REXML::Element ],
+ ['.//node()[@a="1"]', REXML::Element ],
+ ['.//node()[@b]', REXML::Element ], # no show, why?
+ ['.//node()[@b="2"]', REXML::Element ]
+ ].each do |xpath,kind|
+ begin
+ REXML::XPath.each( doc, xpath ) do |what|
+ assert_kind_of( kind, what, "\n\nWrong type (#{what.class}) returned for #{xpath} (expected #{kind.name})\n\n" )
+ end
+ rescue Exception
+ puts "PATH WAS: #{xpath}"
+ raise
+ end
+ end
+
+ [
+ ['/r', 'attribute::a', Attribute ],
+ ['/r', '@a', Attribute ],
+ ['/r', 'attribute::*', Attribute ],
+ ['/r', '@*', Attribute ],
+ ['/r/p/c', 'attribute::b', Attribute ],
+ ['/r/p/c', '@b', Attribute ],
+ ['/r/p/c', 'attribute::*', Attribute ],
+ ['/r/p/c', '@*', Attribute ]
+ ].each do |nodepath, xpath, kind|
+ begin
+ context = REXML::XPath.first(doc, nodepath)
+ REXML::XPath.each( context, xpath ) do |what|
+ assert_kind_of kind, what, "Wrong type (#{what.class}) returned for #{xpath} (expected #{kind.name})\n"
+ end
+ rescue Exception
+ puts "PATH WAS: #{xpath}"
+ raise
+ end
+ end
+ end
+
+ def test_entities_Holden_Glova
+ document = <<-EOL
+ <?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE rubynet [
+ <!ENTITY rbconfig.MAJOR "1">
+ <!ENTITY rbconfig.MINOR "7">
+ <!ENTITY rbconfig.TEENY "2">
+ <!ENTITY rbconfig.ruby_version "&rbconfig.MAJOR;.&rbconfig.MINOR;">
+ <!ENTITY rbconfig.arch "i386-freebsd5">
+ <!ENTITY rbconfig.prefix "/usr/local">
+ <!ENTITY rbconfig.libdir "&rbconfig.prefix;/lib">
+ <!ENTITY rbconfig.includedir "&rbconfig.prefix;/include">
+ <!ENTITY rbconfig.sitedir "&rbconfig.prefix;/lib/ruby/site_ruby">
+ <!ENTITY rbconfig.sitelibdir "&rbconfig.sitedir;/&rbconfig.ruby_version;">
+ <!ENTITY rbconfig.sitearchdir "&rbconfig.sitelibdir;/&rbconfig.arch;">
+ ]>
+ <rubynet>
+ <pkg version="version1.0">
+ <files>
+ <file>
+ <filename>uga.rb</filename>
+ <mode>0444</mode>
+ <path>&rbconfig.libdir;/rexml</path>
+ <content encoding="xml">... the file here</content>
+ </file>
+ <file>
+ <filename>booga.h</filename>
+ <mode>0444</mode>
+ <path>&rbconfig.includedir;</path>
+ <content encoding="xml">... the file here</content>
+ </file>
+ <file>
+ <filename>foo.so</filename>
+ <mode>0555</mode>
+ <path>&rbconfig.sitearchdir;/rexml</path>
+ <content encoding="mime64">Li4uIHRoZSBmaWxlIGhlcmU=\n</content>
+ </file>
+ </files>
+ </pkg>
+ </rubynet>
+ EOL
+
+ file_xpath = '/rubynet/pkg/files/file'
+
+ root = REXML::Document.new(document)
+
+ root.elements.each(file_xpath) do |metadata|
+ text = metadata.elements['path'].get_text.value
+ assert text !~ /&rbconfig/, "'#{text}' failed"
+ end
+
+ #Error occurred in test_package_file_opens(TC_PackageInstall):
+ # ArgumentError:
+ #illegal access mode &rbconfig.prefix;/lib/rexml
+ #
+ #[synack@Evergreen] src $ ruby --version
+ #ruby 1.6.7 (2002-03-01) [i686-linux-gnu]
+ #
+ #It looks like it expanded the first entity, but didn't reparse it for more
+ #entities. possible bug - or have I mucked this up?
+ end
+
+ def test_whitespace_after_xml_decl
+ d = Document.new <<EOL
+<?xml version='1.0'?>
+ <blo>
+ <wak>
+ </wak>
+</blo>
+EOL
+ end
+
+ def test_external_entity
+ xp = '//channel/title'
+
+ %w{data/working.rss data/broken.rss}.each do |path|
+ File.open(File.join( "test", path )) do |file|
+ doc = REXML::Document.new file.readlines.join('')
+
+ # check to make sure everything is kosher
+ assert_equal( doc.root.class, REXML::Element )
+ assert_equal( doc.root.elements.class, REXML::Elements )
+
+ # get the title of the feed
+ assert( doc.root.elements[xp].kind_of?( REXML::Element ) )
+ end
+ end
+ end
+
+ def test_maintain_dtd
+ src = %q{<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ivattacks SYSTEM "../../ivacm.dtd" [
+<!ENTITY % extern-packages SYSTEM "../../ivpackages.dtd">
+<!ENTITY % extern-packages SYSTEM "../../common-declarations.dtd">
+%extern-packages;
+%extern-common;
+]>}
+ doc = Document.new( src )
+ doc.write( out="" )
+ src = src.tr('"', "'")
+ out = out.tr('"', "'")
+ assert_equal( src, out )
+ end
+
+ def test_text_nodes_nomatch
+ source = "<root><child>test</child></root>"
+ d = REXML::Document.new( source )
+ r = REXML::XPath.match( d, %q{/root/child[text()="no-test"]} )
+ assert_equal( 0, r.size )
+ end
+
+ def test_raw_Terje_Elde
+ f = REXML::Formatters::Default.new
+ txt = 'abc&#248;def'
+ a = Text.new( txt,false,nil,true )
+ f.write(a,out="")
+ assert_equal( txt, out )
+
+ txt = '<sean><russell>abc&#248;def</russell></sean>'
+ a = Document.new( txt, { :raw => ["russell"] } )
+ f.write(a,out="")
+ assert_equal( txt, out )
+ end
+
+ def test_indenting_error
+ a=Element.new("test1")
+ b=Element.new("test2")
+ c=Element.new("test3")
+ b << c
+ a << b
+
+ REXML::Formatters::Pretty.new.write(a,s="")
+ end
+
+ def test_pos
+ testfile = "/tmp/tidal#{$$}"
+ testdata = %Q{<calibration>
+<section name="parameters">
+<param name="barpress">760</param>
+<param name="hertz">50</param>
+</section>
+</calibration>
+}
+
+ File.open(testfile, 'w') do |f|
+ f.puts testdata
+ end
+ File.open(testfile) do |f|
+ d = REXML::Document.new(f)
+ end
+ #File.unlink(testfile)
+ end
+
+ def test_deep_clone
+ a = Document.new( '<?xml version="1.0"?><!DOCTYPE html PUBLIC
+ "-//W3C//DTD
+ XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html
+ xmlns="http:///www.w3.org/1999/xhtml"></html>' )
+ b = a.deep_clone
+ assert_equal a.to_s, b.to_s
+ end
+
+ def test_double_escaping
+ data = '<title>AT&amp;T</title>'
+ xml = "<description><![CDATA[#{data}]]></description>"
+
+ doc = REXML::Document.new(xml)
+ description = doc.find {|e| e.name=="description"}
+ assert_equal data, description.text
+ end
+
+ def test_ticket_12
+ cfg = "<element><anotherelement><child1>a</child1><child2>b</child2></anotherelement></element>"
+
+ config = REXML::Document.new( cfg )
+
+ assert_equal( "a", config.elements[ "//child1" ].text )
+ end
+
+=begin
+ # This is a silly test, and is low priority
+ def test_namespace_serialization_tobi_reif
+ doc = Document.new '<doc xmlns:b="http://www.foo.foo">
+ <b:p/>
+</doc>'
+ ns = 'http://www.foo.foo'
+ ns_declaration={'f'=>ns}
+ returned = XPath.match(doc,'//f:p',ns_declaration)
+ # passes:
+ assert( (returned[0].namespace==ns), 'namespace should be '+ns)
+ serialized = returned.to_s
+ serialized_and_parsed = Document.new(serialized)
+ puts 'serialized: '+serialized
+ # ... currently brings <b:p/>
+ # prefix b is undeclared (!)
+ assert( (serialized_and_parsed.namespace==ns),
+ 'namespace should still be '+ns.inspect+
+ ' and not '+serialized_and_parsed.namespace.inspect)
+ # ... currently results in a failure:
+ # 'namespace should still be "http://www.foo.foo" and not ""'
+ end
+=end
+end
diff --git a/test/rexml/test_core.rb b/test/rexml/test_core.rb
new file mode 100644
index 0000000000..4fd5b07c99
--- /dev/null
+++ b/test/rexml/test_core.rb
@@ -0,0 +1,1382 @@
+# coding: binary
+require "test/unit/testcase"
+
+require "rexml/document"
+require "rexml/parseexception"
+require "test/listener"
+require "rexml/output"
+require "rexml/source"
+require "rexml/formatters/pretty"
+require "rexml/undefinednamespaceexception"
+
+class Tester < Test::Unit::TestCase
+ include REXML
+ def setup
+ @xsa_source = <<-EOL
+ <?xml version="1.0"?>
+ <?xsl stylesheet="blah.xsl"?>
+ <!-- The first line tests the XMLDecl, the second tests PI.
+ The next line tests DocType. This line tests comments. -->
+ <!DOCTYPE xsa PUBLIC
+ "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
+ "http://www.garshol.priv.no/download/xsa/xsa.dtd">
+
+ <xsa>
+ <vendor id="blah">
+ <name>Lars Marius Garshol</name>
+ <email>larsga@garshol.priv.no</email>
+ <url>http://www.stud.ifi.uio.no/~lmariusg/</url>
+ </vendor>
+ </xsa>
+ EOL
+ end
+
+ def test_bad_markup
+ [
+ "<pkg='version'> foo </pkg>",
+ '<0/>',
+ '<a>&</a>',
+ '<a>&a</a>',
+ '<a>&a;</a>',
+ '<a a="<"/>',
+ '<a 3="<"/>',
+ '<a a="1" a="2"/>',
+ '<a><!-- -- --></a>',
+ '<a><!-- ---></a>',
+ '<a>&#x00;</a>',
+ '<a>&#0;</a>',
+ "<a a='&#0;' />",
+ "<a>\f</a>",
+ "<a a='\f' />",
+ "<a>\000</a>",
+ '<a' + [65535].pack('U') + ' />',
+ '<a>&#xfffe;</a>',
+ '<a>&#65535;</a>',
+ '<a' + [0x0371].pack('U') + ' />',
+ '<a a' + [0x0371].pack('U') + '="" />',
+ ].each do |src|
+ assert_raise( ParseException, %Q{Parse #{src.inspect} should have failed!} ) do
+ Document.new(src)
+ end
+ end
+ end
+
+ def test_attribute
+ # Testing constructors
+ #a = Attribute.new "hello", "dolly"
+ #b = Attribute.new a
+ #d = Document.new( "<a hello='dolly' href='blah'/>" )
+ #c = d[0].attributes.get_attribute( "hello" )
+
+ #assert_equal a, b
+ #for attr in [ a, b, c]
+ # assert_equal "hello", attr.name
+ # assert_equal "dolly", attr.value
+ #end
+
+ # This because of a reported bug in attribute handling in 1.0a8
+ source = '<a att="A">blah</a>'
+ doc = Document.new source
+ doc.elements.each do |a|
+ a.attributes['att'] << 'B'
+ assert_equal "AB", a.attributes['att']
+ a.attributes['att'] = 'C'
+ assert_equal "C", a.attributes['att']
+ end
+
+ # Bryan Murphy <murphybryanp@yahoo.com>
+ text = "this is a {target[@name='test']/@value} test"
+ source = <<-EOL
+ <?xml version="1.0"?>
+ <doc search="#{text}"/>
+ EOL
+
+ xml = Document.new source
+ value = xml.root.attributes["search"]
+ assert_equal text, value.to_s
+
+ e = Element.new "test"
+ e.add_attributes({ "name1" => "test1", "name4" => "test4" })
+ e.add_attributes([["name3","test3"], ["name2","test2"]])
+ assert_equal "test1", e.attributes["name1"]
+ assert_equal "test2", e.attributes["name2"]
+ assert_equal "test3", e.attributes["name3"]
+ assert_equal "test4", e.attributes["name4"]
+
+ # ensure that the attributes come out in sorted order
+ assert_equal %w(<test
+ name1='test1'
+ name2='test2'
+ name3='test3'
+ name4='test4'/>).join(' '), e.to_s
+ end
+
+ def test_cdata
+ test = "The quick brown fox jumped
+ & < & < \" '
+ over the lazy dog."
+
+ source = "<a><![CDATA[#{test}]]></a>"
+ d = REXML::Document.new( source )
+
+ # Test constructors
+ cdata = d[0][0]
+ assert_equal test, cdata.value
+ end
+
+ def test_comment
+ string = "This is a new comment!"
+ source = "<!--#{string}-->"
+ comment = Comment.new string
+ REXML::Formatters::Default.new.write( comment, out = "" )
+ assert_equal(source, out)
+
+ comment2 = Comment.new comment
+ assert_equal(comment, comment2)
+
+ assert_raise(ParseException) {
+ REXML::Document.new("<d><!- foo --></d>")
+ }
+ assert_raise(ParseException) {
+ REXML::Document.new("<d><!-- foo -></d>")
+ }
+ end
+
+ def test_whitespace
+ doc = Document.new "<root-element><first-element/></root-element>"
+ assert_equal 1, doc.root.size
+ assert_equal 1, doc.root.elements.size
+ doc = Document.new "<root-element>
+ <first-element/>
+ </root-element>"
+ assert_equal 3, doc.root.size
+ assert_equal 1, doc.root.elements.size
+
+ text = " This is text
+ with a lot of whitespace "
+ source = "<a>#{text}<b>#{text}</b><c>#{text}</c>#{text}</a>"
+
+ doc = Document.new( source, {
+ :respect_whitespace => %w{ a c }
+ } )
+ assert_equal text, doc.elements["//c"].text
+ string = ""
+ doc.root.each { |n| string << n.to_s if n.kind_of? Text }
+ assert_equal text+text, string
+
+ string =" lots of blank
+ space"
+ doc.root.add_element("d").add_element("c").text = string
+ doc.root.add_element("e").text = string
+ assert_equal string, doc.elements["/a/d/c"].text
+ assert string != doc.elements["/a/e"].text, "Text wasn't properly compressed"
+
+ doc = Document.new source, { :respect_whitespace => :all }
+ doc.root.add_element("d").text = string
+ assert_equal text, doc.root.text
+ nxt = ""
+ doc.root.each { |n| nxt << n.to_s if n.kind_of? Text }
+ assert_equal text+text, nxt
+ assert_equal text, doc.root.elements["b"].text
+ assert_equal text, doc.root.elements["c"].text
+ assert_equal string, doc.root.elements["d"].text
+ end
+
+ # This isn't complete. We need to check declarations and comments
+ def test_doctype
+ string = "something"
+ correct = "<!DOCTYPE something>"
+ doc = DocType.new(string)
+ assert_equal(string, doc.name)
+ doc.write(out="")
+ assert_equal(correct, out)
+
+ doc2 = DocType.new(doc)
+ assert_equal(doc.name, doc2.name)
+ assert_equal(doc.external_id, doc2.external_id)
+
+ correct = '<!DOCTYPE xsa PUBLIC "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML" "http://www.garshol.priv.no/download/xsa/xsa.dtd">'
+
+ one_line_source = '<!DOCTYPE xsa PUBLIC "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML" "http://www.garshol.priv.no/download/xsa/xsa.dtd"><a/>'
+ doc = Document.new( one_line_source )
+ doc = doc[0]
+ assert(doc)
+ doc.write(test="")
+ assert_equal(correct, test)
+
+ multi_line_source = '<!DOCTYPE xsa PUBLIC
+ "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
+ "http://www.garshol.priv.no/download/xsa/xsa.dtd">
+ <a/>'
+ d = Document.new( multi_line_source )
+ doc = d[0]
+ assert(doc)
+ doc.write(test="")
+ assert_equal(correct, test)
+
+ odd_space_source = ' <!DOCTYPE
+ xsa PUBLIC "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
+ "http://www.garshol.priv.no/download/xsa/xsa.dtd"> <a/>'
+ d = Document.new( odd_space_source )
+ dt = d.doctype
+ dt.write(test="")
+ assert_equal(correct, test)
+
+ # OK, the BIG doctype test, numba wun
+ docin = File.new "test/data/doctype_test.xml"
+ doc = Document.new(docin)
+ doc.write(test="")
+ assert_equal(31, doc.doctype.size)
+
+ # Here's a little ditty from Tobias...
+ src = <<-EOL
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
+ "http://www.w3.org/TR/SVG/DTD/svg10.dtd"
+ [
+ <!-- <!ENTITY % fast-slow "0 0 .5 1">-->
+ <!--<!ENTITY % slow-fast ".5 0 1 1">-->
+ <!ENTITY hover_ani
+ '<animateTransform attributeName="transform"
+ type="scale" restart="whenNotActive" values="1;0.96"
+ dur="0.5s" calcMode="spline" keySplines="0 0 .5 1"
+ fill="freeze" begin="mouseover"/>
+ <animateTransform attributeName="transform"
+ type="scale" restart="whenNotActive" values="0.96;1"
+ dur="0.5s" calcMode="spline" keySplines=".5 0 1 1"
+ fill="freeze" begin="mouseover+0.5s"/>'
+ >
+ ]
+ > <a/>
+ EOL
+ end
+
+ def test_document
+ # Testing cloning
+ source = "<element/>"
+ doc = Document.new source
+ doc2 = Document.new doc
+
+ # Testing Root
+ assert_equal doc.root.name.to_s, "element"
+
+ # Testing String source
+ source = @xsa_source
+ doc = Document.new source
+ assert_instance_of XMLDecl, doc.xml_decl
+ assert_instance_of DocType, doc.doctype
+ assert_equal doc.version, "1.0"
+
+ source = File.new( "test/data/dash.xml" )
+ doc = Document.new source
+ assert_equal "content-2", doc.elements["//content-2"].name
+ end
+
+ def test_instruction
+ target = "use"
+ content = "ruby"
+ source = "<?#{target} #{content}?>"
+
+ instruction = Instruction.new target, content
+ instruction2 = Instruction.new instruction
+ assert_equal(instruction, instruction2)
+ REXML::Formatters::Default.new.write( instruction, out = "" )
+ assert_equal(source, out)
+
+ d = Document.new( source )
+ instruction2 = d[0]
+ assert_equal(instruction.to_s, instruction2.to_s)
+
+ assert_raise(ParseException) {
+ REXML::Document.new("<d><?foo bar></d>")
+ }
+ end
+
+ def test_parent
+ parent = Parent.new
+ begin
+ parent << "Something"
+ rescue Exception
+ parent << Comment.new("Some comment")
+ assert parent.size == 1, "size of parent should be 1"
+ else
+ assert_fail "should have gotten an exception trying to add a "+ "String to a Parent"
+ end
+
+ source = "<a><one/><three/><five/></a>"
+ doc = Document.new source
+ three = doc.root.elements["three"]
+ doc.root.insert_before( three, Element.new("two") )
+ nxt = doc.root.elements["one"]
+ string = ""
+ while nxt
+ string << nxt.name
+ nxt = nxt.next_sibling
+ end
+ assert_equal "onetwothreefive", string
+
+
+ doc.root.insert_after( three, Element.new("four") )
+ string = ""
+ doc.root.each { |element| string << element.name }
+ assert_equal "onetwothreefourfive", string
+
+ string = ""
+ nxt = doc.root.elements["five"]
+ while nxt
+ string << nxt.name
+ nxt = nxt.previous_sibling
+ end
+ assert_equal "fivefourthreetwoone", string
+
+ doc.insert_after "//two", Element.new("two-and-half")
+ string = doc.root.elements.collect {|x| x.name}.join
+ assert_equal "onetwotwo-and-halfthreefourfive", string
+ doc.elements["/a/five"].insert_before "../four", Element.new("three-and-half")
+ string = doc.root.elements.collect {|x| x.name}.join
+ assert_equal "onetwotwo-and-halfthreethree-and-halffourfive", string
+
+ doc.elements["/a/five"].previous_sibling = Element.new("four-and-half")
+ string = doc.root.elements.collect {|x| x.name}.join
+ assert_equal "onetwotwo-and-halfthreethree-and-halffourfour-and-halffive", string
+ doc.elements["/a/one"].next_sibling = Element.new("one-and-half")
+ string = doc.root.elements.collect {|x| x.name}.join
+ assert_equal "oneone-and-halftwotwo-and-halfthreethree-and-halffourfour-and-halffive", string
+
+ doc = Document.new "<a><one/><three/></a>"
+ doc.root[1,0] = Element.new "two"
+ string = ""
+ doc.root.each { |el| string << el.name }
+ assert_equal "onetwothree", string
+ end
+
+ # The Source classes are tested extensively throughout the test suite
+ def test_source
+ # Testing string source
+ source = @xsa_source
+ doc = Document.new source
+ assert_equal doc.root.name.to_s, "xsa"
+
+ # Testing IO source
+ doc = Document.new File.new("test/data/project.xml")
+ assert_equal doc.root.name.to_s, "Project"
+ end
+
+ def test_text
+ f = REXML::Formatters::Default.new
+ string = "Some text"
+ text = Text.new(string)
+ assert_equal(string, text.to_s)
+ text2 = Text.new(text)
+ assert_equal(text, text2)
+ #testing substitution
+ string = "0 < ( 1 & 1 )"
+ correct = "0 &lt; ( 1 &amp; 1 )"
+ text = Text.new(string, true)
+ f.write(text,out="")
+ assert_equal(correct, out)
+
+ string = "Cats &amp; dogs"
+ text = Text.new(string, false, nil, true)
+ assert_equal(string, text.to_s)
+
+ string2 = "<a>#{string}</a>"
+ doc = Document.new( string2, {
+ :raw => %w{ a b }
+ } )
+ f.write(doc,out="")
+ assert_equal(string2, out)
+ b = doc.root.add_element( "b" )
+ b.text = string
+ assert_equal(string, b.get_text.to_s)
+
+ c = doc.root.add_element("c")
+ c.text = string
+ assert_equal("Cats &amp;amp; dogs", c.get_text.to_s)
+
+ # test all
+ string = "<a>&amp;<b>&lt;</b><c>&gt;<d>&quot;</d></c></a>"
+ doc = Document.new(string, { :raw => :all })
+ assert_equal( "&amp;", doc.elements["/a"][0].to_s )
+ assert_equal( "&", doc.elements["/a"].text )
+ assert_equal( "&lt;", doc.elements["/a/b"][0].to_s )
+ assert_equal( "<", doc.elements["/a/b"].text )
+ assert_equal( "&gt;", doc.elements["/a/c"][0].to_s )
+ assert_equal( ">", doc.elements["/a/c"].text )
+ assert_equal( '&quot;', doc.elements["//d"][0].to_s )
+ assert_equal( '"', doc.elements["//d"].text )
+
+ # test some other stuff
+ doc = Document.new('<a><b/></a>')
+ doc.root.text = 'Sean'
+ assert_equal( '<a><b/>Sean</a>', doc.to_s )
+ doc.root.text = 'Elliott'
+ assert_equal( '<a><b/>Elliott</a>', doc.to_s )
+ doc.root.add_element( 'c' )
+ assert_equal( '<a><b/>Elliott<c/></a>', doc.to_s )
+ doc.root.text = 'Russell'
+ assert_equal( '<a><b/>Russell<c/></a>', doc.to_s )
+ doc.root.text = nil
+ assert_equal( '<a><b/><c/></a>', doc.to_s )
+ end
+
+ def test_xmldecl
+ source = "<?xml version='1.0'?>"
+ # test args
+ # test no args
+ decl2 = XMLDecl.new
+ assert_equal source, decl2.to_s
+ # test XMLDecl
+ decl2 = XMLDecl.new "1.0"
+ assert_equal source, decl2.to_s
+ end
+
+ def each_test( element, xpath, num_children )
+ count = 0
+ element.each_element( xpath ) { |child|
+ count += 1
+ yield child if block_given?
+ }
+ assert_equal num_children, count
+ end
+
+ # This is the biggest test, as the number of permutations of xpath are
+ # enormous.
+ def test_element_access
+ # Testing each_element
+ doc = Document.new File.new("test/data/project.xml")
+
+ each_test( doc, "/", 1 ) { |child|
+ assert_equal doc.name, child.name
+ }
+ each_test(doc, ".", 1) { |child| assert_equal doc, child }
+ each_test(doc.root, "..", 1) { |child| assert_equal doc, child }
+ each_test(doc.root, "*", 5)
+ each_test(doc, "Project/Datasets", 1) { |child|
+ assert_equal "Datasets", child.name
+ }
+ each_test(doc, "Project/Datasets/link", 2 )
+ each_test(doc.root, "/Project/Description", 1) {|child|
+ assert_equal "Description", child.name
+ }
+ each_test(doc.root, "./Description",1 ) { |child|
+ assert_equal "Description",child.name
+ }
+ each_test(doc.root, "../Project",1 ) { |child|
+ assert_equal doc.root, child
+ }
+ #each_test(doc,".../link",2) {|child| assert_equal "link",child.name.to_s}
+
+ # test get_element
+ first = doc.elements[ "Project" ]
+ assert_equal doc.root, first
+ second = doc.elements[ "Project" ].elements[1]
+ third = doc.elements[ "Project/Creator" ]
+ assert_equal second, third
+ fourth = doc.elements[ "Project/Datasets/link[@idref='18']" ]
+ assert_equal "Test data 1", fourth.attributes["name"]
+
+ # Testing each_predicate
+ each_test( doc, "Project/Datasets/link[@idref='18']", 1 ) { |child|
+ assert_equal "Test data 1", child.attributes["name"]
+ }
+
+ # testing next/previous_element
+ creator = doc.elements["//Creator"]
+ lm = creator.next_element
+ assert_equal "LastModifier", lm.name
+ assert_equal "Creator", lm.previous_element.name
+ end
+
+ def test_child
+ sean = Element.new "Sean"
+ rubbell = Element.new "Rubbell"
+ elliott = sean.add_element "Elliott"
+ sean << rubbell
+ assert_equal elliott, rubbell.previous_sibling
+ assert_equal rubbell, elliott.next_sibling
+
+ russell = Element.new "Russell"
+ rubbell.replace_with russell
+ assert_equal elliott, russell.previous_sibling
+ assert_equal russell, elliott.next_sibling
+
+ assert_nil russell.document
+ assert_equal sean, russell.root
+ end
+
+ # Most of this class is tested elsewhere. Here are the methods which
+ # aren't used in any other class
+ def test_element
+ sean = Element.new "Sean"
+ string = "1) He's a great guy!"
+ sean.text = string
+ russell = Element.new "Russell"
+ sean << russell
+
+ russell.attributes["email"] = "ser@germane-software.com"
+ assert_equal russell.attributes["email"], "ser@germane-software.com"
+ russell.attributes["webpage"] = "http://www.germane-software.com/~ser"
+
+ assert sean.has_text?, "element should have text"
+ assert_equal sean.text, string
+ assert sean.has_elements?, "element should have one element"
+ string = "2) What a stud!"
+ sean.add_text string
+ sean.text = "3) Super programmer!"
+ sean.text = nil
+ assert sean.has_text?, "element should still have text"
+ assert_equal sean.text, string
+
+ russell.delete_attribute "email"
+ assert_nil russell.attributes["email"]
+ russell.attributes.delete "webpage"
+ assert !russell.has_attributes?, "element should have no attributes"
+ end
+
+ def test_no_format
+ source = "<a><b><c>blah</c><d/></b></a>"
+ out = ""
+ doc = Document.new( source )
+ doc.write(out)
+ assert_equal(source, out)
+ end
+
+ def test_namespace
+ source = <<-EOF
+ <x xmlns:foo="http://www.bar.com/schema">
+ </x>
+ EOF
+ doc = Document.new(source)
+ assert_equal("http://www.bar.com/schema", doc.root.namespace( "foo" ))
+ source = <<-EOF
+ <!-- bar namespace is "someuri" -->
+ <foo:bar xmlns="default" xmlns:foo="someuri">
+ <!-- a namespace is "default" -->
+ <a/>
+ <!-- foo:b namespace is "someuri" -->
+ <foo:b>
+ <!-- c namespace is "default" -->
+ <c/>
+ </foo:b>
+ <!-- d namespace is "notdefault" -->
+ <d xmlns="notdefault">
+ <!-- e namespace is "notdefault" -->
+ <e/>
+ <f xmlns="">
+ <g/>
+ </f>
+ </d>
+ </foo:bar>
+ EOF
+ doc = Document.new source
+ assert_equal "someuri", doc.root.namespace
+ assert_equal "default", doc.root.elements[1].namespace
+ assert_equal "someuri", doc.root.elements[2].namespace
+ assert_equal "notdefault", doc.root.elements[ 3 ].namespace
+
+ # Testing namespaces in attributes
+ source = <<-EOF
+ <a xmlns:b="uri">
+ <b b:a="x" a="y"/>
+ <c xmlns="foo">
+ </c>
+ </a>
+ EOF
+ doc = Document.new source
+ b = doc.root.elements["b"]
+ assert_equal "x", b.attributes["b:a"]
+ assert_equal "y", b.attributes["a"]
+
+ doc = Document.new
+ doc.add_element "sean:blah"
+ doc.root.text = "Some text"
+ out = ""
+ doc.write(out)
+ assert_equal "<sean:blah>Some text</sean:blah>", out
+ end
+
+
+ def test_add_namespace
+ e = Element.new 'a'
+ e.add_namespace 'someuri'
+ e.add_namespace 'foo', 'otheruri'
+ e.add_namespace 'xmlns:bar', 'thirduri'
+ assert_equal 'someuri', e.attributes['xmlns']
+ assert_equal 'otheruri', e.attributes['xmlns:foo']
+ assert_equal 'thirduri', e.attributes['xmlns:bar']
+ end
+
+
+ def test_big_documentation
+ f = File.new("test/data/documentation.xml")
+ d = Document.new f
+ assert_equal "Sean Russell", d.elements["documentation/head/author"].text.tr("\n\t", " ").squeeze(" ")
+ out = ""
+ d.write out
+ end
+
+ def test_tutorial
+ doc = Document.new File.new("test/data/tutorial.xml")
+ out = ""
+ doc.write out
+ end
+
+ def test_stream
+ c = Listener.new
+ Document.parse_stream( File.new("test/data/documentation.xml"), c )
+ assert(c.ts, "Stream parsing apparantly didn't parse the whole file")
+ assert(c.te, "Stream parsing dropped end tag for documentation")
+
+ Document.parse_stream("<a.b> <c/> </a.b>", c)
+
+ Document.parse_stream("<a>&lt;&gt;&amp;</a>", c)
+ assert_equal('<>&', c.normalize)
+ end
+
+ def test_line
+ doc = Document.new File.new( "test/data/bad.xml" )
+ assert_fail "There should have been an error"
+ rescue Exception
+ # We should get here
+ er = $!
+ assert($!.line == 5, "Should have been an error on line 5, "+
+ "but was reported as being on line #{$!.line}" )
+ end
+
+ def test_substitution
+ val = "a'b\"c"
+ el = Element.new("a")
+ el.attributes["x"] = val
+ REXML::Formatters::Default.new.write(el, out="")
+
+ nel = Document.new( out)
+ assert_equal( val, nel.root.attributes["x"] )
+ end
+
+ def test_exception
+ source = SourceFactory.create_from "<a/>"
+ p = ParseException.new( "dummy message", source )
+ s = p.to_s
+ begin
+ raise "dummy"
+ rescue Exception
+ p.continued_exception = $!
+ end
+ s = p.to_s
+ end
+
+ def test_bad_content
+ in_gt = '<root-el>content>content</root-el>'
+ in_lt = '<root-el>content<content</root-el>'
+
+ # This is OK
+ tree_gt = Document.new in_gt
+ assert_equal "content>content", tree_gt.elements[1].text
+ # This isn't
+ begin
+ tree_lt = Document.new in_lt
+ assert_fail "Should have gotten a parse error"
+ rescue ParseException
+ end
+ end
+
+ def test_iso_8859_1_output_function
+ out = ""
+ output = Output.new( out )
+ koln_iso_8859_1 = "K\xF6ln"
+ koln_utf8 = "K\xc3\xb6ln"
+ source = Source.new( koln_iso_8859_1, 'iso-8859-1' )
+ results = source.scan(/.*/)[0]
+ koln_utf8.force_encoding('UTF-8') if koln_utf8.respond_to?(:force_encoding)
+ assert_equal koln_utf8, results
+ output << results
+ if koln_iso_8859_1.respond_to?(:force_encoding)
+ koln_iso_8859_1.force_encoding('ISO-8859-1')
+ end
+ assert_equal koln_iso_8859_1, out
+ end
+
+ def test_attributes_each
+ doc = Document.new("<a xmlns:a='foo'><b x='1' y='2' z='3' a:x='4'/></a>")
+ count = 0
+ doc.root.elements[1].attributes.each {|k,v| count += 1 }
+ assert_equal 4, count
+ end
+
+ def test_delete_namespace
+ doc = Document.new "<a xmlns='1' xmlns:x='2'/>"
+ doc.root.delete_namespace
+ doc.root.delete_namespace 'x'
+ assert_equal "<a/>", doc.to_s
+ end
+
+ def test_each_element_with_attribute
+ doc = Document.new "<a><b id='1'/><c id='2'/><d id='1'/><e/></a>"
+ arry = []
+ block = proc { |e|
+ assert arry.include?(e.name)
+ arry.delete e.name
+ }
+ # Yields b, c, d
+ arry = %w{b c d}
+ doc.root.each_element_with_attribute( 'id', &block )
+ assert_equal 0, arry.size
+ # Yields b, d
+ arry = %w{b d}
+ doc.root.each_element_with_attribute( 'id', '1', &block )
+ assert_equal 0, arry.size
+ # Yields b
+ arry = ['b']
+ doc.root.each_element_with_attribute( 'id', '1', 1, &block )
+ assert_equal 0, arry.size
+ # Yields d
+ arry = ['d']
+ doc.root.each_element_with_attribute( 'id', '1', 0, 'd', &block )
+ assert_equal 0, arry.size
+ end
+ def test_each_element_with_text
+ doc = Document.new '<a><b>b</b><c>b</c><d>d</d><e/></a>'
+ arry = []
+ block = proc { |e|
+ assert arry.include?(e.name)
+ arry.delete e.name
+ }
+ # Yields b, c, d
+ arry = %w{b c d}
+ doc.root.each_element_with_text(&block)
+ assert_equal 0, arry.size
+ # Yields b, d
+ arry = %w{b c}
+ doc.root.each_element_with_text( 'b', &block )
+ assert_equal 0, arry.size
+ # Yields b
+ arry = ['b']
+ doc.root.each_element_with_text( 'b', 1, &block )
+ assert_equal 0, arry.size
+ # Yields d
+ arry = ['d']
+ doc.root.each_element_with_text( nil, 0, 'd', &block )
+ assert_equal 0, arry.size
+ end
+
+ def test_element_parse_stream
+ s = Source.new( "<a>some text</a>" )
+ l = Listener.new
+ class << l
+ def tag_start name, attributes
+ raise "Didn't find proper tag name" unless 'a'==name
+ end
+ end
+
+ Document::parse_stream(s, l)
+ end
+
+ def test_deep_clone
+ a = Document.new( '<?xml version="1"?><a x="y"><b>text</b>text<c><d><e>text</e></d></c></a>' )
+ b = a.deep_clone
+ assert_equal a.to_s, b.to_s
+
+ a = Document.new( '<a>some &lt; text <b> more &gt; text </b> &gt; </a>' )
+ b = a.deep_clone
+ assert_equal a.to_s, b.to_s
+ c = Document.new( b.to_s )
+ assert_equal a.to_s, c.to_s
+ end
+
+ def test_whitespace_before_root
+ a = <<EOL
+<?xml version='1.0'?>
+ <blo>
+ <wak>
+ </wak>
+ </blo>
+EOL
+ d = Document.new(a)
+ b = ""
+ d.write( b )
+ assert_equal a,b
+ end
+
+ def test_entities
+ a = Document.new( '<a>&#101;&#x65;&#252;</a>' )
+ assert_equal 'eeü', a.root.text
+ end
+
+ def test_element_decl
+ element_decl = Source.new("<!DOCTYPE foo [
+<!ELEMENT bar (#PCDATA)>
+]>")
+ doc = Document.new( element_decl )
+ d = doc[0]
+ assert_equal("<!ELEMENT bar (#PCDATA)>", d.to_s.split(/\n/)[1].strip)
+ end
+
+ def test_attlist_decl
+ doc = Document.new <<-EOL
+ <!DOCTYPE blah [
+ <!ATTLIST blah
+ xmlns CDATA "foo">
+ <!ATTLIST a
+ bar CDATA "gobble"
+ xmlns:one CDATA "two"
+ >
+ ]>
+ <a xmlns:three='xxx' three='yyy'><one:b/><three:c/></a>
+ EOL
+ assert_equal 'gobble', doc.root.attributes['bar']
+ assert_equal 'xxx', doc.root.elements[2].namespace
+ assert_equal 'two', doc.root.elements[1].namespace
+ assert_equal 'foo', doc.root.namespace
+
+ doc = Document.new <<-EOL
+ <?xml version="1.0"?>
+ <!DOCTYPE schema SYSTEM "XMLSchema.dtd" [
+ <!ENTITY % p ''>
+ <!ENTITY % s ''>
+ <!ATTLIST schema
+ xmlns:svg CDATA #FIXED "http://www.w3.org/2000/svg"
+ xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
+ xmlns:xml CDATA #FIXED "http://www.w3.org/XML/1998/namespace"
+ >]>
+ <schema/>
+ EOL
+ prefixes = doc.root.prefixes.sort
+ correct = ['svg', 'xlink', 'xml']
+ assert_equal correct, prefixes
+ end
+
+ def test_attlist_write
+ file=File.new("test/data/foo.xml" )
+ doc=Document.new file
+ root = doc.root
+
+ out = ''
+ doc.write(out)
+ end
+
+ def test_more_namespaces
+ assert_raise( REXML::UndefinedNamespaceException,
+ %Q{Should have gotten an Undefined Namespace error} ) {
+ doc1 = Document.new("<r><p><n:c/></p></r>")
+ }
+ doc2 = Document.new("<r xmlns:n='1'><p><n:c/></p></r>")
+ es = XPath.match(doc2, '//c')
+ assert_equal 0, es.size
+ es = XPath.match(doc2, '//n:c')
+ assert_equal 1, es.size
+ doc2.root.add_namespace('m', '2')
+ doc2.root.add_element("m:o")
+ es = XPath.match(doc2, './/o')
+ assert_equal 0, es.size
+ es = XPath.match(doc2, '//n:c')
+ assert_equal 1, es.size
+ end
+
+ def test_ticket_51
+ doc = REXML::Document.new <<-EOL
+ <test xmlns='1' xmlns:x='1'>
+ <a>X</a>
+ <x:a>Y</x:a>
+
+ <b xmlns='2'>
+ <a>Z</a>
+ </b>
+ </test>
+ EOL
+
+ # The most common case. People not caring about the namespaces much.
+ assert_equal( "XY", XPath.match( doc, "/test/a/text()" ).join )
+ assert_equal( "XY", XPath.match( doc, "/test/x:a/text()" ).join )
+ # Surprising? I don't think so, if you believe my definition of the "common case"
+ assert_equal( "XYZ", XPath.match( doc, "//a/text()" ).join )
+
+ # These are the uncommon cases. Namespaces are actually important, so we define our own
+ # mappings, and pass them in.
+ assert_equal( "XY", XPath.match( doc, "/f:test/f:a/text()", { "f" => "1" } ).join )
+ # The namespaces are defined, and override the original mappings
+ assert_equal( "", XPath.match( doc, "/test/a/text()", { "f" => "1" } ).join )
+ assert_equal( "", XPath.match( doc, "/x:test/x:a/text()", { "f" => "1" } ).join )
+ assert_equal( "", XPath.match( doc, "//a/text()", { "f" => "1" } ).join )
+ end
+
+ def test_processing_instruction
+ d = Document.new("<a><?foo bar?><?foo2 bar2?><b><?foo3 bar3?></b><?foo4 bar4?></a>")
+ assert_equal 4, XPath.match(d, '//processing-instruction()' ).size
+ match = XPath.match(d, "//processing-instruction('foo3')" )
+ assert_equal 1, match.size
+ assert_equal 'bar3', match[0].content
+ end
+
+ def test_oses_with_bad_EOLs
+ d = Document.new("\n\n\n<?xml version='1.0'?>\n\n\n<a/>\n\n")
+ end
+
+ # Contributed (with patch to fix bug) by Kouhei
+ def test_ignore_whitespace
+ source = "<a> <b/> abc <![CDATA[def]]> </a>"
+
+ context_all = {:ignore_whitespace_nodes => :all}
+ context_a = {:ignore_whitespace_nodes => %(a)}
+ context_b = {:ignore_whitespace_nodes => %(b)}
+
+ tests = [[[" abc ", "def"], context_all],
+ [[" abc ", "def"], context_a],
+ [[" ", " abc ", "def", " "], context_b]]
+
+ tests.each do |test|
+ assert_equal(test[0], Document.new(source, test[1]).root.texts.collect{|x|
+ x.to_s})
+ end
+ end
+
+ def test_0xD_in_preface
+ doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\x0D<opml version=\"1.0\">\x0D</opml>"
+ doc = Document.new doc
+ end
+
+ def test_hyphens_in_doctype
+ doc = REXML::Document.new <<-EOQ
+ <?xml version="1.0"?>
+ <!DOCTYPE a-b-c>
+ <a-b-c>
+ <a/>
+ </a-b-c>
+ EOQ
+
+ assert_equal('a-b-c', doc.doctype.name)
+ end
+
+ def test_accents
+ docs = [
+ %Q{<?xml version="1.0" encoding="ISO-8859-1"?>
+<gnuPod>
+<files>
+ <file id="57" artist="Coralie Cl\357\277\275ent" />
+</files>
+</gnuPod>},
+ '<?xml version="1.0" encoding="ISO-8859-1"?>
+<gnuPod>
+<files>
+ <file id="71" album="Astrakan Caf" />
+</files>
+</gnuPod>',
+ %Q{<?xml version="1.0" encoding="ISO-8859-1"?>
+<gnuPod>
+<files>
+ <file id="71" album="Astrakan Caf\357\277\275eria" />
+</files>
+</gnuPod>},
+ %Q{<?xml version="1.0" encoding="ISO-8859-1"?>
+<gnuPod>
+<files>
+ <file id="71" album="Astrakan Caf\357\277\275" />
+</files>
+</gnuPod>} ]
+ docs.each_with_index { |d,i|
+ begin
+ REXML::Document.new(d)
+ rescue
+ puts "#{i} => #{docs[i]}"
+ raise
+ end
+ }
+ end
+
+ def test_replace_text
+ e = REXML::Element.new( "a" )
+ e.add_text( "foo" )
+ assert_equal( "<a>foo</a>", e.to_s )
+ e[0].value = "bar"
+ assert_equal( "<a>bar</a>", e.to_s )
+ e[0].value = "<"
+ assert_equal( "<a>&lt;</a>", e.to_s )
+ assert_equal( "<", e[0].value )
+ end
+
+
+ def test_write_doctype
+ ## XML Document and Declaration
+ document = REXML::Document.new
+ xmldecl = REXML::XMLDecl.new("1.0", "UTF-8")
+ document.add(xmldecl)
+ s = ""
+ document.write(s)
+
+ ## XML Doctype
+ str = '<!DOCTYPE foo "bar">'
+ source = REXML::Source.new(str)
+ doctype = REXML::DocType.new(source)
+ document.add(doctype)
+ document.write(s)
+
+ ## Element
+ element = REXML::Element.new("hoge")
+ document.add(element)
+
+ document.write(s)
+ end
+
+
+ def test_write_cdata
+ src = "<a>A</a>"
+ doc = REXML::Document.new( src )
+ out = ""
+ doc.write( out )
+ assert_equal( src, out )
+
+ src = "<a><![CDATA[A]]></a>"
+ doc = REXML::Document.new( src )
+ out = ""
+ doc.write( out )
+ assert_equal( src, out )
+ end
+
+ def test_namespace_attributes
+ source = <<-EOL
+ <a xmlns:x="1">
+ <x:b x:n="foo"/>
+ </a>
+ EOL
+ d = REXML::Document.new( source )
+ assert_equal( 'foo', REXML::XPath.first(d.root, "//x:b/@x:n").value )
+ assert_equal( nil, REXML::XPath.first(d.root, "//x:b/@x:n", {}))
+ end
+
+ def test_null_element_name
+ a = REXML::Document.new
+ assert_raise( RuntimeError ) {
+ a.add_element( nil )
+ }
+ end
+
+ def test_text_raw
+ # From the REXML tutorial
+ # (http://www.germane-software.com/software/rexml/test/data/tutorial.html)
+ doc = Document.new <<-EOL
+ <?xml version="1.0"?>
+ <!DOCTYPE schema SYSTEM "XMLSchema.dtd" [
+ <!ENTITY % s 'Sean'>
+ ]>
+ <a/>
+ EOL
+ a = doc.root
+
+ # This makes sure that RAW text nodes don't have their entity strings
+ # replaced
+ t = Text.new "Sean", false, nil, true
+ a.text = t
+ assert_equal( "Sean", t.to_s )
+ assert_equal( "Sean", t.value )
+
+ # This makes sure that they do
+ t = Text.new "Sean", false, nil, false
+ a.text = t
+ assert_equal( "&s;", t.to_s )
+ assert_equal( "Sean", t.value )
+
+ t = Text.new "&s;", false, nil, true
+ a.text = t
+ assert_equal( "&s;", t.to_s )
+ assert_equal( "Sean", t.value )
+
+ t = Text.new "&s;", false, nil, true
+ a.text = t
+ assert_equal( "&s;", t.to_s )
+ assert_equal( "Sean", t.value )
+
+ # Ticket #44
+ t = REXML::Text.new( "&amp;", false, nil, true )
+ assert_equal( "&amp;", t.to_s )
+
+ t = REXML::Text.new("&amp;", false, false)
+ assert_equal( "&amp;amp;", t.to_s )
+ end
+
+ def test_to_xpath
+ doc = REXML::Document.new( %q{<tag1>
+ <tag2 name="tag2"/>
+ <tag2 name="tag2"/>
+ </tag1>})
+ names = %w{ /tag1/tag2[1] /tag1/tag2[2] }
+ doc.root.elements.each_with_index {|el, i|
+ assert_equal( names[i], el.xpath )
+ }
+ end
+
+ def test_transitive
+ doc = REXML::Document.new( "<a/>")
+ s = ""
+ doc.write( s, 0, true )
+ end
+
+ # This is issue #40
+ def test_replace_with
+ old = '<doc>old<foo/>old</doc>'
+ d = REXML::Document.new(old).root
+ new = REXML::Text.new('new',true,nil,true)
+ child = d.children[2]
+ child.replace_with(new)
+ assert_equal( new, d.children[2] )
+ end
+
+ def test_repeated_writes
+ require 'iconv'
+ a = IO.read( "test/data/iso8859-1.xml" )
+ f = REXML::Formatters::Pretty.new
+
+ xmldoc = REXML::Document.new( a )
+ a_andre = xmldoc.elements['//image'].attributes['caption']
+
+ f.write(xmldoc,b="")
+
+ xmldoc = REXML::Document.new(b)
+ b_andre = xmldoc.elements['//image'].attributes['caption']
+ assert_equal( a_andre, b_andre )
+
+ f.write(xmldoc,c="")
+
+ xmldoc = REXML::Document.new(c)
+ c_andre = xmldoc.elements['//image'].attributes['caption']
+ assert_equal( b_andre, c_andre )
+
+ o = Output.new(d="","UTF-8")
+ f.write(xmldoc,o)
+ assert_not_equal( c, d )
+ end
+
+
+ def test_ticket_58
+ doc = REXML::Document.new
+ doc << REXML::XMLDecl.default
+ doc << REXML::Element.new("a")
+
+ str = ""
+ doc.write(str)
+
+ assert_equal("<a/>", str)
+
+ doc = REXML::Document.new
+ doc << REXML::XMLDecl.new("1.0", "UTF-8")
+ doc << REXML::Element.new("a")
+
+ str = ""
+ doc.write(str)
+
+ assert_equal("<?xml version='1.0' encoding='UTF-8'?><a/>", str)
+ end
+
+ # Incomplete tags should generate an error
+ def test_ticket_53
+ assert_raise( REXML::ParseException ) {
+ REXML::Document.new( "<a><b></a>" )
+ }
+ assert_raise( REXML::ParseException ) {
+ REXML::Document.new( "<a><b>" )
+ }
+ assert_raise( REXML::ParseException ) {
+ REXML::Document.new( "<a><b/>" )
+ }
+ end
+
+ def test_ticket_52
+ source = "<!-- this is a single line comment -->"
+ d = REXML::Document.new(source)
+ d.write(k="")
+ assert_equal( source, k )
+
+ source = "<a><!-- Comment --></a>"
+ target = "<a>\n <!-- Comment -->\n</a>"
+ d = REXML::Document.new(source)
+ REXML::Formatters::Pretty.new(4).write(d,k="")
+ assert_equal( target, k )
+ end
+
+ def test_ticket_76
+ src = "<div>at&t"
+ assert_raise( ParseException, %Q{"#{src}" is invalid XML} ) {
+ REXML::Document.new(src)
+ }
+ end
+
+ def test_ticket_21
+ src = "<foo bar=value/>"
+ assert_raise( ParseException, "invalid XML should be caught" ) {
+ d = REXML::Document.new(src)
+ }
+ begin
+ d = REXML::Document.new(src)
+ rescue
+ assert_match( /missing attribute quote/, $!.message )
+ end
+ end
+
+ def test_ticket_63
+ d = REXML::Document.new( File.new("test/data/t63-1.xml") )
+ end
+
+ def test_ticket_75
+ d = REXML::Document.new( File.new("test/data/t75.xml") )
+ assert_equal("tree", d.root.name)
+ end
+
+ def test_ticket_48_part_II
+ f = REXML::Formatters::Pretty.new
+ #- rexml sanity check (bugs in ruby 1.8.4, ruby 1.8.6)
+ xmldoc = Document.new("<test/>")
+ xmldoc << XMLDecl.new(XMLDecl::DEFAULT_VERSION, "UTF-8")
+ content = ['61c3a927223c3e26'].pack("H*")
+ content.force_encoding('UTF-8') if content.respond_to?(:force_encoding)
+ #- is some UTF-8 text but just to make sure my editor won't magically convert..
+ xmldoc.root.add_attribute('attr', content)
+ f.write(xmldoc,out=[])
+
+ xmldoc = REXML::Document.new(out.join)
+ sanity1 = xmldoc.root.attributes['attr']
+ f.write(xmldoc,out=[])
+
+ xmldoc = REXML::Document.new(out.join)
+ sanity2 = xmldoc.root.attributes['attr']
+ f.write(xmldoc,out=[])
+
+ assert_equal( sanity1, sanity2 )
+ end
+
+ def test_ticket_88
+ doc = REXML::Document.new("<?xml version=\"1.0\" encoding=\"shift_jis\"?>")
+ assert_equal("<?xml version='1.0' encoding='SHIFT_JIS'?>", doc.to_s)
+ doc = REXML::Document.new("<?xml version = \"1.0\" encoding = \"shift_jis\"?>")
+ assert_equal("<?xml version='1.0' encoding='SHIFT_JIS'?>", doc.to_s)
+ end
+
+ def test_ticket_85
+ xml = <<ENDXML
+<foo>
+ <bar>
+ <bob name='jimmy'/>
+ </bar>
+</foo>
+ENDXML
+
+ yml = "<foo>
+ <bar>
+ <bob name='jimmy'/>
+ </bar>
+</foo>"
+
+ zml = "<foo><bar><bob name='jimmy'/></bar></foo>"
+
+ # The pretty printer ignores all whitespace, anyway so output1 == output2
+ f = REXML::Formatters::Pretty.new( 2 )
+ d = Document.new( xml, :ignore_whitespace_nodes=>:all )
+ f.write( d, output1="" )
+
+ d = Document.new( xml )
+ f.write( d, output2="" )
+
+ # Output directives should override whitespace directives.
+ assert_equal( output1, output2 )
+
+ # The base case.
+ d = Document.new(yml)
+ f.write( d, output3="" )
+
+ assert_equal( output3.strip, output2.strip )
+
+ d = Document.new(yml)
+ f.write( d, output4="" )
+
+ assert_equal( output3.strip, output4.strip )
+ end
+
+ def test_ticket_91
+ source="<root>
+ <bah something='1' somethingelse='bah'>
+ <something>great</something>
+ </bah>
+ </root>"
+ expected="<root>
+ <bah something='1' somethingelse='bah'>
+ <something>great</something>
+ </bah>
+ <bah/>
+</root>"
+ d = Document.new( source )
+ d.root.add_element( "bah" )
+ p=REXML::Formatters::Pretty.new(2)
+ p.compact = true # Don't add whitespace to text nodes unless necessary
+ p.write(d,out="")
+ assert_equal( expected, out )
+ end
+
+ def test_ticket_95
+ testd = REXML::Document.new "<a><b><c/><c/><c/></b></a>"
+ testd.write(out1="")
+ testd.elements["//c[2]"].xpath
+ testd.write(out2="")
+ assert_equal(out1,out2)
+ end
+
+ def test_ticket_102
+ doc = REXML::Document.new '<doc xmlns="ns"><item name="foo"/></doc>'
+ assert_equal( "foo", doc.root.elements["item"].attribute("name","ns").to_s )
+ assert_equal( "item", doc.root.elements["item[@name='foo']"].name )
+ end
+
+ def test_ticket_14
+ # Per .2.5 Node Tests of XPath spec
+ assert_raise( REXML::UndefinedNamespaceException,
+ %Q{Should have gotten an Undefined Namespace error} ) {
+ d = Document.new("<a><n:b/></a>")
+ }
+ end
+
+ # 5.7 Text Nodes
+ # Character data is grouped into text nodes. As much character data as
+ # possible is grouped into each text node: a text node never has an
+ # immediately following or preceding sibling that is a text node. The
+ # string-value of a text node is the character data. A text node always has
+ # at least one character of data.
+ def test_ticket_105
+ d = Document.new("<a/>")
+ d.root.add_text( "a" )
+ d.root.add_text( "b" )
+ assert_equal( 1, d.root.children.size )
+ end
+
+ # phantom namespace same as default namespace
+ def test_ticket_121
+ doc = REXML::Document.new(
+ '<doc xmlns="ns" xmlns:phantom="ns"><item name="foo">text</item></doc>'
+ )
+ assert_equal 'text', doc.text( "/doc/item[@name='foo']" )
+ assert_equal "name='foo'",
+ doc.root.elements["item"].attribute("name", "ns").inspect
+ assert_equal "<item name='foo'>text</item>",
+ doc.root.elements["item[@name='foo']"].to_s
+ end
+
+ def test_ticket_135
+ bean_element = REXML::Element.new("bean")
+ textToAdd = "(&#38;(|(memberof=CN=somegroupabcdefgh,OU=OUsucks,DC=hookemhorns,DC=com)(mail=*someco.com))(acct=%u)(!(extraparameter:2.2.222.222222.2.2.222:=2)))"
+ bean_element.add_element("prop", {"key"=> "filter"}).add_text(textToAdd)
+ doc = REXML::Document.new
+ doc.add_element(bean_element)
+
+ REXML::Formatters::Pretty.new(3).write( doc, out = "" )
+
+ assert_equal "<bean>\n <prop key='filter'>\n (&amp;#38;(|(memberof=CN=somegroupabcdefgh,OU=OUsucks,DC=hookemhorns,DC=com)(mail=*someco.com))(acct=%u)(!(extraparameter:2.2.222.222222.2.2.222:=2)))\n </prop>\n</bean>", out
+ end
+
+ def test_ticket_138
+ doc = REXML::Document.new(
+ '<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" ' +
+ 'inkscape:version="0.44" version="1.0"/>'
+ )
+ assert_equal "<svg inkscape:version='0.44' version='1.0' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'/>", doc.root.to_s
+ assert_equal 3, doc.root.attributes.to_a.length
+ end
+
+ def test_empty_doc
+ assert(REXML::Document.new('').children.empty?)
+ end
+end
diff --git a/test/rexml/test_doctype_mixin.rb b/test/rexml/test_doctype_mixin.rb
new file mode 100644
index 0000000000..78014bb5da
--- /dev/null
+++ b/test/rexml/test_doctype_mixin.rb
@@ -0,0 +1,67 @@
+#! /usr/local/bin/ruby
+
+
+require 'test/unit'
+require 'rexml/document'
+
+class TestDoctype < Test::Unit::TestCase
+
+ def setup
+ @sysid = "urn:x-test:sysid1"
+ @notid1 = "urn:x-test:notation1"
+ @notid2 = "urn:x-test:notation2"
+ document_string1 = <<-"XMLEND"
+ <!DOCTYPE r SYSTEM "#{@sysid}" [
+ <!NOTATION n1 SYSTEM "#{@notid1}">
+ <!NOTATION n2 SYSTEM "#{@notid2}">
+ ]>
+ <r/>
+ XMLEND
+ @doctype1 = REXML::Document.new(document_string1).doctype
+
+ @pubid = "TEST_ID"
+ document_string2 = <<-"XMLEND"
+ <!DOCTYPE r PUBLIC "#{@pubid}">
+ <r/>
+ XMLEND
+ @doctype2 = REXML::Document.new(document_string2).doctype
+
+ document_string3 = <<-"XMLEND"
+ <!DOCTYPE r PUBLIC "#{@pubid}" "#{@sysid}">
+ <r/>
+ XMLEND
+ @doctype3 = REXML::Document.new(document_string3).doctype
+
+ end
+
+ def test_public
+ assert_equal(nil, @doctype1.public)
+ assert_equal(@pubid, @doctype2.public)
+ assert_equal(@pubid, @doctype3.public)
+ end
+
+ def test_system
+ assert_equal(@sysid, @doctype1.system)
+ assert_equal(nil, @doctype2.system)
+ assert_equal(@sysid, @doctype3.system)
+ end
+
+ def test_notation
+ assert_equal(@notid1, @doctype1.notation("n1").system)
+ assert_equal(@notid2, @doctype1.notation("n2").system)
+ end
+
+ def test_notations
+ notations = @doctype1.notations
+ assert_equal(2, notations.length)
+ assert_equal(@notid1, find_notation(notations, "n1").system)
+ assert_equal(@notid2, find_notation(notations, "n2").system)
+ end
+
+ def find_notation(notations, name)
+ notations.find { |notation|
+ name == notation.name
+ }
+ end
+
+end
diff --git a/test/rexml/test_elements.rb b/test/rexml/test_elements.rb
new file mode 100644
index 0000000000..e140214f0a
--- /dev/null
+++ b/test/rexml/test_elements.rb
@@ -0,0 +1,107 @@
+require 'test/unit/testcase'
+require 'rexml/document'
+
+class ElementsTester < Test::Unit::TestCase
+ include REXML
+ def test_elements_accessor
+ doc = Document.new '<a><b/><c id="1"/><c id="2"/><d/></a>'
+ assert_equal 'b', doc.root.elements[1].name
+ assert_equal '1', doc.root.elements['c'].attributes['id']
+ assert_equal '2', doc.root.elements[2,'c'].attributes['id']
+ end
+
+ def test_elements_indexing
+ doc = Document.new '<a/>'
+ doc.root.elements[10] = Element.new('b')
+ assert_equal 'b', doc.root.elements[1].name
+ doc.root.elements[1] = Element.new('c')
+ assert_equal 'c', doc.root.elements[1].name
+ doc.root.elements['c'] = Element.new('d')
+ assert_equal 'd', doc.root.elements[1].name
+ end
+
+ def test_elements_delete
+ doc = Document.new '<a><b/><c/><c id="1"/></a>'
+ block = proc { |str|
+ out = ''
+ doc.write out
+ assert_equal str, out
+ }
+ b = doc.root.elements[1]
+ doc.root.elements.delete b
+ block.call( "<a><c/><c id='1'/></a>" )
+ doc.elements.delete("a/c[@id='1']")
+ block.call( '<a><c/></a>' )
+ doc.root.elements.delete 1
+ block.call( '<a/>' )
+ end
+
+ def test_elements_delete_all
+ doc = Document.new '<a><c/><c/><c/><c/></a>'
+ deleted = doc.elements.delete_all 'a/c'
+ assert_equal 4, deleted.size
+ end
+
+ def test_ticket_36
+ doc = Document.new( "<a xmlns:xi='foo'><b><xi:c id='1'/></b><xi:c id='2'/></a>" )
+
+ deleted = doc.root.elements.delete_all( "xi:c" )
+ assert_equal( 1, deleted.size )
+
+ doc = Document.new( "<a xmlns:xi='foo'><b><xi:c id='1'/></b><xi:c id='2'/></a>" )
+ deleted = doc.root.elements.delete_all( "//xi:c" )
+ assert_equal( 2, deleted.size )
+ end
+
+ def test_elements_add
+ a = Element.new 'a'
+ a.elements.add Element.new('b')
+ assert_equal 'b', a.elements[1].name
+ a.elements.add 'c'
+ assert_equal 'c', a.elements[2].name
+ end
+
+ def test_elements_size
+ doc = Document.new '<a>sean<b/>elliott<b/>russell<b/></a>'
+ assert_equal 6, doc.root.size
+ assert_equal 3, doc.root.elements.size
+ end
+
+ def test_elements_each
+ doc = Document.new '<a><b/><c/><d/>sean<b/><c/><d/></a>'
+ count = 0
+ block = proc {|e| count += 1}
+ doc.root.elements.each(&block)
+ assert_equal 6, count
+ count = 0
+ doc.root.elements.each('b', &block)
+ assert_equal 2, count
+ count = 0
+ doc.root.elements.each('child::node()', &block)
+ assert_equal 6, count
+ count = 0
+ XPath.each(doc.root, 'child::node()', &block)
+ assert_equal 7, count
+ end
+
+ def test_elements_to_a
+ doc = Document.new '<a>sean<b/>elliott<c/></a>'
+ assert_equal 2, doc.root.elements.to_a.size
+ assert_equal 2, doc.root.elements.to_a("child::node()").size
+ assert_equal 4, XPath.match(doc.root, "child::node()").size
+ end
+
+ def test_elements_collect
+ doc = Document.new( "<a><b id='1'/><b id='2'/></a>" )
+ r = doc.elements.collect( "/a/b" ) { |e| e.attributes["id"].to_i }
+ assert_equal( [1,2], r )
+ end
+
+ def test_elements_inject
+ doc = Document.new( "<a><b id='1'/><b id='2'/></a>" )
+ r = doc.elements.inject( "/a/b", 3 ) { |s, e|
+ s + e.attributes["id"].to_i
+ }
+ assert_equal 6, r
+ end
+end
diff --git a/test/rexml/test_encoding.rb b/test/rexml/test_encoding.rb
new file mode 100644
index 0000000000..c83c0622ef
--- /dev/null
+++ b/test/rexml/test_encoding.rb
@@ -0,0 +1,92 @@
+# coding: binary
+require "test/unit/testcase"
+
+require 'rexml/source'
+
+class EncodingTester < Test::Unit::TestCase
+ include REXML
+
+ TEST_DIR="test/data"
+
+ def setup
+ @encoded = "<?xml version='1.0' encoding='ISO-8859-3'?>"+
+ "<a><b>\346</b></a>"
+ @not_encoded = "<a><b>ĉ</b></a>"
+ end
+
+ # Given an encoded document, try to write out to that encoding
+ def test_encoded_in_encoded_out
+ doc = Document.new( @encoded )
+ doc.write( out="" )
+ out.force_encoding('binary') if out.respond_to? :force_encoding
+ assert_equal( @encoded, out )
+ end
+
+ # Given an encoded document, try to change the encoding and write it out
+ def test_encoded_in_change_out
+ doc = Document.new( @encoded )
+ doc.xml_decl.encoding = "UTF-8"
+ assert_equal( doc.encoding, "UTF-8" )
+ REXML::Formatters::Default.new.write( doc.root, out="" )
+ out.force_encoding('binary') if out.respond_to? :force_encoding
+ assert_equal( @not_encoded, out )
+ char = XPath.first( doc, "/a/b/text()" ).to_s
+ char.force_encoding('binary') if char.respond_to? :force_encoding
+ assert_equal( "ĉ", char )
+ end
+
+ # * Given an encoded document, try to write it to a different encoding
+ def test_encoded_in_different_out
+ doc = Document.new( @encoded )
+ REXML::Formatters::Default.new.write( doc.root, Output.new( out="", "UTF-8" ) )
+ out.force_encoding('binary') if out.respond_to? :force_encoding
+ assert_equal( @not_encoded, out )
+ end
+
+ # * Given a non-encoded document, change the encoding
+ def test_in_change_out
+ doc = Document.new( @not_encoded )
+ doc.xml_decl.encoding = "ISO-8859-3"
+ assert_equal( doc.encoding, "ISO-8859-3" )
+ doc.write( out="" )
+ out.force_encoding('binary') if out.respond_to? :force_encoding
+ assert_equal( @encoded, out )
+ end
+
+ # * Given a non-encoded document, write to a different encoding
+ def test_in_different_out
+ doc = Document.new( @not_encoded )
+ doc.write( Output.new( out="", "ISO-8859-3" ) )
+ out.force_encoding('binary') if out.respond_to? :force_encoding
+ assert_equal( @encoded, out )
+ end
+
+ # * Given an encoded document, accessing text and attribute nodes
+ # should provide UTF-8 text.
+ def test_in_different_access
+ doc = Document.new <<-EOL
+ <?xml version='1.0' encoding='ISO-8859-1'?>
+ <a a="ÿ">ÿ</a>
+ EOL
+ expect = "\303\277"
+ expect.force_encoding('UTF-8') if expect.respond_to? :force_encoding
+ assert_equal( expect, doc.elements['a'].attributes['a'] )
+ assert_equal( expect, doc.elements['a'].text )
+ end
+
+
+ def test_ticket_89
+ doc = Document.new <<-EOL
+ <?xml version="1.0" encoding="CP-1252" ?>
+ <xml><foo></foo></xml>
+ EOL
+
+ REXML::Document.new doc
+ end
+
+ def test_ticket_110
+ utf16 = REXML::Document.new(File.new(File.join(TEST_DIR,"ticket_110_utf16.xml")))
+ assert_equal( "UTF-16", utf16.encoding )
+ assert( utf16[0].kind_of?(REXML::XMLDecl))
+ end
+end
diff --git a/test/rexml/test_encoding_2.rb b/test/rexml/test_encoding_2.rb
new file mode 100644
index 0000000000..5dbe46801b
--- /dev/null
+++ b/test/rexml/test_encoding_2.rb
@@ -0,0 +1,59 @@
+require "test/unit/testcase"
+
+require "rexml/document"
+require "rexml/parseexception"
+
+=begin
+# THIS DOESN'T WORK
+begin
+ require 'iconv'
+
+ UnixCharsets = open("| iconv -l") do |f|
+ f.readlines[5..-1].collect { |x| x.sub(/\/\/\n/,"").delete(' ') }
+ end
+
+ DATA = <<END
+<?xml version="1.0" encoding='ENC'?>
+<Ruby xmlns="http://www.ruby-lang.org/ruby/1.8">
+</Ruby>
+END
+
+
+ class IConvTester < Test::Unit::TestCase
+
+ def test_iconv
+ broken_encodings = 0
+ UnixCharsets.each do |enc|
+ begin
+ puts "Testing encoding #{enc}"
+ data = DATA.dup
+ data[/ENC/] = enc
+ REXML::Document.new(data).root
+ rescue REXML::ParseException => e
+ broken_encodings += 1
+ fail "Encoding #{enc} does not work with REXML: #{e.message}"
+ rescue Errno::EINVAL => e
+ broken_encodings += 1
+ fail "Encoding #{enc} does not work with REXML: #{e.message}"
+ rescue ArgumentError => e
+ broken_encodings += 1
+ fail "Encoding #{enc} does not work with REXML: #{e.message}"
+ rescue
+ broken_encodings += 1
+ fail "Encoding #{enc} does not work with REXML: #{$!.message}"
+ end
+ end
+
+ if broken_encodings > 0
+ fail "There were #{broken_encodings} encoding failures out of #{UnixCharsets.size} plus some REXML internal encodings"
+ else
+ fail "There were no encoding failures"
+ end
+
+ puts "Full list of registered encodings in REXML:"
+ puts REXML::Encoding::ENCODING_CLAIMS.values.join(', ')
+ end
+ end
+rescue LoadError
+end
+=end
diff --git a/test/rexml/test_entity.rb b/test/rexml/test_entity.rb
new file mode 100644
index 0000000000..3895cdce31
--- /dev/null
+++ b/test/rexml/test_entity.rb
@@ -0,0 +1,148 @@
+require "test/unit/testcase"
+
+require 'rexml/entity'
+require 'rexml/source'
+
+class EntityTester < Test::Unit::TestCase
+ def test_parse_general_decl
+ simple = "<!ENTITY foo 'bar'>"
+ simple =~ /#{REXML::Entity::GEDECL}/
+ assert $&
+ assert_equal simple, $&
+
+ REXML::Entity::ENTITYDECL =~ simple
+ assert REXML::Entity::matches?(simple)
+ match = REXML::Entity::ENTITYDECL.match(simple)
+ assert_equal 'foo', match[1]
+ assert_equal "'bar'", match[2]
+
+ simple = '<!ENTITY Pub-Status
+ "This is a pre-release of the specification.">'
+ assert REXML::Entity::matches?(simple)
+ match = REXML::Entity::ENTITYDECL.match(simple)
+ assert_equal 'Pub-Status', match[1]
+ assert_equal '"This is a pre-release of the specification."', match[2]
+
+ txt = '"This is a
+ pre-release of <the> specification."'
+ simple = "<!ENTITY Pub-Status
+ #{txt}>"
+ assert REXML::Entity::matches?(simple)
+ match = REXML::Entity::ENTITYDECL.match(simple)
+ assert_equal 'Pub-Status', match[1]
+ assert_equal txt, match[2]
+ end
+
+ def test_parse_external_decl
+ zero = '<!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml" >'
+ one = '<!ENTITY open-hatch
+ SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">'
+ two = '<!ENTITY open-hatch
+ PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
+ "http://www.textuality.com/boilerplate/OpenHatch.xml">'
+ three = '<!ENTITY hatch-pic
+ SYSTEM "../grafix/OpenHatch.gif"
+ NDATA gif >'
+ assert REXML::Entity::matches?(zero)
+ assert REXML::Entity::matches?(one)
+ assert REXML::Entity::matches?(two)
+ assert REXML::Entity::matches?(three)
+ end
+
+ def test_parse_entity
+ one = %q{<!ENTITY % YN '"Yes"'>}
+ two = %q{<!ENTITY WhatHeSaid "He said %YN;">}
+ assert REXML::Entity::matches?(one)
+ assert REXML::Entity::matches?(two)
+ end
+
+ def test_constructor
+ one = [ %q{<!ENTITY % YN '"Yes"'>},
+ %q{<!ENTITY % YN2 "Yes">},
+ %q{<!ENTITY WhatHeSaid "He said %YN;">},
+ '<!ENTITY open-hatch
+ SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">',
+ '<!ENTITY open-hatch2
+ PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
+ "http://www.textuality.com/boilerplate/OpenHatch.xml">',
+ '<!ENTITY hatch-pic
+ SYSTEM "../grafix/OpenHatch.gif"
+ NDATA gif>' ]
+ source = %q{<!DOCTYPE foo [
+ <!ENTITY % YN '"Yes"'>
+ <!ENTITY % YN2 "Yes">
+ <!ENTITY WhatHeSaid "He said %YN;">
+ <!ENTITY open-hatch
+ SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
+ <!ENTITY open-hatch2
+ PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
+ "http://www.textuality.com/boilerplate/OpenHatch.xml">
+ <!ENTITY hatch-pic
+ SYSTEM "../grafix/OpenHatch.gif"
+ NDATA gif>
+ ]>}
+
+ d = REXML::Document.new( source )
+ dt = d.doctype
+ c = 0
+ dt.each do |child|
+ if child.kind_of? REXML::Entity
+ str = one[c].tr("\r\n\t", ' ').squeeze(" ")
+ assert_equal str, child.to_s
+ c+=1
+ end
+ end
+ end
+
+ def test_replace_entities
+ source = "<!DOCTYPE blah [\n<!ENTITY foo \"bar\">\n]><a>&foo;</a>"
+ doc = REXML::Document.new(source)
+ assert_equal 'bar', doc.root.text
+ out = ''
+ doc.write out
+ assert_equal source, out
+ end
+
+ def test_raw
+ source = '<!DOCTYPE foo [
+<!ENTITY ent "replace">
+]><a>replace &ent;</a>'
+ doc = REXML::Document.new( source, {:raw=>:all})
+ assert_equal('replace &ent;', doc.root.get_text.to_s)
+ assert_equal(source, doc.to_s)
+ end
+
+ def test_lazy_evaluation
+ source = '<!DOCTYPE foo [
+<!ENTITY ent "replace">
+]><a>replace &ent;</a>'
+ doc = REXML::Document.new( source )
+ assert_equal(source, doc.to_s)
+ assert_equal("replace replace", doc.root.text)
+ assert_equal(source, doc.to_s)
+ end
+
+ # Contributed (not only test, but bug fix!!) by Kouhei Sutou
+ def test_entity_replacement
+ source = %q{<!DOCTYPE foo [
+ <!ENTITY % YN '"Yes"'>
+ <!ENTITY WhatHeSaid "He said %YN;">]>
+ <a>&WhatHeSaid;</a>}
+
+ d = REXML::Document.new( source )
+ dt = d.doctype
+ assert_equal( '"Yes"', dt.entities[ "YN" ].value )
+ assert_equal( 'He said "Yes"', dt.entities[ "WhatHeSaid" ].value )
+ assert_equal( 'He said "Yes"', d.elements[1].text )
+ end
+
+ # More unit tests from Kouhei. I looove users who give me unit tests.
+ def test_entity_insertions
+ assert_equal("&amp;", REXML::Text.new("&amp;", false, nil, true).to_s)
+ #assert_equal("&", REXML::Text.new("&amp;", false, false).to_s)
+ end
+
+ def test_single_pass_unnormalization # ticket 123
+ assert_equal '&amp;&', REXML::Text::unnormalize('&#38;amp;&amp;')
+ end
+end
diff --git a/test/rexml/test_functions.rb b/test/rexml/test_functions.rb
new file mode 100644
index 0000000000..eac36d5278
--- /dev/null
+++ b/test/rexml/test_functions.rb
@@ -0,0 +1,223 @@
+require "test/unit/testcase"
+
+require "rexml/document"
+
+class FunctionsTester < Test::Unit::TestCase
+ include REXML
+ def test_functions
+ # trivial text() test
+ # confuse-a-function
+ source = "<a>more <b id='1'/><b id='2'>dumb</b><b id='3'/><c/> text</a>"
+ doc = Document.new source
+ res = ""
+ XPath::each(doc.root, "text()") {|val| res << val.to_s}
+ assert_equal "more text", res
+
+ res = XPath::first(doc.root, "b[last()]")
+ assert_equal '3', res.attributes['id']
+ res = XPath::first(doc.root, "b[position()=2]")
+ assert_equal '2', res.attributes['id']
+ res = XPath::first(doc.root, "*[name()='c']")
+ assert_equal "c", res.name
+ end
+
+ # Contributed by Mike Stok
+ def test_starts_with
+ source = <<-EOF
+ <foo>
+ <a href="mailto:a@b.c">a@b.c</a>
+ <a href="http://www.foo.com">http://www.foo.com</a>
+ </foo>
+ EOF
+ doc = Document.new source
+ mailtos = doc.elements.to_a("//a[starts-with(@href, 'mailto:')]")
+ assert_equal 1, mailtos.size
+ assert_equal "mailto:a@b.c", mailtos[0].attributes['href']
+
+ ailtos = doc.elements.to_a("//a[starts-with(@href, 'ailto:')]")
+ assert_equal 0, ailtos.size
+ end
+
+ def test_string_length
+ doc = Document.new <<-EOF
+ <AAA>
+ <Q/>
+ <SSSS/>
+ <BB/>
+ <CCC/>
+ <DDDDDDDD/>
+ <EEEE/>
+ </AAA>
+ EOF
+ assert doc, "create doc"
+
+ set = doc.elements.to_a("//*[string-length(name()) = 3]")
+ assert_equal 2, set.size, "nodes with names length = 3"
+
+ set = doc.elements.to_a("//*[string-length(name()) < 3]")
+ assert_equal 2, set.size, "nodes with names length < 3"
+
+ set = doc.elements.to_a("//*[string-length(name()) > 3]")
+ assert_equal 3, set.size, "nodes with names length > 3"
+ end
+
+ # Test provided by Mike Stok
+ def test_contains
+ source = <<-EOF
+ <foo>
+ <a href="mailto:a@b.c">a@b.c</a>
+ <a href="http://www.foo.com">http://www.foo.com</a>
+ </foo>
+ EOF
+ doc = Document.new source
+
+ [['o', 2], ['foo', 1], ['bar', 0]].each { |test|
+ search, expected = test
+ set = doc.elements.to_a("//a[contains(@href, '#{search}')]")
+ assert_equal expected, set.size
+ }
+ end
+
+ # Mike Stok and Sean Russell
+ def test_substring
+ # examples from http://www.w3.org/TR/xpath#function-substring
+ doc = Document.new('<test string="12345" />')
+
+ d = Document.new("<a b='1'/>")
+ #puts XPath.first(d, 'node()[0 + 1]')
+ #d = Document.new("<a b='1'/>")
+ #puts XPath.first(d, 'a[0 mod 0]')
+ [ [1.5, 2.6, '234'],
+ [0, 3, '12'],
+ [0, '0 div 0', ''],
+ [1, '0 div 0', ''],
+ ['-42', '1 div 0', '12345'],
+ ['-1 div 0', '1 div 0', '']
+ ].each { |start, length, expected|
+ set = doc.elements.to_a("//test[substring(@string, #{start}, #{length}) = '#{expected}']")
+ assert_equal 1, set.size, "#{start}, #{length}, '#{expected}'"
+ }
+ end
+
+ def test_substring_angrez
+ testString = REXML::Functions::substring_after("helloworld","hello")
+ assert_equal( 'world', testString )
+ end
+
+ def test_translate
+ source = <<-EOF
+ <doc>
+ <case name='w3c one' result='BAr' /> <!-- w3c -->
+ <case name='w3c two' result='AAA' /> <!-- w3c -->
+ <case name='alchemy' result="gold" /> <!-- mike -->
+ <case name='vbxml one' result='A Space Odyssey' />
+ <case name='vbxml two' result='AbCdEf' />
+ </doc>
+ EOF
+
+ doc = Document.new(source)
+
+ [ ['bar', 'abc', 'ABC', 'w3c one'],
+ ['--aaa--','abc-','ABC', 'w3c two'],
+ ['lead', 'dear language', 'doll groover', 'alchemy'],
+ ['A Space Odissei', 'i', 'y', 'vbxml one'],
+ ['abcdefg', 'aceg', 'ACE', 'vbxml two'],
+ ].each { |arg1, arg2, arg3, name|
+ translate = "translate('#{arg1}', '#{arg2}', '#{arg3}')"
+ set = doc.elements.to_a("//case[@result = #{translate}]")
+ assert_equal 1, set.size, translate
+ assert_equal name, set[0].attributes['name']
+ }
+ end
+
+ def test_name
+ d = REXML::Document.new("<a xmlns:x='foo'><b/><x:b/></a>")
+ assert_equal 1, d.root.elements.to_a('*[name() = "b"]').size
+ assert_equal 1, d.elements.to_a('//*[name() = "x:b"]').size
+ end
+
+ def test_local_name
+ d = REXML::Document.new("<a xmlns:x='foo'><b/><x:b/></a>")
+ assert_equal 2, d.root.elements.to_a('*[local_name() = "b"]').size
+ assert_equal 2, d.elements.to_a('//*[local_name() = "b"]').size
+ end
+
+ def test_substring2
+ doc = Document.new('<test string="12345" />')
+ assert_equal(1,doc.elements.to_a("//test[substring(@string,2)='2345']").size)
+ end
+
+ # Submitted by Kouhei
+ def test_floor_ceiling_round
+ source = "<a><b id='1'/><b id='2'/><b id='3'/></a>"
+ doc = REXML::Document.new(source)
+
+ id_1 = doc.elements["/a/b[@id='1']"]
+ id_2 = doc.elements["/a/b[@id='2']"]
+ id_3 = doc.elements["/a/b[@id='3']"]
+
+ good = {
+ "floor" => [[], [id_1], [id_2], [id_3]],
+ "ceiling" => [[id_1], [id_2], [id_3], []],
+ "round" => [[id_1], [id_2], [id_3], []]
+ }
+ good.each do |key, value|
+ (0..3).each do |i|
+ xpath = "//b[number(@id) = #{key}(#{i+0.5})]"
+ assert_equal(value[i], REXML::XPath.match(doc, xpath))
+ end
+ end
+
+ good["round"] = [[], [id_1], [id_2], [id_3]]
+ good.each do |key, value|
+ (0..3).each do |i|
+ xpath = "//b[number(@id) = #{key}(#{i+0.4})]"
+ assert_equal(value[i], REXML::XPath.match(doc, xpath))
+ end
+ end
+ end
+
+ # Submitted by Kou
+ def test_lang
+ d = Document.new(<<-XML)
+ <a xml:lang="en">
+ <b xml:lang="ja">
+ <c xml:lang="fr"/>
+ <d/>
+ <e xml:lang="ja-JP"/>
+ <f xml:lang="en-US"/>
+ </b>
+ </a>
+ XML
+
+ assert_equal(1, d.elements.to_a("//*[lang('fr')]").size)
+ assert_equal(3, d.elements.to_a("//*[lang('ja')]").size)
+ assert_equal(2, d.elements.to_a("//*[lang('en')]").size)
+ assert_equal(1, d.elements.to_a("//*[lang('en-us')]").size)
+
+ d = Document.new(<<-XML)
+ <root>
+ <para xml:lang="en"/>
+ <div xml:lang="en"><para/></div>
+ <para xml:lang="EN"/>
+ <para xml:lang="en-us"/>
+ </root>
+ XML
+
+ assert_equal(5, d.elements.to_a("//*[lang('en')]").size)
+ end
+
+ def test_ticket_60
+ document = REXML::Document.new("<a><b>A</b><b>1</b></a>")
+ assert_equal( "A", REXML::XPath.first(document, '//b[.="A"]').text )
+ assert_equal( "1", REXML::XPath.first(document, '//b[.="1"]').text )
+ end
+
+ def test_normalize_space
+ source = "<a><!--COMMENT A--><b><!-- COMMENT A --></b></a>"
+ doc = REXML::Document.new(source)
+ predicate = "string(.)=normalize_space('\nCOMMENT \n A \n\n ')"
+ m = REXML::XPath.match(doc, "//comment()[#{predicate}]")
+ assert_equal( [REXML::Comment.new("COMMENT A")], m )
+ end
+end
diff --git a/test/rexml/test_functions_number.rb b/test/rexml/test_functions_number.rb
new file mode 100644
index 0000000000..e569ce4cb0
--- /dev/null
+++ b/test/rexml/test_functions_number.rb
@@ -0,0 +1,32 @@
+require 'rexml/document'
+require 'test/unit'
+require 'rexml/functions'
+
+class TC_Rexml_Functions_Number < Test::Unit::TestCase
+
+ def test_functions_number_int
+ telem = REXML::Element.new("elem")
+ telem.text="9"
+ assert_equal(9, REXML::Functions::number(telem))
+ end
+ def test_functions_number_float
+ telem = REXML::Element.new("elem")
+ telem.text="10.4"
+ assert_equal(10.4, REXML::Functions::number(telem))
+ end
+ def test_functions_number_negative_int
+ telem = REXML::Element.new("elem")
+ telem.text="-9"
+ assert_equal(-9, REXML::Functions::number(telem))
+ end
+ def test_functions_number_negative_float
+ telem = REXML::Element.new("elem")
+ telem.text="-9.13"
+ assert_equal(-9.13, REXML::Functions::number(telem))
+ end
+ #def test_functions_number_scientific_notation
+ # telem = REXML::Element.new("elem")
+ # telem.text="9.13E12"
+ # assert_equal(9.13E12, REXML::Functions::number(telem))
+ #end
+end
diff --git a/test/rexml/test_jaxen.rb b/test/rexml/test_jaxen.rb
new file mode 100644
index 0000000000..47e631ee13
--- /dev/null
+++ b/test/rexml/test_jaxen.rb
@@ -0,0 +1,126 @@
+require "rexml/document"
+require "rexml/xpath"
+require 'test/unit/testcase'
+
+# Harness to test REXML's capabilities against the test suite from Jaxen
+# ryan.a.cox@gmail.com
+
+class JaxenTester < Test::Unit::TestCase
+ include REXML
+
+ def test_axis ; test("axis") ; end
+ def test_basic ; test("basic") ; end
+ def test_basicupdate ; test("basicupdate") ; end
+ def test_contents ; test("contents") ; end
+ def test_defaultNamespace ; test("defaultNamespace") ; end
+ def test_fibo ; test("fibo") ; end
+ def test_id ; test("id") ; end
+ def test_jaxen24 ; test("jaxen24") ; end
+ def test_lang ; test("lang") ; end
+ def test_message ; test("message") ; end
+ def test_moreover ; test("moreover") ; end
+ def test_much_ado ; test("much_ado") ; end
+ def test_namespaces ; test("namespaces") ; end
+ def test_nitf ; test("nitf") ; end
+ def test_numbers ; test("numbers") ; end
+ def test_pi ; test("pi") ; end
+ def test_pi2 ; test("pi2") ; end
+ def test_simple ; test("simple") ; end
+ def test_testNamespaces ; test("testNamespaces") ; end
+ def test_text ; test("text") ; end
+ def test_underscore ; test("underscore") ; end
+ def test_web ; test("web") ; end
+ def test_web2 ; test("web2") ; end
+
+ def test( fname )
+ xml_dir = "test/data"
+# Dir.entries( xml_dir ).each { |fname|
+# if fname =~ /\.xml$/
+ file = File.new( File.join( xml_dir, fname+".xml" ))
+ doc = Document.new( file )
+ XPath.each( doc, "/tests/document" ) {|e| handleDocument(e)}
+# end
+# }
+ end
+
+ private
+
+ # processes a tests/document/context node
+ def handleContext( testDoc, ctxElement)
+ testCtx = XPath.match( testDoc, ctxElement.attributes["select"] )[0]
+ namespaces = {}
+ if testCtx.class == Element
+ testCtx.prefixes.each { |pre| handleNamespace( testCtx, pre, namespaces ) }
+ end
+ variables = {}
+ XPath.each( ctxElement, "@*[namespace-uri() = 'http://jaxen.org/test-harness/var']") { |attrib| handleVariable(testCtx, variables, attrib) }
+ XPath.each( ctxElement, "valueOf") { |e| handleValueOf(testCtx, variables, namespaces, e) }
+ XPath.each( ctxElement, "test[not(@exception) or (@exception != 'true') ]") { |e| handleNominalTest(testCtx,variables, namespaces, e) }
+ XPath.each( ctxElement, "test[@exception = 'true']") { |e| handleExceptionalTest(testCtx,variables, namespaces, e) }
+ end
+
+ # processes a tests/document/context/valueOf or tests/document/context/test/valueOf node
+ def handleValueOf(ctx,variables, namespaces, valueOfElement)
+ expected = valueOfElement.text
+ got = XPath.match( ctx, valueOfElement.attributes["select"], namespaces, variables )[0]
+ assert_true( (got.nil? && expected.nil?) || !got.nil? )
+ case got.class
+ when Element
+ assert_equal( got.class, Element )
+ when Attribute, Text, Comment, TrueClass, FalseClass
+ assert_equal( expected, got.to_s )
+ when Instruction
+ assert_equal( expected, got.content )
+ when Fixnum
+ assert_equal( exected.to_f, got )
+ when String
+ # normalize values for comparison
+ got = "" if got == nil or got == ""
+ expected = "" if expected == nil or expected == ""
+ assert_equal( expected, got )
+ else
+ assert_fail( "Wassup?" )
+ end
+ end
+
+
+ # processes a tests/document/context/test node ( where @exception is false or doesn't exist )
+ def handleNominalTest(ctx, variables, namespaces, testElement)
+ expected = testElement.attributes["count"]
+ got = XPath.match( ctx, testElement.attributes["select"], namespaces, variables )
+ # might be a test with no count attribute, but nested valueOf elements
+ assert( expected == got.size.to_s ) if !expected.nil?
+
+ XPath.each( testElement, "valueOf") { |e|
+ handleValueOf(got, variables, namespaces, e)
+ }
+ end
+
+ # processes a tests/document/context/test node ( where @exception is true )
+ def handleExceptionalTest(ctx, variables, namespaces, testElement)
+ assert_raise( Exception ) {
+ XPath.match( ctx, testElement.attributes["select"], namespaces, variables )
+ }
+ end
+
+ # processes a tests/document node
+ def handleDocument(docElement)
+ puts "- Processing document: #{docElement.attributes['url']}"
+ testFile = File.new( docElement.attributes["url"] )
+ testDoc = Document.new testFile
+ XPath.each( docElement, "context") { |e| handleContext(testDoc, e) }
+ end
+
+ # processes a variable definition in a namespace like <test var:foo="bar">
+ def handleVariable( ctx, variables, attrib )
+ puts "--- Found attribute: #{attrib.name}"
+ variables[attrib.name] = attrib.value
+ end
+
+ # processes a namespace definition like <test xmlns:foo="fiz:bang:bam">
+ def handleNamespace( ctx, prefix, namespaces )
+ puts "--- Found namespace: #{prefix}"
+ namespaces[prefix] = ctx.namespaces[prefix]
+ end
+
+end
diff --git a/test/rexml/test_light.rb b/test/rexml/test_light.rb
new file mode 100644
index 0000000000..d0979c84da
--- /dev/null
+++ b/test/rexml/test_light.rb
@@ -0,0 +1,101 @@
+require "test/unit/testcase"
+require "rexml/light/node"
+require "rexml/parsers/lightparser"
+
+include REXML::Light
+
+class LightTester < Test::Unit::TestCase
+ def test_parse_large
+ parser = REXML::Parsers::LightParser.new( File.new( "test/data/documentation.xml" ) )
+ root = parser.parse
+ end
+
+ # FIXME INCOMPLETE
+ # This is because the light API is not yet ready to be used to produce
+ # trees.
+=begin
+ def test_add_element
+ doc = Node.new
+ foo = doc.add_element( 'foo' )
+ assert_equal( "foo", foo.name )
+ end
+
+ def test_add_attribute
+ foo = Node.new( "a" )
+ foo["attr"] = "bar"
+ assert_equal( "bar", foo["attr"] )
+ end
+
+ def test_write_document
+ r = make_small_document
+ assert_equal( "<a><b/><c/></a>", r.to_s )
+ end
+
+ def test_add_attribute_under_namespace
+ foo = Node.new("a")
+ foo["attr", "a"] = "1"
+ foo["attr", "b"] = "2"
+ foo["attr"] = "3"
+ assert_equal( '1', foo['attr', 'a'] )
+ assert_equal( '2', foo['attr', 'b'] )
+ assert_equal( '3', foo['attr'] )
+ end
+
+ def test_change_namespace_of_element
+ foo = Node.new
+ assert_equal( '', foo.namespace )
+ foo.namespace = 'a'
+ assert_equal( 'a', foo.namespace )
+ end
+
+ def test_access_child_elements
+ foo = make_small_document
+ assert_equal( 1, foo.size )
+ a = foo[0]
+ assert_equal( 2, a.size )
+ assert_equal( 'b', a[0].name )
+ assert_equal( 'c', a[1].name )
+ end
+
+ def test_itterate_over_children
+ foo = make_small_document
+ ctr = 0
+ foo[0].each { ctr += 1 }
+ assert_equal( 2, ctr )
+ end
+
+ def test_add_text
+ foo = Node.new( "a" )
+ foo.add_text( "Sean" )
+ sean = foo[0]
+ assert( sean.node_type == :text )
+ end
+
+ def test_add_instruction
+ foo = Node.new( "a" )
+ foo.add_instruction( "target", "value" )
+ assert( foo[0].node_type == :processing_instruction )
+ end
+
+ def test_add_comment
+ foo = Node.new( "a" )
+ foo.add_comment( "target", "value" )
+ assert( foo[0].node_type == :comment )
+ end
+
+ def test_get_root
+ foo = Node.new( 'a' )
+ 10.times { foo = foo.add_element('b') }
+ assert_equals( 'b', foo.name )
+ assert_equals( 'a', foo.root.name )
+ end
+
+ def make_small_document
+ r = Node.new
+ a = r.add_element( "a" )
+ a.add_element( 'b' )
+ a.add_element( 'c' )
+ r
+ end
+=end
+end
diff --git a/test/rexml/test_lightparser.rb b/test/rexml/test_lightparser.rb
new file mode 100644
index 0000000000..14dcdc21e7
--- /dev/null
+++ b/test/rexml/test_lightparser.rb
@@ -0,0 +1,11 @@
+require 'test/unit/testcase'
+require 'rexml/parsers/lightparser'
+
+class LightParserTester < Test::Unit::TestCase
+ include REXML
+ def test_parsing
+ f = File.new( "test/data/documentation.xml" )
+ parser = REXML::Parsers::LightParser.new( f )
+ root = parser.parse
+ end
+end
diff --git a/test/rexml/test_listener.rb b/test/rexml/test_listener.rb
new file mode 100644
index 0000000000..645b857055
--- /dev/null
+++ b/test/rexml/test_listener.rb
@@ -0,0 +1,207 @@
+# coding: binary
+require 'test/unit/testcase'
+require 'rexml/document'
+require 'rexml/streamlistener'
+
+class BaseTester < Test::Unit::TestCase
+ def test_empty
+ return unless defined? @listener
+ # Empty.
+ t1 = %Q{<string></string>}
+ assert_equal( "", @listener.parse( t1 ),
+ "Empty" )
+ end
+
+ def test_space
+ return unless defined? @listener
+ # Space.
+ t2 = %Q{<string> </string>}
+ assert_equal( " ", @listener.parse( t2 ),
+ "Space" )
+ end
+
+ def test_whitespace
+ return unless defined? @listener
+ # Whitespaces.
+ t3 = %Q{<string>RE\n \t \n \t XML</string>}
+ assert_equal( "RE\n \t \n \t XML", @listener.parse( t3 ),
+ "Whitespaces" )
+ end
+
+ def test_leading_trailing_whitespace
+ return unless defined? @listener
+ # Leading and trailing whitespaces.
+ t4 = %Q{<string> REXML </string>}
+ assert_equal( " REXML ", @listener.parse( t4 ),
+ "Leading and trailing whitespaces" )
+ end
+
+ def test_entity_reference
+ return unless defined? @listener
+ # Entity reference.
+ t5 = %Q{<string>&lt;&gt;&amp;lt;&amp;gt;</string>}
+ assert_equal( "<>&lt;&gt;", @listener.parse( t5 ),
+ "Entity reference" )
+ end
+
+ def test_character_reference
+ return unless defined? @listener
+ # Character reference.
+ t6 = %Q{<string>&#xd;</string>}
+ assert_equal( "\r", @listener.parse( t6 ),
+ "Character reference." )
+ end
+
+ def test_cr
+ return unless defined? @listener
+ # CR.
+ t7 = %Q{<string> \r\n \r \n </string>}
+ assert_equal( " \n \n \n ".unpack("C*").inspect,
+ @listener.parse( t7 ).unpack("C*").inspect, "CR" )
+ end
+
+ # The accent bug, and the code that exibits the bug, was contributed by
+ # Guilhem Vellut
+ class AccentListener
+ def tag_start(name,attributes)
+ #p name
+ #p attributes
+ end
+ def tag_end(name)
+ #p "/"+name
+ end
+ def xmldecl(a,b,c)
+ #puts "#{a} #{b} #{c}"
+ end
+ def text(tx)
+ #p tx
+ end
+ end
+
+ def test_accents
+ source = '<?xml version="1.0" encoding="ISO-8859-1"?>
+<g>
+<f a="é" />
+</g>'
+ doc = REXML::Document.new( source )
+ a = doc.elements['/g/f'].attribute('a')
+ if a.value.respond_to? :force_encoding
+ a.value.force_encoding('binary')
+ end
+ assert_equal( 'é', a.value)
+ doc = REXML::Document.parse_stream(
+ File::new("test/data/stream_accents.xml"),
+ AccentListener::new
+ )
+ end
+end
+
+#########################################################
+# Other parsers commented out because they cause failures
+# in the unit tests, which aren't REXMLs problems
+# #######################################################
+=begin
+begin
+ require 'xmlparser'
+ class MyXMLParser
+ class Listener < XML::Parser
+ # Dummy handler to get XML::Parser::XML_DECL event.
+ def xmlDecl; end
+ end
+
+ def parse( stringOrReadable )
+ text = ""
+ Listener.new.parse( stringOrReadable ) do | type, name, data |
+ case type
+ when XML::Parser::CDATA
+ text << data
+ end
+ end
+ text
+ end
+ end
+
+ class XMLParserTester < BaseTester
+ def setup
+ @listener = MyXMLParser.new
+ end
+ end
+rescue LoadError
+ #puts "XMLParser not available"
+end
+
+begin
+ require 'nqxml/tokenizer'
+ class MyNQXMLLightWeightListener
+ def parse( stringOrReadable )
+ text = ""
+ isText = false
+ tokenizer = NQXML::Tokenizer.new( stringOrReadable )
+ tokenizer.each do | entity |
+ case entity
+ when NQXML::Tag
+ if !entity.isTagEnd
+ isText = true
+ else
+ isText = false
+ end
+ when NQXML::Text
+ if isText
+ text << entity.text
+ isText = false
+ end
+ end
+ end
+ text
+ end
+ end
+
+ class NQXMLTester < BaseTester
+ def setup
+ @listener = MyNQXMLLightWeightListener.new
+ end
+ end
+rescue LoadError
+ #puts "NQXML not available"
+end
+=end
+
+class MyREXMLListener
+ include REXML::StreamListener
+
+ def initialize
+ @text = nil
+ end
+
+ def parse( stringOrReadable )
+ @text = ""
+ REXML::Document.parse_stream( stringOrReadable, self )
+ @text
+ end
+
+ def text( text )
+ @text << text
+ end
+end
+
+class REXMLTester < BaseTester
+ def setup
+ @listener = MyREXMLListener.new
+ end
+
+ def test_character_reference_2
+ t6 = %Q{<string>&#xd;</string>}
+ assert_equal( t6.strip, REXML::Document.new(t6).to_s )
+ end
+end
+
+if __FILE__ == $0
+ case ARGV[0]
+ when 'NQXML'
+ RUNIT::CUI::TestRunner.run( NQXMLTester.suite )
+ when 'XMLParser'
+ RUNIT::CUI::TestRunner.run( XMLParserTester.suite )
+ else
+ RUNIT::CUI::TestRunner.run( REXMLTester.suite )
+ end
+end
diff --git a/test/rexml/test_martin_fowler.rb b/test/rexml/test_martin_fowler.rb
new file mode 100644
index 0000000000..bdbf487ed4
--- /dev/null
+++ b/test/rexml/test_martin_fowler.rb
@@ -0,0 +1,38 @@
+require 'test/unit'
+require 'rexml/document'
+
+class OrderTester < Test::Unit::TestCase
+ def initialize n
+ @doc = REXML::Document.new(DOC)
+ @figs = REXML::XPath.match(@doc,'//figure')
+ @names = @figs.collect {|f| f.attributes['src']}
+ super
+ end
+ def test_fig1
+ assert_equal 'fig1', @figs[0].attributes['src']
+ end
+ def test_fig2
+ assert_equal 'fig2', @figs[1].attributes['src']
+ end
+ def test_fig3
+ assert_equal 'fig3', @figs[2].attributes['src']
+ end
+ def test_fig4
+ assert_equal 'fig4', @figs[3].attributes['src']
+ end
+end
+
+
+DOC = <<END
+<paper>
+<title>Remove this element and figs order differently</title>
+<figure src="fig1"/>
+<figure src="fig2"/>
+<p>Para of text</p>
+<p>Remove this and figs order differently</p>
+<section>
+<figure src="fig3"/>
+</section>
+<figure src="fig4"/>
+</paper>
+END
diff --git a/test/rexml/test_notationdecl_mixin.rb b/test/rexml/test_notationdecl_mixin.rb
new file mode 100644
index 0000000000..d5212534c1
--- /dev/null
+++ b/test/rexml/test_notationdecl_mixin.rb
@@ -0,0 +1,58 @@
+#! /usr/local/bin/ruby
+
+
+require 'test/unit'
+require 'rexml/document'
+
+class TestNotationDeclMixin < Test::Unit::TestCase
+ def setup
+ @pubid1 = "TEST1"
+ @pubid2 = "TEST2"
+ @sysid2 = "urn:x-henrikmartensson.org:test2"
+ @pubid3 = "TEST3"
+ @pubid4 = "TEST4"
+ @sysid4 = "urn:x-henrikmartensson.org:test4"
+ @pubid5 = "TEST5"
+ @sysid5 = "urn:x-henrikmartensson.org:test5"
+ @pubid6 = "TEST6"
+ @sysid6 = "urn:x-henrikmartensson.org:test6"
+ @sysid7 = "urn:x-henrikmartensson.org:test7"
+ doc_string = <<-"XMLEND"
+ <!DOCTYPE r SYSTEM "urn:x-henrikmartensson:test" [
+ <!NOTATION n1 PUBLIC "#{@pubid1}">
+ <!NOTATION n2 PUBLIC "#{@pubid2}" "#{@sysid2}">
+ <!NOTATION n3 PUBLIC '#{@pubid3}'>
+ <!NOTATION n4 PUBLIC '#{@pubid4}' '#{@sysid4}'>
+ <!NOTATION n5 PUBLIC "#{@pubid5}" '#{@sysid5}'>
+ <!NOTATION n6 PUBLIC '#{@pubid6}' "#{@sysid6}">
+ <!NOTATION n7 SYSTEM "#{@sysid7}">
+ ]>
+ <r/>
+ XMLEND
+ @doctype = REXML::Document.new(doc_string).doctype
+ end
+
+ def test_name
+ assert_equal('n1', @doctype.notation('n1').name)
+ end
+
+ def test_public_2
+ assert_equal(@pubid1, @doctype.notation('n1').public)
+ assert_equal(@pubid2, @doctype.notation('n2').public)
+ assert_equal(@pubid3, @doctype.notation('n3').public)
+ assert_equal(@pubid4, @doctype.notation('n4').public)
+ assert_equal(@pubid5, @doctype.notation('n5').public)
+ assert_equal(@pubid6, @doctype.notation('n6').public)
+ assert_nil(@doctype.notation('n7').public)
+ end
+
+ def test_system_2
+ assert_equal(@sysid2, @doctype.notation('n2').system)
+ assert_nil(@doctype.notation('n3').system)
+ assert_equal(@sysid4, @doctype.notation('n4').system)
+ assert_equal(@sysid5, @doctype.notation('n5').system)
+ assert_equal(@sysid6, @doctype.notation('n6').system)
+ assert_equal(@sysid7, @doctype.notation('n7').system)
+ end
+
+end
diff --git a/test/rexml/test_notationdecl_parsetest.rb b/test/rexml/test_notationdecl_parsetest.rb
new file mode 100644
index 0000000000..6a8449e37d
--- /dev/null
+++ b/test/rexml/test_notationdecl_parsetest.rb
@@ -0,0 +1,23 @@
+#! /usr/bin/ruby
+
+require 'test/unit'
+require 'rexml/document'
+
+class TestNotationDecl < Test::Unit::TestCase
+ def setup
+ doc_string = <<-'XMLEND'
+ <!DOCTYPE r SYSTEM "urn:x-henrikmartensson:test" [
+ <!NOTATION n1 PUBLIC "-//HM//NOTATION TEST1//EN" 'urn:x-henrikmartensson.org:test5'>
+ <!NOTATION n2 PUBLIC '-//HM//NOTATION TEST2//EN' "urn:x-henrikmartensson.org:test6">
+ ]>
+ <r/>
+ XMLEND
+ @doctype = REXML::Document.new(doc_string).doctype
+ end
+
+ def test_notation
+ assert(@doctype.notation('n1'), "Testing notation n1")
+ assert(@doctype.notation('n2'), "Testing notation n2")
+ end
+
+end
diff --git a/test/rexml/test_order.rb b/test/rexml/test_order.rb
new file mode 100644
index 0000000000..d694ee33d8
--- /dev/null
+++ b/test/rexml/test_order.rb
@@ -0,0 +1,101 @@
+require 'test/unit'
+require 'rexml/document'
+require 'zlib'
+
+class OrderTester < Test::Unit::TestCase
+ def setup
+ @doc = REXML::Document.new(TESTDOC)
+ @items = REXML::XPath.match(@doc,'//x')
+ end
+ def test_first_element
+ assert_equal '1', @items[0].attributes['id']
+ end
+ def test_second_element
+ assert_equal '2', @items[1].attributes['id']
+ end
+ def test_third_element
+ assert_equal '3', @items[2].attributes['id']
+ end
+ def test_order
+ d = REXML::Document.new( "<a><x id='1'/><x id='2'/><x id='3'/>
+ <x id='4'/><x id='5'/></a>" )
+ items = REXML::XPath.match( d, '//x' )
+ assert_equal( %w{1 2 3 4 5}, items.collect{|e| e.attributes['id']} )
+ d = REXML::Document.new( "<a>
+ <x><z><y id='1'/><y id='2'/></z><y id='3'/></x>
+ <x><y id='4'/></x></a>" )
+ items = REXML::XPath.match( d, '//y' )
+ assert_equal( %w{1 2 3 4}, items.collect{|e| e.attributes['id']} )
+ end
+ # Provided by Tom Talbott
+ def test_more_ordering
+ doc = REXML::Document.new( Zlib::GzipReader.new( File.new( 'test/data/LostineRiver.kml.gz' ) ) )
+ actual = [
+ "Head south from Phinney Ave N",
+ "Turn left at N 36th St",
+ "Turn right at Fremont Ave N",
+ "Continue on 4th Ave N",
+ "Turn left at Westlake Ave N",
+ "Bear right at 9th Ave N",
+ "Turn left at Mercer St",
+ "Take the I-5 ramp",
+ "Take the I-5 S ramp",
+ "Take the I-90 E exit #164 to Bellevue/Spokane/4th Ave S.",
+ "Take the I-90 E ramp to Bellevue/Spokane",
+ "Take exit #137 to Wanapum Dam/Richland",
+ "Bear right at WA-26",
+ "Bear right and head toward WA-243",
+ "Continue on WA-243",
+ "Bear right at WA-24",
+ "Continue on WA-240",
+ "Turn right at WA-240 E",
+ "Take the I-182 W ramp to Yakima (I-82)/Pendleton",
+ "Take the I-82 E ramp to Umatilla/Pendleton",
+ "Take the I-84 E ramp to Pendleton",
+ "Take the OR-82 exit #261 to La Grande/Elgin",
+ "Turn right at Island Ave",
+ "Continue on W 1st St",
+ "Turn left at N McAlister Rd",
+ "Bear right at OR-82",
+ "Continue on Wallowa Lake Hwy",
+ "Continue on OR-82",
+ "Continue on Ruckman Ave",
+ "Continue on OR-82",
+ "Continue on S 8th Ave",
+ "Turn right at Albany St",
+ "Continue on OR-82",
+ "Continue on Wallowa Lake Hwy",
+ "Continue on N Madison St",
+ "Bear left at W 1st St",
+ "Continue on Wallowa Lake Hwy",
+ "Continue on Water St",
+ "Bear right at Lostine River Rd",
+ "Bear right and head toward Lostine River Rd",
+ "Turn right at Lostine River Rd",
+ "Continue on NF-8210",
+ "Turn right and head toward NF-8210",
+ "Turn right at NF-8210",
+ "",
+ "Route"
+ ]
+ count = 0
+ REXML::XPath.each( doc, "//Placemark") { |element|
+ n = element.elements["name"].text.squeeze(" ")
+ assert_equal( actual[count], n ) unless n =~ /Arrive at/
+ count += 1
+ }
+ end
+end
+
+TESTDOC = <<END
+<a>
+ <b/>
+ <x id='1'/>
+ <c/>
+ <d>
+ <x id='2'/>
+ </d>
+ <x id='3'/>
+</a>
+END
+
diff --git a/test/rexml/test_preceding_sibling.rb b/test/rexml/test_preceding_sibling.rb
new file mode 100644
index 0000000000..c892b9400e
--- /dev/null
+++ b/test/rexml/test_preceding_sibling.rb
@@ -0,0 +1,40 @@
+# ISSUE 32
+require 'test/unit'
+require 'rexml/document'
+
+p [REXML::VERSION, RUBY_VERSION, RUBY_RELEASE_DATE]
+
+# daz - for report by Dan Kohn in:
+# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/156328
+class XPathTesterDd < Test::Unit::TestCase
+ include REXML
+
+ def setup
+ @@docDd = Document.new(<<-EOS, :ignore_whitespace_nodes => :all)
+ <a>
+ <b x='ab01A'>
+ <c y='abc01A'>Success</c>
+ </b>
+ <b x='ab02A' y='ab02B'>
+ <c>abc02C</c>
+ </b>
+ </a>
+ EOS
+ end
+
+ def test_Dd_preceding_sibling_children
+ arr = []
+ XPath.each(@@docDd, "//b[@x='ab02A']/preceding-sibling::b/child::*") do |cell|
+ arr << cell.texts.join
+ end
+ assert_equal( 'Success', arr.join )
+ end
+
+ def test_Dd_preceding_sibling_all
+ arr = []
+ XPath.each(@@docDd, "//b[@x='ab02A']/preceding-sibling::*") do |cell|
+ arr << cell.to_s
+ end
+ assert_equal( "<b x='ab01A'><c y='abc01A'>Success</c></b>", arr.join )
+ end
+end
diff --git a/test/rexml/test_pullparser.rb b/test/rexml/test_pullparser.rb
new file mode 100644
index 0000000000..1c9bcc0045
--- /dev/null
+++ b/test/rexml/test_pullparser.rb
@@ -0,0 +1,100 @@
+require "test/unit/testcase"
+
+require 'rexml/parsers/pullparser'
+
+class PullParserTester < Test::Unit::TestCase
+ include REXML
+ def test_basics
+ source = '<?xml version="1.0"?>
+ <!DOCTYPE blah>
+ <a>foo &lt;<b attribute="value">bar</b> nooo</a>'
+ parser = REXML::Parsers::PullParser.new(source)
+ res = { :text=>0 }
+ until parser.empty?
+ results = parser.pull
+ res[ :xmldecl ] = true if results.xmldecl?
+ res[ :doctype ] = true if results.doctype?
+ res[ :a ] = true if results.start_element? and results[0] == 'a'
+ if results.start_element? and results[0] == 'b'
+ res[ :b ] = true
+ assert_equal 'value', results[1]['attribute']
+ end
+ res[ :text ] += 1 if results.text?
+ end
+ [ :xmldecl, :doctype, :a, :b ].each { |tag|
+ assert res[tag] , "#{tag} wasn't processed"
+ }
+ assert_equal 4, res[ :text ]
+ rescue ParseException
+ puts $!
+ end
+
+ def test_bad_document
+ source = "<a><b></a>"
+ parser = REXML::Parsers::PullParser.new(source)
+ assert_raise(ParseException, "Parsing should have failed") {
+ results = parser.pull while parser.has_next?
+ }
+ end
+
+ def test_entity_replacement
+ source = '<!DOCTYPE foo [
+ <!ENTITY la "1234">
+ <!ENTITY lala "--&la;--">
+ <!ENTITY lalal "&la;&la;">
+ ]><a><la>&la;</la><lala>&lala;</lala></a>'
+ pp = REXML::Parsers::PullParser.new( source )
+ el_name = ''
+ while pp.has_next?
+ event = pp.pull
+ case event.event_type
+ when :start_element
+ el_name = event[0]
+ when :text
+ case el_name
+ when 'la'
+ assert_equal('1234', event[1])
+ when 'lala'
+ assert_equal('--1234--', event[1])
+ end
+ end
+ end
+ end
+
+ def test_peek_unshift
+ source = "<a><b/></a>"
+ pp = REXML::Parsers::PullParser.new(source)
+ # FINISH ME!
+ end
+
+ def test_inspect
+ xml = '<a id="1"><b id="2">Hey</b></a>'
+ parser = Parsers::PullParser.new( xml )
+ while parser.has_next?
+ pull_event = parser.pull
+ if pull_event.start_element?
+ peek = parser.peek()
+ peek.inspect
+ end
+ end
+ end
+
+ def test_peek
+ xml = '<a id="1"><b id="2">Hey</b></a>'
+ parser = Parsers::PullParser.new( xml )
+ names = %w{ a b }
+ while parser.has_next?
+ pull_event = parser.pull
+ if pull_event.start_element?
+ assert_equal( :start_element, pull_event.event_type )
+ assert_equal( names.shift, pull_event[0] )
+ if names[0] == 'b'
+ peek = parser.peek()
+ assert_equal( :start_element, peek.event_type )
+ assert_equal( names[0], peek[0] )
+ end
+ end
+ end
+ assert_equal( 0, names.length )
+ end
+end
diff --git a/test/rexml/test_rexml_issuezilla.rb b/test/rexml/test_rexml_issuezilla.rb
new file mode 100644
index 0000000000..bb878340b4
--- /dev/null
+++ b/test/rexml/test_rexml_issuezilla.rb
@@ -0,0 +1,15 @@
+#!/sw/bin/ruby
+
+require 'test/unit'
+require 'rexml/document'
+
+class TestIssuezillaParsing < Test::Unit::TestCase
+ def test_rexml
+ doc = REXML::Document.new(File.new("test/data/ofbiz-issues-full-177.xml"))
+ ctr = 1
+ doc.root.each_element('//issue') do |issue|
+ assert_equal( ctr, issue.elements['issue_id'].text.to_i )
+ ctr += 1
+ end
+ end
+end
diff --git a/test/rexml/test_sax.rb b/test/rexml/test_sax.rb
new file mode 100644
index 0000000000..daad06c5a5
--- /dev/null
+++ b/test/rexml/test_sax.rb
@@ -0,0 +1,286 @@
+require "test/unit/testcase"
+require 'rexml/sax2listener'
+require 'rexml/parsers/sax2parser'
+
+class SAX2Tester < Test::Unit::TestCase
+ include REXML
+ def test_characters
+ d = Document.new( "<A>@blah@</A>" )
+ txt = d.root.text
+ p = Parsers::SAX2Parser.new "<A>@blah@</A>"
+ p.listen(:characters) {|x| assert_equal txt, x}
+ p.listen(:characters, ["A"]) {|x| assert_equal txt,x}
+ p.parse
+ end
+
+ def test_entity_replacement
+ source = '<!DOCTYPE foo [
+ <!ENTITY la "1234">
+ <!ENTITY lala "--&la;--">
+ <!ENTITY lalal "&la;&la;">
+ ]><a><la>&la;</la><lala>&lala;</lala></a>'
+ sax = Parsers::SAX2Parser.new( source )
+ results = []
+ sax.listen(:characters) {|x| results << x }
+ sax.parse
+ assert_equal 2, results.size
+ assert_equal '1234', results[0]
+ assert_equal '--1234--', results[1]
+ end
+
+ def test_sax2
+ f = File.new("test/data/documentation.xml")
+ parser = Parsers::SAX2Parser.new( f )
+ # Listen to all events on the following elements
+ count = 0
+ blok = proc { |uri,localname,qname,attributes|
+ assert %w{ bugs todo }.include?(localname),
+ "Mismatched name; we got '#{qname}'\nArgs were:\n\tURI: #{uri}\n\tLOCALNAME: #{localname}\n\tQNAME: #{qname}\n\tATTRIBUTES: #{attributes.inspect}\n\tSELF=#{blok}"
+ count += 1
+ }
+
+ start_document = 0
+ end_document = 0
+ parser.listen( :start_document ) { start_document += 1 }
+ parser.listen( :end_document ) { end_document += 1 }
+ parser.listen( :start_element, %w{ changelog bugs todo }, &blok )
+ # Listen to all events on the following elements. Synonymous with
+ # listen( :start_element, %w{ ... } )
+ parser.listen( %w{ changelog bugs todo }, &blok )
+ # Listen for all start element events
+ parser.listen( :start_element ) { |uri,localname,qname,attributes|
+ }
+ listener = MySAX2Listener.new
+ # Listen for all events
+ parser.listen( listener )
+ # Listen for all events on the given elements. Does not include children
+ # events. Regular expressions work as well!
+ parser.listen( %w{ /change/ bugs todo }, listener )
+ # Test the deafening method
+ blok = proc { |uri,localname,qname,attributes|
+ assert_fail "This listener should have been deafened!"
+ }
+ parser.listen( %w{ changelog }, &blok )
+ parser.deafen( &blok )
+
+ tc = 0
+ parser.listen( :characters, %w{version} ) {|text|
+ assert(text=~/@ANT_VERSION@/, "version was '#{text}'")
+ tc += 1
+ }
+
+ begin
+ parser.parse
+ rescue => exception
+ if exception.kind_of? Test::Unit::AssertionFailedError
+ raise exception
+ end
+ puts $!
+ puts exception.backtrace
+ end
+ assert_equal 2, count
+ assert_equal 1, tc
+ assert_equal 1, start_document
+ assert_equal 1, end_document
+ end
+
+
+
+ # used by test_simple_doctype_listener
+ # submitted by Jeff Barczewski
+ class SimpleDoctypeListener
+ include REXML::SAX2Listener
+ attr_reader :name, :pub_sys, :long_name, :uri
+
+ def initialize
+ @name = @pub_sys = @long_name = @uri = nil
+ end
+
+ def doctype(name, pub_sys, long_name, uri)
+ @name = name
+ @pub_sys = pub_sys
+ @long_name = long_name
+ @uri = uri
+ end
+ end
+
+ # test simple non-entity doctype in sax listener
+ # submitted by Jeff Barczewski
+ def test_simple_doctype_listener
+ xml = <<-END
+ <?xml version="1.0"?>
+ <!DOCTYPE greeting PUBLIC "Hello Greeting DTD" "http://foo/hello.dtd">
+ <greeting>Hello, world!</greeting>
+ END
+ parser = Parsers::SAX2Parser.new(xml)
+ dtl = SimpleDoctypeListener.new
+ parser.listen(dtl)
+ tname = nil
+ tpub_sys = nil
+ tlong_name = nil
+ turi = nil
+ parser.listen(:doctype) do |name, pub_sys, long_name, uri|
+ tname = name
+ tpub_sys = pub_sys
+ tlong_name = long_name
+ turi = uri
+ end
+ parser.parse
+ assert_equal 'greeting', tname, 'simple doctype block listener failed - incorrect name'
+ assert_equal 'PUBLIC', tpub_sys, 'simple doctype block listener failed - incorrect pub_sys'
+ assert_equal 'Hello Greeting DTD', tlong_name, 'simple doctype block listener failed - incorrect long_name'
+ assert_equal 'http://foo/hello.dtd', turi, 'simple doctype block listener failed - incorrect uri'
+ assert_equal 'greeting', dtl.name, 'simple doctype listener failed - incorrect name'
+ assert_equal 'PUBLIC', dtl.pub_sys, 'simple doctype listener failed - incorrect pub_sys'
+ assert_equal 'Hello Greeting DTD', dtl.long_name, 'simple doctype listener failed - incorrect long_name'
+ assert_equal 'http://foo/hello.dtd', dtl.uri, 'simple doctype listener failed - incorrect uri'
+ end
+
+ # test doctype with missing name, should throw ParseException
+ # submitted by Jeff Barczewseki
+ def test_doctype_with_mising_name_throws_exception
+ xml = <<-END
+ <?xml version="1.0"?>
+ <!DOCTYPE >
+ <greeting>Hello, world!</greeting>
+ END
+ parser = Parsers::SAX2Parser.new(xml)
+ assert_raise(REXML::ParseException, 'doctype missing name did not throw ParseException') do
+ parser.parse
+ end
+ end
+
+
+ class KouListener
+ include REXML::SAX2Listener
+ attr_accessor :sdoc, :edoc
+ attr_reader :selem, :decl, :pi
+ def initialize
+ @sdoc = @edoc = @selem = false
+ @decl = 0
+ @pi = 0
+ end
+ def start_document
+ @sdoc = true
+ end
+ def end_document
+ @edoc = true
+ end
+ def xmldecl( *arg )
+ @decl += 1
+ end
+ def processing_instruction( *arg )
+ @pi += 1
+ end
+ def start_element( *arg )
+ @selem = true
+ end
+ end
+
+ # Submitted by Kou
+ def test_begin_end_document
+ parser = Parsers::SAX2Parser.new("<a/>")
+
+ kl = KouListener.new
+ parser.listen(kl)
+ sd = false
+ ed = false
+ parser.listen(:start_document) { sd = true }
+ parser.listen(:end_document) { ed = true }
+
+ parser.parse
+ assert( sd, ':start_document block failed' )
+ assert( ed, ':end_document block failed' )
+ assert( kl.sdoc, ':start_document listener failed' )
+ assert( kl.edoc, ':end_document listener failed' )
+ end
+
+ # Submitted by Kou
+ def test_listen_before_start
+ # FIXME: the following comment should be a test for validity. (The xml declaration
+ # is invalid).
+ #parser = Parsers::SAX2Parser.new( "<?xml ?><?pi?><a><?pi?></a>")
+ parser = Parsers::SAX2Parser.new( "<?xml version='1.0'?><?pi?><a><?pi?></a>")
+ k1 = KouListener.new
+ parser.listen( k1 )
+ xmldecl = false
+ pi = 0
+ parser.listen( :xmldecl ) { xmldecl = true }
+ parser.listen( :processing_instruction ) { pi += 1 }
+
+ parser.parse
+
+ assert( xmldecl, ':xmldecl failed' )
+ assert_equal( 2, pi, ':processing_instruction failed' )
+ assert( k1.decl, 'Listener for xmldecl failed' )
+ assert_equal( 2, k1.pi, 'Listener for processing instruction failed' )
+ end
+
+
+ def test_socket
+ require 'socket'
+
+ $port = 12345
+
+ Thread.new{
+ server = TCPServer.new('127.0.0.1', $port)
+ while (session = server.accept)
+ session << '<foo>'
+ Thread.stop
+ end
+ }
+ sleep 1 #to be sure that server is running
+ @socket = TCPSocket.new('127.0.0.1',$port)
+
+ ok = false
+
+ test = Thread.new{
+ parser = REXML::Parsers::SAX2Parser.new @socket
+ parser.listen( :start_element ) {
+ ok = true
+ }
+ parser.parse
+ Thread.stop
+ }
+ sleep 1 #to be sure that server is running
+ assert(ok)
+ end
+
+ def test_char_ref_sax2()
+ parser = REXML::Parsers::SAX2Parser.new('<ABC>&#252;</ABC>')
+ result = nil
+ parser.listen(:characters) {|text| result = text.unpack('U*')}
+ parser.parse()
+ assert_equal(1, result.size)
+ assert_equal(252, result[0])
+ end
+
+
+ def test_char_ref_dom()
+ doc = REXML::Document.new('<ABC>&#252;</ABC>')
+ result = doc.root.text.unpack('U*')
+ assert_equal(1, result.size)
+ assert_equal(252, result[0])
+ end
+
+ class Ticket68
+ include REXML::SAX2Listener
+ end
+ def test_ticket_68
+ parser = REXML::Parsers::SAX2Parser.new( File.new('test/data/ticket_68.xml') )
+ parser.listen( Ticket68.new )
+ begin
+ parser.parse
+ rescue
+ p parser.source.position
+ p parser.source.current_line
+ puts $!.backtrace.join("\n")
+ flunk $!.message
+ end
+ end
+end
+
+class MySAX2Listener
+ include REXML::SAX2Listener
+end
+
diff --git a/test/rexml/test_stream.rb b/test/rexml/test_stream.rb
new file mode 100644
index 0000000000..4e3f0f7327
--- /dev/null
+++ b/test/rexml/test_stream.rb
@@ -0,0 +1,104 @@
+require "test/unit/testcase"
+require "rexml/document"
+require 'rexml/streamlistener'
+require 'stringio'
+
+class MyListener
+ include REXML::StreamListener
+end
+
+
+class StreamTester < Test::Unit::TestCase
+ # Submitted by Han Holl
+ def test_listener
+ data = %Q{<session1 user="han" password="rootWeiler" />\n<session2 user="han" password="rootWeiler" />}
+
+ b = RequestReader.new( data )
+ b = RequestReader.new( data )
+ end
+
+ def test_ticket_49
+ source = StringIO.new( <<-EOL )
+ <!DOCTYPE foo [
+ <!ENTITY ent "replace">
+ ]>
+ <a>&ent;</a>
+ EOL
+ REXML::Document.parse_stream(source, MyListener.new)
+ end
+
+ def test_ticket_10
+ source = StringIO.new( <<-EOL )
+ <!DOCTYPE foo [
+ <!ENTITY ent "replace">
+ <!ATTLIST a
+ xmlns:human CDATA #FIXED "http://www.foo.com/human">
+ <!ELEMENT bar (#PCDATA)>
+ <!NOTATION n1 PUBLIC "-//HM//NOTATION TEST1//EN" 'urn:x-henrikmartensson.org:test5'>
+ ]>
+ <a/>
+ EOL
+ listener = MyListener.new
+ class << listener
+ attr_accessor :events
+ def entitydecl( content )
+ @events[ :entitydecl ] = true
+ end
+ def attlistdecl( element_name, attributes, raw_content )
+ @events[ :attlistdecl ] = true
+ end
+ def elementdecl( content )
+ @events[ :elementdecl ] = true
+ end
+ def notationdecl( content )
+ @events[ :notationdecl ] = true
+ end
+ end
+ listener.events = {}
+
+ REXML::Document.parse_stream( source, listener )
+
+ assert( listener.events[:entitydecl] )
+ assert( listener.events[:attlistdecl] )
+ assert( listener.events[:elementdecl] )
+ assert( listener.events[:notationdecl] )
+ end
+end
+
+
+# For test_listener
+class RequestReader
+ attr_reader :doc
+ def initialize(io)
+ @stack = []
+ @doc = nil
+ catch(:fini) do
+ REXML::Document.parse_stream(io, self)
+ raise IOError
+ end
+ end
+ def tag_start(name, args)
+ if @doc
+ @stack.push(REXML::Element.new(name, @stack.last))
+ else
+ @doc = REXML::Document.new("<#{name}/>")
+ @stack.push(@doc.root)
+ end
+ args.each do |attr,val|
+ @stack.last.add_attribute(attr, val)
+ end
+ end
+ def tag_end(name, *args)
+ @stack.pop
+ throw(:fini) if @stack.empty?
+ end
+ def text(str)
+ @stack.last.text = str
+ end
+ def comment(str)
+ end
+ def doctype( name, pub_sys, long_name, uri )
+ end
+ def doctype_end
+ end
+end
diff --git a/test/rexml/test_ticket_80.rb b/test/rexml/test_ticket_80.rb
new file mode 100644
index 0000000000..629a213144
--- /dev/null
+++ b/test/rexml/test_ticket_80.rb
@@ -0,0 +1,56 @@
+#------------------------------------------------------------------------------
+# file: rexml_test.rb
+# desc: test's REXML's XML/XPath implementation
+# auth: Philip J Grabner <grabner>at<uberdev>dot<org>
+# date: 2006/08/17
+# copy: (C) CopyLoose 2006 Bib Development Team <bib-devel>at<uberdev>dot<org>
+#------------------------------------------------------------------------------
+
+require 'test/unit'
+require 'rexml/document'
+
+class Ticket80 < Test::Unit::TestCase
+
+ @@xmlstr = '<?xml version="1.0"?>
+<root xmlns="urn:some-xml-ns" xmlns:other="urn:some-other-xml-ns">
+ <l1-foo>
+ <l2 value="foo-01"/>
+ <l2 value="foo-02"/>
+ <l2 value="foo-03"/>
+ </l1-foo>
+ <other:l1>
+ <l2 value="no-show"/>
+ </other:l1>
+ <l1-bar>
+ <l2 value="bar-01"/>
+ <l2 value="bar-02"/>
+ </l1-bar>
+</root>'
+
+ #----------------------------------------------------------------------------
+ def test_xpathNamespacedChildWildcard
+ # tests the "prefix:*" node test syntax
+ out = Array.new
+ REXML::XPath.each( REXML::Document.new(@@xmlstr),
+ '/ns:root/ns:*/ns:l2/@value',
+ { 'ns' => 'urn:some-xml-ns' } ) do |node| out.push node.value ; end
+ chk = [ 'foo-01', 'foo-02', 'foo-03', 'bar-01', 'bar-02' ]
+ assert_equal chk, out
+ end
+
+ #----------------------------------------------------------------------------
+ def test_xpathNamespacedChildWildcardWorkaround
+ # tests a workaround for the "prefix:*" node test syntax
+ out = Array.new
+ REXML::XPath.each( REXML::Document.new(@@xmlstr),
+ '/ns:root/*[namespace-uri()="urn:some-xml-ns"]/ns:l2/@value',
+ { 'ns' => 'urn:some-xml-ns' } ) do |node| out.push node.value ; end
+ chk = [ 'foo-01', 'foo-02', 'foo-03', 'bar-01', 'bar-02' ]
+ assert_equal chk, out
+ end
+
+end
+
+#------------------------------------------------------------------------------
+# end of rexml_test.rb
+#------------------------------------------------------------------------------
diff --git a/test/rexml/test_validation_rng.rb b/test/rexml/test_validation_rng.rb
new file mode 100644
index 0000000000..b02363c493
--- /dev/null
+++ b/test/rexml/test_validation_rng.rb
@@ -0,0 +1,790 @@
+require "test/unit/testcase"
+
+require "rexml/document"
+require "rexml/validation/relaxng"
+
+class RNGValidation < Test::Unit::TestCase
+ include REXML
+
+ def test_validate
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <element name="C">
+ <attribute name="X"/>
+ <zeroOrMore>
+ <element name="E">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ </element>
+ <element name="D">
+ <empty/>
+ </element>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ no_error( validator, %q{<A><B><C X="x"><E/><E/></C><D/></B></A>} )
+ error( validator, %q{<A><B><D/><C X="x"/></B></A>} )
+ end
+
+
+ def test_sequence
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <element name="C">
+ <empty/>
+ </element>
+ <element name="D">
+ <empty/>
+ </element>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B><C/><C/><D/></B></A>} )
+ error( validator, %q{<A><B><D/><C/></B></A>} )
+ error( validator, %q{<A><C/><D/></A>} )
+ no_error( validator, %q{<A><B><C/><D/></B></A>} )
+ end
+
+
+ def test_choice
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <choice>
+ <element name="C">
+ <empty/>
+ </element>
+ <element name="D">
+ <empty/>
+ </element>
+ </choice>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B><C/><D/></B></A>} )
+ no_error( validator, %q{<A><B><D/></B></A>} )
+ no_error( validator, %q{<A><B><C/></B></A>} )
+ end
+
+ def test_optional
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <optional>
+ <element name="C">
+ <empty/>
+ </element>
+ </optional>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ no_error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><B><C/></B></A>} )
+ error( validator, %q{<A><B><D/></B></A>} )
+ error( validator, %q{<A><B><C/><C/></B></A>} )
+ end
+
+ def test_zero_or_more
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <zeroOrMore>
+ <element name="C">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+ no_error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><B><C/></B></A>} )
+ no_error( validator, %q{<A><B><C/><C/><C/></B></A>} )
+ error( validator, %q{<A><B><D/></B></A>} )
+ error( validator, %q{<A></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <zeroOrMore>
+ <element name="C">
+ <empty/>
+ </element>
+ <element name="D">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ no_error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><B><C/><D/></B></A>} )
+ no_error( validator, %q{<A><B><C/><D/><C/><D/></B></A>} )
+ error( validator, %q{<A><B><D/></B></A>} )
+ end
+
+ def test_one_or_more
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <oneOrMore>
+ <element name="C">
+ <empty/>
+ </element>
+ </oneOrMore>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><B><C/></B></A>} )
+ no_error( validator, %q{<A><B><C/><C/><C/></B></A>} )
+ error( validator, %q{<A><B><D/></B></A>} )
+ error( validator, %q{<A></A>} )
+ end
+
+ def test_attribute
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="X"/>
+ <attribute name="Y"/>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A/>} )
+ error( validator, %q{<A X=""/>} )
+ no_error( validator, %q{<A X="1" Y="1"/>} )
+ end
+
+ def test_choice_attributes
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <attribute name="X"/>
+ <attribute name="Y"/>
+ </choice>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A X="1" Y="1"/>} )
+ error( validator, %q{<A/>} )
+ no_error( validator, %q{<A X="1"/>})
+ no_error( validator, %q{<A Y="1"/>} )
+ end
+
+ def test_choice_attribute_element
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <attribute name="X"/>
+ <element name="B"/>
+ </choice>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A X="1"><B/></A>} )
+ error( validator, %q{<A/>} )
+ no_error( validator, %q{<A X="1"/>})
+ no_error( validator, %q{<A><B/></A>} )
+ end
+
+ def test_empty
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A>Text</A>} )
+ no_error( validator, %q{<A/>})
+ end
+
+ def test_text_val
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <text/>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A>Text</A>} )
+ error( validator, %q{<A/>})
+ end
+
+ def test_choice_text
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <element name="B"/>
+ <text/>
+ </choice>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/>Text</A>} )
+ error( validator, %q{<A>Text<B/></A>} )
+ no_error( validator, %q{<A>Text</A>} )
+ no_error( validator, %q{<A><B/></A>} )
+ end
+
+ def test_group
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <element name="B"/>
+ <group>
+ <element name="C"/>
+ <element name="D"/>
+ </group>
+ </choice>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/><C/></A>} )
+ error( validator, %q{<A><C/></A>} )
+ no_error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><C/><D/></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B"/>
+ <group>
+ <element name="C"/>
+ <element name="D"/>
+ </group>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/><C/></A>} )
+ error( validator, %q{<A><B/><D/></A>} )
+ error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><B/><C/><D/></A>} )
+ end
+
+ def test_value
+ # Values as text nodes
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <value>VaLuE</value>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B>X</B></A>} )
+ error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><B>VaLuE</B></A>} )
+
+ # Values as text nodes, via choice
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <choice>
+ <value>Option 1</value>
+ <value>Option 2</value>
+ </choice>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A><B>XYZ</B></A>} )
+ no_error( validator, %q{<A><B>Option 1</B></A>} )
+ no_error( validator, %q{<A><B>Option 2</B></A>} )
+
+ # Attribute values
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="B">
+ <value>VaLuE</value>
+ </attribute>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A/>} )
+ error( validator, %q{<A B=""/>} )
+ error( validator, %q{<A B="Lala"/>} )
+ no_error( validator, %q{<A B="VaLuE"/>} )
+
+ # Attribute values via choice
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="B">
+ <choice>
+ <value>Option 1</value>
+ <value>Option 2</value>
+ </choice>
+ </attribute>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A B=""/>} )
+ error( validator, %q{<A B="Value"/>} )
+ no_error( validator, %q{<A B="Option 1"></A>} )
+ no_error( validator, %q{<A B="Option 2"/>} )
+ end
+
+ def test_interleave
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <interleave>
+ <element name="C"/>
+ <element name="D"/>
+ <element name="E"/>
+ </interleave>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B><C/></B></A>} )
+ error( validator, %q{<A><B><C/><D/><C/></B></A>} )
+ no_error( validator, %q{<A><B><C/><D/><E/></B></A>} )
+ no_error( validator, %q{<A><B><E/><D/><C/></B></A>} )
+ no_error( validator, %q{<A><B><D/><C/><E/></B></A>} )
+ no_error( validator, %q{<A><B><E/><C/><D/></B></A>} )
+ error( validator, %q{<A><B><E/><C/><D/><C/></B></A>} )
+ end
+
+ def test_mixed
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="A" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="B">
+ <mixed>
+ <element name="D"/>
+ </mixed>
+ </element>
+</element>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ no_error( validator, %q{<A><B>Text<D/></B></A>} )
+ no_error( validator, %q{<A><B><D/>Text</B></A>} )
+ end
+
+ def test_ref_sequence
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <ref name="B"/>
+ <ref name="B"/>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B">
+ <attribute name="X"/>
+ </element>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ no_error( validator, %q{<A><B X=''/><B X=''/></A>} )
+ error( validator, %q{<A><B X=''/></A>} )
+ end
+
+ def test_ref_choice
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <choice>
+ <ref name="B"/>
+ </choice>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B"/>
+ <element name="C"/>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><D/></A>} )
+ error( validator, %q{<A><B/><C/></A>} )
+ no_error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><C/></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <ref name="B"/>
+ </element>
+ </start>
+
+ <define name="B">
+ <choice>
+ <element name="B"/>
+ <element name="C"/>
+ </choice>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><D/></A>} )
+ error( validator, %q{<A><B/><C/></A>} )
+ no_error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><C/></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <choice>
+ <ref name="B"/>
+ <element name="D"/>
+ </choice>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B"/>
+ <element name="C"/>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/><C/></A>} )
+ no_error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><C/></A>} )
+ no_error( validator, %q{<A><D/></A>} )
+ end
+
+
+ def test_ref_zero_plus
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <zeroOrMore>
+ <ref name="B"/>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B">
+ <attribute name="X"/>
+ </element>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A/>} )
+ no_error( validator, %q{<A><B X=''/></A>} )
+ no_error( validator, %q{<A><B X=''/><B X=''/><B X=''/></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <ref name="B"/>
+ </element>
+ </start>
+
+ <define name="B">
+ <zeroOrMore>
+ <element name="B">
+ <attribute name="X"/>
+ </element>
+ </zeroOrMore>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A/>} )
+ no_error( validator, %q{<A><B X=''/></A>} )
+ no_error( validator, %q{<A><B X=''/><B X=''/><B X=''/></A>} )
+ end
+
+
+ def test_ref_one_plus
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <oneOrMore>
+ <ref name="B"/>
+ </oneOrMore>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B">
+ <attribute name="X"/>
+ </element>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A/>} )
+ no_error( validator, %q{<A><B X=''/></A>} )
+ no_error( validator, %q{<A><B X=''/><B X=''/><B X=''/></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <ref name="B"/>
+ </element>
+ </start>
+
+ <define name="B">
+ <oneOrMore>
+ <element name="B">
+ <attribute name="X"/>
+ </element>
+ </oneOrMore>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A/>} )
+ no_error( validator, %q{<A><B X=''/></A>} )
+ no_error( validator, %q{<A><B X=''/><B X=''/><B X=''/></A>} )
+ end
+
+ def test_ref_interleave
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <interleave>
+ <ref name="B"/>
+ </interleave>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B"/>
+ <element name="C"/>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A><C/></A>} )
+ error( validator, %q{<A><C/><C/></A>} )
+ no_error( validator, %q{<A><B/><C/></A>} )
+ no_error( validator, %q{<A><C/><B/></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <ref name="B"/>
+ </element>
+ </start>
+
+ <define name="B">
+ <interleave>
+ <element name="B"/>
+ <element name="C"/>
+ </interleave>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A><C/></A>} )
+ error( validator, %q{<A><C/><C/></A>} )
+ no_error( validator, %q{<A><B/><C/></A>} )
+ no_error( validator, %q{<A><C/><B/></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <interleave>
+ <ref name="B"/>
+ <ref name="C"/>
+ </interleave>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B"/>
+ </define>
+ <define name="C">
+ <element name="C"/>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A><C/></A>} )
+ error( validator, %q{<A><C/><C/></A>} )
+ no_error( validator, %q{<A><B/><C/></A>} )
+ no_error( validator, %q{<A><C/><B/></A>} )
+ end
+
+ def test_ref_recurse
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <ref name="B"/>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B">
+ <optional>
+ <ref name="B"/>
+ </optional>
+ </element>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ error( validator, %q{<A></A>} )
+ no_error( validator, %q{<A><B/></A>} )
+ no_error( validator, %q{<A><B><B/></B></A>} )
+ end
+
+ def test_ref_optional
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <optional>
+ <ref name="B"/>
+ </optional>
+ </element>
+ </start>
+
+ <define name="B">
+ <element name="B">
+ </element>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ no_error( validator, %q{<A></A>} )
+ no_error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A><B/><B/></A>} )
+ error( validator, %q{<A><C/></A>} )
+
+ rng = %q{
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="A">
+ <ref name="B"/>
+ </element>
+ </start>
+
+ <define name="B">
+ <optional>
+ <element name="B">
+ </element>
+ </optional>
+ </define>
+</grammar>
+ }
+ validator = REXML::Validation::RelaxNG.new( rng )
+
+ no_error( validator, %q{<A></A>} )
+ no_error( validator, %q{<A><B/></A>} )
+ error( validator, %q{<A><B/><B/></A>} )
+ error( validator, %q{<A><C/></A>} )
+ end
+
+
+
+ def error( validator, source )
+ parser = REXML::Parsers::TreeParser.new( source )
+ parser.add_listener( validator.reset )
+ assert_raise( REXML::Validation::ValidationException,
+ "Expected a validation error" ) { parser.parse }
+ end
+
+ def no_error( validator, source )
+ parser = REXML::Parsers::TreeParser.new( source )
+ parser.add_listener( validator.reset )
+ assert_nothing_raised { parser.parse }
+ end
+end
diff --git a/test/rexml/test_xml_declaration_parent_child.rb b/test/rexml/test_xml_declaration_parent_child.rb
new file mode 100644
index 0000000000..6386bed4f1
--- /dev/null
+++ b/test/rexml/test_xml_declaration_parent_child.rb
@@ -0,0 +1,33 @@
+#!/usr/bin/env ruby
+#
+# Created by Henrik MÃ¥rtensson on 2007-02-18.
+# Copyright (c) 2007. All rights reserved.
+
+require "rexml/document"
+require "test/unit"
+
+class TestXmlDeclaration < Test::Unit::TestCase
+ def setup
+ xml = <<-'END_XML'
+ <?xml encoding= 'UTF-8' standalone='yes'?>
+ <root>
+ </root>
+ END_XML
+ @doc = REXML::Document.new xml
+ @root = @doc.root
+ @xml_declaration = @doc.children[0]
+ end
+
+ def test_xml_declaration_is_first_child
+ assert_kind_of(REXML::XMLDecl, @xml_declaration)
+ end
+
+ def test_xml_declaration_has_document_as_parent
+ assert_kind_of(REXML::Document, @xml_declaration.parent)
+ end
+
+ def test_xml_declaration_has_sibling
+ assert_kind_of(REXML::XMLDecl, @root.previous_sibling.previous_sibling)
+ assert_kind_of(REXML::Element, @xml_declaration.next_sibling.next_sibling)
+ end
+end
diff --git a/test/rexml/test_xpath.rb b/test/rexml/test_xpath.rb
new file mode 100644
index 0000000000..8c834970b5
--- /dev/null
+++ b/test/rexml/test_xpath.rb
@@ -0,0 +1,1055 @@
+require "test/unit/testcase"
+
+require "rexml/document"
+
+class XPathTester < Test::Unit::TestCase
+ include REXML
+ SOURCE = <<-EOF
+ <a id='1'>
+ <b id='2' x='y'>
+ <c id='3'/>
+ <c id='4'/>
+ </b>
+ <d id='5'>
+ <c id='6' x='y'/>
+ <c id='7'/>
+ <c id='8'/>
+ <q id='19'/>
+ </d>
+ <e id='9'>
+ <f id='10' a='b'/>
+ <f id='11' a='c'/>
+ <f id='12' a='d'>
+ <g id='13'/>
+ </f>
+ <f id='14' a='d'/>
+ </e>
+ <m id='15'>
+ <n id='16'>
+ <o id='17'>
+ <p id='18'/>
+ </o>
+ </n>
+ </m>
+ </a>
+ EOF
+ JENI_TENNISON = <<-EOJT
+ <a>
+ <b>
+ <c>
+ <d>
+ <e id='x'>
+ <f/>
+ </e>
+ </d>
+ </c>
+ <c>
+ <d>
+ <e id='y'/>
+ </d>
+ </c>
+ </b>
+ <b>
+ <c>
+ <d>
+ <e id='z'/>
+ </d>
+ </c>
+ </b>
+ </a>
+ EOJT
+
+ def setup
+ @@doc = Document.new(SOURCE) unless defined? @@doc
+ @@jeni = Document.new( JENI_TENNISON ) unless defined? @@jeni
+ end
+
+ def each_test( element, xpath )
+ count = 0
+ XPath::each( element, xpath ) { |child|
+ count += 1
+ yield child if block_given?
+ }
+ count
+ end
+
+ def test_descendant
+ doc = Document.new("<a><b><c id='1'/></b><d><b><c id='2'/></b></d></a>")
+ p = XPath.match( doc, "//c" )
+ assert_equal( 2, p.size )
+ p = XPath.first( @@doc, "//p" )
+ assert_equal "p", p.name
+ c = each_test( @@doc, "//c" ) { |child| assert_equal "c", child.name }
+ assert_equal 5, c
+ c = each_test( @@doc.root, "b//c" ) { |child|
+ assert_equal "c", child.name
+ }
+ assert_equal 2, c
+
+ doc = Document.new( "<a><z id='1'/><b><z id='11'/><z id='12'/></b><c><z id='21'/><z id='22'/><d><z id='31'/><z id='32'/></d></c></a>" )
+ # //para[1] : all descendants which are the first para child of their parent
+ assert_equal( 4, XPath.match( doc, "//z[1]" ).size )
+ # /descendant::para[1] : the first descendant para element
+ assert_equal( 1, XPath.match( doc, "/descendant::z[1]" ).size )
+ end
+
+ def test_root
+ source = "<a><b/></a>"
+ doc = Document.new( source )
+ assert_equal doc, doc.root_node
+ assert_equal "a", XPath::first( doc, "/" ).elements[1].name
+ end
+
+ def test_abbreviated_simple_child
+ assert_equal "a", XPath::first(@@doc, "a").name
+ end
+
+ def test_child
+ c = XPath::first( @@doc, "a/b/c" )
+ assert_equal "c", c.name
+ assert_equal "3", XPath::first(@@doc, "a/b/c").attributes["id"]
+ end
+
+ def test_root_child
+ assert_equal "a", XPath::first(@@doc, "/a").name
+ c = XPath::first( @@doc, "a/b/c" )
+ assert_equal "a", XPath::first(c, "/a").name
+ end
+
+ def test_root_children
+ c = XPath::first( @@doc, "a/b/c" )
+ assert_equal "2", XPath::first(c, "/a/b").attributes["id"]
+ end
+
+ def test_abbreviated_step
+ c = XPath::first( @@doc, "a/b/c" )
+ assert_equal("c", c.name)
+ assert_equal("a", XPath::first(@@doc.root, ".").name)
+ assert_equal("b", XPath::first(c, "..").name)
+ assert_equal("a", XPath::first(@@doc, "a/b/..").name)
+
+ doc = REXML::Document.new(File.new("test/data/project.xml"))
+ c = each_test(doc.root, "./Description" ) { |child|
+ assert_equal("Description",child.name)
+ }
+ assert_equal 1, c
+ end
+
+ # Things that aren't tested elsewhere
+ def test_predicates
+ assert_equal "12", XPath::first(@@doc, "a/e/f[3]").attributes["id"]
+ assert_equal "13", XPath::first(@@doc, "a/e/f[3]/g").attributes["id"]
+ assert_equal "14", XPath::first(@@doc, "a/e/f[@a='d'][2]").attributes["id"]
+ assert_equal "14", XPath::first(@@doc, "a/e/f[@a='d'][@id='14']").attributes["id"]
+ assert_equal "a", XPath::first( @@doc, "*[name()='a' and @id='1']" ).name
+ c=each_test( @@doc, "//*[name()='f' and @a='d']") { |i|
+ assert_equal "f", i.name
+ }
+ assert_equal 2, c
+ c=each_test( @@doc, "//*[name()='m' or @a='d']") { |i|
+ assert ["m","f"].include?(i.name)
+ }
+ assert_equal 3, c
+
+ assert_equal "b", XPath::first( @@doc, "//b[@x]" ).name
+ end
+
+ def test_node_type
+ doc = Document.new "<a><?foo bar?><!--comment-->text</a>"
+ #res = XPath::first(doc.root, "text()")
+ #assert_equal "text", res.to_s
+
+ #res = XPath::first(doc, "*")
+ #assert_equal "a", res.name
+
+ assert_equal( :processing_instruction,
+ XPath::first(doc.root, "processing-instruction()").node_type)
+ assert_equal( :comment, XPath::first(doc.root, "comment()").node_type)
+ end
+
+ def test_functions
+ # trivial text() test
+ # confuse-a-function
+ source = "<a>more <b id='1'/><b id='2'>dumb</b><b id='3'/><c/> text</a>"
+ doc = Document.new source
+ res = ""
+ #XPath::each(doc.root, "text()") {|val| res << val.to_s}
+ #assert_equal "more text", res
+
+ #res = XPath::first(doc.root, "b[last()]")
+ #assert_equal '3', res.attributes['id']
+ res = XPath::first(doc.root, "b[position()=2]")
+ assert_equal '2', res.attributes['id']
+ res = XPath::first(doc.root, "*[name()='c']")
+ assert_equal "c", res.name
+ end
+
+ def no_test_ancestor
+ doc = REXML::Document.new(File.new("test/data/testsrc.xml"))
+ doc.elements.each("//item") { |el| print el.name
+ if el.attributes['x']
+ puts " -- "+el.attributes['x']
+ else
+ puts
+ end
+ }
+ doc.elements.each("//item/ancestor::") { |el| print el.name
+ if el.attributes['x']
+ puts " -- "+el.attributes['x']
+ else
+ puts
+ end
+ }
+ end
+
+ # Here are some XPath tests that were originally submitted by ...
+ # The code has changed some, but the logic and the source documents are the
+ # same.
+ # This method reads a document from a file, and then a series of xpaths,
+ # also from a file. It then checks each xpath against the source file.
+ def test_more
+ xmlsource = "test/data/testsrc.xml"
+ xpathtests = "test/data/xp.tst"
+
+ doc = REXML::Document.new(File.new(xmlsource))
+ #results = ""
+ results = REXML::Document.new
+ results.add_element "test-results"
+ for line in File.new(xpathtests)
+ line.strip!
+ begin
+ rt = doc.root
+ #puts "#"*80
+ #print "\nDoing #{line} " ; $stdout.flush
+ doc.elements.each(line) do |el|
+ #print "." ; $stdout.flush
+ results.root << el.clone
+ #results << el.to_s
+ end
+ #ObjectSpace.garbage_collect
+ GC::start
+ rescue Exception => z
+ #puts "\n'#{line}' failed"
+ fail("Error on line #{line}:\n#{z.message}\n"+z.backtrace[0,10].join("\n"))
+ #results.root.add_element( "error", {"path"=>line}).text = z.message+"\n"+z.backtrace[0,10].join("\n")
+ #results << "<error path='"+line+"'>"+z.message+"</error>"
+ end
+ end
+ end
+
+ def test_axe_descendant
+ assert_equal "f", XPath::first( @@doc, "descendant::f").name
+ end
+
+ def test_axe_parent
+ q = XPath.first( @@doc, "a/d/c/parent::*/q" )
+ assert_equal 19, q.attributes["id"].to_i
+ end
+
+ def test_abbreviated_attribute
+ assert_equal 'a', XPath::first( @@doc, "a[@id='1']" ).name
+ c = XPath::first( @@doc, "a/b/c[@id='4']" )
+ assert_equal 'c', c.name
+ assert_equal '4', c.attributes['id']
+
+ result = XPath::first( @@doc, "descendant::f[@a='c']")
+ assert_equal "11", result.attributes['id']
+
+ assert_equal "11", XPath::first(@@doc, "a/e/f[@a='c']").attributes["id"]
+ assert_equal "11", XPath::first(@@doc, "a/e/*[@a='c']").attributes["id"]
+ end
+
+ def test_axe_self
+ c = XPath::first( @@doc, "a/b/c" )
+ assert c
+ assert_equal "c", c.name
+ assert_equal "c", XPath::first( c, "self::node()" ).name
+ end
+
+ def test_axe_ancestor
+ doc = REXML::Document.new "
+ <a>
+ <b id='1'>
+ <c>
+ <b id='2'>
+ <d/>
+ </b>
+ </c>
+ </b>
+ </a>"
+
+ d = XPath.first( doc, "//d" )
+ assert_equal "d", d.name
+ b = each_test( d, "ancestor::b" ) { |el|
+ assert((1..2) === el.attributes['id'].to_i,
+ "Expected #{el.attributes['id']} to be either 1 or 2"
+ )
+ }
+ assert_equal 2, b
+ end
+
+ def test_axe_child
+ m = XPath.first( @@doc, "a/child::m" )
+ assert_equal 15, m.attributes['id'].to_i
+ end
+
+ def test_axe_attribute
+ a = XPath.first( @@doc, "a/attribute::id" )
+ assert_equal "1", a.value
+ a = XPath.first( @@doc, "a/e/f[@id='14']/attribute::a" )
+ assert_equal "d", a.value
+ end
+
+ def test_axe_sibling
+ doc = Document.new "<a><b><c/></b><e><f id='10'/><f id='11'/><f id='12'/></e></a>"
+ first_f = XPath.first( doc, "a/e/f" )
+ assert first_f
+ assert_equal '10', first_f.attributes['id']
+ next_f = XPath.first( doc, "a/e/f/following-sibling::node()" )
+ assert_equal '11', next_f.attributes['id']
+
+ b = XPath.first( doc, "a/e/preceding-sibling::node()" )
+ assert_equal 'b', b.name
+ end
+
+ def test_lang
+ doc = Document.new(File.new("test/data/lang0.xml"))
+ #puts IO.read( "test/lang.xml" )
+
+ #puts XPath.match( doc, "//language/*" ).size
+ c = each_test( doc, "//language/*" ) { |element|
+ #puts "#{element.name}: #{element.text}"
+ }
+ assert_equal 4, c
+ end
+
+ def test_namespaces_1
+ source = <<-EOF
+ <foo xmlns:ts="this" xmlns:tt="that">
+ <ts:bar>this bar</ts:bar>
+ <tt:bar>that bar</tt:bar>
+ </foo>
+ EOF
+ doc = Document.new source
+ result = XPath.each( doc, "//bar" ) {
+ fail "'bar' should match nothing in this case"
+ }
+
+ namespace = {"t"=>"this"}
+ results = XPath.first( doc, "//t:bar", namespace )
+ assert_equal "this bar", results.text
+ end
+
+ def test_namespaces_2
+ source = <<-EOF
+ <foo xmlns:ts="this" xmlns:tt="that">
+ <ts:bar>this bar</ts:bar>
+ <tt:bar>that bar</tt:bar>
+ </foo>
+ EOF
+ doc = Document.new source
+ res = XPath::first(doc, "//*[local_name()='bar']")
+ assert res, "looking for //*[name()='bar']"
+ assert_equal 'this', res.namespace
+ res = XPath::first(doc.root, "*[namespace_uri()='that']")
+ assert_equal 'that bar', res.text
+ end
+
+ def test_complex
+ next_f = XPath.first( @@doc, "a/e/f[@id='11']/following-sibling::*" )
+ assert_equal 12, next_f.attributes['id'].to_i
+ prev_f = XPath.first( @@doc, "a/e/f[@id='11']/preceding-sibling::*" )
+ assert_equal 10, prev_f.attributes['id'].to_i
+ c = each_test( @@doc, "descendant-or-self::*[@x='y']" )
+ assert_equal 2, c
+ end
+
+ def test_grouping
+ t = XPath.first( @@doc, "a/d/*[name()='d' and (name()='f' or name()='q')]" )
+ assert_nil t
+ t = XPath.first( @@doc, "a/d/*[(name()='d' and name()='f') or name()='q']" )
+ assert_equal 'q', t.name
+ end
+
+ def test_preceding
+ d = Document.new "<a><b id='0'/><b id='2'/><b><c id='0'/><c id='1'/><c id='2'/></b><b id='1'/></a>"
+ start = XPath.first( d, "/a/b[@id='1']" )
+ assert_equal 'b', start.name
+ c = XPath.first( start, "preceding::c" )
+ assert_equal '2', c.attributes['id']
+
+ c1, c0 = XPath.match( d, "/a/b/c[@id='2']/preceding::node()" )
+ assert_equal '1', c1.attributes['id']
+ assert_equal '0', c0.attributes['id']
+
+ c2, c1, c0, b, b2, b0 = XPath.match( start, "preceding::node()" )
+
+ assert_equal 'c', c2.name
+ assert_equal 'c', c1.name
+ assert_equal 'c', c0.name
+ assert_equal 'b', b.name
+ assert_equal 'b', b2.name
+ assert_equal 'b', b0.name
+
+ assert_equal '2', c2.attributes['id']
+ assert_equal '1', c1.attributes['id']
+ assert_equal '0', c0.attributes['id']
+ assert b.attributes.empty?
+ assert_equal '2', b2.attributes['id']
+ assert_equal '0', b0.attributes['id']
+
+ d = REXML::Document.new("<a><b/><c/><d/></a>")
+ matches = REXML::XPath.match(d, "/a/d/preceding::node()")
+ assert_equal("c", matches[0].name)
+ assert_equal("b", matches[1].name)
+
+ s = "<a><b><c id='1'/></b><b><b><c id='2'/><c id='3'/></b><c id='4'/></b><c id='NOMATCH'><c id='5'/></c></a>"
+ d = REXML::Document.new(s)
+ c = REXML::XPath.match( d, "//c[@id = '5']")
+ cs = REXML::XPath.match( c, "preceding::c" )
+ assert_equal( 4, cs.length )
+ end
+
+ def test_following
+ d = Document.new "<a><b id='0'/><b/><b><c id='1'/><c id='2'/></b><b id='1'/></a>"
+ start = XPath.first( d, "/a/b[@id='0']" )
+ assert_equal 'b', start.name
+ c = XPath.first( start, "following::c" )
+ assert_equal '1', c.attributes['id']
+
+ s = "<a><b><c><d/></c><e/></b><f><g><h/><i/></g></f><i/></a>"
+ d = Document.new(s)
+ c = XPath.first(d, '/a/b/c')
+ assert_equal 'c', c.name
+ res = XPath.match( c, 'following::*' )
+ assert_equal 6, res.size
+ res = XPath.match( c, 'following::i' )
+ assert_equal 2, res.size
+ end
+
+ # The following three paths were provided by
+ # Jeni Tennison <jeni@jenitennison.com>
+ # a consultant who is also an XSL and XPath expert
+ #def test_child_cubed
+ # els = @@jeni.elements.to_a("*****")
+ # assert_equal 3, els.size
+ #end
+
+ #def test_div_2
+ # results = doc.elements.to_a("/ div 2")
+ #end
+
+ #def test_nested_predicates
+ # puts @@jeni.root.elements[1].elements[1].name
+ # results = @@jeni.root.elements[1].elements[1].elements.to_a("../following-sibling::*[*[name() = name(current())]]")
+ # puts results
+ #end
+
+ # Contributed by Mike Stok
+ def test_starts_with
+ source = <<-EOF
+ <foo>
+ <a href="mailto:a@b.c">a@b.c</a>
+ <a href="http://www.foo.com">http://www.foo.com</a>
+ </foo>
+ EOF
+ doc = Document.new source
+ mailtos = doc.elements.to_a("//a[starts-with(@href, 'mailto:')]")
+ assert_equal 1, mailtos.size
+ assert_equal "mailto:a@b.c", mailtos[0].attributes['href']
+
+ ailtos = doc.elements.to_a("//a[starts-with(@href, 'ailto:')]")
+ assert_equal 0, ailtos.size
+ end
+
+ def test_toms_text_node
+ file = "<a>A<b>B</b><c>C<d>D</d>E</c>F</a>"
+ doc = Document.new(file)
+ assert_equal 'A', XPath.first(doc[0], 'text()').to_s
+ assert_equal 'AF', XPath.match(doc[0], 'text()').collect { |n|
+ n.to_s
+ }.join('')
+ assert_equal 'B', XPath.first(doc[0], 'b/text()').to_s
+ assert_equal 'D', XPath.first(doc[0], '//d/text()').to_s
+ assert_equal 'ABCDEF', XPath.match(doc[0], '//text()').collect {|n|
+ n.to_s
+ }.join('')
+ end
+
+ def test_string_length
+ doc = Document.new <<-EOF
+ <AAA>
+ <Q/>
+ <SSSS/>
+ <BB/>
+ <CCC/>
+ <DDDDDDDD/>
+ <EEEE/>
+ </AAA>
+ EOF
+ assert doc, "create doc"
+
+ set = doc.elements.to_a("//*[string-length(name()) = 3]")
+ assert_equal 2, set.size, "nodes with names length = 3"
+
+ set = doc.elements.to_a("//*[string-length(name()) < 3]")
+ assert_equal 2, set.size, "nodes with names length < 3"
+
+ set = doc.elements.to_a("//*[string-length(name()) > 3]")
+ assert_equal 3, set.size, "nodes with names length > 3"
+ end
+
+ # Test provided by Mike Stok
+ def test_contains
+ source = <<-EOF
+ <foo>
+ <a href="mailto:a@b.c">a@b.c</a>
+ <a href="http://www.foo.com">http://www.foo.com</a>
+ </foo>
+ EOF
+ doc = Document.new source
+
+ [
+ #['o', 2],
+ ['foo', 1], ['bar', 0]].each { |search, expected|
+ set = doc.elements.to_a("//a[contains(@href, '#{search}')]")
+ assert_equal expected, set.size
+ }
+ end
+
+ # Mike Stok and Sean Russell
+ def test_substring
+ # examples from http://www.w3.org/TR/xpath#function-substring
+ doc = Document.new('<test string="12345" />')
+
+ d = Document.new("<a b='1'/>")
+ #puts XPath.first(d, 'node()[0 + 1]')
+ #d = Document.new("<a b='1'/>")
+ #puts XPath.first(d, 'a[0 mod 0]')
+ [ [1.5, 2.6, '234'],
+ [0, 3, '12'],
+ [0, '0 div 0', ''],
+ [1, '0 div 0', ''],
+ ['-42', '1 div 0', '12345'],
+ ['-1 div 0', '1 div 0', '']
+ ].each { |start, length, expected|
+ set = doc.elements.to_a("//test[substring(@string, #{start}, #{length}) = '#{expected}']")
+ assert_equal 1, set.size, "#{start}, #{length}, '#{expected}'"
+ }
+ end
+
+ def test_translate
+ source = <<-EOF
+ <doc>
+ <case name='w3c one' result='BAr' /> <!-- w3c -->
+ <case name='w3c two' result='AAA' /> <!-- w3c -->
+ <case name='alchemy' result="gold" /> <!-- mike -->
+ <case name='vbxml one' result='A Space Odyssey' />
+ <case name='vbxml two' result='AbCdEf' />
+ </doc>
+ EOF
+
+ doc = Document.new(source)
+
+ [ ['bar', 'abc', 'ABC', 'w3c one'],
+ ['--aaa--','abc-','ABC', 'w3c two'],
+ ['lead', 'dear language', 'doll groover', 'alchemy'],
+ ['A Space Odissei', 'i', 'y', 'vbxml one'],
+ ['abcdefg', 'aceg', 'ACE', 'vbxml two'],
+ ].each { |arg1, arg2, arg3, name|
+ translate = "translate('#{arg1}', '#{arg2}', '#{arg3}')"
+ set = doc.elements.to_a("//case[@result = #{translate}]")
+ assert_equal 1, set.size, translate
+ assert_equal name, set[0].attributes['name']
+ }
+ end
+
+ def test_math
+ d = Document.new( '<a><b/><c/></a>' )
+ assert XPath.first( d.root, 'node()[1]' )
+ assert_equal 'b', XPath.first( d.root, 'node()[1]' ).name
+ assert XPath.first( d.root, 'node()[0 + 1]' )
+ assert_equal 'b', XPath.first( d.root, './node()[0 + 1]' ).name
+ assert XPath.first( d.root, 'node()[1 + 1]' )
+ assert_equal 'c', XPath.first( d.root, './node()[1 + 1]' ).name
+ assert XPath.first( d.root, 'node()[4 div 2]' )
+ assert_equal 'c', XPath.first( d.root, './node()[4 div 2]' ).name
+ assert XPath.first( d.root, 'node()[2 - 1]' )
+ assert_equal 'b', XPath.first( d.root, './node()[2 - 1]' ).name
+ assert XPath.first( d.root, 'node()[5 mod 2]' )
+ assert_equal 'b', XPath.first( d.root, './node()[5 mod 2]' ).name
+ assert XPath.first( d.root, 'node()[8 mod 3]' )
+ assert_equal 'c', XPath.first( d.root, './node()[8 mod 3]' ).name
+ assert XPath.first( d.root, 'node()[1 * 2]' )
+ assert_equal 'c', XPath.first( d.root, './node()[1 * 2]' ).name
+ assert XPath.first( d.root, 'node()[2 + -1]' )
+ assert_equal 'b', XPath.first( d.root, './node()[2 + -1]' ).name
+ end
+
+ def test_name
+ assert_raise( UndefinedNamespaceException, "x should be undefined" ) {
+ d = REXML::Document.new("<a x='foo'><b/><x:b/></a>")
+ }
+ d = REXML::Document.new("<a xmlns:x='foo'><b/><x:b/></a>")
+ assert_equal 1, d.root.elements.to_a('*[name() = "b"]').size
+ assert_equal 1, d.elements.to_a('//*[name() = "x:b"]').size
+ end
+
+ def test_local_name
+ d = REXML::Document.new("<a xmlns:x='foo'><b/><x:b/></a>")
+ assert_equal 2, d.root.elements.to_a('*[local_name() = "b"]').size
+ assert_equal 2, d.elements.to_a('//*[local_name() = "b"]').size
+ end
+
+ def test_comparisons
+ source = "<a><b id='1'/><b id='2'/><b id='3'/></a>"
+ doc = REXML::Document.new(source)
+
+ # NOTE TO SER: check that number() is required
+ assert_equal 2, REXML::XPath.match(doc, "//b[number(@id) > 1]").size
+ assert_equal 3, REXML::XPath.match(doc, "//b[number(@id) >= 1]").size
+ assert_equal 1, REXML::XPath.match(doc, "//b[number(@id) <= 1]").size
+ assert_equal 1, REXML::XPath.match(doc, "//b[number(@id) = (1 * 1)]").size
+ assert_equal 1, REXML::XPath.match(doc, "//b[number(@id) = (1 mod 2)]").size
+ assert_equal 1, REXML::XPath.match(doc, "//b[number(@id) = (4 div 2)]").size
+ end
+
+ # Contributed by Kouhei
+ def test_substring_before
+ doc = Document.new("<r><a/><b/><c/></r>")
+ assert_equal("a", doc.root.elements.to_a("*[name()=substring-before('abc', 'b')]")[0].name)
+ assert_equal("c", doc.root.elements.to_a("*[name()=substring-after('abc', 'b')]")[0].name)
+ end
+
+ def test_spaces
+ doc = Document.new("<a>
+ <b>
+ <c id='a'/>
+ </b>
+ <c id='b'/>
+ </a>")
+ assert_equal( 1, REXML::XPath.match(doc,
+ "//*[local-name()='c' and @id='b']").size )
+ assert_equal( 1, REXML::XPath.match(doc,
+ "//*[ local-name()='c' and @id='b' ]").size )
+ assert_equal( 1, REXML::XPath.match(doc,
+ "//*[ local-name() = 'c' and @id = 'b' ]").size )
+ assert_equal( 1,
+ REXML::XPath.match(doc, '/a/c[@id]').size )
+ assert_equal( 1,
+ REXML::XPath.match(doc, '/a/c[(@id)]').size )
+ assert_equal( 1,
+ REXML::XPath.match(doc, '/a/c[ @id ]').size )
+ assert_equal( 1,
+ REXML::XPath.match(doc, '/a/c[ (@id) ]').size )
+ assert_equal( 1,
+ REXML::XPath.match(doc, '/a/c[( @id )]').size )
+ assert_equal( 1, REXML::XPath.match(doc.root,
+ '/a/c[ ( @id ) ]').size )
+ assert( 1, REXML::XPath.match(doc,
+ '/a/c [ ( @id ) ] ').size )
+ assert( 1, REXML::XPath.match(doc,
+ ' / a / c [ ( @id ) ] ').size )
+ end
+
+ def test_text_nodes
+ # source = "<root>
+ #<child/>
+ #<child>test</child>
+ #</root>"
+ source = "<root><child>test</child></root>"
+ d = REXML::Document.new( source )
+ r = REXML::XPath.match( d, %q{/root/child[text()="test"]} )
+ assert_equal( 1, r.size )
+ assert_equal( "child", r[0].name )
+ assert_equal( "test", r[0].text )
+ end
+
+ def test_auto_string_value
+ source = "<root><foo/><title>Introduction</title></root>"
+ d = REXML::Document.new( source )
+ #r = REXML::XPath.match( d, %q{/root[title="Introduction"]} )
+ #assert_equal( 1, r.size )
+ source = "<a><b/><c/><c>test</c></a>"
+ d = REXML::Document.new( source )
+ r = REXML::XPath.match( d, %q{/a[c='test']} )
+ assert_equal( 1, r.size )
+ r = REXML::XPath.match( d, %q{a[c='test']} )
+ assert_equal( 1, r.size )
+ r = d.elements["/a[c='test']"]
+ assert_not_nil( r )
+ r = d.elements["a[c='test']"]
+ assert_not_nil( r )
+ r = d.elements["a[c='xtest']"]
+ assert_nil( r )
+ r = REXML::XPath.match( d, %q{a[c='xtest']} )
+ assert_equal( 0, r.size )
+ end
+
+ def test_ordering
+ source = "<a><b><c id='1'/><c id='2'/></b><b><d id='1'/><d id='2'/></b></a>"
+ d = REXML::Document.new( source )
+ r = REXML::XPath.match( d, %q{/a/*/*[1]} )
+ assert_equal( 1, r.size )
+ r.each { |el| assert_equal( '1', el.attribute('id').value ) }
+ end
+
+ def test_descendant_or_self_ordering
+ source = "<a>
+ <b>
+ <c id='1'/>
+ <c id='2'/>
+ </b>
+ <b>
+ <d id='1'>
+ <c id='3'/>
+ </d>
+ <d id='2'>
+ <e>
+ <c id='4'/>
+ </e>
+ </d>
+ </b>
+ </a>"
+ d = REXML::Document.new( source )
+ cs = XPath.match( d, "/descendant-or-self::c" )
+ assert_equal( 4, cs.length )
+ 1.upto(4) {|x| assert_equal( x.to_s, cs[x-1].attributes['id'] ) }
+ end
+
+ def test_and
+ d = Document.new %q{<doc><route run='*' title='HNO'
+ destination='debian_production1' date='*' edition='*'
+ source='debian_satellite1'/></doc>}
+ assert_equal( nil, d.root.elements["route[@run='0']"] )
+ assert_equal( nil, d.root.elements["route[@run='0' and @title='HNO']"] )
+ end
+
+
+ def test_numbers
+ d = Document.new %q{<a x="0" y="*" z="4e" w="e4" v="a"/>}
+
+ xp1 = "/a[ @x = 0 ]"
+ xp2 = "/a[ @x = '0' ]"
+ xp3 = "/a[ (@x + 1) = 1 ]"
+ xp4 = "/a[ @y = 0 ]"
+ xp5 = "/a[ (@z + 1) = 5 ]"
+ xp6 = "/a[ (@w + 1) = 5 ]"
+ xp7 = "/a[ (@v + 1) = 1 ]"
+ xp8 = "/a[ @n = 0 ]"
+
+ assert_equal( 1, XPath.match( d, xp1 ).length )
+ assert_equal( 1, XPath.match( d, xp2 ).length )
+ assert_equal( 1, XPath.match( d, xp3 ).length )
+ assert_equal( 0, XPath.match( d, xp4 ).length )
+ assert_equal( 0, XPath.match( d, xp5 ).length )
+ assert_equal( 0, XPath.match( d, xp6 ).length )
+ assert_equal( 0, XPath.match( d, xp7 ).length )
+ assert_equal( 0, XPath.match( d, xp8 ).length )
+ end
+
+ def test_tobis_preceding
+ doc_string = '<a>
+ <b/>
+ <c>
+ <d/>
+ <e/>
+ </c>
+</a>'
+
+ doc = Document.new(doc_string)
+
+ # e = REXML::XPath.first(doc,'/a/c/e')
+ e = doc.root.get_elements('/a/c/e')[0]
+ assert_equal( 1, e.get_elements('preceding-sibling::*').length )
+ assert_equal( 2, XPath.match(e, 'preceding::*').length )
+ end
+
+
+ def test_filtering
+ #doc=Document.new("<a><b><c1/><c2/></b><b><c3/><c4/></b><b><c5/><c6/></b></a>")
+ #assert_equal( 3, XPath.match( doc, '/a/b/*[1]' ).length )
+ #assert_equal( 2, XPath.match( doc, '/a/b/following-sibling::*[1]' ).length )
+ end
+
+ # Submitted by Alex
+ def test_union
+ data = %Q{<div id="the_div">
+ <span id="the_span">
+ <strong id="the_strong">a</strong>
+ </span>
+ <em id="the_em2">b</em>
+</div>}
+ rd = REXML::Document.new( data )
+ #union = rd.get_elements("/div/span | /div/em")
+ #assert_equal(2, union.length, "/div/span | /div/em" )
+ union = rd.get_elements('//*[name()="em" or name()="strong"]')
+ assert_equal(2, union.length, 'name() and "or" failed')
+ union = rd.get_elements('//em|//strong')
+ assert_equal(2, union.length,
+ 'Both tag types are returned by XPath union operator')
+ end
+
+
+ def test_union2
+ src = <<-EOL
+<div id="the_div">
+<span id="the_span">
+<strong id="the_strong">a</strong>
+</span>
+<em id="the_em2">b</em>
+</div>
+ EOL
+ rd = REXML::Document.new( src )
+ union = rd.get_elements('//em|//strong')
+ assert_equal(2, union.length,
+ 'Both tag types are returned by XPath union operator')
+ end
+
+
+ def test_a_star_star_one
+ string = <<-EOL
+<a>
+ <b>
+ <c1/>
+ <d/>
+ <e/>
+ <f/>
+ </b>
+ <b>
+ <c2/>
+ <d/>
+ <e/>
+ <f/>
+ </b>
+</a>
+ EOL
+ d = REXML::Document.new( string )
+ c1 = XPath.match( d, '/a/*/*[1]' )
+ assert_equal( 1, c1.length )
+ assert_equal( 'c1', c1[0].name )
+ end
+
+ def test_sum
+ d = Document.new("<a>"+
+ "<b>1</b><b>2</b><b>3</b>"+
+ "<c><d>1</d><d>2</d></c>"+
+ "<e att='1'/><e att='2'/>"+
+ "</a>")
+
+ for v,p in [[6, "sum(/a/b)"],
+ [9, "sum(//b | //d)"],
+ [3, "sum(/a/e/@*)"] ]
+ assert_equal( v, XPath::match( d, p ).first )
+ end
+ end
+
+ def test_xpath_namespace
+ d = REXML::Document.new("<tag1 xmlns='ns1'><tag2 xmlns='ns2'/><tada>xa</tada></tag1>")
+ x = d.root
+ num = 0
+ x.each_element('tada') { num += 1 }
+ assert_equal(1, num)
+ end
+
+ def test_ticket_39
+ doc = REXML::Document.new( <<-EOL )
+ <rss>
+ <channel>
+ <!-- removing the namespace declaration makes the test pass -->
+ <convertLineBreaks xmlns="http://www.blogger.com/atom/ns#">true</convertLineBreaks>
+ <item>
+ <title>Item 1</title>
+ </item>
+ <item>
+ <title>Item 2</title>
+ <pubDate>Thu, 13 Oct 2005 19:59:00 +0000</pubDate>
+ </item>
+ <item>
+ <title>Item 3</title>
+ </item>
+ </channel>
+ </rss>
+ EOL
+ root_node = XPath.first(doc, "rss")
+ assert_not_nil root_node
+ channel_node = XPath.first(root_node, "channel")
+ assert_not_nil channel_node
+ items = XPath.match(channel_node, "*")
+ assert_equal 4, items.size
+ items = XPath.match(channel_node, "item")
+ assert_equal 3, items.size # fails
+ end
+
+
+ def test_ticket_42
+ source = "<a></a>"
+ doc = Document.new(source)
+ bElem = Element.new('b')
+ doc.root.add_element(bElem)
+ doc.elements.each('//b[name(..) = "a"]') { |x|
+ assert_equal x,bElem
+ }
+ end
+
+ def test_ticket_56
+ namespaces = {'h' => 'http://www.w3.org/1999/xhtml'}
+
+ finaldoc = REXML::Document.new(File.read('test/data/google.2.xml'))
+
+ column_headers = []
+
+ REXML::XPath.each(finaldoc, '//h:form[@action="ModifyCampaign"]//h:th',
+ namespaces) do |el|
+ node = REXML::XPath.first(el, 'h:a/text()', namespaces)
+ column_headers << (node ? node.value : nil)
+ end
+ column_headers.map! { |h| h.to_s.strip.chomp }
+ expected = ["", "", "Current Status", "Current Budget",
+ "Clicks", "Impr.", "CTR", "Avg. CPC", "Cost", "Conv. Rate",
+ "Cost/Conv."]
+ assert_equal( expected, column_headers )
+ end
+
+
+ def test_ticket_70
+ string = <<EOF
+
+<mydoc>
+
+ <someelement attribute="1.10">Text1, text,
+text</someelement>
+
+ <someelement attribute="1.11">Text2, text,
+text</someelement>
+
+
+</mydoc>
+
+EOF
+ doc = Document.new string
+ assert_equal( 1, XPath.match( doc, "//someelement[contains(@attribute,'1.10')]" ).length )
+ end
+
+ def test_ticket_43
+ #url = http://news.search.yahoo.com/news/rss?p=market&ei=UTF-8&fl=0&x=wrt
+
+ sum = Document.new(File.new("test/data/yahoo.xml")).elements.to_a("//item").size
+ assert_equal( 10, sum )
+
+ text = Document.new(File.new("test/data/yahoo.xml")).elements.to_a(%Q{//title[contains(text(), "'")]}).collect{|e| e.text}.join
+ assert_equal( "Broward labor market's a solid performer (Miami Herald)", text )
+ end
+
+ def test_ticket_57
+ data = "<?xml version='1.0'?><a:x xmlns:a='1'><a:y p='p' q='q'><a:z>zzz</a:z></a:y></a:x>"
+
+ r = Document.new(data)
+
+ assert_equal(Text, REXML::XPath.first(r,"a:x/a:y[@p='p' and @q='q']/a:z/text()").class)
+ assert_equal("zzz", REXML::XPath.first(r,"a:x/a:y[@p='p' and @q='q']/a:z/text()").to_s)
+ end
+
+ def test_ticket_59
+ data = "<a>
+ <c id='1'/>
+ <c id='2'/>
+ <b>
+ <c id='3'/>
+ </b>
+ <c id='4'/>
+ <b>
+ <b>
+ <c id='5'/>
+ </b>
+ <c id='6'/>
+ </b>
+ <c id='7'/>
+ <b>
+ <b>
+ <c id='8'/>
+ <b>
+ <c id='9'/>
+ <b>
+ <c id='10'/>
+ </b>
+ <c id='11'/>
+ </b>
+ </b>
+ </b>
+ <c id='12'/>
+ </a>"
+ d = Document.new(data)
+ res = d.elements.to_a( "//c" ).collect {|e| e.attributes['id'].to_i}
+ assert_equal( res, res.sort )
+ end
+
+ def ticket_61_fixture(doc, xpath)
+ matches = []
+ doc.elements.each(xpath) do |element|
+ matches << element
+ assert_equal('Add', element.text)
+ assert_equal('ButtonText', element.attributes['class'])
+ end
+ assert_equal(1, matches.length)
+ end
+
+ def test_ticket_61_text
+ file = File.open( "test/data/ticket_61.xml" )
+ doc = REXML::Document.new file
+ ticket_61_fixture( doc, "//div[text()='Add' and @class='ButtonText']" )
+ end
+
+ def test_ticket_61_contains
+ file = File.open( "test/data/ticket_61.xml" )
+ doc = REXML::Document.new file
+ ticket_61_fixture( doc, "//div[contains(.,'Add') and @class='ButtonText']" )
+ end
+
+ def test_namespaces_0
+ d = Document.new(%q{<x:a xmlns:x="y"/>})
+ assert_equal( 1, XPath.match( d, "//x:a" ).size )
+ assert_equal( 1, XPath.match( d, "//x:*" ).size )
+ end
+
+ def test_ticket_71
+ doc = Document.new(%Q{<root xmlns:ns1="xyz" xmlns:ns2="123"><element ns1:attrname="foo" ns2:attrname="bar"/></root>})
+ el = doc.root.elements[1]
+ assert_equal( "element", el.name )
+ el2 = XPath.first( doc.root, "element[@ns:attrname='foo']", { 'ns' => "xyz" } )
+ assert_equal( el, el2 )
+ end
+
+ def test_ticket_78
+ doc = <<-EOT
+ <root>
+ <element>
+ <tag x='1'>123</tag>
+ </element>
+ <element>
+ <tag x='2'>123a</tag>
+ </element>
+ </root>
+ EOT
+ seq = %w{BEGIN 123 END BEGIN 123a END}
+
+ xmlDoc = Document.new(doc)
+
+ ["//element[tag='123']/tag", "//element[tag='123a']/tag"].each do |query|
+ assert_equal( "BEGIN", seq.shift )
+ XPath.each(xmlDoc, query) { |element|
+ assert_equal( seq.shift, element.text )
+ }
+ assert_equal( "END", seq.shift )
+ end
+ end
+
+ def test_ticket_79
+ source = "<a><b><c>test</c></b><b><c>3</c></b></a>"
+ d = REXML::Document.new( source )
+ r = REXML::XPath.match( d, %q{/a/b[c='test']} )
+ assert_equal(1, r.size())
+ r = REXML::XPath.match( d, %q{/a/b[c='3']} )
+ assert_equal(1, r.size())
+ end
+end
diff --git a/test/rexml/test_xpath_attribute_query.rb b/test/rexml/test_xpath_attribute_query.rb
new file mode 100644
index 0000000000..8d5102bb89
--- /dev/null
+++ b/test/rexml/test_xpath_attribute_query.rb
@@ -0,0 +1,89 @@
+# rexml_xpath_attribute_query.rb
+# May 16, 2007
+#
+
+require 'test/unit'
+require 'rexml/document'
+
+class TestRexmlXpathAttributeQuery < Test::Unit::TestCase
+
+ # xmlstr1 and xmlstr2 only differ in the second line - namespaces in the root element
+ @@xmlstr1 = '<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:gCal="http://schemas.google.com/gCal/2005">
+ <id>http://www.google.com/calendar/feeds/me%40gmail.com</id>
+ <entry>
+ <id>http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com</id>
+ <published>2007-05-16T13:42:27.942Z</published>
+ <updated>2007-05-15T03:29:28.000Z</updated>
+ <title type="text">My Calendar</title>
+ <link rel="alternate" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/private/full"/>
+ <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/acl/full"/>
+ <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com"/>
+ <author>
+ <name>Me</name>
+ <email>me@gmail.com</email>
+ </author>
+ </entry>
+</feed>'
+
+
+ @@xmlstr2 = '<?xml version="1.0" encoding="UTF-8"?>
+<feed>
+ <id>http://www.google.com/calendar/feeds/me%40gmail.com</id>
+ <entry>
+ <id>http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com</id>
+ <published>2007-05-16T13:42:27.942Z</published>
+ <updated>2007-05-15T03:29:28.000Z</updated>
+ <title type="text">My Calendar</title>
+ <link rel="alternate" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/private/full"/>
+ <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/acl/full"/>
+ <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com"/>
+ <author>
+ <name>Me</name>
+ <email>me@gmail.com</email>
+ </author>
+ </entry>
+</feed>'
+
+ # Fails
+ def test_xpath_query
+ do_test @@xmlstr1
+ end
+
+ # Passes
+ def test_xpath_query_no_namespace
+ do_test @@xmlstr2
+ end
+
+ def do_test(xmlString)
+ hrefs = [
+ "http://www.google.com/calendar/feeds/me%40gmail.com/private/full",
+ "http://www.google.com/calendar/feeds/me%40gmail.com/acl/full",
+ "http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com"
+ ]
+ ctr=0
+ REXML::Document.new(xmlString).elements.each("feed/entry") do |element|
+ @alternate_link = element.elements["link[@rel='alternate']"]
+ assert_not_nil( @alternate_link )
+ assert_equal( hrefs[ctr], @alternate_link.attributes['href'])
+ ctr += 1
+ end
+ end
+
+
+ def test_another_way
+ doc = REXML::Document.new(@@xmlstr1)
+ hrefs = [
+ "http://www.google.com/calendar/feeds/me%40gmail.com/private/full",
+ "http://www.google.com/calendar/feeds/me%40gmail.com/acl/full",
+ "http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com"
+ ]
+ ctr=0
+ REXML::XPath.each(doc, "//link[@rel='alternate']") do |element|
+ @alternate_link = element
+ assert_not_nil @alternate_link
+ assert_equal( hrefs[ctr], @alternate_link.attributes['href'])
+ ctr += 1
+ end
+ end
+end
diff --git a/test/rexml/test_xpath_msw.rb b/test/rexml/test_xpath_msw.rb
new file mode 100644
index 0000000000..b40e366afb
--- /dev/null
+++ b/test/rexml/test_xpath_msw.rb
@@ -0,0 +1,42 @@
+require "test/unit/testcase"
+require "test/unit/ui/console/testrunner"
+require "rexml/document"
+
+class XPathAxesTester < Test::Unit::TestCase
+ include REXML
+ SOURCE = <<-EOF
+ <a id='1'>
+ <e id='2'>
+ <f id='3'/>
+ <f id='4'/>
+ <f id='5'/>
+ <f id='6'/>
+ </e>
+ </a>
+ EOF
+
+ def setup
+ @@doc = Document.new(SOURCE) unless defined? @@doc
+ end
+
+ def test_preceding_sibling_axis
+ context = XPath.first(@@doc,"/a/e/f[last()]")
+ assert_equal "6", context.attributes["id"]
+
+ prev = XPath.first(context, "preceding-sibling::f")
+ assert_equal "5", prev.attributes["id"]
+
+ prev = XPath.first(context, "preceding-sibling::f[1]")
+ assert_equal "5", prev.attributes["id"]
+
+ prev = XPath.first(context, "preceding-sibling::f[2]")
+ assert_equal "4", prev.attributes["id"]
+
+ prev = XPath.first(context, "preceding-sibling::f[3]")
+ assert_equal "3", prev.attributes["id"]
+ end
+end
+
+
+#Test::Unit::UI::Console::TestRunner.run(XPathAxesTester.suite)
+
diff --git a/test/rexml/test_xpath_pred.rb b/test/rexml/test_xpath_pred.rb
new file mode 100644
index 0000000000..64eab3e3f9
--- /dev/null
+++ b/test/rexml/test_xpath_pred.rb
@@ -0,0 +1,80 @@
+require "test/unit/testcase"
+require "rexml/document"
+require "rexml/xpath"
+require "rexml/parsers/xpathparser"
+
+class XPathPredicateTester < Test::Unit::TestCase
+ include REXML
+ SRC=<<-EOL
+ <article>
+ <section role="subdivision" id="1">
+ <para>free flowing text.</para>
+ </section>
+ <section role="division">
+ <section role="subdivision" id="2">
+ <para>free flowing text.</para>
+ </section>
+ <section role="division">
+ <para>free flowing text.</para>
+ </section>
+ </section>
+ </article>
+ EOL
+
+ def setup
+ @doc = REXML::Document.new( SRC )
+ @parser = REXML::Parsers::XPathParser.new
+
+ end
+
+ def test_predicates_parent
+ path = '//section[../self::section[@role="division"]]'
+ m = do_path( path )
+ assert_equal( 2, m.size )
+ assert_equal( "2", m[0].attributes["id"] )
+ assert_nil( m[1].attributes["id"] )
+ end
+
+ def test_predicates_single
+ path = '//section[@role="subdivision" and not(../self::section[@role="division"])]'
+ m = do_path( path )
+ assert_equal( 1, m.size )
+ assert_equal( "1", m[0].attributes["id"] )
+ end
+
+ def test_predicates_multi
+ path = '//section[@role="subdivision"][not(../self::section[@role="division"])]'
+ m = do_path( path )
+ assert_equal( 1, m.size )
+ assert_equal( "1", m[0].attributes["id"] )
+ end
+
+ def do_path( path )
+ m = REXML::XPath.match( @doc, path )
+ #puts path, @parser.parse( path ).inspect
+ return m
+ end
+
+ def test_get_no_siblings_terminal_nodes
+ source = <<-XML
+<a>
+ <b number='1' str='abc'>TEXT1</b>
+ <c number='1'/>
+ <c number='2' str='def'>
+ <b number='3'/>
+ <d number='1' str='abc'>TEXT2</d>
+ <b number='2'><!--COMMENT--></b>
+ </c>
+</a>
+XML
+ doc = REXML::Document.new(source)
+ predicate = "count(child::node()|" +
+ "following-sibling::node()|" +
+ "preceding-sibling::node())=0"
+ m = REXML::XPath.match(doc, "/descendant-or-self::node()[#{predicate}]")
+ assert_equal( [REXML::Text.new("TEXT1"),
+ REXML::Text.new("TEXT2"),
+ REXML::Comment.new("COMMENT")],
+ m )
+ end
+end
diff --git a/test/rexml/test_xpathtext.rb b/test/rexml/test_xpathtext.rb
new file mode 100644
index 0000000000..0ae48acffa
--- /dev/null
+++ b/test/rexml/test_xpathtext.rb
@@ -0,0 +1,72 @@
+require 'test/unit'
+require 'rexml/document'
+require 'rexml/element'
+require 'rexml/xpath'
+
+class XpathTestCase < Test::Unit::TestCase
+ def setup
+ @doc = REXML::Document.new
+ end
+
+ def tear_down
+ end
+
+ def test_text_as_element
+ node1 = REXML::Element.new('a', @doc)
+ node2 = REXML::Element.new('b', node1)
+ textnode = REXML::Text.new('test', false, node2)
+ assert_equal(1, @doc.elements.size, "doc owns 1 element node1")
+ assert_same(node1, @doc.elements[1], "doc owns 1 element node1")
+ assert_equal(1, node1.elements.size, "node1 owns 1 element node2")
+ assert_same(node2, node1.elements[1], "node1 owns 1 element node2")
+ assert_equal(1, node2.size, "node2 owns 1 text element")
+ end
+
+ def test_text_in_xpath_query
+ node1 = REXML::Element.new('a', @doc)
+ node2 = REXML::Element.new('b', node1)
+ textnode = REXML::Text.new('test', false, node2)
+ textnode.parent = node2 # should be unnecessary
+ nodes = @doc.get_elements('//b')
+ assert_equal(1, nodes.size, "document has one element")
+ # why doesn't this query work right?
+ nodes = REXML::XPath.match(@doc, '//text()')
+ assert_equal(1, nodes.size, "//text() should yield one Text element")
+ assert_equal(REXML::Text, nodes[0].class)
+ end
+
+ def test_comment_in_xpath_query
+ node1 = REXML::Element.new('a', @doc)
+ node2 = REXML::Element.new('b', node1)
+ commentnode = REXML::Comment.new('test', node2)
+ nodes = REXML::XPath.match(@doc, '//comment()')
+ assert_equal(1, nodes.size, "//comment() should yield one Comment element")
+ assert_same commentnode, nodes[0]
+ end
+
+ def test_parentage
+ node1 = REXML::Element.new('a', @doc)
+ assert_same(@doc, node1.parent, "node1 parent is document")
+ node2 = REXML::Element.new('b', node1)
+ assert_same(node1, node2.parent, "node2 parent is node1")
+ textnode = REXML::Text.new('test', false, node2)
+ # why isn't the text's parent node2?
+ # Also look at Comment, etc.
+ assert_same(node2, textnode.parent)
+ comment = REXML::Comment.new('Test comment', node2)
+ assert_same(node2, comment.parent)
+ end
+
+ def test_ancestors
+ node1 = REXML::Element.new('a', @doc)
+ node2 = REXML::Element.new('b', node1)
+ textnode = REXML::Text.new('test', false, node2)
+ #textnode.parent = node2 # should be unnecessary
+ assert_same node2, textnode.parent
+ nodes = @doc.get_elements('//b/ancestor::*')
+ assert_equal(1, nodes.size, "<b> has one element ancestor")
+ nodes = @doc.get_elements('//b/ancestor::node()')
+ assert_equal(2, nodes.size, "<b> has two node ancestors")
+ assert nodes[1].kind_of?(REXML::Document)
+ end
+end