###########################################################################
#
#  This is the JSPWiki configuration file.  You'll need to edit this
#  a bit.  The first few lines are the most important ones.
#
#  Wherever it is said that an option can be "true" or "false", you can
#  also use "yes"/"no", or "on/off".  Just for some convenience.
#
#
#  You can use this to override the default application name.  It affects
#  the HTML titles and logging, for example.  It can be different from
#  the actual web name (http://my.com/mywiki) of the application, but usually
#  it is the same.
#
jspwiki.applicationName = JSPWiki

#
#  Which page provider class to use.  Possibilities are:
#
#    RCSFileProvider        - for simple RCS-based file storage
#    FileSystemProvider     - for simple pure file storage with no version information
#    VersioningFileProvider - for simple, non-RCS based versioning storage.
#
#  Note that if you're upgrading from JSPWiki 1.x, then you need to remove the
#  "com.ecyrd.jspwiki." part from the beginning of the path.
#
jspwiki.pageProvider = FileSystemProvider

#
#  Set to true, if you want to cache page data into memory.  This is
#  in general a good idea.
#
#  Default is false (no cache).
#
#  NB: This replaces the JSPWiki 1.x "CachingProvider" setting, since it
#      probably was too confusing.
#
jspwiki.usePageCache = true

#
#  Determines where wiki files are kept for FileSystemProvider
#  and RCSFileProvider
#
#  If you're using Windows, then you must duplicate the backslashes.
#  For example, use:
#  
#  jspwiki.fileSystemProvider.pageDir = C:\\Data\\jspwiki
#
jspwiki.fileSystemProvider.pageDir = /p/web/www-data/jspwiki/

#
#  ATTACHMENTS:
#
#  Use the following property to define which attachment provider
#  you want to use.  You have basically two choices:
#    * BasicAttachmentProvider - a simple, flat file, versioning provider
#    * nothing - Set this property to empty, and the attachment functionality
#                is disabled.
#
jspwiki.attachmentProvider = BasicAttachmentProvider

#
#  The BasicAttachmentProvider needs to know where to store the files
#  the user has uploaded.  It's okay to put these in the same directory
#  as you put your text files (i.e. the pageDir setting above).
#
#  If you're using Windows, then you must duplicate the backslashes.
#  For example, use:
#  
#  jspwiki.basicAttachmentProvider.storageDir = C:\\Data\\jspwiki
#
jspwiki.basicAttachmentProvider.storageDir = /p/web/www-data/jspwiki/


#
#  BaseURL can be used to rewrite all of JSPWiki's internal references.
#  Sometimes, especially if you're behind a address-rewriting firewall,
#  relative URLs don't work since the servlet container has no idea
#  where it's actually located.
#
#  Leave undefined if you want to rely on what your servlet container
#  thinks of where your application lives. 
#
#  You MUST, however, define this one if you want to enable RSS (see below).  In
#  general, this is a good idea to define it anyway.  Do not forget the
#  trailing slash.
#
#  Example:
#  jspwiki.baseURL = http://www.ecyrd.com/JSPWiki/
#
#jspwiki.baseURL=

#
#  Determines which character encoding JSPWiki should use.  If you want
#  to support all languages in your Wiki, you probably want to enable
#  this.  If you're upgrading, or are planning just to use the ISO-Latin1
#  character set (like most western people would), you can just leave
#  it at the default.  If you enable it, remember that most people won't
#  be able to type in special characters anyway.
#  
#  Note that you can't switch these in the mean time, since the way the
#  files are encoded on disk is incompatible between ISO-Latin1 and UTF-8.
#  Don't try.  You'll get all sorts of interesting problems, if you do.
#
#  Possible values are 'ISO-8859-1' (default) and 'UTF-8'.

#jspwiki.encoding = UTF-8

#
#  Determines whether raw HTML is allowed as Wiki input.
#
#  THIS IS A DANGEROUS OPTION!
#
#  If you decide to allow raw HTML, understand that ANY person who has
#  access to your Wiki site can embed ANY sort of malicious JavaScript,
#  or plugin, or ActiveX, or whatever on your site.  They can even mess it
#  up so royally it is impossible for you to replace the situation without
#  the need of direct access to the repository.  So think twice before
#  allowing raw HTML on your own site.
#
#  Most probably you want to use this on Intranets, or personal servers,
#  where only a handful of people can access the wiki.
#
#  Text between {{{ and }}} -options is not affected by this setting, so
#  it's always safe to quote HTML code with those.
#
#  The default for this option is "false".
#
jspwiki.translatorReader.allowHTML = false

############################################################################
#
#  Usability niceties.
#
#
#  If this property is set to "true", then page titles are rendered
#  using an extra space between every capital letter.  It may make
#  page titles readable on some occasions, but it does have the
#  drawback of making the titles look a bit funny at times.
#
jspwiki.breakTitleWithSpaces = false

