blob: 5360991a4ae1fd610d9e66d893192d9537187bb9 [file] [log] [blame]
-----
Overview Of The Doxia Framework
-----
Vincent Siveton
------
July 2007
------
~~ 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.
~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html
Overview Of The Doxia Framework
The following figure represents the main components of the Doxia Framework.
[images/architecture.png] Doxia Framework
<<Note>>: Just like Maven, Doxia uses {{{http://plexus.codehaus.org/}Plexus}} extensively.
*Sink API
The <Sink> interface is a generic markup language interface. It contains several methods that
encapsulate common text syntax. A start tag is denoted by <xxxx()> method
and a end of tag by <xxxx_()> method.
For instance, you could do things like:
-----
sink.paragraph();
sink.text( "my text" );
sink.paragraph_();
-----
similar to this HTML markup:
-----
<p>my text</p>
-----
To find out more about the Sink API, you could read the Javadoc
{{{http://maven.apache.org/doxia/doxia-sink-api/apidocs/org/apache/maven/doxia/sink/Sink.html}here}}.
*Doxia Core
The <Core> is the API to parse a source and populate it in a <Sink> object. The <Parser> interface
contains only one method:
-----
void parse( Reader source, Sink sink )
throws ParseException;
-----
The <ParseException> class has the responsibility to catch all parsing exceptions. It provides an
helper method, <getLineNumber()>, which helps to find where an error occurred.
The <AbstractParser> class is an abstract implementation of the <Parser>. It provides a macro mechanism
to give dynamic functionalities for the parsing. For more information on macros, read the
{{{./macros/index.html}Doxia Macro Guide}}.
Finally, the <SiteModule> interface is the last part of the puzzle. It provides main definitions of a
given Doxia module and it is used by the <doxia-site-renderer> site tools.
*Doxia Modules
A Doxia module is an implementation of a given markup language like APT or Xdoc. Each module should
implement these interfaces:
* <Parser> interface, more specifically the <AbstractParser> class
* <SiteModule> interface
[]
Several modules provide also a <Sink> implementation to handle a specific markup language.
For more information on modules, read the {{{./modules/index.html}Doxia Module Guide}}.
*Doxia Sitetools
The <Sitetools> are a collection of tools to renderer an output. The main tool used by Maven,
specifically the {{{http://maven.apache.org/plugins/maven-site-plugin/}Maven Site Plugin}}, is the
<doxia-site-renderer> which renders in HTML any documents wrote with supported markup syntax. It used
{{{http://velocity.apache.org/}Velocity templates}} to customize the renderer and the
<site-decoration-model> tool to decorate the renderer. This component describes the layout of the site
defined in the <site.xml> file.
The <doxia-doc-renderer> tool is used to renderer any document in another document.