<?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 vincent.hardy@eng.sun.com                                          -->
<!-- version $Id$ -->
<!-- ========================================================================= -->

<document>
    <header>
        <title>Batik - Glossary</title>
        <subtitle>Batik and SVG Glossary</subtitle>
        <authors>
            <person name="Vincent Hardy" email="vincent.hardy@eng.sun.com"/>
        </authors>
    </header>

    <body>
        <anchor id="GVT" />
        <s1 title="GVT, Graphic Vector Toolkit">

        <p>
        GVT (Graphic Vector Toolkit) is an object oriented framework that 
        describes complex 2D graphics in terms of a tree of Java objects. GVT 
        is used in Batik to represent how SVG images are to be rendered.
        </p>

        </s1>

        <anchor id="SVGDOM" />
        <s1 title="SVG DOM">

        <p>
        The SVG DOM (Document Object Model) defines the API that programming
        languages use to interact with SVG documents. There are different 'bindings'
        of the DOM API for different languages. For example, there is an ECMAScript
        binding which allows SVG scripts to access or modify SVG document, for example
        in reaction to events. There is also a Java technology binding which allows
        Java programs to dynamically interact with SVG documents. The Java binding
        and the ECMA Script binding are both available in Batik.
        </p>

        </s1>

        <anchor id="SVGGenerator" />
        <s1 title="SVG Generator">

        <p>
        The SVG Generator is a component of Batik that allows Java applications 
        to create SVG content without needing specific knowledge of SVG. Applications
        doing graphics in Java use an API, embodied by the Graphics2D class, to 
        do all their rendering operations. They use the same code, but different 
        implementations of that API, to render to various outputs such as a screen
        or a printer. The SVG Generator is another implementation of that API that
        instead of drawing to a screen or a printer generates SVG content. Because
        it implements the same API as for printing or drawing to the screen, the
        same code that does screen rendering and printing can be used with the 
        generator to generate SVG content. For an example of how to use this
        module, follow this <link href="svggen.html">link</link>
        </p>

        </s1>

        <anchor id="SVGParser" />
        <s1 title="SVG Parser">

        <p>
        The SVG Parser is the module that is able to receive an SVG document
        and build an internal representation of that document. Batik contains
        'micro parsers' specific to SVG to convert SVG specific attributes,
        such as path data, transforms or color values into equivalent Java 
        objects such as java.awt.geom.GeneralPath, java.awt.geom.AffineTransform
        or java.awt.Color.
        </p>

        </s1>



    </body>
</document>
