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

<!--

   Copyright 2000-2002  The Apache Software Foundation 

   Licensed 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.

-->
<!-- ========================================================================= -->
<!-- author vincent.hardy@eng.sun.com                                          -->
<!-- version $Id$ -->
<!-- ========================================================================= -->
<document>
    <header>
        <title>Tools and Applications</title>
        <subtitle>SVG Tools and Applications</subtitle>
        <authors>
            <person name="Vincent Hardy" email="vincent.hardy@eng.sun.com"/>
            <person name="Thierry Kormann" email="tkormann@apache.org"/>
        </authors>
    </header>

    <body>
        <s1 title="SVG Tools and Applications">
                <p>The Batik distribution contains several pre-packaged demos:</p>
                <ul>
		                <li><link href="#SVGBrowser">Squiggle SVG Browser</link></li>
		                <li><link href="#SVGRasterizer">SVG Rasterizer</link></li>
		                <li><link href="#SVGPrettyPrinter">SVG Pretty Printer</link></li>
		                <li><link href="#SVGFontConverter">SVG Font Converter</link></li>
               </ul>
                 
                <anchor id="SVGBrowser" />
                <s2 title="SVG Browser">
                <ul>
                    <li><link href="svgviewer.html">Squiggle SVG Browser:</link> 
                    	<ul><li>The Squiggle SVG Browser lets you view SVG file, zoom, pan and rotate in the content and select text items in the image and much more.</li></ul>
                    </li>
                </ul>
                 </s2> 
                 
                 <anchor id="SVGRasterizer" />
                 <s2 title="SVG Rasterizer">
                <ul>
                    <li><link href="svgrasterizer.html">SVG Rasterizer:</link>
                   	<ul><li>The SVG Rasterizer is a utility that can convert SVG files to a raster format.
                   	The tool can convert individual files or sets of files, making it easy to convert entire 
                   	directories of SVG files. The supported formats are JPEG, PNG, and TIFF, however the design allows new formats to be added easily</li></ul>
                    </li>
                </ul>
                </s2>
                
                <anchor id="SVGPrettyPrinter" />
                <s2 title="SVG Pretty Printer">
                <ul>
                    <li><link href="svgpp.html">SVG Pretty Printer:</link>
                    	<ul><li>The SVG Pretty Printer lets developers "pretty-up"
                their SVG files and get their tabulations and other cosmetic parameters in order. It
                                can also be used to modify the DOCTYPE declaration on SVG files.</li></ul>
                    </li>
                </ul>
                </s2>
                
                <anchor id="SVGFontConverter" />
                <s2 title="SVG Font Converter">
                <ul>
                     <li><link href="ttf2svg.html">SVG Font Converter:</link>
                 	<ul><li>The SVG Font Converter lets developers convert
                character ranges from the True Type Font format to the SVG Font format to embed in
                SVG documents. This allows SVG document to be fully self-contained be rendered 
                		exactly the same on all systems</li></ul>
                    </li>
                </ul>
               </s2>
        </s1>
 
   </body>
</document>