#
#  If set to true, this property means that "WikiName" and "WikiNames"
#  are considered equal when linking between them.  Setting this to
#  true does not prevent you from having both kinds of pages - we just
#  fall back to the other one if the primary name does not exist.
#
#  For any other language, you'll probably want to turn this off.
#
jspwiki.translatorReader.matchEnglishPlurals = true

#
#  If you set this to true, the Wiki translator will then also consider
#  "traditional" WikiNames (that is, names of pages JustSmashedTogether
#  without square brackets) as hyperlinks.  This technique is also
#  known as "CamelCase", or "BumpyCase", or "InterCapping".  I personally
#  like CamelCase as a word, which is why this property is named as it is :-).
#
#  By default this is false, since traditional WikiLinks may confuse newbies.
#
jspwiki.translatorReader.camelCaseLinks = false

#
#  This sets the default template used by the Wiki engine.  The templates
#  live in templates/<template name>.  JSPWiki will attempt to find two
#  basic templates from that directory: "ViewTemplate" and "EditTemplate".
#
#  By default this is called "default".
#
jspwiki.templateDir = default

#
#  The name of the front page.  This is the page that gets loaded if no
#  other page is loaded.  Up until JSPWiki 1.9.28, it was always called
#  "Main", but now you can easily change the default front page here.  If not
#  defined, uses "Main".
#
#jspwiki.frontPage = Main

#
#  If set to true, all outward links have a small icon attached.  The icon
#  can be found from images/out.png.  Default is true.
#
jspwiki.translatorReader.useOutlinkImage = true

#
#  Set this to the number of minutes a person can "lock" a page
#  for while he is editing it.
#
jspwiki.lockExpiryTime = 60

############################################################################
#
#  Special page references.
#
#  The URL is relative to Wiki.jsp.  However, if you use
#  a full, absolute URL, you can also do that.
#
# Example to redirect all requests to a page called 'OriginalWiki'
# to the original wikiwiki at http://c2.com/cgi/wiki
#
# jspwiki.specialPage.OriginalWiki = http://c2.com/cgi/wiki
#
#  Note that it is entirely possible to override any Wiki page, even
#  an existing one by redefining it here.
#
jspwiki.specialPage.FindPage = Search.jsp
jspwiki.specialPage.UserPreferences = UserPreferences.jsp

#############################################################################
#
#  Plugin search paths.
#
#  Define here the packages you want to use for searching plugins, 
#  separated with commas.
#  For example, use the following command to add "org.myorganisation.jspwiki.myplugins"
#  and "com.foobar.myplugins" to the search path.
#
#  The default path is "com.ecyrd.jspwiki.plugins", and it will be always
#  the last item on the path.  This allows you to override JSPWiki default
#  plugins.  Note that you are only adding to the path, not replacing it (ie.
#  the default path is never removed.)
#
#  jspwiki.plugin.searchPath = org.myorganisation.jspwiki.myplugins,com.foobar.myplugins
#
jspwiki.plugin.searchPath = 

#############################################################################
#
# InterWiki links 
#
# The %s is replaced with the page reference (specify
# multiple times to get multiple references).  Page references should
# appear in format : [wiki:wikipage].  
#
# This is the JSPWiki home.  In future, JSPWiki will probably rely on this
# for error messages, so I don't recommend that you change it.
jspwiki.interWikiRef.JSPWiki = http://www.ecyrd.com/JSPWiki/Wiki.jsp?page=%s

# Here's how you can have directly links to the JSPWiki editor.
# Now you can put a hyperlink for editing "MainPage" by making 
# a link [Edit:MainPage].
jspwiki.interWikiRef.Edit = Edit.jsp?page=%s

#  This is the original WikiWikiWeb
jspwiki.interWikiRef.WikiWikiWeb = http://c2.com/cgi/wiki?%s

#  TWiki, a very nice WikiClone.
jspwiki.interWikiRef.TWiki = http://twiki.org/cgi-bin/view/TWiki/%s

#  MeatballWiki, which seems to be quite popular.
jspwiki.interWikiRef.MeatballWiki = http://usemod.com/cgi-bin/mb.pl?%s

#  Wikipedia, a Wiki encyclopedia!
jspwiki.interWikiRef.Wikipedia = http://www.wikipedia.com/wiki/%s

#  Google, the ubiquitous search engine.
jspwiki.interWikiRef.Google = http://www.google.com/search?q=%s

