<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://microformats.org/wiki/index.php?action=history&amp;feed=atom&amp;title=xoxo-sample-code-java</id>
	<title>xoxo-sample-code-java - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://microformats.org/wiki/index.php?action=history&amp;feed=atom&amp;title=xoxo-sample-code-java"/>
	<link rel="alternate" type="text/html" href="http://microformats.org/wiki/index.php?title=xoxo-sample-code-java&amp;action=history"/>
	<updated>2026-05-31T21:19:30Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>http://microformats.org/wiki/index.php?title=xoxo-sample-code-java&amp;diff=41706&amp;oldid=prev</id>
		<title>Newacct at 18:07, 27 January 2010</title>
		<link rel="alternate" type="text/html" href="http://microformats.org/wiki/index.php?title=xoxo-sample-code-java&amp;diff=41706&amp;oldid=prev"/>
		<updated>2010-01-27T18:07:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:07, 27 January 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= XOXO Sample Code - Java =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= XOXO Sample Code - Java =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:'''this is  sub-page of [[xoxo-sample-code]]'''&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:'''this is  sub-page of [[xoxo-sample-code]]'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l90&quot;&gt;Line 90:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 89:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         d.remove(&amp;quot;url&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         d.remove(&amp;quot;url&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       if(d.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;size&lt;/del&gt;() &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt; 0&lt;/del&gt;){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       if(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;!&lt;/ins&gt;d.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;isEmpty&lt;/ins&gt;()){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         sb.append(&amp;quot;&amp;lt;dl&amp;gt;&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         sb.append(&amp;quot;&amp;lt;dl&amp;gt;&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         for(Iterator i = d.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;keySet&lt;/del&gt;().iterator(); i.hasNext();){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         for(Iterator i = d.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;entrySet&lt;/ins&gt;().iterator(); i.hasNext();){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Object k &lt;/del&gt;= i.next();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Map.Entry entry &lt;/ins&gt;= &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(Map.Entry)&lt;/ins&gt;i.next();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           String ddVal = makeXOXO(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;d&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;get&lt;/del&gt;(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;k&lt;/del&gt;),depth+1);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           String ddVal = makeXOXO(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;entry&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;getValue&lt;/ins&gt;(),depth+1);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           sb.append(&amp;quot;&amp;lt;dt&amp;gt;&amp;quot; + &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;k &lt;/del&gt;+ &amp;quot;&amp;lt;/dt&amp;gt;&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           sb.append(&amp;quot;&amp;lt;dt&amp;gt;&amp;quot; + &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;entry.getKey() &lt;/ins&gt;+ &amp;quot;&amp;lt;/dt&amp;gt;&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           sb.append(&amp;quot;&amp;lt;dd&amp;gt;&amp;quot; + ddVal + &amp;quot;&amp;lt;/dd&amp;gt;&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           sb.append(&amp;quot;&amp;lt;dd&amp;gt;&amp;quot; + ddVal + &amp;quot;&amp;lt;/dd&amp;gt;&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l207&quot;&gt;Line 207:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 206:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   protected void pushStruct(Object struct){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   protected void pushStruct(Object struct){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;(struct instanceof Map&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/del&gt;&amp;amp;&amp;amp; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;((Map) struct).&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;size&lt;/del&gt;(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &amp;gt; 0&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if(struct instanceof Map &amp;amp;&amp;amp; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;!&lt;/ins&gt;((Map) struct).&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;isEmpty&lt;/ins&gt;()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         &amp;amp;&amp;amp; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;structs.get(structs.size()-1) instanceof Map&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         &amp;amp;&amp;amp; structs.get(structs.size()-1) instanceof Map&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         &amp;amp;&amp;amp; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;((Map) struct).containsKey(&amp;quot;url&amp;quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/del&gt;)){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         &amp;amp;&amp;amp; ((Map) struct).containsKey(&amp;quot;url&amp;quot;)){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       // put back the &amp;lt;a&amp;gt;-made one for extra defs&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       // put back the &amp;lt;a&amp;gt;-made one for extra defs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       xoStack.add(structs.get(structs.size()-1));&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       xoStack.add(structs.get(structs.size()-1));&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l268&quot;&gt;Line 268:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 267:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         Map defs = (Map) xoStack.get(xoStack.size()-1);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         Map defs = (Map) xoStack.get(xoStack.size()-1);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         String defVal = (String) defs.get(&amp;quot;title&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         String defVal = (String) defs.get(&amp;quot;title&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         if&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;(defVal != null&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/del&gt;&amp;amp;&amp;amp; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;val.equals(defVal&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/del&gt;)){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         if(defVal != null &amp;amp;&amp;amp; val.equals(defVal)){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           val = &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           val = &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         defVal = (String) defs.get(&amp;quot;url&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         defVal = (String) defs.get(&amp;quot;url&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         if&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;(defVal != null&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/del&gt;&amp;amp;&amp;amp; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;val.equals(defVal&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/del&gt;)){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         if(defVal != null &amp;amp;&amp;amp; val.equals(defVal)){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           val = &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           val = &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l305&quot;&gt;Line 305:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 304:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   public void characters(char[] ch, int start, int length){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   public void characters(char[] ch, int start, int length){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;xoStack.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;size&lt;/del&gt;(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &amp;gt; 0&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;!&lt;/ins&gt;xoStack.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;isEmpty&lt;/ins&gt;()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         &amp;amp;&amp;amp; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;!listEls.containsKey(elStack.get(elStack.size()-1&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/del&gt;))){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         &amp;amp;&amp;amp; !listEls.containsKey(elStack.get(elStack.size()-1))){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       String text = (String) textStack.get(textStack.size()-1);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       String text = (String) textStack.get(textStack.size()-1);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       String test = new String(ch,start,length);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       String test = new String(ch,start,length);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l332&quot;&gt;Line 332:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 331:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     while&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;(returnList.size()==1&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/del&gt;){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     while(returnList.size()==1){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       if(returnList.get(0) instanceof List){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       if(returnList.get(0) instanceof List){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         returnList = (List) returnList.get(0);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         returnList = (List) returnList.get(0);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Newacct</name></author>
	</entry>
	<entry>
		<id>http://microformats.org/wiki/index.php?title=xoxo-sample-code-java&amp;diff=31273&amp;oldid=prev</id>
		<title>AndyMabbett at 13:18, 16 January 2008</title>
		<link rel="alternate" type="text/html" href="http://microformats.org/wiki/index.php?title=xoxo-sample-code-java&amp;diff=31273&amp;oldid=prev"/>
		<updated>2008-01-16T13:18:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
= XOXO Sample Code - Java =&lt;br /&gt;
:'''this is  sub-page of [[xoxo-sample-code]]'''&lt;br /&gt;
&lt;br /&gt;
== XOXOWriter.java ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright 2005 Robert Sayre&lt;br /&gt;
 *&lt;br /&gt;
 * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
 * you may not use this file except in compliance with the License.&lt;br /&gt;
 * You may obtain a copy of the License at&lt;br /&gt;
 * &lt;br /&gt;
 *      http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 * &lt;br /&gt;
 * Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 * See the License for the specific language governing permissions and&lt;br /&gt;
 * limitations under the License.&lt;br /&gt;
 *&lt;br /&gt;
 * Portions of this code are derived from the Apache-licensed Python XOXO&lt;br /&gt;
 * module by Kevin Marks. &amp;lt;http://microformats.org/wiki/xoxo-sample-code&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
package org.atompub.draft.xoxo;&lt;br /&gt;
&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
public class XOXOWriter {&lt;br /&gt;
&lt;br /&gt;
  public String[] attrs = {&amp;quot;title&amp;quot;,&amp;quot;rel&amp;quot;,&amp;quot;type&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
  public String makeXOXO(List struct, String className){&lt;br /&gt;
    return makeXOXO(struct, className, 0, true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String makeXOXO(List struct, String className,&lt;br /&gt;
                         boolean doNSDeclaration){&lt;br /&gt;
    return makeXOXO(struct, className, 0, doNSDeclaration);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String makeXOXO(List struct){&lt;br /&gt;
    return makeXOXO(struct, &amp;quot;xoxo&amp;quot;, 0, true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String makeXOXO(Object struct, int depth){&lt;br /&gt;
    return makeXOXO(struct, null, 0, false);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String makeXOXO(Object struct, String className,&lt;br /&gt;
                         int depth, boolean doNSDeclaration){&lt;br /&gt;
    if(struct == null) return &amp;quot;&amp;quot;;&lt;br /&gt;
    StringBuffer sb = new StringBuffer();&lt;br /&gt;
    if(struct instanceof Object[]){&lt;br /&gt;
      struct = Arrays.asList((Object[]) struct);&lt;br /&gt;
    }&lt;br /&gt;
    if(struct instanceof List){&lt;br /&gt;
      sb.append(&amp;quot;&amp;lt;ol&amp;quot;);&lt;br /&gt;
      if(doNSDeclaration)&lt;br /&gt;
        sb.append(&amp;quot; xmlns=\&amp;quot;http://www.w3.org/1999/xhtml\&amp;quot;&amp;quot;);&lt;br /&gt;
      if(className != null){&lt;br /&gt;
        sb.append(&amp;quot; class=\&amp;quot;&amp;quot;);&lt;br /&gt;
        sb.append(className);&lt;br /&gt;
        sb.append(&amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      sb.append(&amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if(struct instanceof Map){&lt;br /&gt;
      Map d = new LinkedHashMap((Map) struct);&lt;br /&gt;
      if(d.containsKey(&amp;quot;url&amp;quot;)){&lt;br /&gt;
        sb.append(&amp;quot;&amp;lt;a href=\&amp;quot;&amp;quot; + d.get(&amp;quot;url&amp;quot;) + &amp;quot;\&amp;quot; &amp;quot;);&lt;br /&gt;
        Object text;&lt;br /&gt;
        if(d.containsKey(&amp;quot;text&amp;quot;)){&lt;br /&gt;
          text = d.get(&amp;quot;text&amp;quot;);&lt;br /&gt;
        }else if(d.containsKey(&amp;quot;title&amp;quot;)){&lt;br /&gt;
          text = d.get(&amp;quot;title&amp;quot;);&lt;br /&gt;
        }else{&lt;br /&gt;
          text = d.get(&amp;quot;url&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        for(int i=0; i&amp;lt;attrs.length; i++){&lt;br /&gt;
          String xVal = makeXOXO(d.get(attrs[i]),depth+1);&lt;br /&gt;
          if(xVal != null &amp;amp;&amp;amp; !xVal.equals(&amp;quot;&amp;quot;)){&lt;br /&gt;
            sb.append(attrs[i] + &amp;quot;=\&amp;quot;&amp;quot; + xVal + &amp;quot;\&amp;quot; &amp;quot;);&lt;br /&gt;
          }&lt;br /&gt;
          d.remove(attrs[i]);&lt;br /&gt;
        }&lt;br /&gt;
        sb.append(&amp;quot;&amp;gt;&amp;quot; + makeXOXO(text, depth+1) + &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;);&lt;br /&gt;
        d.remove(&amp;quot;text&amp;quot;);&lt;br /&gt;
        d.remove(&amp;quot;url&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      if(d.size() &amp;gt; 0){&lt;br /&gt;
        sb.append(&amp;quot;&amp;lt;dl&amp;gt;&amp;quot;);&lt;br /&gt;
        for(Iterator i = d.keySet().iterator(); i.hasNext();){&lt;br /&gt;
          Object k = i.next();&lt;br /&gt;
          String ddVal = makeXOXO(d.get(k),depth+1);&lt;br /&gt;
          sb.append(&amp;quot;&amp;lt;dt&amp;gt;&amp;quot; + k + &amp;quot;&amp;lt;/dt&amp;gt;&amp;quot;);&lt;br /&gt;
          sb.append(&amp;quot;&amp;lt;dd&amp;gt;&amp;quot; + ddVal + &amp;quot;&amp;lt;/dd&amp;gt;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        sb.append(&amp;quot;&amp;lt;/dl&amp;gt;&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }else if(struct instanceof List){&lt;br /&gt;
      List l = (List) struct;&lt;br /&gt;
      for(Iterator i = l.iterator(); i.hasNext();){&lt;br /&gt;
        Object item = i.next();&lt;br /&gt;
        sb.append(&amp;quot;&amp;lt;li&amp;gt;&amp;quot; + makeXOXO(item,depth+1) + &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      sb.append(&amp;quot;&amp;lt;/ol&amp;gt;&amp;quot;);&lt;br /&gt;
    }else{&lt;br /&gt;
      sb.append(struct);&lt;br /&gt;
    }&lt;br /&gt;
    return sb.toString();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String toXOXO(List struct){&lt;br /&gt;
    return toXOXO(struct, false, null);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String toXOXO(Object struct){&lt;br /&gt;
    List alist = new ArrayList();&lt;br /&gt;
    alist.add(struct);&lt;br /&gt;
    return toXOXO(alist);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String toXOXO(Object struct,&lt;br /&gt;
                       boolean addHTMLWrapper,&lt;br /&gt;
                       String cssUrl){&lt;br /&gt;
    List alist = new ArrayList();&lt;br /&gt;
    alist.add(struct);&lt;br /&gt;
    return toXOXO(alist, addHTMLWrapper, cssUrl);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String toXOXO(List struct,&lt;br /&gt;
                       boolean addHTMLWrapper,&lt;br /&gt;
                       String cssUrl){&lt;br /&gt;
    String startHTML = &amp;quot;&amp;lt;!DOCTYPE html PUBLIC \&amp;quot;-//W3C//DTD&amp;quot;&lt;br /&gt;
        + &amp;quot;XHTML 1.0 Transitional//EN\n&amp;quot;&lt;br /&gt;
        + &amp;quot;http://www.w3.org/TR/xhtml1/DTD/&amp;quot;&lt;br /&gt;
        + &amp;quot;xhtml1-transitional.dtd\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt;html xmlns=\&amp;quot;http://www.w3.org/1999/xhtml\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt;head&amp;gt;&amp;quot;;&lt;br /&gt;
    if(addHTMLWrapper){&lt;br /&gt;
      String s = startHTML;&lt;br /&gt;
      if(cssUrl != null){&lt;br /&gt;
        s += &amp;quot;&amp;lt;style type=\&amp;quot;text/css\&amp;quot;&amp;gt;@import \&amp;quot;&amp;quot;&lt;br /&gt;
            + cssUrl + &amp;quot;\&amp;quot;;&amp;lt;/style&amp;gt;&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
      s += &amp;quot;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;quot; + makeXOXO(struct, &amp;quot;xoxo&amp;quot;, false)&lt;br /&gt;
          + &amp;quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;;&lt;br /&gt;
      return s;&lt;br /&gt;
    }else{&lt;br /&gt;
      return makeXOXO(struct, &amp;quot;xoxo&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XOXOParser.java ==&lt;br /&gt;
This needs some small additions to handle the XHTML DTD and named character entities.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright 2005 Robert Sayre&lt;br /&gt;
 *&lt;br /&gt;
 * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
 * you may not use this file except in compliance with the License.&lt;br /&gt;
 * You may obtain a copy of the License at&lt;br /&gt;
 * &lt;br /&gt;
 *      http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 * &lt;br /&gt;
 * Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 * See the License for the specific language governing permissions and&lt;br /&gt;
 * limitations under the License.&lt;br /&gt;
 *&lt;br /&gt;
 * Portions of this code are derived from the Apache-licensed Python XOXO&lt;br /&gt;
 * module by Kevin Marks. &amp;lt;http://microformats.org/wiki/xoxo-sample-code&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
package org.atompub.draft.xoxo;&lt;br /&gt;
&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
import org.xml.sax.SAXException;&lt;br /&gt;
import org.xml.sax.XMLReader;&lt;br /&gt;
import org.xml.sax.Attributes;&lt;br /&gt;
import org.xml.sax.helpers.XMLReaderFactory;&lt;br /&gt;
import org.xml.sax.helpers.DefaultHandler;&lt;br /&gt;
&lt;br /&gt;
import java.util.*;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.StringReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
&lt;br /&gt;
public class XOXOParser extends DefaultHandler {&lt;br /&gt;
&lt;br /&gt;
  protected String XHTML_NS = &amp;quot;http://www.w3.org/1999/xhtml&amp;quot;;&lt;br /&gt;
  protected List elStack;&lt;br /&gt;
  protected Map listEls;&lt;br /&gt;
  public List structs;&lt;br /&gt;
  public List xoStack;&lt;br /&gt;
  public List textStack;&lt;br /&gt;
&lt;br /&gt;
  public XOXOParser() {&lt;br /&gt;
    reset();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  protected void pushStruct(Object struct){&lt;br /&gt;
    if((struct instanceof Map) &amp;amp;&amp;amp; (((Map) struct).size() &amp;gt; 0)&lt;br /&gt;
        &amp;amp;&amp;amp; (structs.get(structs.size()-1) instanceof Map)&lt;br /&gt;
        &amp;amp;&amp;amp; (((Map) struct).containsKey(&amp;quot;url&amp;quot;))){&lt;br /&gt;
      // put back the &amp;lt;a&amp;gt;-made one for extra defs&lt;br /&gt;
      xoStack.add(structs.get(structs.size()-1));&lt;br /&gt;
    }else{&lt;br /&gt;
      structs.add(struct);&lt;br /&gt;
      xoStack.add(struct);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void startElement(String nsUri, String localName,&lt;br /&gt;
                           String qName, Attributes atts){&lt;br /&gt;
    // bounce non-XHTML elements&lt;br /&gt;
    if(nsUri.equals(XHTML_NS)){&lt;br /&gt;
      elStack.add(localName);&lt;br /&gt;
    }else{&lt;br /&gt;
      elStack.add(&amp;quot;foo&amp;quot;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(localName.equals(&amp;quot;a&amp;quot;)){&lt;br /&gt;
      Map attmap = new LinkedHashMap();&lt;br /&gt;
      int len = atts.getLength();&lt;br /&gt;
      for(int i=0; i&amp;lt;len; i++){&lt;br /&gt;
        attmap.put(atts.getQName(i),atts.getValue(i));&lt;br /&gt;
      }&lt;br /&gt;
      if(attmap.containsKey(&amp;quot;href&amp;quot;)){&lt;br /&gt;
        attmap.put(&amp;quot;url&amp;quot;,attmap.get(&amp;quot;href&amp;quot;));&lt;br /&gt;
        attmap.remove(&amp;quot;href&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      pushStruct(attmap);&lt;br /&gt;
      textStack.add(&amp;quot;&amp;quot;);&lt;br /&gt;
    }else if(localName.equals(&amp;quot;dl&amp;quot;)){&lt;br /&gt;
      pushStruct(new LinkedHashMap());&lt;br /&gt;
    }else if(localName.equals(&amp;quot;ol&amp;quot;)){&lt;br /&gt;
      pushStruct(new ArrayList());&lt;br /&gt;
    }else if(localName.equals(&amp;quot;ul&amp;quot;)){&lt;br /&gt;
      pushStruct(new ArrayList());&lt;br /&gt;
    }else if(localName.equals(&amp;quot;li&amp;quot;)){&lt;br /&gt;
      textStack.add(&amp;quot;&amp;quot;);&lt;br /&gt;
    }else if(localName.equals(&amp;quot;dt&amp;quot;)){&lt;br /&gt;
      textStack.add(&amp;quot;&amp;quot;);&lt;br /&gt;
    }else if(localName.equals(&amp;quot;dd&amp;quot;)){&lt;br /&gt;
      textStack.add(&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void endElement(String nsUri, String localName,&lt;br /&gt;
                         String qName){&lt;br /&gt;
    elStack.remove(elStack.size()-1);&lt;br /&gt;
    // bounce non-XHTML elements&lt;br /&gt;
    if(nsUri != XHTML_NS){&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(localName.equals(&amp;quot;a&amp;quot;)){&lt;br /&gt;
      String val = (String) textStack.remove(textStack.size()-1);&lt;br /&gt;
      if (val.length() &amp;gt; 0){&lt;br /&gt;
        Map defs = (Map) xoStack.get(xoStack.size()-1);&lt;br /&gt;
        String defVal = (String) defs.get(&amp;quot;title&amp;quot;);&lt;br /&gt;
        if((defVal != null) &amp;amp;&amp;amp; (val.equals(defVal))){&lt;br /&gt;
          val = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        defVal = (String) defs.get(&amp;quot;url&amp;quot;);&lt;br /&gt;
        if((defVal != null) &amp;amp;&amp;amp; (val.equals(defVal))){&lt;br /&gt;
          val = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if(val.length() &amp;gt; 0){&lt;br /&gt;
          defs.put(&amp;quot;text&amp;quot;,val);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      xoStack.remove(xoStack.size()-1);&lt;br /&gt;
    }else if(localName.equals(&amp;quot;dl&amp;quot;)){&lt;br /&gt;
      xoStack.remove(xoStack.size()-1);&lt;br /&gt;
    }else if(localName.equals(&amp;quot;ol&amp;quot;)){&lt;br /&gt;
      xoStack.remove(xoStack.size()-1);&lt;br /&gt;
    }else if(localName.equals(&amp;quot;ul&amp;quot;)){&lt;br /&gt;
      xoStack.remove(xoStack.size()-1);&lt;br /&gt;
    }else if(localName.equals(&amp;quot;li&amp;quot;)){&lt;br /&gt;
      Object val = textStack.remove(textStack.size()-1);&lt;br /&gt;
      List last = (List) xoStack.get(xoStack.size()-1);&lt;br /&gt;
      if(structs.get(structs.size()-1) != last){&lt;br /&gt;
        val = structs.remove(structs.size()-1);&lt;br /&gt;
      }&lt;br /&gt;
      last.add(val);&lt;br /&gt;
    }else if(localName.equals(&amp;quot;dd&amp;quot;)){&lt;br /&gt;
      Object val = textStack.remove(textStack.size()-1);&lt;br /&gt;
      Object key = textStack.remove(textStack.size()-1);&lt;br /&gt;
      Map last = (Map) xoStack.get(xoStack.size()-1);&lt;br /&gt;
      if(structs.get(structs.size()-1) != last){&lt;br /&gt;
        val = structs.remove(structs.size()-1);&lt;br /&gt;
      }&lt;br /&gt;
      last.put(key,val);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void characters(char[] ch, int start, int length){&lt;br /&gt;
    if((xoStack.size() &amp;gt; 0)&lt;br /&gt;
        &amp;amp;&amp;amp; (!listEls.containsKey(elStack.get(elStack.size()-1)))){&lt;br /&gt;
      String text = (String) textStack.get(textStack.size()-1);&lt;br /&gt;
      String test = new String(ch,start,length);&lt;br /&gt;
      textStack.set(textStack.size()-1,text+test);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public Object parse(String s) throws SAXException, IOException{&lt;br /&gt;
    return parse(new InputSource(new StringReader(s)));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public Object parse(InputStream is) throws SAXException, IOException {&lt;br /&gt;
    return parse(new InputSource(is));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public Object parse(InputSource in) throws SAXException, IOException {&lt;br /&gt;
    XMLReader parser = XMLReaderFactory.createXMLReader();&lt;br /&gt;
    parser.setContentHandler(this);&lt;br /&gt;
    parser.parse(in);&lt;br /&gt;
    List returnList = new ArrayList();&lt;br /&gt;
    for(Iterator i = this.structs.iterator(); i.hasNext();){&lt;br /&gt;
      Object thing = i.next();&lt;br /&gt;
      if(thing != null){&lt;br /&gt;
        returnList.add(thing);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    while((returnList.size()==1)){&lt;br /&gt;
      if(returnList.get(0) instanceof List){&lt;br /&gt;
        returnList = (List) returnList.get(0);&lt;br /&gt;
      }else{&lt;br /&gt;
        reset();&lt;br /&gt;
        return returnList.get(0);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    reset();&lt;br /&gt;
    return returnList;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  protected void reset(){&lt;br /&gt;
    elStack = new ArrayList();&lt;br /&gt;
    listEls = new HashMap();&lt;br /&gt;
    structs = new ArrayList();&lt;br /&gt;
    xoStack = new ArrayList();&lt;br /&gt;
    textStack = new ArrayList();&lt;br /&gt;
    listEls.put(&amp;quot;ol&amp;quot;,&amp;quot;ol&amp;quot;);&lt;br /&gt;
    listEls.put(&amp;quot;ul&amp;quot;,&amp;quot;ul&amp;quot;);&lt;br /&gt;
    listEls.put(&amp;quot;dl&amp;quot;,&amp;quot;dl&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XOXOTest.java ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright 2005 Robert Sayre&lt;br /&gt;
 *&lt;br /&gt;
 * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
 * you may not use this file except in compliance with the License.&lt;br /&gt;
 * You may obtain a copy of the License at&lt;br /&gt;
 * &lt;br /&gt;
 *      http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 * &lt;br /&gt;
 * Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 * See the License for the specific language governing permissions and&lt;br /&gt;
 * limitations under the License.&lt;br /&gt;
 *&lt;br /&gt;
 * Portions of this code are derived from the Apache-licensed Python XOXO&lt;br /&gt;
 * module by Kevin Marks. &amp;lt;http://microformats.org/wiki/xoxo-sample-code&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
package org.atompub.draft.xoxo.tests;&lt;br /&gt;
&lt;br /&gt;
import junit.framework.TestSuite;&lt;br /&gt;
import junit.framework.TestCase;&lt;br /&gt;
import junit.textui.TestRunner;&lt;br /&gt;
import org.atompub.draft.xoxo.XOXOWriter;&lt;br /&gt;
import org.atompub.draft.xoxo.XOXOParser;&lt;br /&gt;
&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
public class XOXOTest extends TestCase {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new TestRunner().doRun(new TestSuite(XOXOTest.class));&lt;br /&gt;
  }&lt;br /&gt;
  String XHTML_DEC = &amp;quot;xmlns=\&amp;quot;http://www.w3.org/1999/xhtml\&amp;quot; &amp;quot;;&lt;br /&gt;
  public String simpleListHTML = &amp;quot;&amp;lt;ol &amp;quot;&lt;br /&gt;
  + XHTML_DEC&lt;br /&gt;
  + &amp;quot;class=\&amp;quot;xoxo\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  + &amp;quot;&amp;lt;li&amp;gt;1&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;2&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;3&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testSimpleList(){&lt;br /&gt;
    String [] numbers = {&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;};&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    assertEquals(simpleListHTML,&lt;br /&gt;
                 xoxo.toXOXO(Arrays.asList(numbers)));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testStringIntegerList(){&lt;br /&gt;
    Object[] numbers = {new Integer(1),&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;};&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    assertEquals(simpleListHTML,&lt;br /&gt;
                 xoxo.toXOXO(Arrays.asList(numbers)));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String nestedListHTML = &amp;quot;&amp;lt;ol &amp;quot;&lt;br /&gt;
  + XHTML_DEC&lt;br /&gt;
  + &amp;quot;class=\&amp;quot;xoxo\&amp;quot;&amp;gt;&amp;lt;li&amp;gt;1&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;quot;&lt;br /&gt;
  + &amp;quot;&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;2&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;3&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testNestedList(){&lt;br /&gt;
    Object[] arr = {&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;};&lt;br /&gt;
    Object[] nested = {&amp;quot;1&amp;quot;,Arrays.asList(arr)};&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    assertEquals(nestedListHTML,&lt;br /&gt;
                 xoxo.toXOXO(Arrays.asList(nested)));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testNestedArray(){&lt;br /&gt;
    Object[] arr = {&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;};&lt;br /&gt;
    Object[] nested = {&amp;quot;1&amp;quot;,arr};&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    assertEquals(nestedListHTML,&lt;br /&gt;
                 xoxo.toXOXO(Arrays.asList(nested)));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String dictHTML = &amp;quot;&amp;lt;ol &amp;quot;&lt;br /&gt;
  + XHTML_DEC&lt;br /&gt;
  + &amp;quot;class=\&amp;quot;xoxo\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  + &amp;quot;&amp;lt;li&amp;gt;&amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;test&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;1&amp;lt;/dd&amp;gt;&amp;lt;dt&amp;gt;name&amp;lt;/dt&amp;gt;&amp;quot;&lt;br /&gt;
  + &amp;quot;&amp;lt;dd&amp;gt;Kevin&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testDictionary(){&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;test&amp;quot;, new Integer(1));&lt;br /&gt;
    dict.put(&amp;quot;name&amp;quot;, &amp;quot;Kevin&amp;quot;);&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    assertEquals(dictHTML,&lt;br /&gt;
                 xoxo.toXOXO(dict));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String singleHTML = &amp;quot;&amp;lt;ol &amp;quot;&lt;br /&gt;
  + XHTML_DEC&lt;br /&gt;
  + &amp;quot;class=\&amp;quot;xoxo\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  + &amp;quot;&amp;lt;li&amp;gt;test&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testSingleItem(){&lt;br /&gt;
    String item = &amp;quot;test&amp;quot;;&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    assertEquals(singleHTML,&lt;br /&gt;
                 xoxo.toXOXO(item));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testWrapDiffers(){&lt;br /&gt;
    String item = &amp;quot;test&amp;quot;;&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    String nowrap = xoxo.toXOXO(item);&lt;br /&gt;
    Object[] itemArr = {item};&lt;br /&gt;
    String wrap = xoxo.toXOXO(Arrays.asList(itemArr),true,null);&lt;br /&gt;
    assertFalse(wrap.equals(nowrap));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  String startHTML = &amp;quot;&amp;lt;!DOCTYPE html PUBLIC \&amp;quot;-//W3C//DTD&amp;quot;&lt;br /&gt;
        + &amp;quot;XHTML 1.0 Transitional//EN\n&amp;quot;&lt;br /&gt;
        + &amp;quot;http://www.w3.org/TR/xhtml1/DTD/&amp;quot;&lt;br /&gt;
        + &amp;quot;xhtml1-transitional.dtd\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt;html xmlns=\&amp;quot;http://www.w3.org/1999/xhtml\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;quot;;&lt;br /&gt;
  public String singleWrapHTML = &amp;quot;&amp;lt;ol &amp;quot;&lt;br /&gt;
  + &amp;quot;class=\&amp;quot;xoxo\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  + &amp;quot;&amp;lt;li&amp;gt;test&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
  public String endHTML = &amp;quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testWrapSingleItem(){&lt;br /&gt;
    String item = &amp;quot;test&amp;quot;;&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    assertEquals(startHTML + singleWrapHTML + endHTML,&lt;br /&gt;
                 xoxo.toXOXO(item,true,null));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testXOXOParser(){&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    try{&lt;br /&gt;
      parser.parse(dictHTML);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testDictRoundTrip(){&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;test&amp;quot;, &amp;quot;1&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;name&amp;quot;, &amp;quot;Kevin&amp;quot;);&lt;br /&gt;
    String html = xoxo.toXOXO(dict);&lt;br /&gt;
     try{&lt;br /&gt;
      Object newDict = parser.parse(html);&lt;br /&gt;
      assertEquals(dict,newDict);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testListRoundTrip(){&lt;br /&gt;
    Object[] obj = {&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;};&lt;br /&gt;
    List testList = Arrays.asList(obj);&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    String html = xoxo.toXOXO(testList);&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    try{&lt;br /&gt;
      Object newList = parser.parse(html);&lt;br /&gt;
      assertEquals(testList,newList);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testListOfDictsRoundTrip(){&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;test&amp;quot;, &amp;quot;1&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;name&amp;quot;, &amp;quot;Kevin&amp;quot;);&lt;br /&gt;
    Map dict2 = new LinkedHashMap();&lt;br /&gt;
    dict2.put(&amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;);&lt;br /&gt;
    dict2.put(&amp;quot;three&amp;quot;, &amp;quot;four&amp;quot;);&lt;br /&gt;
    dict2.put(&amp;quot;five&amp;quot;, &amp;quot;six&amp;quot;);&lt;br /&gt;
    Object[] obj = {&amp;quot;1&amp;quot;,dict,dict2};&lt;br /&gt;
    List testList = Arrays.asList(obj);&lt;br /&gt;
    String html = xoxo.toXOXO(testList);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newList = parser.parse(html);&lt;br /&gt;
      assertEquals(testList,newList);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testListOfListsRoundTrip(){&lt;br /&gt;
    Object[] list1 = {&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;};&lt;br /&gt;
    Object[] list2 = {&amp;quot;4&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;6&amp;quot;, Arrays.asList(list1)};&lt;br /&gt;
    Object[] list3 = {&amp;quot;7&amp;quot;, Arrays.asList(list2)};&lt;br /&gt;
    Object[] list4 = {&amp;quot;8&amp;quot;, Arrays.asList(list3)};&lt;br /&gt;
    List testList = Arrays.asList(list4);&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    String html = xoxo.toXOXO(testList);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newList = parser.parse(html);&lt;br /&gt;
      assertEquals(testList,newList);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testDictOfListsRoundTrip(){&lt;br /&gt;
    Object[] list1 = {&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;};&lt;br /&gt;
    Object[] list2 = {&amp;quot;4&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;6&amp;quot;};&lt;br /&gt;
    Object[] list3 = {&amp;quot;7&amp;quot;};&lt;br /&gt;
    Object[] list4 = {&amp;quot;8&amp;quot;, &amp;quot;9&amp;quot;};&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;foo&amp;quot;, Arrays.asList(list1));&lt;br /&gt;
    dict.put(&amp;quot;bar&amp;quot;, Arrays.asList(list2));&lt;br /&gt;
    dict.put(&amp;quot;baz&amp;quot;, Arrays.asList(list3));&lt;br /&gt;
    dict.put(&amp;quot;qux&amp;quot;, Arrays.asList(list4));&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    String html = xoxo.toXOXO(dict);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newDict = parser.parse(html);&lt;br /&gt;
      assertEquals(dict,newDict);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String junkXOXO = &amp;quot;&amp;lt;ol &amp;quot;&lt;br /&gt;
  + XHTML_DEC&lt;br /&gt;
  + &amp;quot;class=\&amp;quot;xoxo\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  + &amp;quot;bad&amp;lt;li&amp;gt;&amp;lt;dl&amp;gt;worse&amp;lt;dt&amp;gt;good&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;buy&amp;lt;/dd&amp;gt; now&amp;lt;/dl&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testXOXOJunkInContainers(){&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;good&amp;quot;,&amp;quot;buy&amp;quot;);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newDict = parser.parse(junkXOXO);&lt;br /&gt;
      assertEquals(dict,newDict);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String junkElementXOXO = &amp;quot;&amp;lt;ol &amp;quot;&lt;br /&gt;
  + XHTML_DEC&lt;br /&gt;
  + &amp;quot;&amp;gt;&amp;lt;li&amp;gt;bad&amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;good&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;buy&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&amp;quot;&lt;br /&gt;
  + &amp;quot;worse&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;bag&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;OK&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;fish&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testXOXOjunkInElements(){&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;good&amp;quot;,&amp;quot;buy&amp;quot;);&lt;br /&gt;
    Object[] ok = {&amp;quot;OK&amp;quot;};&lt;br /&gt;
    Object[] obj ={dict, Arrays.asList(ok)};&lt;br /&gt;
    List testList = Arrays.asList(obj);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newList = parser.parse(junkElementXOXO);&lt;br /&gt;
      assertEquals(testList,newList);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String xoxoSpacesNewlines = &amp;quot;&amp;lt;ol &amp;quot; +  XHTML_DEC +&lt;br /&gt;
      &amp;quot; class='xoxo'&amp;gt; \n&amp;quot; +&lt;br /&gt;
      &amp;quot;  &amp;lt;li&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;    &amp;lt;dl&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;text&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;item 1&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;description&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt; This item represents the main&amp;quot; +&lt;br /&gt;
      &amp;quot; point we're trying to make.&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;url&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;http://example.com/more.xoxo&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;title&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;title of item 1&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;type&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;text/xml&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;rel&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;help&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;    &amp;lt;/dl&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;  &amp;lt;/li&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testXOXOWithSpacesAndNewlines(){&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;text&amp;quot;,&amp;quot;item 1&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;description&amp;quot;,&amp;quot; This item represents the main&amp;quot; +&lt;br /&gt;
        &amp;quot; point we're trying to make.&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;url&amp;quot;,&amp;quot;http://example.com/more.xoxo&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;title&amp;quot;,&amp;quot;title of item 1&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;type&amp;quot;,&amp;quot;text/xml&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;rel&amp;quot;,&amp;quot;help&amp;quot;);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newDict = parser.parse(xoxoSpacesNewlines);&lt;br /&gt;
      assertEquals(dict,newDict);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String xoxoSample = &amp;quot;&amp;lt;ol &amp;quot; +  XHTML_DEC +&lt;br /&gt;
      &amp;quot; class='xoxo'&amp;gt; \n&amp;quot; +&lt;br /&gt;
      &amp;quot;  &amp;lt;li&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;    &amp;lt;dl&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;text&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;item 1&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;url&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;http://example.com/more.xoxo&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;title&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;title of item 1&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;type&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;text/xml&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dt&amp;gt;rel&amp;lt;/dt&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;        &amp;lt;dd&amp;gt;help&amp;lt;/dd&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;    &amp;lt;/dl&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;  &amp;lt;/li&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public String smartXOXOSample = &amp;quot;&amp;lt;ol &amp;quot; + XHTML_DEC +&lt;br /&gt;
      &amp;quot;class=\&amp;quot;xoxo\&amp;quot;&amp;gt; \n&amp;quot; +&lt;br /&gt;
      &amp;quot;  &amp;lt;li&amp;gt;&amp;lt;a href=\&amp;quot;http://example.com/more.xoxo\&amp;quot;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;         title=\&amp;quot;title of item 1\&amp;quot;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;         type=\&amp;quot;text/xml\&amp;quot;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;         rel=\&amp;quot;help\&amp;quot;&amp;gt;item 1&amp;lt;/a&amp;gt; \n&amp;quot; +&lt;br /&gt;
      &amp;quot;&amp;lt;!-- note how the \&amp;quot;text\&amp;quot; property is simply&amp;quot; +&lt;br /&gt;
      &amp;quot; the contents of the &amp;lt;a&amp;gt; element --&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;  &amp;lt;/li&amp;gt;\n&amp;quot; +&lt;br /&gt;
      &amp;quot;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testSpecialAttributeDecoding(){&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    try{&lt;br /&gt;
      Object xoxoDict = parser.parse(xoxoSample);&lt;br /&gt;
      Object xoxoDict2 = parser.parse(smartXOXOSample);&lt;br /&gt;
      assertEquals(xoxoDict,xoxoDict2);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String specialAttrHTML =  &amp;quot;&amp;lt;ol &amp;quot; + XHTML_DEC +&lt;br /&gt;
      &amp;quot;class=\&amp;quot;xoxo\&amp;quot;&amp;gt;&amp;quot; +&lt;br /&gt;
      &amp;quot;&amp;lt;li&amp;gt;&amp;lt;a href=\&amp;quot;http://example.com/more.xoxo\&amp;quot; title=\&amp;quot;sample url\&amp;quot; &amp;quot; +&lt;br /&gt;
      &amp;quot;rel=\&amp;quot;help\&amp;quot; type=\&amp;quot;text/xml\&amp;quot; &amp;gt;an example&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public void testSpecialAttributeEncode(){&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;url&amp;quot;,&amp;quot;http://example.com/more.xoxo&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;title&amp;quot;,&amp;quot;sample url&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;type&amp;quot;,&amp;quot;text/xml&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;rel&amp;quot;,&amp;quot;help&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;text&amp;quot;,&amp;quot;an example&amp;quot;);&lt;br /&gt;
    String html = xoxo.toXOXO(dict);&lt;br /&gt;
    assertEquals(specialAttrHTML,html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testSpecialAttributeRoundTripFull(){&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;url&amp;quot;,&amp;quot;http://example.com/more.xoxo&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;title&amp;quot;,&amp;quot;sample url&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;type&amp;quot;,&amp;quot;text/xml&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;rel&amp;quot;,&amp;quot;help&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;text&amp;quot;,&amp;quot;an example&amp;quot;);&lt;br /&gt;
    String html = xoxo.toXOXO(dict);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newDict = parser.parse(html);&lt;br /&gt;
      assertEquals(dict,newDict);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testSpecialAttributeRoundTripNoText(){&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;url&amp;quot;,&amp;quot;http://example.com/more.xoxo&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;title&amp;quot;,&amp;quot;sample url&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;type&amp;quot;,&amp;quot;text/xml&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;rel&amp;quot;,&amp;quot;help&amp;quot;);&lt;br /&gt;
    String html = xoxo.toXOXO(dict);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newDict = parser.parse(html);&lt;br /&gt;
      assertEquals(dict,newDict);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testSpecialAttributeRoundTripNoTextOrTitle(){&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    Map dict = new LinkedHashMap();&lt;br /&gt;
    dict.put(&amp;quot;url&amp;quot;,&amp;quot;http://example.com/more.xoxo&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;type&amp;quot;,&amp;quot;text/xml&amp;quot;);&lt;br /&gt;
    dict.put(&amp;quot;rel&amp;quot;,&amp;quot;help&amp;quot;);&lt;br /&gt;
    String html = xoxo.toXOXO(dict);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newDict = parser.parse(html);&lt;br /&gt;
      assertEquals(dict,newDict);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void testUnicodeRoundTrip(){&lt;br /&gt;
    String s = &amp;quot;Tantek Çelik and a snowman ?&amp;quot;;&lt;br /&gt;
    XOXOWriter xoxo = new XOXOWriter();&lt;br /&gt;
    XOXOParser parser = new XOXOParser();&lt;br /&gt;
    String html = xoxo.toXOXO(s);&lt;br /&gt;
    try{&lt;br /&gt;
      Object newString = parser.parse(html);&lt;br /&gt;
      assertEquals(s,newString);&lt;br /&gt;
    }catch (Exception e){&lt;br /&gt;
      fail(e.getMessage());&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AndyMabbett</name></author>
	</entry>
</feed>