;; phpDocumentor parse configuration file
;;
;; This file is designed to cut down on repetitive typing on the command-line or web interface
;; You can copy this file to create a number of configuration files that can be used with the
;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini.  The web
;; interface will automatically generate a list of .ini files that can be used.
;;
;; default.ini is used to generate the online manual at http://www.phpdoc.org/docs
;;
;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini
;;
;; Copyright 2002, Greg Beaver <cellog@users.sourceforge.net>
;;
;; WARNING: do not change the name of any command-line parameters, phpDocumentor will ignore them

[Parse Data]
;; title of all the documentation
;; legal values: any string
title = GeSHi 1.0.8

;; parse files that start with a . like .bash_profile
;; legal values: true, false
hidden = false

;; show elements marked @access private in documentation by setting this to on
;; legal values: on, off
parseprivate = off

;; parse with javadoc-like description (first sentence is always the short description)
;; legal values: on, off
javadocdesc = off

;; add any custom @tags separated by commas here
;; legal values: any legal tagname separated by commas.
customtags = note

;; This is only used by the XML:DocBook/peardoc2 converter
defaultcategoryname = Documentation

;; what is the main package?
;; legal values: alphanumeric string plus - and _
defaultpackagename = core

;; output any parsing information?  set to on for cron jobs
;; legal values: on
;quiet = on

;; parse a PEAR-style repository.  Do not turn this on if your project does
;; not have a parent directory named "pear"
;; legal values: on/off
;pear = on

;; where should the documentation be written?
;; legal values: a legal path
target = api

;; limit output to the specified packages, even if others are parsed
;; legal values: package names separated by commas
;packageoutput = package1,package2

;; comma-separated list of files to parse
;; legal values: paths separated by commas
filename = ../geshi.php

;; comma-separated list of directories to parse
;; legal values: directory paths separated by commas
;directory = /path1,/path2,.,..,subdirectory
;directory = /home/jeichorn/cvs/pear
;directory = geshi

;; template base directory (the equivalent directory of <installdir>/phpDocumentor)
;templatebase = /path/to/my/templates

;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore
;; legal values: any wildcard strings separated by commas
;ignore = /path/to/ignore*,*list.php,myfile.php,subdirectory/
ignore = /*.svn/*

;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format
;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,
;;               HTML:frames:earthli,
;;               HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,
;;               HTML:frames:DOM/phphtmllib,HTML:frames:DOM/earthli
;;               HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS
;;               PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default
output=HTML:frames:earthli

;; turn this option on if you want highlighted source code for every file
;; legal values: on/off
sourcecode = on
