<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<?xml version="1.0" encoding="utf-8"?>
<HTML>
<BODY>
<!-- basic list test -->
<ul>
<li>Unorderd list test</li>
<li>another</li>
<li>another</li>
<li>another</li>
<li>another</li>
</ul>
<ol>
<li>Ordered list test</li>
<li>another</li>
<li>another</li>
<li>another</li>
<li>another</li>
</ol>
<!-- nested list test -->
<ol>
<li>Nested lists test
	<ol>
	<li>Ordered lists in this list: first item</li>
	<li>another</li>
	<li>and another</li>
	<li>and another</li>
	<li>and another</li>
	</ol></li>
<li>another
	<ul>
	<li>Unordered lists in this list: first item</li>
	<li>another</li>
	<li>and another</li>
	<li>and another</li>
	<li>and another</li>
	</ul></li>
<li>and another</li>
<li>and again</li>
<li>and again again</li>
<li>and again another</li>
</ol>
</BODY>
</HTML> 