############################################################################
#
# Define which image types are inlined.
# These are your standard glob expressions (just like in your
# Windows or UNIX shells).  Default pattern is to include all PNG
# images.  If you specify something here, you will override the default.
#
# Don't forget to increase the number after the dot - duplicate entries 
# cause problems!
#
# For example:
#   Inline all JPG files, PNG files and all files from images.com:
#
#      jspwiki.translatorReader.inlinePattern.1 = *.jpg
#      jspwiki.translatorReader.inlinePattern.2 = *.png
#      jspwiki.translatorReader.inlinePattern.3 = http://images.com/*


###########################################################################
#
#  Determine how the RSS (Rich Site Summary) file generation should work.
#  RSS is a standard pioneered by Netscape, which allows you to join your
#  Wiki with a huge number of different news services around the world.
#  Try a Google search on RSS and see what you can do with it.
#
#  All of these settings were added in JSPWiki 1.7.6.
#
#  Note that jspwiki.baseURL MUST BE DEFINED if you want to enable RSS!
#
#  Determine if the RSS file should be generated at all.  Allowed values
#  are "true" and "false".  Default is "false".
#
jspwiki.rss.generate = false

#
#  Determine the name of the RSS file. This path is relative to your
#  Wiki root.  Default is "rss.rdf"
#
jspwiki.rss.fileName = rss.rdf

#
#  Determine the refresh interval (ie. how often the RSS file is regenerated.
#  It is not recommended to make this too often, or you'll choke your server.
#  Anything above five minutes is probably okay.  The default value is one hour.
#  The value should be in seconds.
#
jspwiki.rss.interval = 3600

#
#  The text you want to be shown as your "channel description" when someone
#  subscribes to it.  You can be quite verbose here, up to 500 characters or
#  so.  You can continue to a new line by adding a backslash to the end of the
#  line.  Default is to have no description.
#
jspwiki.rss.channelDescription = Oh poor me, my owner has not set \
                                 a channel description at all. \
                                 Pity me.

#
#  The language of your Wiki.  This is a standard, two-letter language
#  code, or in case of some languages, two letters for the country,
#  a dash, and two letters for the dialect.
#
jspwiki.rss.channelLanguage = en-us

###########################################################################
#
#  Determine how certain file commands are run.  They have been
#  commented out, since most likely you want to use the defaults.
#  Be warned, making mistakes with these may well ruin your entire
#  Wiki collection!
#
#  The command to run diff:
#     NOTE! If you do not specify this, an internal "diff" routine is used.
#           In most cases, you really should not touch this.
#
#jspwiki.diffCommand = diff -u %s1 %s2

#  The command for RCS checkin
#jspwiki.rcsFileProvider.checkinCommand = ci -q -mx -l -t-none %s

#  The command for RCS checkout of the newest version
#jspwiki.rcsFileProvider.checkoutCommand = co -l %s

#  The command for checking out a specific version (%v = version number)
#jspwiki.rcsFileProvider.checkoutVersionCommand = co -p -r1.%v %s

#  The command for RCS log headers
#  If you have a version of RCS that does not support the "-z" flag, then
#  you can try this one out without it.  It should work.
#jspwiki.rcsFileProvider.logCommand = rlog -zLT -h %s

#  The command for getting the entire modification history
#jspwiki.rcsFileProvider.fullLogCommand = rlog -zLT %s


###########################################################################
#
#  Configure logs.  See log4j documentation for more information
#  on how you can configure the logs.
#
#  Log4j is available at http://jakarta.apache.org/log4j
#
#  Send mail to root on all problems containing warnings.
#
#log4j.appender.mail = org.apache.log4j.net.SMTPAppender
#log4j.appender.mail.Threshold = WARN
#log4j.appender.mail.To = root@localhost
#log4j.appender.mail.From = JSPWiki@localhost
#log4j.appender.mail.Subject = Problem with JSPWiki!
#log4j.appender.mail.SMTPHost = mail

#log4j.appender.mail.layout = org.apache.log4j.PatternLayout
#log4j.appender.mail.layout.ConversionPattern =%d [%t] %p %c %x - %m%n

#
#  Log everything into a file, roll it over every 10 MB, keep
#  only 14 latest ones.
#
log4j.appender.FileLog = org.apache.log4j.RollingFileAppender
log4j.appender.FileLog.MaxFileSize    = 10MB
log4j.appender.FileLog.MaxBackupIndex = 14
log4j.appender.FileLog.File = /tmp/jspwiki.log
log4j.appender.FileLog.layout = org.apache.log4j.PatternLayout
log4j.appender.FileLog.layout.ConversionPattern=%d [%t] %p %c %x - %m%n

#
# If you want to use some other logging system (such as JBoss, which uses
# log4j already, comment this line out.  If you just don't want any logs
# at all, you can set it to be empty.  However, I suggest that you do
# at least to a level of WARN.
#
log4j.rootCategory=INFO,FileLog

# Enable if you're using mailing, above.
#log4j.rootCategory=INFO,FileLog,mail

### End of configuration file.
