<?xml version="1.0"?>
<!DOCTYPE document SYSTEM "./dtd/document-v10.dtd">

<!-- ========================================================================= -->
<!-- Copyright (C) The Apache Software Foundation. All rights reserved.        -->
<!--                                                                           -->
<!-- This software is published under the terms of the Apache Software License -->
<!-- version 1.1, a copy of which has been included with this distribution in  -->
<!-- the LICENSE file.                                                         -->
<!-- ========================================================================= -->

<!-- ========================================================================= -->
<!-- author Thierry.Kormann@sophia.inria.fr                                                 -->
<!-- author vincent.hardy@eng.sun.com                                          -->
<!-- version $Id$ -->
<!-- ========================================================================= -->
<document>
    <header>
        <title>Text BE Test Status</title>
        <subtitle>W3C Testsuite</subtitle>
        <authors>
            <person name="Bill Haneman" email="bill.haneman@ireland.sun.com" />
        </authors>
    </header>

    <body>
        <s1 title="Introduction">
            <p>
            This page shows Batik's implementation status with 
            regards to the text subset of the Scalable Vector 
            Graphics Basic Effectivity test suite, commonly referred 
            to as the SVG BE Test suite.
            </p>
            <p>
            The SVG BE Test suite is developed by the W3C SVG working
            group to allow implementation to check their level of
            conformance with the SVG specification. In that spirit,
            the table below shows how much of the test suite the 
            SVG Viewer included in the Batik distribution passes.
            </p>
            <p>
            This table is similar to the table in the accompanying
            SVG Test Status document, but with more detail regarding
            the nature of and reasons for failure (where known).
            </p>
        </s1>

        <s1 title="SVG BE Text Test Results: Batik">
        <p>
        Results
        </p>
        <table>
	    <tr>
	      <td >Test File</td>
	      <td >Pass/Fail</td>
              <td >Nature of failure</td>
              <td >Missing Feature ?</td>
              <td >Bug ?</td>
              <td >Modules requiring changes</td>
	    </tr>
	    <tr>
	      <td >text-alignment-BE-10.svg</td>
	      <td >Fail</td>
              <td >incorrect display [1]</td>
              <td >numeric and relative baseline-shifts</td>
              <td >?</td>
              <td >TextElementBridge, TextLayout?</td>
	    </tr>
	    <tr>
	      <td >text-alignment-BE-11.svg</td>
	      <td >Fail</td>
              <td >incorrect display [1]</td>
              <td >numeric and relative baseline-shifts</td>
              <td >?</td>
              <td >TextElementBridge, TextPainter?</td>
	    </tr>
	    <tr>
	      <td >text-altGlyph-BE-07.svg</td>
	      <td >Fail</td>
              <td >parse fail</td>
              <td >altGlyph</td>
              <td >&nbsp;</td>
              <td >TextElementBridge, TextPainter</td>
	    </tr>
	    <tr>
	      <td >text-decoration-BE-12.svg</td>
	      <td >Fail</td>
              <td >incorrect display</td>
              <td >inherited decoration-stroke/fill</td>
              <td >TextElementBridge - tspan whitespace bug</td>
              <td >TextElementBridge</td>
	    </tr>
	    <tr>
	      <td >text-font-BE-15.svg</td>
	      <td >Pass</td>
              <td >&nbsp;</td>
              <td >&nbsp;</td>
              <td >&nbsp;</td>
              <td >&nbsp;</td>
	    </tr>
	    <tr>
	      <td >text-font-BE-16.svg</td>
	      <td >Fail</td>
              <td >incorrect display</td>
              <td >font-weight="bolder"|"lighter"</td>
              <td >TextElementBridge and Style</td>
              <td >TextElementBridge, CSSUtils?</td>
	    </tr>
            <tr>
	      <td >text-glyphRun-BE-08.svg</td>
	      <td >Fail</td>
              <td >parse failure</td>
              <td >glyphRun</td>
              <td >TextElementBridge and TextPainter</td>
              <td >TBD</td>
	    </tr>
	    <tr>
	      <td >text-i18n-BE-09.svg</td>
	      <td >Fail</td>
              <td >parse failure</td>
              <td >?</td>
              <td >?encoding-related?</td>
              <td >TBD</td>
	    </tr>
	    <tr>
	      <td >text-selection-BE-13.svg</td>
	      <td >Fail</td>
              <td >incomplete display</td>
              <td >tspan "x","y"</td>
              <td >&nbsp;</td>
              <td >TextElementBridge, TextPainter</td>
	    </tr>
	    <tr>
	      <td >text-spacing-BE-14.svg</td>
	      <td >Fail</td>
              <td >incorrect display</td>
              <td >text spacing control</td>
              <td >&nbsp;</td>
              <td >TextElementBridge, TextPainter</td>
	    </tr>
	    <tr>
	      <td >text-text-BE-01.svg</td>
	      <td >Pass</td>
	      <td >&nbsp;</td>
	      <td >&nbsp;</td>
	      <td >&nbsp;</td>
	      <td >&nbsp;</td>
	    </tr>
	    <tr>
	      <td >text-textAnchor-BE-05.svg</td>
	      <td >Fail</td>
              <td >incorrect display</td>
              <td >tspan "x", "y"</td>
              <td >&nbsp;</td>
              <td >TextElementBridge, TextPainter</td>
	    </tr>
	    <tr>
	      <td >text-textLength-BE-17.svg</td>
	      <td >Fail</td>
              <td >incorrect display</td>
              <td >text spacing control, new layout engine</td>
              <td >&nbsp;</td>
              <td >TextElementBridge, TextPainter</td>
	    </tr>
	    <tr>
	      <td >text-textOnPath-BE-03.svg</td>
	      <td >Fail</td>
              <td >incorrect display</td>
              <td >textPath, new layout engine</td>
              <td >&nbsp;</td>
              <td >TextElementBridge, TextPainter</td>
	    </tr>
	    <tr>
	      <td >text-tref-BE-04.svg</td>
	      <td >Fail</td>
              <td >incomplete display</td>
              <td >tspan "x", "y"</td>
              <td >&nbsp;</td>
              <td >TextElementBridge, TextPainter</td>
	    </tr>
	    <tr>
	      <td >text-tspan-BE-02.svg</td>
	      <td >Fail</td>
              <td >incomplete display</td>
              <td >tspan "x", "y"</td>
              <td >&nbsp;</td>
              <td >TextElementBridge, TextPainter</td>
	      <td >&nbsp;</td>
	    </tr>
	    <tr>
	      <td >text-whiteSpace-BE-06.svg</td>
	      <td >Pass</td>
	      <td >&nbsp;</td>
	      <td >&nbsp;</td>
	      <td >&nbsp;</td>
	      <td >&nbsp;</td>
	    </tr>
        </table>

        </s1>

    </body>
</document>
