 -----
 doxia-module-markdown
 -----
 Julien Nicoulaud <julien.nicoulaud@gmail.com>
 ------
 2011-05-28
 ------

~~ 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

doxia-module-markdown

  Markdown is a popular lightweight markup language, easy to read and easy to write.
  It is supported by a large panel of websites, text editors/IDEs and converter tools.
  Markdown format is only supported as Doxia source format.

  <<References>>

   * {{{http://daringfireball.net/projects/markdown}Markdown project website}}

   * {{{http://en.wikipedia.org/wiki/Markdown}Markdown Wikipedia page}}

   * {{{http://xbeta.org/wiki/show/Markdown}Markdown wiki}}

   * {{{http://pegdown.org}Pegdown}}, the library used by this Doxia module
