<!--
  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.
-->
<font face="Arial" size="40"><textformat rightmargin="400" leftmargin="100" >left margin 100 and right margin 400 test bbbbbbbbbbbbbbbbbbbbbbbbbbbbb</textformat></font>

<font size="14" face="Times New Roman"><p class="class1"></p><textformat indent="50">Indent 50 ,non-default font, and nested tags test,formatting for an <b>implied<i>implied again</i></b> para <i>and<b>and again</b></i> its contents</textformat></font>

<font><p class="class2"><span class="mySpan">span and para with class attributes</span></p><textformat indent="100">Indent 100 and span class test,formatting for an <b>implied</b> para <i>and</i> its contents<br>this is second line</textformat></font>

<font><p class="class3"></p><textformat tabstops="200">tabstops 200 test</textformat></font>

<font><p class="class3"></p><textformat indent="50" blockindent="100" leftmargin="200">indent+blockindent+leftmargin total 350</textformat></font>

<font><p class="class4"><span class="mySpan">leading 200% test, first line</span></p><textformat leading="200%">leading test second line, should have 200% leading space with first line</textformat></font>

<p>image test: <img height="20" width="19" src="../../test/testFiles/assets/surprised.png" align="AAAA"></p>


<!-- Kerning test -->
<P ALIGN="left"><FONT FACE="Arial" SIZE="100" COLOR="#000000" LETTERSPACING="0" KERNING="0"> kerning off test AV </FONT></P>
<P ALIGN="left"><FONT FACE="Arial" SIZE="100" COLOR="#000000" LETTERSPACING="0" KERNING="1"> kerning auto test AV</FONT></P>
<!-- letterspacing test-->
<P ALIGN="left"><FONT FACE="Arial" SIZE="50" COLOR="#000000" LETTERSPACING="10" KERNING="0">Letterspace 10 test</FONT></p>
<!-- br test-->
<p>break element without end tag <br>second line.</p>
<p>break element without begin tag <br/>second line.</p>
<!-- invalid br tag test, ignore-->	
<p>break element with a invalid break tag </br>second line.</p>
<!-- align center test -->
<font face="Arial"><p class="myPara" align="center"><span class="mySpan">Align center test</span></p></font>


