[xiph-commits] r14803 - in trunk/oggdsf/website: . cookbook docs local orig pub pub/guiedit pub/skins pub/skins/barthelme pub/skins/barthelme/images pub/skins/pmwiki pub/skins/print scripts uploads uploads/Main uploads/docs uploads/images wiki.d wikilib.d

silvia at svn.xiph.org silvia at svn.xiph.org
Sun Apr 27 17:13:10 PDT 2008


Author: silvia
Date: 2008-04-27 17:13:04 -0700 (Sun, 27 Apr 2008)
New Revision: 14803

Added:
   trunk/oggdsf/website/README.txt
   trunk/oggdsf/website/cookbook/
   trunk/oggdsf/website/cookbook/.htaccess
   trunk/oggdsf/website/docs/
   trunk/oggdsf/website/docs/.htaccess
   trunk/oggdsf/website/docs/COPYING.txt
   trunk/oggdsf/website/docs/DOCUMENTATION.txt
   trunk/oggdsf/website/docs/INSTALL.txt
   trunk/oggdsf/website/docs/UPGRADE.txt
   trunk/oggdsf/website/docs/sample-config.php
   trunk/oggdsf/website/images/
   trunk/oggdsf/website/index.php
   trunk/oggdsf/website/local/
   trunk/oggdsf/website/local/.htaccess
   trunk/oggdsf/website/local/config.php
   trunk/oggdsf/website/orig/
   trunk/oggdsf/website/orig/about_sdk.html
   trunk/oggdsf/website/orig/developers.html
   trunk/oggdsf/website/orig/downloads.html
   trunk/oggdsf/website/orig/enc_theora_graphedit.html
   trunk/oggdsf/website/orig/graphedit.html
   trunk/oggdsf/website/orig/history.html
   trunk/oggdsf/website/pmwiki.php
   trunk/oggdsf/website/pub/
   trunk/oggdsf/website/pub/css/
   trunk/oggdsf/website/pub/guiedit/
   trunk/oggdsf/website/pub/guiedit/README
   trunk/oggdsf/website/pub/guiedit/attach.gif
   trunk/oggdsf/website/pub/guiedit/big.gif
   trunk/oggdsf/website/pub/guiedit/blank.gif
   trunk/oggdsf/website/pub/guiedit/center.gif
   trunk/oggdsf/website/pub/guiedit/em.gif
   trunk/oggdsf/website/pub/guiedit/extlink.gif
   trunk/oggdsf/website/pub/guiedit/guiedit.js
   trunk/oggdsf/website/pub/guiedit/h.gif
   trunk/oggdsf/website/pub/guiedit/h1.gif
   trunk/oggdsf/website/pub/guiedit/h2.gif
   trunk/oggdsf/website/pub/guiedit/h3.gif
   trunk/oggdsf/website/pub/guiedit/hr.gif
   trunk/oggdsf/website/pub/guiedit/indent.gif
   trunk/oggdsf/website/pub/guiedit/left.gif
   trunk/oggdsf/website/pub/guiedit/math.gif
   trunk/oggdsf/website/pub/guiedit/ol.gif
   trunk/oggdsf/website/pub/guiedit/outdent.gif
   trunk/oggdsf/website/pub/guiedit/pagelink.gif
   trunk/oggdsf/website/pub/guiedit/preview.gif
   trunk/oggdsf/website/pub/guiedit/right.gif
   trunk/oggdsf/website/pub/guiedit/save.gif
   trunk/oggdsf/website/pub/guiedit/small.gif
   trunk/oggdsf/website/pub/guiedit/spellcheck.gif
   trunk/oggdsf/website/pub/guiedit/strong.gif
   trunk/oggdsf/website/pub/guiedit/sub.gif
   trunk/oggdsf/website/pub/guiedit/sup.gif
   trunk/oggdsf/website/pub/guiedit/table.gif
   trunk/oggdsf/website/pub/guiedit/ul.gif
   trunk/oggdsf/website/pub/guiedit/underline.gif
   trunk/oggdsf/website/pub/skins/
   trunk/oggdsf/website/pub/skins/barthelme/
   trunk/oggdsf/website/pub/skins/barthelme/barthelme.css
   trunk/oggdsf/website/pub/skins/barthelme/barthelme.php
   trunk/oggdsf/website/pub/skins/barthelme/barthelme.tmpl
   trunk/oggdsf/website/pub/skins/barthelme/images/
   trunk/oggdsf/website/pub/skins/barthelme/images/bk.png
   trunk/oggdsf/website/pub/skins/barthelme/images/feed.png
   trunk/oggdsf/website/pub/skins/barthelme/images/header.png
   trunk/oggdsf/website/pub/skins/pmwiki/
   trunk/oggdsf/website/pub/skins/pmwiki/README
   trunk/oggdsf/website/pub/skins/pmwiki/pmwiki-32.gif
   trunk/oggdsf/website/pub/skins/pmwiki/pmwiki.css
   trunk/oggdsf/website/pub/skins/pmwiki/pmwiki.tmpl
   trunk/oggdsf/website/pub/skins/print/
   trunk/oggdsf/website/pub/skins/print/README
   trunk/oggdsf/website/pub/skins/print/print.css
   trunk/oggdsf/website/pub/skins/print/print.php
   trunk/oggdsf/website/pub/skins/print/print.tmpl
   trunk/oggdsf/website/scripts/
   trunk/oggdsf/website/scripts/.htaccess
   trunk/oggdsf/website/scripts/author.php
   trunk/oggdsf/website/scripts/authuser.php
   trunk/oggdsf/website/scripts/blocklist.php
   trunk/oggdsf/website/scripts/caches.php
   trunk/oggdsf/website/scripts/creole.php
   trunk/oggdsf/website/scripts/crypt.php
   trunk/oggdsf/website/scripts/diag.php
   trunk/oggdsf/website/scripts/draft.php
   trunk/oggdsf/website/scripts/feeds.php
   trunk/oggdsf/website/scripts/forms.php
   trunk/oggdsf/website/scripts/guiedit.php
   trunk/oggdsf/website/scripts/httpauth.php
   trunk/oggdsf/website/scripts/intermap.txt
   trunk/oggdsf/website/scripts/markupexpr.php
   trunk/oggdsf/website/scripts/notify.php
   trunk/oggdsf/website/scripts/pagelist.php
   trunk/oggdsf/website/scripts/pagerev.php
   trunk/oggdsf/website/scripts/pgcust.php
   trunk/oggdsf/website/scripts/phpdiff.php
   trunk/oggdsf/website/scripts/prefs.php
   trunk/oggdsf/website/scripts/refcount.php
   trunk/oggdsf/website/scripts/robots.php
   trunk/oggdsf/website/scripts/simuledit.php
   trunk/oggdsf/website/scripts/skins.php
   trunk/oggdsf/website/scripts/stdconfig.php
   trunk/oggdsf/website/scripts/stdmarkup.php
   trunk/oggdsf/website/scripts/trails.php
   trunk/oggdsf/website/scripts/transition.php
   trunk/oggdsf/website/scripts/upgrades.php
   trunk/oggdsf/website/scripts/upload.php
   trunk/oggdsf/website/scripts/urlapprove.php
   trunk/oggdsf/website/scripts/vardoc.php
   trunk/oggdsf/website/scripts/version.php
   trunk/oggdsf/website/scripts/wikistyles.php
   trunk/oggdsf/website/scripts/wikiwords.php
   trunk/oggdsf/website/scripts/xlpage-utf-8.php
   trunk/oggdsf/website/uploads/
   trunk/oggdsf/website/uploads/Main/
   trunk/oggdsf/website/uploads/Main/oggcodecs_0.69.8924.exe
   trunk/oggdsf/website/uploads/Main/oggcodecs_0.70.0827.exe
   trunk/oggdsf/website/uploads/Main/oggcodecs_0.71.0946.exe
   trunk/oggdsf/website/uploads/Main/oggcodecs_0.72.1838.exe
   trunk/oggdsf/website/uploads/Main/oggcodecs_0.73.1936.exe
   trunk/oggdsf/website/uploads/Main/oggcodecs_SSE2_0.68.8333.zip
   trunk/oggdsf/website/uploads/Main/oggcodecs_SSE_0.68.8333.zip
   trunk/oggdsf/website/uploads/Main/oggcodecs_src_0.70.0827.zip
   trunk/oggdsf/website/uploads/docs/
   trunk/oggdsf/website/uploads/docs/index.html
   trunk/oggdsf/website/uploads/images/
   trunk/oggdsf/website/uploads/images/connect_encoders.JPG
   trunk/oggdsf/website/uploads/images/divx+vorbis_decode.JPG
   trunk/oggdsf/website/uploads/images/encoders_added.JPG
   trunk/oggdsf/website/uploads/images/ensure_YV12.JPG
   trunk/oggdsf/website/uploads/images/filter_properties.JPG
   trunk/oggdsf/website/uploads/images/find_encoders.JPG
   trunk/oggdsf/website/uploads/images/fully_connected.JPG
   trunk/oggdsf/website/uploads/images/mixmux.JPG
   trunk/oggdsf/website/uploads/images/mp3_to_speex_graphedit.JPG
   trunk/oggdsf/website/uploads/images/mp3_to_vorbis_graphedit.JPG
   trunk/oggdsf/website/uploads/images/ogg_split_graphedit.JPG
   trunk/oggdsf/website/uploads/images/pin_properties.JPG
   trunk/oggdsf/website/uploads/images/press_play.JPG
   trunk/oggdsf/website/uploads/images/remove_renderers.JPG
   trunk/oggdsf/website/uploads/images/select_encoders.JPG
   trunk/oggdsf/website/uploads/images/select_muxer.JPG
   trunk/oggdsf/website/uploads/images/select_output_file.JPG
   trunk/oggdsf/website/uploads/images/select_render_file.JPG
   trunk/oggdsf/website/uploads/images/show_rendered_graph.JPG
   trunk/oggdsf/website/uploads/images/theora_properties.JPG
   trunk/oggdsf/website/uploads/images/vorbis_to_mp3_graphedit.JPG
   trunk/oggdsf/website/uploads/images/wave_to_vorbis_graphedit.JPG
   trunk/oggdsf/website/uploads/images/wma_to_vorbis_graphedit.JPG
   trunk/oggdsf/website/wiki.d/
   trunk/oggdsf/website/wiki.d/.flock
   trunk/oggdsf/website/wiki.d/.htaccess
   trunk/oggdsf/website/wiki.d/.lastmod
   trunk/oggdsf/website/wiki.d/.pageindex
   trunk/oggdsf/website/wiki.d/Main.About
   trunk/oggdsf/website/wiki.d/Main.DeveloperInfo
   trunk/oggdsf/website/wiki.d/Main.Downloads
   trunk/oggdsf/website/wiki.d/Main.EncTheoraGraphedit
   trunk/oggdsf/website/wiki.d/Main.Graphedit
   trunk/oggdsf/website/wiki.d/Main.History
   trunk/oggdsf/website/wiki.d/Main.HomePage
   trunk/oggdsf/website/wiki.d/Main.RecentChanges
   trunk/oggdsf/website/wiki.d/Main.SseBuilds
   trunk/oggdsf/website/wiki.d/Site.AllRecentChanges
   trunk/oggdsf/website/wiki.d/Site.RecentChanges
   trunk/oggdsf/website/wiki.d/Site.SideBar
   trunk/oggdsf/website/wiki.d/SiteAdmin.Status
   trunk/oggdsf/website/wikilib.d/
   trunk/oggdsf/website/wikilib.d/Main.HomePage
   trunk/oggdsf/website/wikilib.d/Main.WikiSandbox
   trunk/oggdsf/website/wikilib.d/PmWiki.AccessKeys
   trunk/oggdsf/website/wikilib.d/PmWiki.Audiences
   trunk/oggdsf/website/wikilib.d/PmWiki.AuthUser
   trunk/oggdsf/website/wikilib.d/PmWiki.AvailableActions
   trunk/oggdsf/website/wikilib.d/PmWiki.BackupAndRestore
   trunk/oggdsf/website/wikilib.d/PmWiki.BasicEditing
   trunk/oggdsf/website/wikilib.d/PmWiki.BasicVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.Blocklist
   trunk/oggdsf/website/wikilib.d/PmWiki.Categories
   trunk/oggdsf/website/wikilib.d/PmWiki.ChangeLog
   trunk/oggdsf/website/wikilib.d/PmWiki.ConditionalMarkup
   trunk/oggdsf/website/wikilib.d/PmWiki.Contributors
   trunk/oggdsf/website/wikilib.d/PmWiki.CreatingNewPages
   trunk/oggdsf/website/wikilib.d/PmWiki.CustomInterMap
   trunk/oggdsf/website/wikilib.d/PmWiki.CustomMarkup
   trunk/oggdsf/website/wikilib.d/PmWiki.CustomWikiStyles
   trunk/oggdsf/website/wikilib.d/PmWiki.DebugVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.DeletingPages
   trunk/oggdsf/website/wikilib.d/PmWiki.DesignNotes
   trunk/oggdsf/website/wikilib.d/PmWiki.DocumentationIndex
   trunk/oggdsf/website/wikilib.d/PmWiki.EditVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.FAQ
   trunk/oggdsf/website/wikilib.d/PmWiki.FilePermissions
   trunk/oggdsf/website/wikilib.d/PmWiki.FmtPageName
   trunk/oggdsf/website/wikilib.d/PmWiki.Functions
   trunk/oggdsf/website/wikilib.d/PmWiki.Glossary
   trunk/oggdsf/website/wikilib.d/PmWiki.GroupHeader
   trunk/oggdsf/website/wikilib.d/PmWiki.GroupHeaders
   trunk/oggdsf/website/wikilib.d/PmWiki.I18nVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.Images
   trunk/oggdsf/website/wikilib.d/PmWiki.IncludeOtherPages
   trunk/oggdsf/website/wikilib.d/PmWiki.InitialSetupTasks
   trunk/oggdsf/website/wikilib.d/PmWiki.Installation
   trunk/oggdsf/website/wikilib.d/PmWiki.InterMap
   trunk/oggdsf/website/wikilib.d/PmWiki.Internationalizations
   trunk/oggdsf/website/wikilib.d/PmWiki.LayoutVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.LinkVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.Links
   trunk/oggdsf/website/wikilib.d/PmWiki.LocalCustomizations
   trunk/oggdsf/website/wikilib.d/PmWiki.MailPosts
   trunk/oggdsf/website/wikilib.d/PmWiki.MailingLists
   trunk/oggdsf/website/wikilib.d/PmWiki.MarkupExpressions
   trunk/oggdsf/website/wikilib.d/PmWiki.MarkupMasterIndex
   trunk/oggdsf/website/wikilib.d/PmWiki.Notify
   trunk/oggdsf/website/wikilib.d/PmWiki.OtherVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.PageDirectives
   trunk/oggdsf/website/wikilib.d/PmWiki.PageFileFormat
   trunk/oggdsf/website/wikilib.d/PmWiki.PageHistory
   trunk/oggdsf/website/wikilib.d/PmWiki.PageLists
   trunk/oggdsf/website/wikilib.d/PmWiki.PageVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.PagelistVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.Passwords
   trunk/oggdsf/website/wikilib.d/PmWiki.PasswordsAdmin
   trunk/oggdsf/website/wikilib.d/PmWiki.PathVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.PatrickMichaud
   trunk/oggdsf/website/wikilib.d/PmWiki.PerGroupCustomizations
   trunk/oggdsf/website/wikilib.d/PmWiki.PmWiki
   trunk/oggdsf/website/wikilib.d/PmWiki.PmWikiPhilosophy
   trunk/oggdsf/website/wikilib.d/PmWiki.RefCount
   trunk/oggdsf/website/wikilib.d/PmWiki.ReleaseNotes
   trunk/oggdsf/website/wikilib.d/PmWiki.Requirements
   trunk/oggdsf/website/wikilib.d/PmWiki.Security
   trunk/oggdsf/website/wikilib.d/PmWiki.SecurityVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.SimultaneousEdits
   trunk/oggdsf/website/wikilib.d/PmWiki.SitePreferences
   trunk/oggdsf/website/wikilib.d/PmWiki.SkinTemplates
   trunk/oggdsf/website/wikilib.d/PmWiki.Skins
   trunk/oggdsf/website/wikilib.d/PmWiki.SpecialCharacters
   trunk/oggdsf/website/wikilib.d/PmWiki.TableDirectives
   trunk/oggdsf/website/wikilib.d/PmWiki.Tables
   trunk/oggdsf/website/wikilib.d/PmWiki.TextFormattingRules
   trunk/oggdsf/website/wikilib.d/PmWiki.Troubleshooting
   trunk/oggdsf/website/wikilib.d/PmWiki.Upgrades
   trunk/oggdsf/website/wikilib.d/PmWiki.UpgradingFromPmWiki1
   trunk/oggdsf/website/wikilib.d/PmWiki.UploadVariables
   trunk/oggdsf/website/wikilib.d/PmWiki.Uploads
   trunk/oggdsf/website/wikilib.d/PmWiki.UploadsAdmin
   trunk/oggdsf/website/wikilib.d/PmWiki.UrlApprovals
   trunk/oggdsf/website/wikilib.d/PmWiki.Variables
   trunk/oggdsf/website/wikilib.d/PmWiki.WebFeeds
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiAdministrator
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiFarmTerminology
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiFarms
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiGroup
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiGroups
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiPage
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiSandbox
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiStructure
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiStyleExamples
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiStyles
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiTrails
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiWikiWeb
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiWord
   trunk/oggdsf/website/wikilib.d/PmWiki.WikiWords
   trunk/oggdsf/website/wikilib.d/Site.AuthForm
   trunk/oggdsf/website/wikilib.d/Site.AuthUser
   trunk/oggdsf/website/wikilib.d/Site.EditForm
   trunk/oggdsf/website/wikilib.d/Site.EditQuickReference
   trunk/oggdsf/website/wikilib.d/Site.GroupAttributes
   trunk/oggdsf/website/wikilib.d/Site.PageActions
   trunk/oggdsf/website/wikilib.d/Site.PageListTemplates
   trunk/oggdsf/website/wikilib.d/Site.PageNotFound
   trunk/oggdsf/website/wikilib.d/Site.Preferences
   trunk/oggdsf/website/wikilib.d/Site.Search
   trunk/oggdsf/website/wikilib.d/Site.SideBar
   trunk/oggdsf/website/wikilib.d/Site.Site
   trunk/oggdsf/website/wikilib.d/Site.UploadQuickReference
   trunk/oggdsf/website/wikilib.d/SiteAdmin.AuthList
   trunk/oggdsf/website/wikilib.d/SiteAdmin.AuthUser
   trunk/oggdsf/website/wikilib.d/SiteAdmin.GroupAttributes
   trunk/oggdsf/website/wikilib.d/SiteAdmin.Status
Removed:
   trunk/oggdsf/website/about_sdk.html
   trunk/oggdsf/website/developers.html
   trunk/oggdsf/website/downloads.html
   trunk/oggdsf/website/enc_theora_graphedit.html
   trunk/oggdsf/website/graphedit.html
   trunk/oggdsf/website/history.html
   trunk/oggdsf/website/images/
   trunk/oggdsf/website/index.html
   trunk/oggdsf/website/sse_builds.html
   trunk/oggdsf/website/version_check.php
Log:
building a new version of the oggdsf website

Added: trunk/oggdsf/website/README.txt
===================================================================
--- trunk/oggdsf/website/README.txt	                        (rev 0)
+++ trunk/oggdsf/website/README.txt	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,48 @@
+This is the README.txt file for PmWiki, a wiki-based system for
+collaborative creation and maintenance of websites.
+
+PmWiki is distributed with the following directories:
+
+  docs/           Brief documentation, sample configuration scripts
+  local/          Configuration scripts
+  cookbook/       Recipes (add-ons) from the PmWiki Cookbook
+  pub/skins/      Layout templates ("skins" for custom look and feel)
+  pub/css/        Extra CSS stylesheet files
+  pub/guiedit/    Files for the Edit Form's GUIEdit module
+  scripts/        Scripts that are part of PmWiki
+  wikilib.d/      Bundled wiki pages, including
+                    * a default Home Page
+                    * PmWiki documentation pages
+                    * some Site-oriented pages
+
+After PmWiki is installed the following directories may also exist:
+
+  wiki.d/         Wiki pages
+  uploads/        Uploaded files (page attachments)
+
+For quick installation advice, see docs/INSTALL.txt.
+
+For more extensive information about installing PmWiki, visit
+  http://pmwiki.org/wiki/PmWiki/Installation
+
+For information about running PmWiki in standalone mode without
+requiring a webserver, visit
+  http://pmwiki.org/wiki/Cookbook/Standalone
+
+PmWiki is Copyright 2001-2006 Patrick R. Michaud
+pmichaud at pobox.com
+http://www.pmichaud.com/
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+The GNU General Public License is distributed with this program
+(see docs/COPYING.txt) and it is also available online at
+http://www.fsf.org/licensing/licenses/gpl.txt .

Deleted: trunk/oggdsf/website/about_sdk.html
===================================================================
--- trunk/oggdsf/website/about_sdk.html	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/about_sdk.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,275 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and encoders.">
-  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
-</head>
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=10%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><b><font size="+2">About Ogg SDK and oggcodecs Project</font></b></DIV>
-</FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.illiminable.com/ogg/">Home</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV></DIV>
-</FONT>
-</TD>
-
-<TD width=10%><FONT size=2 color="#000000" face="Arial">
-<DIV></DIV>
-</FONT>
-</TD>
-
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/developers.html">Developer Info</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/history.html">History</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/docs/index.html">Documentation</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/about_sdk.html">About</a></DIV>
-</FONT>
-</TD>
-
-</TR>
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Goals</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-The aim of this project is to provide the most complete implementation of the <a href="http://www.xiph.org/">xiph.org</a> codecs for Windows and Directshow. This includes decoders and encoders for all the xiph.org formats as well as <a href="http://www.annodex.net">annodex</a>. It is released under a BSD license, so they can be used by both open-source and commercial applications.
-
-<br>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Current State</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-Besides the directshow filters which many people are familiar with. The source distribution also contains many useful tools, for debugging and validating ogg files, which build on multiple platforms. There is also a .NET media player class which can basically provide an "instant" media player in any .NET application, as well as an early implementation of an apache2 module which can provide server side seeking (currently only of annodex files, but soon also ogg files)
-<br>
-<br>
-More information about the libraries and tools that are available in the source distribution can be found in the <a href="http://www.illiminable.com/ogg/developers.html">developers section</a>
-<br>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>In the pipeline</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-Many things are planned, I'm not committing solidly to anything! Though as at February 2006, you can expect to see a lot more development over the next few months, and hopefully for the rest of this year. We might get to 1.0 one of these years, with the goal being for the most complete, stable and user friendly solution for Xiph codecs on Windows.
-<br>
-<br>
-I was really busy last year and didn't get to do much, hopefully 2006 will see a much shorter release cycle.
-<br>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Contact me</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-If you have questions, bug reports, feedback, suggestions, or want to tell me about your projects using oggcodecs you can contact me via email at ogg at illiminable.com . I try to answer all email, if you email me and I don't respond within 7 days I am not ignoring you, your email probably got lost amongst all the spam, or I've gone on holidays! In either case, if I don't respond, email me again. Please make your subjects meaningful, so they are easy to spot amongst the spam. Don't attach files to your first email to me, that increases the chance it will be marked as spam. If you have something you want to send me, tell me in your first email, and then once I respond I will tell you how to get the file to me, or I'll be expecting an attachment from you.
-<br>
-<br>
-You can also usually find me on IRC on Freenode servers (www.freenode.net) in #vorbis, #theora or #annodex. Remember I'm in Australia (GMT+8) so I'm more likely to respond in the afternoon/evening my time. My nick is illi.<br>
-<br>
-You could also try the xiph.org mailing lists, such as vorbis-dev.<br><br>
-Or if you want to see the svn commit information on the web, you can spy on me here with <a href="http://cia.navi.cx/stats/author/illiminable">CIA</a><br><br>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-</body>
-</html>
-

Added: trunk/oggdsf/website/cookbook/.htaccess
===================================================================
--- trunk/oggdsf/website/cookbook/.htaccess	                        (rev 0)
+++ trunk/oggdsf/website/cookbook/.htaccess	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+# This file is cookbook/.htaccess -- the default distribution contains this
+# file to prevent cookbook/ scripts from being accessed directly by browsers
+# (this is a potential, albeit very unlikely, security hole).
+#
+# If you alter or replace this file, it will likely be overwritten when
+# you upgrade from one version of PmWiki to another.  Be sure to save
+# a copy of your alterations in another location so you can restore them,
+# and you might try changing this file to be read-only to prevent a PmWiki
+# upgrade from overwriting your altered version.
+
+Order Deny,Allow
+Deny from all

Deleted: trunk/oggdsf/website/developers.html
===================================================================
--- trunk/oggdsf/website/developers.html	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/developers.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,289 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and encoders.">
-  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
-</head>
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=10%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><b><font size="+2">Developer information for Ogg SDK</font></b></DIV>
-</FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.illiminable.com/ogg/">Home</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV></DIV>
-</FONT>
-</TD>
-
-<TD width=10%><FONT size=2 color="#000000" face="Arial">
-<DIV></DIV>
-</FONT>
-</TD>
-
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/developers.html">Developer Info</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/history.html">History</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/docs/index.html">Documentation</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/about_sdk.html">About SDK</a></DIV>
-</FONT>
-</TD>
-
-</TR>
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Useful libraries in the SDK</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-<br>
-
-With the exception of the .NET libraries, all those below will build on Windows, Mac OSX and Unix.
-
-<br>
-<b><FONT size=3 color="#000000" face="Arial">libOOOgg</FONT></b><br>
-libOOOgg is an independant implementation of the ogg encapsulation format. It provides a C++/OO set of classes for manipulating ogg pages and packets, and to paginator and packetise ogg files or streams. It provides similar functionality to libogg.
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">libOOOggSeek</FONT></b><br>
-libOOOggSeek provides seektable based routines for seeking in ogg or annodex files, for rapid and efficient seeking as well as caching seektables for high performance low latency uses
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">libTemporalURI</FONT></b><br>
-libTemporalURI provides parsing functions for the <a href="http://www.annodex.net/TR/draft-pfeiffer-temporal-fragments-02.html">temporal URI specification</a> which allows you to query media resources from a server by time offset in a URI. Also a .NET port of this library exists as libTemporalURIDotNET
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">libDSPlayDotNET</FONT></b><br>
-libDSPlay is a library which provides media player functionality to .NET applications. It abstracts away all the directshow underpinnings and offers a simple API to control the media, which can be easily called from any .NET application. It provides all the most common media player functionality such as play, pause, stop, seek, volume, balance and even grabbing images from a playing video.
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">libOggChef</FONT></b><br>
-libOggChef is a helper library for dynamically recomposing ogg and annodex files. It is still in early development. This is the core of the work done by the apache module (see below)
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">mod_oggchef</FONT></b><br>
-mod_oggchef is an apache 2 module, which provides server side seeking via temporal URI's for ogg and annodex files. It is still in early development
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">libCMMLTags</FONT></b><br>
-libCMMLTags is a container class library for manipulating <a href="http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html">CMML V2.0</a> documents and elements. It is also available in a .NET library as libCMMLTagsDotNET
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">libCMMLParse</FONT></b><br>
-libCMMLParse is a parsing library for CMML V2.0 It parses xml and generates the objects found in libCMMLTags. This is also available in a .NET version as libCMMLParseDotNET
-<br>
-<br>
-
-
-<b><FONT size=3 color="#000000" face="Arial">libDirectshowAbstracts</FONT></b><br>
-libDirectshowAbstracts provides several useful classes for creating directshow filters. All the directshow filters in oggcodecs use these.
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">libVorbisComment</FONT></b><br>
-libVorbisComment is a parsing library for parsing and manipulating vorbis comment strings. It is also available as a .NET library as libVorbisCommentDotNet
-<br>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Useful tools in the SDK</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-<b><FONT size=3 color="#000000" face="Arial">OOOggDump</FONT></b><br>
-OOOggDump provides hex dumps of ogg files showing header data and packet sizes and breaks. It is useful for debugging problems that can occur in ogg files.
-<br>
-<br>
-
-<b><FONT size=3 color="#000000" face="Arial">OOOggValidate</FONT></b><br>
-OOOggValidate validates an ogg file structurally.
-<br>
-<br>
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-</body>
-</html>
-

Added: trunk/oggdsf/website/docs/.htaccess
===================================================================
--- trunk/oggdsf/website/docs/.htaccess	                        (rev 0)
+++ trunk/oggdsf/website/docs/.htaccess	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1 @@
+AddType text/plain .php

Added: trunk/oggdsf/website/docs/COPYING.txt
===================================================================
--- trunk/oggdsf/website/docs/COPYING.txt	                        (rev 0)
+++ trunk/oggdsf/website/docs/COPYING.txt	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.

Added: trunk/oggdsf/website/docs/DOCUMENTATION.txt
===================================================================
--- trunk/oggdsf/website/docs/DOCUMENTATION.txt	                        (rev 0)
+++ trunk/oggdsf/website/docs/DOCUMENTATION.txt	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+Where is the documentation?
+
+PmWiki maintains its documentation as wiki pages.
+If you already have PmWiki installed, then a local copy of
+the documentation is available through PmWiki itself --
+see the "PmWiki.DocumentationIndex" page on your site.
+
+The documentation is also available online at
+http://www.pmwiki.org/wiki/PmWiki/DocumentationIndex .
+

Added: trunk/oggdsf/website/docs/INSTALL.txt
===================================================================
--- trunk/oggdsf/website/docs/INSTALL.txt	                        (rev 0)
+++ trunk/oggdsf/website/docs/INSTALL.txt	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,39 @@
+This is the INSTALL.txt file for PmWiki.  This document provides
+convenient steps so an administrator can have a PmWiki site up and
+running quickly.  More extensive information about installing PmWiki
+is available at http://www.pmwiki.org/wiki/PmWiki/Installation .
+
+Once your site is up and running you will be able to read the bundled
+documentation pages.
+
+Here are some quick steps to start you on your path toward a complete,
+customized installation:
+
+1a) Put the software in a location accessible by your webserver.
+
+1b) PmWiki can also be run if no webserver is installed.  See
+    http://pmwiki.org/wiki/Cookbook/Standalone
+
+2) Point your browser to pmwiki.php.
+
+3) You may see an error message saying that PmWiki needs to have
+   a writable wiki.d/ directory.  If so, follow the directions to
+   establish one.  This directory will hold your wiki page files.
+
+4) If you want a directory index file, create a file called index.php
+   in the main directory that contains the following single line of
+   text, purposefully without a closing "?>":
+
+<?php include('pmwiki.php');
+
+5) Sitewide configuration settings will go in a "local configuration
+   file" named local/config.php.  Copy the well-commented sample
+   configuration file from docs/sample-config.php to the local/
+   subdirectory, then rename the copy to config.php.  Edit your
+   new local/config.php file to suit your preferences.
+
+That's it.  Next you'll probably want to browse your new site and
+read the bundled documentation.  A good place to start is the
+PmWiki.InitialSetupTasks page.
+
+Enjoy!

Added: trunk/oggdsf/website/docs/UPGRADE.txt
===================================================================
--- trunk/oggdsf/website/docs/UPGRADE.txt	                        (rev 0)
+++ trunk/oggdsf/website/docs/UPGRADE.txt	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,50 @@
+This UPGRADE.txt file is a command-line syntax reminder for
+experienced PmWiki administrators.  For full documentation on
+upgrading Pmwiki, see the bundled PmWiki.Upgrades page or visit
+
+  http://www.pmwiki.org/wiki/PmWiki/Upgrades
+
+See also these related pages:
+
+  http://www.pmwiki.org/wiki/PmWiki/BackupAndRestore
+  http://www.pmwiki.org/wiki/PmWiki/Subversion
+
+The examples assume your PmWiki site is in a ./pmwiki/
+directory (a directory named "pmwiki" immediately below the
+working directory).
+
+Backing up (always a good idea!):
+
+  tar -zcvf ~/pmwiki-backup.tar.gz pmwiki
+  zip -9r  ~/pmwiki-backup.zip pmwiki
+
+Or, to keep backups organized by date:
+
+  tar -zcvf ~/pmwiki-site-`date +%Y%m%d%M`.tar.gz pmwiki
+  zip -9r  ~/pmwiki-site-`date +%Y%m%d%M`.zip pmwiki
+
+The latest release is available here:
+
+  http://www.pmichaud.com/pub/pmwiki/pmwiki-latest.tgz
+  http://www.pmichaud.com/pub/pmwiki/pmwiki-latest.zip
+
+Example download commands:
+
+  wget http://www.pmichaud.com/pub/pmwiki/pmwiki-latest.tgz
+  lftpget http://www.pmichaud.com/pub/pmwiki/pmwiki-latest.tgz
+  links http://www.pmichaud.com/pub/pmwiki/pmwiki-latest.tgz
+  lynx http://www.pmichaud.com/pub/pmwiki/pmwiki-latest.tgz
+
+Expanding the archive:
+
+  tar -zxvf pmwiki-latest.tgz  # for the gzipped tarball
+  unzip pmwiki-latest.zip      # for the .zip archive
+
+Copying the files (two ways to do it):
+
+  cp -av pmwiki-2.1.x/. pmwiki
+  cp -Rpv pmwiki-2.1.x/. pmwiki
+
+Subversion upgrade:
+
+  svn export svn://pmwiki.org/pmwiki/tags/latest pmwiki --force

Added: trunk/oggdsf/website/docs/sample-config.php
===================================================================
--- trunk/oggdsf/website/docs/sample-config.php	                        (rev 0)
+++ trunk/oggdsf/website/docs/sample-config.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,159 @@
+<?php if (!defined('PmWiki')) exit();
+##  This is a sample config.php file.  To use this file, copy it to
+##  local/config.php, then edit it for whatever customizations you want.
+##  Also, be sure to take a look at http://www.pmichaud.com/wiki/Cookbook
+##  for more details on the types of customizations that can be added
+##  to PmWiki.  
+
+##  $WikiTitle is the name that appears in the browser's title bar.
+$WikiTitle = 'PmWiki';
+
+##  $ScriptUrl is your preferred URL for accessing wiki pages
+##  $PubDirUrl is the URL for the pub directory.
+# $ScriptUrl = 'http://www.mydomain.com/path/to/pmwiki.php';
+# $PubDirUrl = 'http://www.mydomain.com/path/to/pub';
+
+##  If you want to use URLs of the form .../pmwiki.php/Group/PageName
+##  instead of .../pmwiki.php?p=Group.PageName, try setting
+##  $EnablePathInfo below.  Note that this doesn't work in all environments,
+##  it depends on your webserver and PHP configuration.  You might also 
+##  want to check http://www.pmwiki.org/wiki/Cookbook/CleanUrls more
+##  details about this setting and other ways to create nicer-looking urls.
+# $EnablePathInfo = 1;
+
+## $PageLogoUrl is the URL for a logo image -- you can change this
+## to your own logo if you wish.
+# $PageLogoUrl = "$PubDirUrl/skins/pmwiki/pmwiki-32.gif";
+
+## If you want to have a custom skin, then set $Skin to the name
+## of the directory (in pub/skins/) that contains your skin files.
+## See PmWiki.Skins and Cookbook.Skins.
+# $Skin = 'pmwiki';
+
+## You'll probably want to set an administrative password that you
+## can use to get into password-protected pages.  Also, by default 
+## the "attr" passwords for the PmWiki and Main groups are locked, so
+## an admin password is a good way to unlock those.  See PmWiki.Passwords
+## and PmWiki.PasswordsAdmin.
+# $DefaultPasswords['admin'] = crypt('secret');
+
+## If you're running a publicly available site and allow anyone to
+## edit without requiring a password, you probably want to put some
+## blocklists in place to avoid wikispam.  See PmWiki.Blocklist.
+# $EnableBlocklist = 1;                    # enable manual blocklists
+# $EnableBlocklist = 10;                   # enable automatic blocklists
+
+##  PmWiki comes with graphical user interface buttons for editing;
+##  to enable these buttons, set $EnableGUIButtons to 1.  
+# $EnableGUIButtons = 1;
+
+##  To enable markup syntax from the Creole common wiki markup language
+##  (http://www.wikicreole.org/), include it here:
+# include_once('scripts/creole.php');
+
+##  Some sites may want leading spaces on markup lines to indicate
+##  "preformatted text blocks", set $EnableWSPre=1 if you want to do
+##  this.  Setting it to a higher number increases the number of
+##  space characters required on a line to count as "preformatted text".
+# $EnableWSPre = 0;                        # PmWiki 2.2.0 default (disabled)
+# $EnableWSPre = 1;                        # lines beginning with space are preformatted
+# $EnableWSPre = 4;                        # lines with 4 spaces are preformatted
+
+##  If you want uploads enabled on your system, set $EnableUpload=1.
+##  You'll also need to set a default upload password, or else set
+##  passwords on individual groups and pages.  For more information
+##  see PmWiki.UploadsAdmin.
+# $EnableUpload = 1;                       
+# $DefaultPasswords['upload'] = crypt('secret');
+
+##  Setting $EnableDiag turns on the ?action=diag and ?action=phpinfo
+##  actions, which often helps others to remotely troubleshoot 
+##  various configuration and execution problems.
+# $EnableDiag = 1;                         # enable remote diagnostics
+
+##  By default, PmWiki doesn't allow browsers to cache pages.  Setting
+##  $EnableIMSCaching=1; will re-enable browser caches in a somewhat
+##  smart manner.  Note that you may want to have caching disabled while
+##  adjusting configuration files or layout templates.
+# $EnableIMSCaching = 1;                   # allow browser caching
+
+##  Set $SpaceWikiWords if you want WikiWords to automatically 
+##  have spaces before each sequence of capital letters.
+# $SpaceWikiWords = 1;                     # turn on WikiWord spacing
+
+##  Set $EnableWikiWords if you want to allow WikiWord links.
+##  For more options with WikiWords, see scripts/wikiwords.php .
+# $EnableWikiWords = 1;                      # enable WikiWord links
+
+##  $DiffKeepDays specifies the minimum number of days to keep a page's
+##  revision history.  The default is 3650 (approximately 10 years).
+# $DiffKeepDays=30;                        # keep page history at least 30 days
+
+## By default, viewers are prevented from seeing the existence
+## of read-protected pages in search results and page listings,
+## but this can be slow as PmWiki has to check the permissions
+## of each page.  Setting $EnablePageListProtect to zero will
+## speed things up considerably, but it will also mean that
+## viewers may learn of the existence of read-protected pages.
+## (It does not enable them to access the contents of the
+## pages.)
+# $EnablePageListProtect = 0;
+
+##  The refcount.php script enables ?action=refcount, which helps to
+##  find missing and orphaned pages.  See PmWiki.RefCount.
+# if ($action == 'refcount') include_once('scripts/refcount.php');
+
+##  The feeds.php script enables ?action=rss, ?action=atom, ?action=rdf,
+##  and ?action=dc, for generation of syndication feeds in various formats.
+# if ($action == 'rss') include_once('scripts/feeds.php');   # RSS 2.0
+# if ($action == 'atom') include_once('scripts/feeds.php');  # Atom 1.0
+# if ($action == 'dc') include_once('scripts/feeds.php');    # Dublin Core
+# if ($action == 'rdf') include_once('scripts/feeds.php');   # RSS 1.0
+
+##  In the 2.2.0-beta series, {$var} page variables are absolute by
+##  default, but a future version will make them relative.  This setting
+##  sets them out as relative to begin with.  (If you're starting a new
+##  site, it's probably best to leave this setting alone.)
+$EnableRelativePageVars = 1;
+
+##  By default, pages in the Category group are manually created.
+##  Uncomment the following line to have blank category pages
+##  automatically created whenever a link to a non-existent
+##  category page is saved.  (The page is created only if
+##  the author has edit permissions to the Category group.)
+# $AutoCreate['/^Category\\./'] = array('ctime' => $Now);
+
+##  PmWiki allows a great deal of flexibility for creating custom markup.
+##  To add support for '*bold*' and '~italic~' markup (the single quotes
+##  are part of the markup), uncomment the following lines. 
+##  (See PmWiki.CustomMarkup and the Cookbook for details and examples.)
+# Markup("'~", "inline", "/'~(.*?)~'/", "<i>$1</i>");        # '~italic~'
+# Markup("'*", "inline", "/'\\*(.*?)\\*'/", "<b>$1</b>");    # '*bold*'
+
+##  If you want to have to approve links to external sites before they
+##  are turned into links, uncomment the line below.  See PmWiki.UrlApprovals.
+##  Also, setting $UnapprovedLinkCountMax limits the number of unapproved
+##  links that are allowed in a page (useful to control wikispam).
+# include_once('scripts/urlapprove.php');
+# $UnapprovedLinkCountMax = 10;
+
+##  The following lines make additional editing buttons appear in the
+##  edit page for subheadings, lists, tables, etc.
+# $GUIButtons['h2'] = array(400, '\\n!! ', '\\n', '$[Heading]',
+#                     '$GUIButtonDirUrlFmt/h2.gif"$[Heading]"');
+# $GUIButtons['h3'] = array(402, '\\n!!! ', '\\n', '$[Subheading]',
+#                     '$GUIButtonDirUrlFmt/h3.gif"$[Subheading]"');
+# $GUIButtons['indent'] = array(500, '\\n->', '\\n', '$[Indented text]',
+#                     '$GUIButtonDirUrlFmt/indent.gif"$[Indented text]"');
+# $GUIButtons['outdent'] = array(510, '\\n-<', '\\n', '$[Hanging indent]',
+#                     '$GUIButtonDirUrlFmt/outdent.gif"$[Hanging indent]"');
+# $GUIButtons['ol'] = array(520, '\\n# ', '\\n', '$[Ordered list]',
+#                     '$GUIButtonDirUrlFmt/ol.gif"$[Ordered (numbered) list]"');
+# $GUIButtons['ul'] = array(530, '\\n* ', '\\n', '$[Unordered list]',
+#                     '$GUIButtonDirUrlFmt/ul.gif"$[Unordered (bullet) list]"');
+# $GUIButtons['hr'] = array(540, '\\n----\\n', '', '',
+#                     '$GUIButtonDirUrlFmt/hr.gif"$[Horizontal rule]"');
+# $GUIButtons['table'] = array(600,
+#                       '||border=1 width=80%\\n||!Hdr ||!Hdr ||!Hdr ||\\n||     ||     ||     ||\\n||     ||     ||     ||\\n', '', '', 
+#                     '$GUIButtonDirUrlFmt/table.gif"$[Table]"');
+

Deleted: trunk/oggdsf/website/downloads.html
===================================================================
--- trunk/oggdsf/website/downloads.html	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/downloads.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,274 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and vorbis, speex encoders.">
-  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=10%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><b><font size="+2">Download page for Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC</font></b></DIV>
-</FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-<a href="http://www.illiminable.com/ogg">Main Page</a><br>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>About the downloads</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-From now on, there will be unstable releases made available. This allows me to keep one stable version for the average user and another version for those who like to keep up with that latest
-features, and are willing to live dangerously. This seems better than what recently has been long delays between releases. This is partly prompted by version 0.72.1838 which has a lot of new code
-and bufixes but which hasn't been thoroughly tested yet. At this stage I plan to keep a more regular unstable release, and possibly in the future a daily or very regular bleeding edge release.
-<br>
-<br>
-Unstable does not necessarily mean that it will crash more. It just means it hasn't been tested, so it may or may not be as stable as a proper release
-<br>
-<br>
-Additionally some major changes to add some new features and in particular to maintain 9X support while moving forward to full unicode support have caused the package size to increase quite dramatically
-from the 800-900k of the previous builds. At some point in the future, I will take some effort to trim this down again, and will also likely start offering two different releases. One with
-only the decoders which will be pretty small, and one with all the encoders and decoders and tools which will be slightly larger.
-<br>
-<br>
-As usual, please report bugs you find to me, being sure to tell me which version you are using.
-<br>
-<br>
-Current priorities - Better encoding support, vista support, tagging, shell integration, Windows Mobile 5 support.
-<br><br>
-<a href="#stable">Latest Stable (0.71.0946)</a><br>
-<a href="#unstable">Latest UNSTABLE (0.72.1838)</a><br>
-
-
-
-
-<a name="stable"></a>
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Current Stable Version (0.71.0946) - 24/02/2006</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-More bugfixes, particularly to theora. See 0.70 release for more details about recent changes. Docs and source package will be updated on the weekend, there's no major changes there from 0.70. This version is fairly stable now it seems.
-<br>
-<br>
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows All Versions</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">824,901 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.71.0946.exe">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-<br>
-	<li>Fixed the theora seeking bug, should accurately seek to any frame without artefacts.</li>
-	<li>Fixed bug not handling WMP doing hardware video acceleration, caused crash on some files (Thanks slashdot!)</li>
-	<li>Fixed handling of missing 3xx http response codes</li>
-	<li>Fixed bug where player would crash if you dragged it from one monitor to another while playing</li>
-	<li>Fixed COM reference double-release bug</li>
-	<li>Fixed race condition which could crash or hang sometimes after a seek.</li>
-
-<br>
-<br>
-
-
-<a name="unstable"></a>
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Current UNSTABLE Version (0.72.1838) - 17/9/2006</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-Major changes in this version include, updating all the code to Visual Studio 2005. There is now a "working" port for Windows Mobile 5.0 as at this revision, this is not yet released. Many minor bugixes and
-compatability fixes, dependancy updates, speed increases, unicode support, improved installer. Some major work was done to maintain Windows 9X/ME support while properly supporting unicode. If
-you use or have an interest in the maintaining of support for these obsolete operating systems, please let me know whether they are working for you.
-<br>
-<br>
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows All Versions</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">1,426,864 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.72.1838.exe">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-<br>
-	<li>Fixed bug that would refuse to play extremely small files</li>
-	<li>Added YUY2 output support to better support old graphics hardware</li>
-	<li>Updated speex to 1.2beta1</li>
-	<li>Updated project to VS 2005</li>
-	<li>Using theora-exp for theora decoding ~30% speed up</li>
-	<li>Improved 24/32 bit support for FLAC (still may not be perfect)</li>
-	<li>All code moved to unicode. Fixed bug which would fail if paths had unicode chars</li>
-	<li>Custom unicode emulating(unicows) CRT's to maintain Windows 9X support</li>
-	<li>Compatablity fixes for Media Portal and Media Player Classic</li>
-	<li>Installer detects and offers to remove previous versions</li>
-	<li>Installer offers to optionally associate WMP to .ogg</li>
-	<li>MMX optimisations for libtheora ported to MASM, encoding ~25-30% faster</li>
-	<li>Xiph fish icon in explorer</li>
-	<li>Code ported to Windows Mobile 5.0 (currently unreleased build)</li>
-	<li>Switch to integer decoding version of speex</li>
-
-
-
-<br>
-<br>
-
-
-<a href="http://www.illiminable.com/ogg">Main Page</a><br>
-<br>
-</body>
-</html>
-

Deleted: trunk/oggdsf/website/enc_theora_graphedit.html
===================================================================
--- trunk/oggdsf/website/enc_theora_graphedit.html	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/enc_theora_graphedit.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,102 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>Encoding Ogg Vorbis + Theora files</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and vorbis, speex encoders.">
-  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, 
-
-decoder, encoder, demux, mux, demuxer">
-</head>
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#FF00FF" alink="#FF0000">
-<a href="http://www.illiminable.com/ogg">Main Page</a><br><br>
-<b><u><font size="+2">How to encode theora files with directshow</font></u></b><br>
-If you have come to this page from an external site, please note before following these steps you need to install the <a href="http://www.illiminable.com/ogg/">directshow filters</a> on my main page.<br><br>
-This brief tutorial explains how to use the directshow filter in association with graphedit to encode or transcode ogg theora. It focuses mainly on transcoding, but by using different source filters you can also encode raw data.<br>
-Graphedit is available in the DirectX9 SDK<br>
-<br>
-
-<u><b>Step 1a - Load File</b></u><br>
-After loading up graphedit, from the file menu choose "Render Media File..." and browse to select the file you want to transcode<br>
-<br><img src="http://www.illiminable.com/ogg/images/select_render_file.JPG" alt="Select render file from the menu">
-<br>
-<br>
-
-<u><b>Step 1b - Rendered Graph</b></u><br>
-If it was successful, you should now have a fully rendered graph, that looks something like this. The exact filters will depends on your source file.<br>
-<br><img src="http://www.illiminable.com/ogg/images/show_rendered_graph.JPG" alt="This is the rendered graph">
-<br>
-<br>
-
-<u><b>Step 2a - Check media types</b></u><br>
-Right click on the pin that inputs to the video renderer, and choose pin properties.<br>
-<br><img src="http://www.illiminable.com/ogg/images/pin_properties.JPG" alt="Select pin proeprties">
-<br>
-<br>
-
-
-<u><b>Step 2b - Ensure YV12 or YUY2</b></u><br>
-On the pin properties page check the media type is either YV12 or YUY2, if it is not, this file can not yet be transcoded directly. If it is then proceed.<br>
-<br><img src="http://www.illiminable.com/ogg/images/ensure_YV12.JPG" alt="Select pin properties">
-<br>
-<br>
-
-
-<u><b>Step 3 - Remove renderers</b></u><br>
-This has rendered a graph for playback, what we want to do is remove the renderers from the graph, and replace them with our encoders and muxer. To remove the renderers click on them, they will get a blue border, then press the delete key. After removing the renderers, the graph should look something like this.<br>
-<br><img src="http://www.illiminable.com/ogg/images/remove_renderers.JPG" alt="This is the rendered graph">
-<br>
-<br>
-
-
-<u><b>Step 4 - Find encoders</b></u><br>
-The first time you will need to find the encoders, by clicking the add filter icon, then selecting the directshow branch of the tree.<br>
-<br><img src="http://www.illiminable.com/ogg/images/find_encoders.JPG" alt="Find the encoders">
-<br>
-<br>
-
-<u><b>Step 5a - Select encoders</b></u><br>
-Find the vorbis encode filter and the theora encode filter, select each one and check the favourite filter box so next time the filter will be under favourites in the menu, click insert filter.<br>
-<br><img src="http://www.illiminable.com/ogg/images/select_encoders.JPG" alt="Select the encoders">
-<br>
-<br>
-
-<u><b>Step 5b - Encoders Added to graph</b></u><br>
-After the encoders have been added to the graph, it should look something like this.<br>
-<br><img src="http://www.illiminable.com/ogg/images/encoders_added.JPG" alt="Graph after encoders added.">
-<br>
-<br>
-
-<u><b>Step 6 - Connect the encoders</b></u><br>
-By dragging the ouput pin of the decoder to the input of the encoder connect the filters together.<br>
-<br><img src="http://www.illiminable.com/ogg/images/connect_encoders.JPG" alt="Connecting encoder pins.">
-<br>
-<br>
-
-<u><b>Step 7 - Open the Theora Encoder Properties</b></u><br>
-Important: *BEFORE* connecting to the muxer, right click the filter and select it's proeprty page.<br>
-<br><img src="http://www.illiminable.com/ogg/images/filter_properties.JPG" alt="Selecting filter proeprties menu item.">
-<br>
-<br>
-
-<u><b>Step 8 - Setup the encoder properties</b></u><br>
-Modify the settings and click apply or ok. Future versions will include more comprehensive options<br>
-<br><img src="http://www.illiminable.com/ogg/images/theora_properties.JPG" alt="Select encoding parameters.">
-<br>
-<br>
-
-<u><b>Step 9 - Select Mux Filter</b></u><br>
-Select the Ogg Mux filter as you previously did for the encoders and connect the encoders to it. As you connect a pin a new one will be spawned.<br>
-Important: Whichever encoder is connected at *the bottom* is one that will appear *first* in the encoded file. <b>This means to make a valid theora file, the vorbis stream is added first to the top pin, then the theora stream to the next pin.</b><br>
-<br><img src="http://www.illiminable.com/ogg/images/select_muxer.JPG" alt="Select Muxer.">
-<br>
-<br>
-
-<u><b>Step 10 - Fully connected graph to play</b></u><br>
-The graph is now ready to go, and should look something like this. Press the play button and wait for the encoding to finish. It is finished when the play button goes green again. Close graphedit... don't press play again or it will overwrite the file. Depending on the source format it may show encoding progress in the progress bar, this is however slightly innacurate... the bar will appear to finish before the encoding has really finished. The progress bar indicates how much data has left the source. Look at the play button or check your processor to usage to see if it has finished.There will always be one empty pin at the bottom of the muxer, this is normal.<br>
-<br><img src="http://www.illiminable.com/ogg/images/fully_connected.JPG" alt="Fully Connected graph">
-<br>
-<br>
-<a href="http://www.illiminable.com/ogg">Main Page</a><br><br>
-
-</body>
-</html>
\ No newline at end of file

Deleted: trunk/oggdsf/website/graphedit.html
===================================================================
--- trunk/oggdsf/website/graphedit.html	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/graphedit.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,52 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>illiminable Ogg Directshow Filters - graphedit encoding</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and vorbis, speex encoders.">
-  <meta name="keywords" content=" directshow, theora, vorbis, speex, ogg, media player, codec, audio, video, windows, wmp">
-</head>
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#FF00FF" alink="#FF0000">
-
-<a href="http://www.illiminable.com/ogg">Main Page</a><br><br>
-<b><u><font size="+2">Some sample encoding directshow graphs in graphedit</font></u></b><br>
-<br>
-
-<img src="http://www.illiminable.com/ogg/images/wave_to_vorbis_graphedit.JPG" alt="Wave to vorbis graph">
-<br>
-<b><u>Wave to vorbis encoding.</a></u> (Visit <a href="http://www.waixwave.com/index.php">WaixWave</a>)</b>
-<br>
-<br>
-
-<img src="http://www.illiminable.com/ogg/images/mp3_to_vorbis_graphedit.JPG" alt="MP3 to vorbis graph">
-<br>
-<b><u>MP3 to vorbis transcoding.</u></b>
-<br>
-<br>
-
-<img src="http://www.illiminable.com/ogg/images/ogg_split_graphedit.JPG" alt="Splitting multi-stream files graph">
-<br>
-<b><u>Splitting a theora+vorbis file to component parts.</u> (File : <a href="http://www.polycrystal.org/lego/movies.html">Lego Man Movies</a>)</b>
-<br>
-<br>
-
-<img src="http://www.illiminable.com/ogg/images/wma_to_vorbis_graphedit.JPG" alt="WMA to vorbis graph">
-<br>
-<b><u>WMA to vorbis transcoding.</u></b>
-<br>
-<br>
-
-<img src="http://www.illiminable.com/ogg/images/mp3_to_speex_graphedit.JPG" alt="MP3 to speex graph">
-<br>
-<b><u>MP3 to speex transcoding.</u></b>
-<br>
-<br>
-
-<img src="http://www.illiminable.com/ogg/images/vorbis_to_mp3_graphedit.JPG" alt="Vorbis to MP3 graph">
-<br>
-<b><u>Vorbis to MP3 transcoding.</u></b>
-<br>
-<br>
-<a href="http://www.illiminable.com/ogg">Main Page</a><br><br>
-
-</body>
-</html>
\ No newline at end of file

Deleted: trunk/oggdsf/website/history.html
===================================================================
--- trunk/oggdsf/website/history.html	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/history.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,1343 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and vorbis, speex encoders.">
-  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=10%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><b><font size="+2">History of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC</font></b></DIV>
-</FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-<a href="http://www.illiminable.com/ogg">Main Page</a><br>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>How it started...</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-I first began working on ogg media directshow filters whilst under contract to CSIRO's <a href="http://www.annodex.net">annodex.net</a> project group. Much of the knowledge I needed to write these filters was gained through my work with this project.My initial implementation was for a specific annodex (which uses the ogg encapsulation format)demuxer. Part of my aim of this project was to use the knowledge gained to create a set of filters that works with generic ogg physical streams rather than just a particular physical bitstream format and to release these back to the open source community. There were several limitations to the approach taken to the original annodex filters which is why I decided to start from scratch to design the filter architecture over again with the experience of the first attempt.<br>
-<br>
-Another of my aims of this project is to rewrite the annodex demuxer to use this new design in order for it to be more extensible and easier to work with. This time writing the generic ogg case first and then basing the annodex demuxer on this new design it will increase the consistency of the code between the two modules and provide less trouble integrating new codecs, with the aim of making annodex technology available in the standard applications that come default with windows.<br>
-<br>
-I encourage you all to go and check out the <a href="http://www.annodex.net">annodex project</a> and to consider coding some applications to utilise this new technology. There are many interesting posibilities this new technology presents to continuous media and search technology which will expand the internet to be a richer more dynamic multimedia experience.<br>
-<br>
-Thankyou to CSIRO's annodex.net project group (Silvia Pfeiffer, Conrad Parker and André Pang) for the opportunity to work on this exciting new technology and sparking my interest in directshow and the <a href="http://xiph.org">xiph.org</a> range of codecs.<br>
-<br>
-On the 1st of May 2004, this project began to be maintained in the <a href="http://www.xiph.org">xiph.org</a> subversion repository. It can be found at <a href="http://svn.xiph.org/trunk/oggdsf/">svn.xiph.org/trunk/oggdsf/</a><br>
-<br>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Versions</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<b><font size="+1">Only download these if you have problems with the <a href="http://www.illiminable.com/ogg/">new version</a>.</font></b><br>
-<br>
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.70.0827) - 16/02/2006</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-Wow... has it been a whole year :) Yes, this project is still alive! There's a fair bit of new code, so if you have problems you might want to try the <a href="http://www.illiminable.com/ogg/history.html">history</a> page and get version 0.69. One notable thing that this new version does not do correctly, is it no longer handles chained icecast streams, but it handles streaming static files on a server much better. The previous solution for icecast was a real hack which is no longer possible, it will be fixed properly fairly soon.
-<br>
-<br>
-I'm releasing now, because otherwise you'll be waiting forever! Releases should be coming much more frequently hopefully. As always, email me your bugs and feature requests. The unicode filenames will be fixed as soon as I can, sorry, I keep putting that one off.
-<br>
-<br>
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows All Versions</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">824,581 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.70.0827.exe">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-<b><u></u></b><br>
-	<li>Theora can seek without artefacts to any frame, even non-keyframes.(95% of the time, there's still a slight bug)</li>
-	<li>All seeking in all codecs is accurate to within a single audio sample (ie. sub-second)</li>
-	<li>Complete rewrite of demux, it's much easier for me to continue now.</li>
-	<li>OGM support is improved a bit, still not great. It does not associate with the .ogm extension to avoid messing with other solutions for .ogm you might have. But renaming the .ogm file to .ogg it will attempt to play it.</li>
-	<li>Improved handling of static files on servers (still not seeking over http)</li>
-	<li>Be aware that it builds a seektable for all on-disk files. For really large files (>250MB) it may take a little while for the file to load</li>
-	<li>Updated most libraries, vorbis is still at 1.1.1, speex still 1.1.10. Another release soonish may rectify this. I just want to release what I've got now, or it will keep being put off.</li>
-
-<br>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.69.8924) - 15/02/2005</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-Lots of bufixes, especially memory leaks and memory management. Along with a new installer based on <a href="http://nsis.sourceforge.net/">NSIS</a>, which is just click-and-run.
-<br>
-<br>
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows All Versions</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">816,782 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.69.8924.exe">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-
-<b><u></u></b><br>
-	<li>Removed several major memory leaks in encoders and decoders</li>
-	<li>More intelligent buffer sizing, reduces memory footprint about about 5-10 fold</li>
-	<li>Much more <a href="http://www.illiminable.com/ogg/docs/index.html">documentation</a></li>
-	<li>Vorbis encoder has programmatic interface for setting quality</li>
-	<li>Annodex Muxing support</li>
-	<li>Programmitic interface for encoding progress</li>
-	<li>Can seek in WMP6.4</li>
-	<li>Several other tools (not included in this binary) for server side seeking, and .NET media players added to <a href="http://www.illiminable.com/ogg/about_sdk.html">SDK</a></li>
-<br>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.68.8333) - 06/12/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-Mainly bugfixes.
-<br>
-<br>
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows XP</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">994,706 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.68.8333.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows NT/2000</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,777,163 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.68.8333.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows 98/ME</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,662,269 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.68.8333.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-
-<b><u></u></b><br>
-	<li>Fixed playback from windows network drives.</li>
-	<li>Fixed bug where audio would stop if you seek really close to the end.</li>
-	<li>Seeking performance back to almost instant</li>
-<br>
-<br>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.67.8171) - 05/11/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-Added support for playing native flac files (.flac). No major bufixes in this release, I'm quite busy at the moment, but a new version which addresses many of 
- the outstanding bugs will be ready in 2-3 weeks. Thanks for being patient.</br>
-<br>
-<br>
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows XP</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">969,047 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.67.8171.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows NT/2000</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,751,504 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.67.8171.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows 98/ME</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,636,610 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.67.8171.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-<b><u></u></b><br>
-	<li>Now supports native FLAC (.flac files) without ogg container.</li>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.66.8063) - 21/10/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-Added support for the new Ogg FLAC format and fixed that Explorer problem with locked files. A fair bit of internal shuffling, but mainly a whole lot of memory leaks have been eliminated.<br>
-<br>
-<br>
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows XP</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">952,518 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.66.8063.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows NT/2000</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,734,975 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.66.8063.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows 98/ME</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,620,081 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.66.8063.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-<b><u></u></b><br>
-	<li>FLAC can now be muxed into a multi-stream file.</li>
-	<li>Now supports both the new Ogg FLAC (1.1.1) and the old Ogg FLAC (still not native FLAC)</li>
-	<li>Fixed the explorer problem by removing the offending registry key at installation</li>
-	<li>Removed a heap of memory leaks, WMP should run a fair bit leaner now</li>
-	<li>Some internal changes to the queueing mechanism</li>
-	<li>There's some skeleton <a href="http://www.illiminable.com/ogg/docs/index.html">API documentation</a> for developers. It's pretty sparse on info still though.</li>
-<br>
-<br>
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.65.7923) - 07/10/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-Added support for icecast vorbis streams. Works for most streams, though there is a limitation that the stream can't change codebooks, or audio settings mid-stream, but 
-this shouldn't be a problem for most streams. Also an internal fix on the format blocks of the filters. To use icecast streams in WMP you need paste the url in to the 
-Open Url dialog box (File->Open URL...). WMP doesn't support .pls files... so if this is what form the stream takes, for now, you need to save the .pls file, and copy-paste 
-the link that is inside it into WMP.
-
-
-<br>
-<br>
-Most of the major functionality bugs are sorted out now, I'm quite happy with this release and the previous one, though still a way to go.
-<br>
-<br>
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows XP</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">938,166 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.65.7923.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows NT/2000</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,720,623 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.65.7923.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows 98/ME</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,605,729 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.65.7923.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-
-<b><u></u></b><br>
-	<li>Can now play most vorbis icecast streams.</li>
-	<li>Fixed some random values in the format blocks (Thanks to Robert Huitl for reporting this.)</li>
-<br>
-<br>
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.64.7878) - 25/09/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-Fixed up the seeking in WMP 9 and 10 mainly... and a few other fixes. Also added more colour space conversions for the encoder.
-<br>
-<br>
-<br>
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows XP</DIV>
-</FONT>
-</TD>
-
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">948,458 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.64.7878.zip">Download Now</a></div></DIV></FONT>
-</TD>
-
-</TR>
-
-
-
-<TR valign=top>
-
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows NT/2000</DIV>
-</FONT>
-</TD>
-
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,730,915 bytes</div></DIV></FONT>
-</TD>
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.64.7878.zip">Download Now</a></div></DIV></FONT>
-</TD>
-
-</TR>
-
-
-
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows 98/ME</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,616,021 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.64.7878.zip">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-
-<b><u></u></b><br>
-	<li>Fixed seeking in WMP 9 and 10.</li>
-	<li>Fixed a bug using the WMP activeX control.</li>
-	<li>Theora encoder accepts new media types ie RGB24, RGB32, AYUV, IYUV, UYVY, YVYU... only RGB32 has been tested, as i don't have any source of the other types.</li>
-<br>
-<br>
-
-
-
-
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.63.7755) - 13/09/2004</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-<br>
-I put the installers back in the packages. Just makes it easier for people who aren't computer savvy. Also theora now plays in WMP9 and 10 (but still can't seek in these two players). 
-Also fixed a bug in the speex encoder that made a mess of theora+speex files. Fixed a few more memory leaks.<br>
-<br>
-<br>
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows XP</DIV>
-</FONT>
-</TD>
-
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">950,311 bytes</div></DIV></FONT>
-</TD>
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.63.7755.zip">Download Now</a></div></DIV></FONT>
-</TD>
-
-</TR>
-
-
-
-<TR valign=top>
-
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows NT/2000</DIV>
-</FONT>
-</TD>
-
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,732,768 bytes</div></DIV></FONT>
-</TD>
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.63.7755.zip">Download Now</a></div></DIV></FONT>
-</TD>
-
-</TR>
-
-
-
-
-<TR valign=top>
-
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows 98/ME</DIV>
-</FONT>
-</TD>
-
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">2,617,874 bytes</div></DIV></FONT>
-</TD>
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.63.7755.zip">Download Now</a></div></DIV></FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-
-<b><u></u></b><br>
-	<li>Fixed a few memory leaks... there are still more left though.</li>
-	<li>Fixed some bugs in speex encoder. Can now make proper speex+theora files</li>
-	<li>Theora playback works in WMP 9 and 10 now... but no seeking in these two players</li>
-	<li>Fixed a muxing problem with large packets.</li>
-	<li>Increased some of the buffer sizes. Trying to encode very high quality theora was crashing as the buffer was too small</li>
-<br>
-<br>
-
-
-
-
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.62.7673) - 01/09/2004</b></DIV>
-</FONT>
-</TD>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-To stop people unnecessarily downloading the windows installer over and over, the packages will no longer include the installer. If you have a pre-XP 
-windows, and don't already have the windows installer on your system (almost everyone who has ever installed something should have it already) you can
-download the installer seperately from the links at the top of the page.<br>
-<br>
-Fixed the network streaming, and removed all the .NET sample apps from this release. <a href="http://www.illiminable.com/ogg/sse_builds.html">Experimental SSE/SSE2 builds can be found here</a><br>
-Changed the installer a bit so people realise when they download via download "shell sites", which hide the true source of the download, where it came from and where to look for updates.<br>
-<br>
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows 98/ME/NT/2K/XP</DIV>
-</FONT>
-</TD>
-
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">942,859 bytes</div></DIV></FONT>
-</TD>
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.62.7673.zip">Download Now</a></div></DIV></FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-<br>
-	<li>Fixed a few memory leaks... there are still more left though.</li>
-	<li>Removed all the .NET sample applications to avoid those without .NET being forced to install it.</li>
-	<li>Streaming greatly improved. Will now cache a file as it streams in the TEMP directory as specified in environment variables.</li>
-	<li>Made experimental SSE/SSE2 optimised builds of all libraries.</li>
-	<li>Changed the installer so that you have to click through the BSD licenses, and to show where the software came from as many sites are linking directly to the .zip files so users are not getting the opportunity to read about known issues, or even know if they are getting the current version.</li>
-<br>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.61.7571) - 16/08/2004</b></DIV>
-</FONT>
-</TD>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-To stop people unnecessarily downloading the windows installer over and over, the packages will no longer include the installer. If you have a pre-XP 
-windows, and don't already have the windows installer on your system (almost everyone who has ever installed something should have it already) you can
-download the installer seperately from the links at the top of the page.<br>
-<br>
-Fixed a few bugs in theora, seeking almost never crashes now. FLAC playback and seeking now works properly, though not extensively tested. Includes a FLAC encoder filter. Starting from the
-next release I will start offering different build configurations, ie minimal decode only installation, builds with SSE2 optimisations etc.<br>
-<br>
-
-
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows 98/ME/NT/2K/XP</DIV>
-</FONT>
-</TD>
-
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">1,076,031 bytes</div></DIV></FONT>
-</TD>
-
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.61.7571.zip">Download Now</a></div></DIV></FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-	<li>Fixed seeking crash problems with theora</li>
-	<li>Fixed FLAC playback</li>
-	<li>Added a FLAC encoder filter</li>
-	<li>Added a very simple .NET media player called DNPlay</li>
-	<li>Added a .NET directshow playback library</li>
-	<li>Added a validation program for ogg files OOOggValidate</li>
-<br>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.60.7043) - 08/07/2004</b></DIV>
-</FONT>
-</TD>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-Quite a fair bit added this time, most notably an encoder for theora... see <a href="http://www.illiminable.com/ogg/enc_theora_graphedit.html">Encoding theora</a><br>
-Only a few encoding parameters are currently exposed via a filter property page. Also modified the demuxer so it can handle http streams though there are some issues. The buffering is very simple, it doesn't optimise buffer based on bandwidth. Network steams are currently non-seekable. Also only non-chained
-files should be streamed. Most encoded files are not chained. However some icecast streams, Which are not continuous, have breaks where songs change, this type of stream will likely crash the media player. However continuous live streams... such as radio broadcasts etc generally work fine. The network streaming has only recently be added, so i expect it to still be fairly buggy.<br>
-<br>
-To all the people interested in FLAC, I will be spending some time sorting out the bugs that have been there for ages very soon, thanks for your patience !<br>
-<br>
-This release has a lot of new code added, I'd really appreciate feedback on the installation process, and the encoding. I will leave the links to the previous version up for a while further down the page.<br>
-
-<br>
-	<li>Added <a href="http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html">CMML</a> Decoder filter</li>
-	<li>Added a simple subtitle renderer based on VMR 9</li>
-	<li>Added an OO vorbis comment parsing library</li>
-	<li>Added an example tool called OOOggCommentDump which dumps comment information from the first stream in a file</li>
-	<li>Added container class library for <a href="http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html">CMML</a></li>
-	<li>Added minimal <a href="http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html">CMML</a> parsing library based on MSXML</a>
-	<li>Added a demuxer filter for <a href="http://www.annodex.net/">Annodex</a>, will only play in graphedit currently, and needs to manually build graphs to include the VMR9 as video renderer, also won't play the mpeg coded videos that are on the annodex site.</li>
-	<li>Added network support for demuxer to stream .ogg files</li>
-	<li>Fixed the speex encoder (I think)</li>
-	<li>Ogg Mux filter now supports multiple stream muxing</li>
-	<li>Added a theora encode filter, with a minimal configurable property page</li>
-	<li>Theora encode filter supports YUY2 input (generally from mpeg) or YV12 (generally from avi codecs, in particular those decoded by ffdshow)</li>
-	<li>Fixed some bad implementation of frame offsets in the theora decoder</li>
-	<li>Now files can be added to the WMP9+ Media Library, however no media metadata is yet extracted from the vorbis comments. Nor can you currently use the rip or burn functionality.</li>
-
-<br>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.57.6744) - 22/05/2004</b></DIV>
-</FONT>
-</TD>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-Previous release a few hours ago had hundreds of debug statements in the release build. It may have created log files in your C:\ Root directory as well as C:\temp and possibly in G:\ if you have a writable G drive. Sorry if you got this a few hours ago.
-<br>
-	<li>Removed a whole heap of debugging code.</li>
-	<li>See 0.56.6741 release below for latest changes.</li>
-
-<br>
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.56.6741) - 21/05/2004</b></DIV>
-</FONT>
-</TD>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-Most of the changes in this build are internal modifications to better deal with the need to determine start times of all samples in order to properly synchronise multi-stream files. The main externally visible change is the limited ability to seek in theora files without total loss of synch. There are still a few issues to be ironed out though.
-<br>
-	<li>Modified internal timestamping mechanism, to allow resynch easier in theora.</li>
-	<li>Now able to seek in theora (not to keyframe), but occasionally crashes after seek.</li>
-	<li>Speex and vorbis, don't have seg fault any more, though very rarely after a seek there is no audio. Another seek fixes it.</li>
-	<li>Added simple new tool called OOOggStat, to give info on contained streams.</li>
-
-<br>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.55.0115) - 27/04/2004</b></DIV>
-</FONT>
-</TD>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-Vorbis and speex playback are now pretty much finished bar the very rare bug I mention below. I've played dozens of speex and vorbis files and they all seem just fine. Pretty much fully functional.<br>
-The track duration shows up incorrectly in all codecs besides speex and vorbis because I haven't coded it yet !<br>
-A seek table is built as the file is loaded... this is currently done by basicly processing the entire file... so there may be a small delay loading large files. When I get time I'll replace this with a better method that doesn't try and process the entire file, but can skip through to the relevant parts.<br>
-	<li>NOTE: I suggest you don't distribute files encoded with these codecs yet... there may still be problems with them</li>
-	<li>Fixed clumpy playback of divx, bad timestamping</li>
-	<li>Added seeking, duration and position info to vorbis and speex</li>
-	<li>Fixed a few internal errors with regards to timestamping</li>
-	<li>Added a seek table for rapid seeking</li>
-<br>
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.52.0093) - 18/04/2004</b></DIV>
-</FONT>
-</TD>
-
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-	<li>NOTE: I suggest you don't distribute files encoded with these codecs yet... there may still be problems with them</li>
-	<li>See version 0.50.0090 for information</li>
-	<li>Now checksums pages properly.</li>
-	<li>Properly organises initial header packets in pages.</li>
-	
-
-<br>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.51.0092) - 18/04/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-	<li>See version 0.50.0090 for information</li>
-	<li>Stuffed up some packaging and linking in the last version... probably won't affect it, but just to be safe, did rebuild and package. Sorry if you got it 5 minutes ago !</li>
-	
-<br>
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.50.0090) - 18/04/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-Start of encoding support has been added... see <a href="http://www.illiminable.com/ogg/graphedit.html">example filter graphs</a>. Use graphedit (<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9216652f-51e0-402e-b7b5-feb68d00f298&displaylang=en">DirectX9 SDK</a>)</li>
-	<li>Added support for OGM style video encapsulation *decode only*, requires <a href="http://sourceforge.net/projects/ffdshow">ffdshow</a>. Should recognise any format ffdshow can handle. (Video quite clumpy at the moment)</li>
-	<li>Added single stream Ogg Muxer... for muxing theora, speex and vorbis</li>
-	<li>Added vorbis encoder filter</li>
-	<li>Added speex encoder filter</li>
-	<li>Included Abstract Audio Encoder library</li>
-	
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.40.0069) - 08/04/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-This new release completes the basic functionality for the four major codecs, though there are still bugs. Theora hasn't been extensively tested
-as I don't have many test files to work with. FLAC is still pretty buggy... theora less so... but still buggy.
-	<li>NOTE: Untested with DirectX 8 or lower. I'm pretty sure theora will only play with DX9. Others *should* work with DX8.</li>
-	<li>Added basic Theora support (alpha 3 *only*, previous bitstream formats are depracated). See issues below.</li>
-	<li>Included OO Theora wrapper library</li>
-	<li>Included Abstract Video Decoder library</li>
-<br>
-<br>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.30.0058) - 31/03/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-Just thought I'd release this update. It includes some FLAC support but it's very buggy, I suggest you don't use FLAC just yet.<br>
-Vorbis and speex are the same as before but with below changes. Vorbis and Speex won't crash<br>
-	<li>Fixed bug in stream recogniser which defaulted unknown to speex.</li>
-	<li>Fixed minor defect in audio when stopping and replaying</li>
-	<li>Split Vorbis and Speex to seperate filters</li>
-	<li>Included Abstract Codec Library</li>
-	<li>Now ignores unknown streams. ie. Playing a theora/vorbis will only play the vorbis</li>
-	<li>Major abstractions to demux filter in preperation for theora/annodex</li>
-	<li>Included very basic Ogg FLAC playback (very buggy, see below, update in a day or two to fix)</li>
-	<li>Included one of my basic debugging tools. OOOggDump. Usage : OOOggDump filename, be sure to redirect output to a file</li>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.22.0035) - 24/03/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-	<li>Updated libfishsound to 0.6.0</li>
-	<li>Changes to attribution text files.</li>
-	<li>Release builds with compiler optimisations.</li>
-<br>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.21.0032) - 24/03/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-	<li>Fixed audio defects.</li>
-	<li>Added clipping to account for out of range floats from vorbis</li>
-	<li>Updated vorbis to 1.0.1 and speex to 1.0.3</li><br>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.20.0022) - 23/03/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-	<li>Added support for speex.</li>
-	<li>Recognises speex files with .ogg .spx or .speex extensions</li><br>
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.11.0020) - 22/03/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-	<li>Removed several memory leaks.</li>
-	<li>Media Player doesn't make the error sound on exiting any more.</li>
-	<li>Fixed a few crashing bugs that only show up in graphedit by doing stupid things.</li>
-	<li>Package is more compressed now.</li>
-	<li>Fixed a crashing bug in libfishsound</li><br>
-<br>
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Previous Version (0.10.0019) - 22/03/2004</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-	<li>Initial binary release.</li><br>
-<br>
-<a href="http://www.illiminable.com/ogg">Main Page</a><br>
-<br>
-</body>
-</html>
-

Deleted: trunk/oggdsf/website/index.html
===================================================================
--- trunk/oggdsf/website/index.html	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/index.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,336 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and encoders.">
-  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
-</head>
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
-</FONT>
-</TD>
-
-<TD width=10%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><b><font size="+2">Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC</font></b></DIV>
-</FONT>
-</TD>
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><a href="http://www.illiminable.com/ogg/">Home</a></DIV>
-</FONT>
-</TD>
-
-<TD width=10%><FONT size=2 color="#000000" face="Arial">
-<DIV></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/downloads.html">Downloads</a></DIV>
-</FONT>
-</TD>
-
-
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/developers.html">Developer Info</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/history.html">History</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/docs/index.html">Documentation</a></DIV>
-</FONT>
-</TD>
-
-<TD width=15%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/about_sdk.html">About</a></DIV>
-</FONT>
-</TD>
-
-</TR>
-
-
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-
-
-
-
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Installation</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-
-
-<li>Uninstall any previous version of these filters.(<b>This is important!</b>) Go to add remove programs, remove oggcodecs</li>
-<li>Make sure media player or any directshow applications are closed.</li>
-<li>Run the installer.</li>
-<br>
-Then Windows Media Player or any other directshow application (eg. BSPlayer) will be able to play Ogg Vorbis, Ogg Speex, Ogg Theora, Ogg FLAC and native FLAC.<br>
-<br>
-Starting with version 0.72.1838, development will now be split into a stable and unstable branch. That way, those who just want to play their files can get the stable version, and those who 
-want to live dangerously can get the latest new features without having to wait for me to do proper testing. You can find the <b>unstable builds</b> on the <a href="http://www.illiminable.com/ogg/downloads.html">download page</a>.
-Most users should download the stable version below.
-<br>
-
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Current Stable Version (0.71.0946) - 24/02/2006</b></DIV>
-</FONT>
-</TD>
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<br>
-More bugfixes, particularly to theora. See 0.70 release for more details about recent changes. Docs and source package will be updated on the weekend, there's no major changes there from 0.70. This version is fairly stable now it seems.
-<br>
-<br>
-
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-
-<TR valign=top>
-<TD width=40%><FONT size=2 color="#000000" face="Arial">
-<DIV>Ogg Codecs for windows</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV>Windows All Versions</DIV>
-</FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right">824,901 bytes</div></DIV></FONT>
-</TD>
-<TD width=20%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.71.0946.exe">Download Now</a></div></DIV></FONT>
-</TD>
-</TR>
-
-
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Changes this version</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-<b><u></u></b><br>
-	<li>Fixed the theora seeking bug, should accurately seek to any frame without artefacts.</li>
-	<li>Fixed bug not handling WMP doing hardware video acceleration, caused crash on some files (Thanks slashdot!)</li>
-	<li>Fixed handling of missing 3xx http response codes</li>
-	<li>Fixed bug where player would crash if you dragged it from one monitor to another while playing</li>
-	<li>Fixed COM reference double-release bug</li>
-	<li>Fixed race condition which could crash or hang sometimes after a seek.</li>
-
-<br>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Known issues.</b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-	<li>Can't play file with names that use extended character sets (ie Japanese) under certani locales of windows (Thanks Liisachan)</li>
-	<li>AVI Video files encoded with non-integral framerates (ie 29.97) may lose sync, due to rounding bug (Thanks RadicalEd)</li>
-	<li>Make the installer properly detect if it's already installed. If you don't uninstall the old version you will get multiple identical file masks in WMP</li>
-	<li>If you are getting codec problems, there appears to be a conflict with something in Media Player Classic... it tries to enforce the use of another ogg demultiplexer, either by design or accident.If you see in MPC it complaining about a media subtype with a 
-		GUID {CDDCA2D5-6D75-4F98-840E-737BEDD5C63B}. This is the guid of the old tobias vorbis filter, and this one {8D2FD10B-5841-4a6b-8905-588FEC1ADED9} is CoreVorbis. This is most likely due to the fact that these filters don't clean up the registry when they uninstall.
-		I am working on something to "clean up" all these remnants from the registry (don't expect it too soon though... it's not that high priority). You can also apparently an option to disable the inbuilt demuxer (Thanks Bond)</li>
-	<li>Cannot handle any chained multiplexed files or streams.</li>
-
-<br>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"><b>Other stuff<br></b></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-
-<li>Also you can encode vorbis, speex, FLAC and theora files using graphedit(<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9216652f-51e0-402e-b7b5-feb68d00f298&displaylang=en">DirectX9 SDK</a>) or other similar program.</li>
-<li><a href="http://www.illiminable.com/ogg/graphedit.html">See audio encoding example filter graphs</a></li>
-<li><a href="http://www.illiminable.com/ogg/enc_theora_graphedit.html">Theora encoding how-to</a></li>
-<li>If you install <a href="http://sourceforge.net/projects/ffdshow">ffdshow</a>, you will be able to play ogm files (sometimes at least!)</li>
-<li>Also, if you download, install and register <a href="http://sourceforge.net/project/showfiles.php?group_id=82303&package_id=84799">Gabests .cda directshow source</a> you can rip CD's using graphedit</li>
-<li>Looking for <a href="http://www.illiminable.com/ogg/history.html">old versions</a> ?</li>
-<li>Want the <a href="http://www.illiminable.com/ogg/oggcodecs_src_0.70.0827.zip">zipped source code</a> (10.5 MB zipped, 37MB unzipped) ?</li>
-<li>Want to <a href="http://svn.xiph.org/trunk/oggdsf/">browse the source on the web</a> </li>
-<li><a href="http://www.illiminable.com/ogg/sse_builds.html">Experimental SSE/SSE2 builds can be found here</a></li>
-<li>Some basic <a href="http://www.illiminable.com/ogg/docs/index.html">API documentation</a> for developers</li>
-<br>
-
-<FONT size=2 color="#101010" face="Arial">
-<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-
-<TD width=100%><FONT size=2 color="#000000" face="Arial">
-<DIV><div align="left"></DIV>
-</FONT>
-</TD>
-
-</TR>
-</TABLE>
-</DIV>
-</FONT>
-</body>
-</html>
-

Added: trunk/oggdsf/website/index.php
===================================================================
--- trunk/oggdsf/website/index.php	                        (rev 0)
+++ trunk/oggdsf/website/index.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1 @@
+<?php include('pmwiki.php');

Added: trunk/oggdsf/website/local/.htaccess
===================================================================
--- trunk/oggdsf/website/local/.htaccess	                        (rev 0)
+++ trunk/oggdsf/website/local/.htaccess	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+# This file is local/.htaccess -- the default distribution contains this
+# file to prevent local/ scripts from being accessed directly by browsers
+# (this is a potential, albeit very unlikely, security hole).
+#
+# If you alter or replace this file, it will likely be overwritten when
+# you upgrade from one version of PmWiki to another.  Be sure to save
+# a copy of your alterations in another location so you can restore them,
+# and you might try changing this file to be read-only to prevent a PmWiki
+# upgrade from overwriting your altered version.
+
+Order Deny,Allow
+Deny from all

Added: trunk/oggdsf/website/local/config.php
===================================================================
--- trunk/oggdsf/website/local/config.php	                        (rev 0)
+++ trunk/oggdsf/website/local/config.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,163 @@
+<?php if (!defined('PmWiki')) exit();
+##  This is a sample config.php file.  To use this file, copy it to
+##  local/config.php, then edit it for whatever customizations you want.
+##  Also, be sure to take a look at http://www.pmichaud.com/wiki/Cookbook
+##  for more details on the types of customizations that can be added
+##  to PmWiki.  
+
+##  $WikiTitle is the name that appears in the browser's title bar.
+$WikiTitle = 'Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC';
+
+##  $ScriptUrl is your preferred URL for accessing wiki pages
+##  $PubDirUrl is the URL for the pub directory.
+# $ScriptUrl = 'http://www.mydomain.com/path/to/pmwiki.php';
+# $PubDirUrl = 'http://www.mydomain.com/path/to/pub';
+
+##  If you want to use URLs of the form .../pmwiki.php/Group/PageName
+##  instead of .../pmwiki.php?p=Group.PageName, try setting
+##  $EnablePathInfo below.  Note that this doesn't work in all environments,
+##  it depends on your webserver and PHP configuration.  You might also 
+##  want to check http://www.pmwiki.org/wiki/Cookbook/CleanUrls more
+##  details about this setting and other ways to create nicer-looking urls.
+$EnablePathInfo = 1;
+
+## $PageLogoUrl is the URL for a logo image -- you can change this
+## to your own logo if you wish.
+# $PageLogoUrl = "$PubDirUrl/skins/pmwiki/pmwiki-32.gif";
+$PageLogoUrl = "http://www.xiph.org/images/logos/white-xifish.gif";
+
+## If you want to have a custom skin, then set $Skin to the name
+## of the directory (in pub/skins/) that contains your skin files.
+## See PmWiki.Skins and Cookbook.Skins.
+$Skin = 'barthelme';
+$EnableMenuBar = TRUE;
+
+## You'll probably want to set an administrative password that you
+## can use to get into password-protected pages.  Also, by default 
+## the "attr" passwords for the PmWiki and Main groups are locked, so
+## an admin password is a good way to unlock those.  See PmWiki.Passwords
+## and PmWiki.PasswordsAdmin.
+$DefaultPasswords['admin'] = crypt('secretOggdsf');
+$DefaultPasswords['edit'] = crypt('secretOggdsf');
+$DefaultPasswords['attr'] = crypt('secretOggdsf');
+
+## If you're running a publicly available site and allow anyone to
+## edit without requiring a password, you probably want to put some
+## blocklists in place to avoid wikispam.  See PmWiki.Blocklist.
+# $EnableBlocklist = 1;                    # enable manual blocklists
+# $EnableBlocklist = 10;                   # enable automatic blocklists
+
+##  PmWiki comes with graphical user interface buttons for editing;
+##  to enable these buttons, set $EnableGUIButtons to 1.  
+$EnableGUIButtons = 1;
+
+##  To enable markup syntax from the Creole common wiki markup language
+##  (http://www.wikicreole.org/), include it here:
+# include_once('scripts/creole.php');
+
+##  Some sites may want leading spaces on markup lines to indicate
+##  "preformatted text blocks", set $EnableWSPre=1 if you want to do
+##  this.  Setting it to a higher number increases the number of
+##  space characters required on a line to count as "preformatted text".
+# $EnableWSPre = 0;                        # PmWiki 2.2.0 default (disabled)
+# $EnableWSPre = 1;                        # lines beginning with space are preformatted
+# $EnableWSPre = 4;                        # lines with 4 spaces are preformatted
+
+##  If you want uploads enabled on your system, set $EnableUpload=1.
+##  You'll also need to set a default upload password, or else set
+##  passwords on individual groups and pages.  For more information
+##  see PmWiki.UploadsAdmin.
+$EnableUpload = 1;                       
+$DefaultPasswords['upload'] = crypt('secretOggdsf');
+
+##  Setting $EnableDiag turns on the ?action=diag and ?action=phpinfo
+##  actions, which often helps others to remotely troubleshoot 
+##  various configuration and execution problems.
+# $EnableDiag = 1;                         # enable remote diagnostics
+
+##  By default, PmWiki doesn't allow browsers to cache pages.  Setting
+##  $EnableIMSCaching=1; will re-enable browser caches in a somewhat
+##  smart manner.  Note that you may want to have caching disabled while
+##  adjusting configuration files or layout templates.
+# $EnableIMSCaching = 1;                   # allow browser caching
+
+##  Set $SpaceWikiWords if you want WikiWords to automatically 
+##  have spaces before each sequence of capital letters.
+# $SpaceWikiWords = 1;                     # turn on WikiWord spacing
+
+##  Set $EnableWikiWords if you want to allow WikiWord links.
+##  For more options with WikiWords, see scripts/wikiwords.php .
+$EnableWikiWords = 1;                      # enable WikiWord links
+
+##  $DiffKeepDays specifies the minimum number of days to keep a page's
+##  revision history.  The default is 3650 (approximately 10 years).
+# $DiffKeepDays=30;                        # keep page history at least 30 days
+
+## By default, viewers are prevented from seeing the existence
+## of read-protected pages in search results and page listings,
+## but this can be slow as PmWiki has to check the permissions
+## of each page.  Setting $EnablePageListProtect to zero will
+## speed things up considerably, but it will also mean that
+## viewers may learn of the existence of read-protected pages.
+## (It does not enable them to access the contents of the
+## pages.)
+# $EnablePageListProtect = 0;
+
+##  The refcount.php script enables ?action=refcount, which helps to
+##  find missing and orphaned pages.  See PmWiki.RefCount.
+# if ($action == 'refcount') include_once('scripts/refcount.php');
+
+##  The feeds.php script enables ?action=rss, ?action=atom, ?action=rdf,
+##  and ?action=dc, for generation of syndication feeds in various formats.
+# if ($action == 'rss') include_once('scripts/feeds.php');   # RSS 2.0
+# if ($action == 'atom') include_once('scripts/feeds.php');  # Atom 1.0
+# if ($action == 'dc') include_once('scripts/feeds.php');    # Dublin Core
+# if ($action == 'rdf') include_once('scripts/feeds.php');   # RSS 1.0
+
+##  In the 2.2.0-beta series, {$var} page variables are absolute by
+##  default, but a future version will make them relative.  This setting
+##  sets them out as relative to begin with.  (If you're starting a new
+##  site, it's probably best to leave this setting alone.)
+$EnableRelativePageVars = 1;
+
+##  By default, pages in the Category group are manually created.
+##  Uncomment the following line to have blank category pages
+##  automatically created whenever a link to a non-existent
+##  category page is saved.  (The page is created only if
+##  the author has edit permissions to the Category group.)
+# $AutoCreate['/^Category\\./'] = array('ctime' => $Now);
+
+##  PmWiki allows a great deal of flexibility for creating custom markup.
+##  To add support for '*bold*' and '~italic~' markup (the single quotes
+##  are part of the markup), uncomment the following lines. 
+##  (See PmWiki.CustomMarkup and the Cookbook for details and examples.)
+# Markup("'~", "inline", "/'~(.*?)~'/", "<i>$1</i>");        # '~italic~'
+# Markup("'*", "inline", "/'\\*(.*?)\\*'/", "<b>$1</b>");    # '*bold*'
+
+##  If you want to have to approve links to external sites before they
+##  are turned into links, uncomment the line below.  See PmWiki.UrlApprovals.
+##  Also, setting $UnapprovedLinkCountMax limits the number of unapproved
+##  links that are allowed in a page (useful to control wikispam).
+# include_once('scripts/urlapprove.php');
+# $UnapprovedLinkCountMax = 10;
+
+##  The following lines make additional editing buttons appear in the
+##  edit page for subheadings, lists, tables, etc.
+# $GUIButtons['h2'] = array(400, '\\n!! ', '\\n', '$[Heading]',
+#                     '$GUIButtonDirUrlFmt/h2.gif"$[Heading]"');
+# $GUIButtons['h3'] = array(402, '\\n!!! ', '\\n', '$[Subheading]',
+#                     '$GUIButtonDirUrlFmt/h3.gif"$[Subheading]"');
+# $GUIButtons['indent'] = array(500, '\\n->', '\\n', '$[Indented text]',
+#                     '$GUIButtonDirUrlFmt/indent.gif"$[Indented text]"');
+# $GUIButtons['outdent'] = array(510, '\\n-<', '\\n', '$[Hanging indent]',
+#                     '$GUIButtonDirUrlFmt/outdent.gif"$[Hanging indent]"');
+# $GUIButtons['ol'] = array(520, '\\n# ', '\\n', '$[Ordered list]',
+#                     '$GUIButtonDirUrlFmt/ol.gif"$[Ordered (numbered) list]"');
+# $GUIButtons['ul'] = array(530, '\\n* ', '\\n', '$[Unordered list]',
+#                     '$GUIButtonDirUrlFmt/ul.gif"$[Unordered (bullet) list]"');
+# $GUIButtons['hr'] = array(540, '\\n----\\n', '', '',
+#                     '$GUIButtonDirUrlFmt/hr.gif"$[Horizontal rule]"');
+# $GUIButtons['table'] = array(600,
+#                       '||border=1 width=80%\\n||!Hdr ||!Hdr ||!Hdr ||\\n||     ||     ||     ||\\n||     ||     ||     ||\\n', '', '', 
+#                     '$GUIButtonDirUrlFmt/table.gif"$[Table]"');
+

Added: trunk/oggdsf/website/orig/about_sdk.html
===================================================================
--- trunk/oggdsf/website/orig/about_sdk.html	                        (rev 0)
+++ trunk/oggdsf/website/orig/about_sdk.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,275 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
+  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and encoders.">
+  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
+</head>
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
+</FONT>
+</TD>
+
+<TD width=10%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+
+
+</TABLE>
+</DIV>
+</FONT>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><b><font size="+2">About Ogg SDK and oggcodecs Project</font></b></DIV>
+</FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.illiminable.com/ogg/">Home</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV></DIV>
+</FONT>
+</TD>
+
+<TD width=10%><FONT size=2 color="#000000" face="Arial">
+<DIV></DIV>
+</FONT>
+</TD>
+
+
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/developers.html">Developer Info</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/history.html">History</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/docs/index.html">Documentation</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/about_sdk.html">About</a></DIV>
+</FONT>
+</TD>
+
+</TR>
+
+
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Goals</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+The aim of this project is to provide the most complete implementation of the <a href="http://www.xiph.org/">xiph.org</a> codecs for Windows and Directshow. This includes decoders and encoders for all the xiph.org formats as well as <a href="http://www.annodex.net">annodex</a>. It is released under a BSD license, so they can be used by both open-source and commercial applications.
+
+<br>
+<br>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Current State</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+Besides the directshow filters which many people are familiar with. The source distribution also contains many useful tools, for debugging and validating ogg files, which build on multiple platforms. There is also a .NET media player class which can basically provide an "instant" media player in any .NET application, as well as an early implementation of an apache2 module which can provide server side seeking (currently only of annodex files, but soon also ogg files)
+<br>
+<br>
+More information about the libraries and tools that are available in the source distribution can be found in the <a href="http://www.illiminable.com/ogg/developers.html">developers section</a>
+<br>
+<br>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>In the pipeline</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+Many things are planned, I'm not committing solidly to anything! Though as at February 2006, you can expect to see a lot more development over the next few months, and hopefully for the rest of this year. We might get to 1.0 one of these years, with the goal being for the most complete, stable and user friendly solution for Xiph codecs on Windows.
+<br>
+<br>
+I was really busy last year and didn't get to do much, hopefully 2006 will see a much shorter release cycle.
+<br>
+<br>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Contact me</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+If you have questions, bug reports, feedback, suggestions, or want to tell me about your projects using oggcodecs you can contact me via email at ogg at illiminable.com . I try to answer all email, if you email me and I don't respond within 7 days I am not ignoring you, your email probably got lost amongst all the spam, or I've gone on holidays! In either case, if I don't respond, email me again. Please make your subjects meaningful, so they are easy to spot amongst the spam. Don't attach files to your first email to me, that increases the chance it will be marked as spam. If you have something you want to send me, tell me in your first email, and then once I respond I will tell you how to get the file to me, or I'll be expecting an attachment from you.
+<br>
+<br>
+You can also usually find me on IRC on Freenode servers (www.freenode.net) in #vorbis, #theora or #annodex. Remember I'm in Australia (GMT+8) so I'm more likely to respond in the afternoon/evening my time. My nick is illi.<br>
+<br>
+You could also try the xiph.org mailing lists, such as vorbis-dev.<br><br>
+Or if you want to see the svn commit information on the web, you can spy on me here with <a href="http://cia.navi.cx/stats/author/illiminable">CIA</a><br><br>
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+</body>
+</html>
+

Added: trunk/oggdsf/website/orig/developers.html
===================================================================
--- trunk/oggdsf/website/orig/developers.html	                        (rev 0)
+++ trunk/oggdsf/website/orig/developers.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,289 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
+  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and encoders.">
+  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
+</head>
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
+</FONT>
+</TD>
+
+<TD width=10%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+
+
+</TABLE>
+</DIV>
+</FONT>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><b><font size="+2">Developer information for Ogg SDK</font></b></DIV>
+</FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.illiminable.com/ogg/">Home</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV></DIV>
+</FONT>
+</TD>
+
+<TD width=10%><FONT size=2 color="#000000" face="Arial">
+<DIV></DIV>
+</FONT>
+</TD>
+
+
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/developers.html">Developer Info</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/history.html">History</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/docs/index.html">Documentation</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/about_sdk.html">About SDK</a></DIV>
+</FONT>
+</TD>
+
+</TR>
+
+
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Useful libraries in the SDK</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+<br>
+
+With the exception of the .NET libraries, all those below will build on Windows, Mac OSX and Unix.
+
+<br>
+<b><FONT size=3 color="#000000" face="Arial">libOOOgg</FONT></b><br>
+libOOOgg is an independant implementation of the ogg encapsulation format. It provides a C++/OO set of classes for manipulating ogg pages and packets, and to paginator and packetise ogg files or streams. It provides similar functionality to libogg.
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">libOOOggSeek</FONT></b><br>
+libOOOggSeek provides seektable based routines for seeking in ogg or annodex files, for rapid and efficient seeking as well as caching seektables for high performance low latency uses
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">libTemporalURI</FONT></b><br>
+libTemporalURI provides parsing functions for the <a href="http://www.annodex.net/TR/draft-pfeiffer-temporal-fragments-02.html">temporal URI specification</a> which allows you to query media resources from a server by time offset in a URI. Also a .NET port of this library exists as libTemporalURIDotNET
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">libDSPlayDotNET</FONT></b><br>
+libDSPlay is a library which provides media player functionality to .NET applications. It abstracts away all the directshow underpinnings and offers a simple API to control the media, which can be easily called from any .NET application. It provides all the most common media player functionality such as play, pause, stop, seek, volume, balance and even grabbing images from a playing video.
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">libOggChef</FONT></b><br>
+libOggChef is a helper library for dynamically recomposing ogg and annodex files. It is still in early development. This is the core of the work done by the apache module (see below)
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">mod_oggchef</FONT></b><br>
+mod_oggchef is an apache 2 module, which provides server side seeking via temporal URI's for ogg and annodex files. It is still in early development
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">libCMMLTags</FONT></b><br>
+libCMMLTags is a container class library for manipulating <a href="http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html">CMML V2.0</a> documents and elements. It is also available in a .NET library as libCMMLTagsDotNET
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">libCMMLParse</FONT></b><br>
+libCMMLParse is a parsing library for CMML V2.0 It parses xml and generates the objects found in libCMMLTags. This is also available in a .NET version as libCMMLParseDotNET
+<br>
+<br>
+
+
+<b><FONT size=3 color="#000000" face="Arial">libDirectshowAbstracts</FONT></b><br>
+libDirectshowAbstracts provides several useful classes for creating directshow filters. All the directshow filters in oggcodecs use these.
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">libVorbisComment</FONT></b><br>
+libVorbisComment is a parsing library for parsing and manipulating vorbis comment strings. It is also available as a .NET library as libVorbisCommentDotNet
+<br>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Useful tools in the SDK</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+<b><FONT size=3 color="#000000" face="Arial">OOOggDump</FONT></b><br>
+OOOggDump provides hex dumps of ogg files showing header data and packet sizes and breaks. It is useful for debugging problems that can occur in ogg files.
+<br>
+<br>
+
+<b><FONT size=3 color="#000000" face="Arial">OOOggValidate</FONT></b><br>
+OOOggValidate validates an ogg file structurally.
+<br>
+<br>
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+</body>
+</html>
+

Added: trunk/oggdsf/website/orig/downloads.html
===================================================================
--- trunk/oggdsf/website/orig/downloads.html	                        (rev 0)
+++ trunk/oggdsf/website/orig/downloads.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
+  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and vorbis, speex encoders.">
+  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
+</FONT>
+</TD>
+
+<TD width=10%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+
+
+</TABLE>
+</DIV>
+</FONT>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><b><font size="+2">Download page for Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC</font></b></DIV>
+</FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+<a href="http://www.illiminable.com/ogg">Main Page</a><br>
+<br>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>About the downloads</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+From now on, there will be unstable releases made available. This allows me to keep one stable version for the average user and another version for those who like to keep up with that latest
+features, and are willing to live dangerously. This seems better than what recently has been long delays between releases. This is partly prompted by version 0.72.1838 which has a lot of new code
+and bufixes but which hasn't been thoroughly tested yet. At this stage I plan to keep a more regular unstable release, and possibly in the future a daily or very regular bleeding edge release.
+<br>
+<br>
+Unstable does not necessarily mean that it will crash more. It just means it hasn't been tested, so it may or may not be as stable as a proper release
+<br>
+<br>
+Additionally some major changes to add some new features and in particular to maintain 9X support while moving forward to full unicode support have caused the package size to increase quite dramatically
+from the 800-900k of the previous builds. At some point in the future, I will take some effort to trim this down again, and will also likely start offering two different releases. One with
+only the decoders which will be pretty small, and one with all the encoders and decoders and tools which will be slightly larger.
+<br>
+<br>
+As usual, please report bugs you find to me, being sure to tell me which version you are using.
+<br>
+<br>
+Current priorities - Better encoding support, vista support, tagging, shell integration, Windows Mobile 5 support.
+<br><br>
+<a href="#stable">Latest Stable (0.71.0946)</a><br>
+<a href="#unstable">Latest UNSTABLE (0.72.1838)</a><br>
+
+
+
+
+<a name="stable"></a>
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Current Stable Version (0.71.0946) - 24/02/2006</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+More bugfixes, particularly to theora. See 0.70 release for more details about recent changes. Docs and source package will be updated on the weekend, there's no major changes there from 0.70. This version is fairly stable now it seems.
+<br>
+<br>
+
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows All Versions</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">824,901 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.71.0946.exe">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+<br>
+	<li>Fixed the theora seeking bug, should accurately seek to any frame without artefacts.</li>
+	<li>Fixed bug not handling WMP doing hardware video acceleration, caused crash on some files (Thanks slashdot!)</li>
+	<li>Fixed handling of missing 3xx http response codes</li>
+	<li>Fixed bug where player would crash if you dragged it from one monitor to another while playing</li>
+	<li>Fixed COM reference double-release bug</li>
+	<li>Fixed race condition which could crash or hang sometimes after a seek.</li>
+
+<br>
+<br>
+
+
+<a name="unstable"></a>
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Current UNSTABLE Version (0.72.1838) - 17/9/2006</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+Major changes in this version include, updating all the code to Visual Studio 2005. There is now a "working" port for Windows Mobile 5.0 as at this revision, this is not yet released. Many minor bugixes and
+compatability fixes, dependancy updates, speed increases, unicode support, improved installer. Some major work was done to maintain Windows 9X/ME support while properly supporting unicode. If
+you use or have an interest in the maintaining of support for these obsolete operating systems, please let me know whether they are working for you.
+<br>
+<br>
+
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows All Versions</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">1,426,864 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.72.1838.exe">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+<br>
+	<li>Fixed bug that would refuse to play extremely small files</li>
+	<li>Added YUY2 output support to better support old graphics hardware</li>
+	<li>Updated speex to 1.2beta1</li>
+	<li>Updated project to VS 2005</li>
+	<li>Using theora-exp for theora decoding ~30% speed up</li>
+	<li>Improved 24/32 bit support for FLAC (still may not be perfect)</li>
+	<li>All code moved to unicode. Fixed bug which would fail if paths had unicode chars</li>
+	<li>Custom unicode emulating(unicows) CRT's to maintain Windows 9X support</li>
+	<li>Compatablity fixes for Media Portal and Media Player Classic</li>
+	<li>Installer detects and offers to remove previous versions</li>
+	<li>Installer offers to optionally associate WMP to .ogg</li>
+	<li>MMX optimisations for libtheora ported to MASM, encoding ~25-30% faster</li>
+	<li>Xiph fish icon in explorer</li>
+	<li>Code ported to Windows Mobile 5.0 (currently unreleased build)</li>
+	<li>Switch to integer decoding version of speex</li>
+
+
+
+<br>
+<br>
+
+
+<a href="http://www.illiminable.com/ogg">Main Page</a><br>
+<br>
+</body>
+</html>
+

Added: trunk/oggdsf/website/orig/enc_theora_graphedit.html
===================================================================
--- trunk/oggdsf/website/orig/enc_theora_graphedit.html	                        (rev 0)
+++ trunk/oggdsf/website/orig/enc_theora_graphedit.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>Encoding Ogg Vorbis + Theora files</title>
+  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and vorbis, speex encoders.">
+  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, 
+
+decoder, encoder, demux, mux, demuxer">
+</head>
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#FF00FF" alink="#FF0000">
+<a href="http://www.illiminable.com/ogg">Main Page</a><br><br>
+<b><u><font size="+2">How to encode theora files with directshow</font></u></b><br>
+If you have come to this page from an external site, please note before following these steps you need to install the <a href="http://www.illiminable.com/ogg/">directshow filters</a> on my main page.<br><br>
+This brief tutorial explains how to use the directshow filter in association with graphedit to encode or transcode ogg theora. It focuses mainly on transcoding, but by using different source filters you can also encode raw data.<br>
+Graphedit is available in the DirectX9 SDK<br>
+<br>
+
+<u><b>Step 1a - Load File</b></u><br>
+After loading up graphedit, from the file menu choose "Render Media File..." and browse to select the file you want to transcode<br>
+<br><img src="http://www.illiminable.com/ogg/images/select_render_file.JPG" alt="Select render file from the menu">
+<br>
+<br>
+
+<u><b>Step 1b - Rendered Graph</b></u><br>
+If it was successful, you should now have a fully rendered graph, that looks something like this. The exact filters will depends on your source file.<br>
+<br><img src="http://www.illiminable.com/ogg/images/show_rendered_graph.JPG" alt="This is the rendered graph">
+<br>
+<br>
+
+<u><b>Step 2a - Check media types</b></u><br>
+Right click on the pin that inputs to the video renderer, and choose pin properties.<br>
+<br><img src="http://www.illiminable.com/ogg/images/pin_properties.JPG" alt="Select pin proeprties">
+<br>
+<br>
+
+
+<u><b>Step 2b - Ensure YV12 or YUY2</b></u><br>
+On the pin properties page check the media type is either YV12 or YUY2, if it is not, this file can not yet be transcoded directly. If it is then proceed.<br>
+<br><img src="http://www.illiminable.com/ogg/images/ensure_YV12.JPG" alt="Select pin properties">
+<br>
+<br>
+
+
+<u><b>Step 3 - Remove renderers</b></u><br>
+This has rendered a graph for playback, what we want to do is remove the renderers from the graph, and replace them with our encoders and muxer. To remove the renderers click on them, they will get a blue border, then press the delete key. After removing the renderers, the graph should look something like this.<br>
+<br><img src="http://www.illiminable.com/ogg/images/remove_renderers.JPG" alt="This is the rendered graph">
+<br>
+<br>
+
+
+<u><b>Step 4 - Find encoders</b></u><br>
+The first time you will need to find the encoders, by clicking the add filter icon, then selecting the directshow branch of the tree.<br>
+<br><img src="http://www.illiminable.com/ogg/images/find_encoders.JPG" alt="Find the encoders">
+<br>
+<br>
+
+<u><b>Step 5a - Select encoders</b></u><br>
+Find the vorbis encode filter and the theora encode filter, select each one and check the favourite filter box so next time the filter will be under favourites in the menu, click insert filter.<br>
+<br><img src="http://www.illiminable.com/ogg/images/select_encoders.JPG" alt="Select the encoders">
+<br>
+<br>
+
+<u><b>Step 5b - Encoders Added to graph</b></u><br>
+After the encoders have been added to the graph, it should look something like this.<br>
+<br><img src="http://www.illiminable.com/ogg/images/encoders_added.JPG" alt="Graph after encoders added.">
+<br>
+<br>
+
+<u><b>Step 6 - Connect the encoders</b></u><br>
+By dragging the ouput pin of the decoder to the input of the encoder connect the filters together.<br>
+<br><img src="http://www.illiminable.com/ogg/images/connect_encoders.JPG" alt="Connecting encoder pins.">
+<br>
+<br>
+
+<u><b>Step 7 - Open the Theora Encoder Properties</b></u><br>
+Important: *BEFORE* connecting to the muxer, right click the filter and select it's proeprty page.<br>
+<br><img src="http://www.illiminable.com/ogg/images/filter_properties.JPG" alt="Selecting filter proeprties menu item.">
+<br>
+<br>
+
+<u><b>Step 8 - Setup the encoder properties</b></u><br>
+Modify the settings and click apply or ok. Future versions will include more comprehensive options<br>
+<br><img src="http://www.illiminable.com/ogg/images/theora_properties.JPG" alt="Select encoding parameters.">
+<br>
+<br>
+
+<u><b>Step 9 - Select Mux Filter</b></u><br>
+Select the Ogg Mux filter as you previously did for the encoders and connect the encoders to it. As you connect a pin a new one will be spawned.<br>
+Important: Whichever encoder is connected at *the bottom* is one that will appear *first* in the encoded file. <b>This means to make a valid theora file, the vorbis stream is added first to the top pin, then the theora stream to the next pin.</b><br>
+<br><img src="http://www.illiminable.com/ogg/images/select_muxer.JPG" alt="Select Muxer.">
+<br>
+<br>
+
+<u><b>Step 10 - Fully connected graph to play</b></u><br>
+The graph is now ready to go, and should look something like this. Press the play button and wait for the encoding to finish. It is finished when the play button goes green again. Close graphedit... don't press play again or it will overwrite the file. Depending on the source format it may show encoding progress in the progress bar, this is however slightly innacurate... the bar will appear to finish before the encoding has really finished. The progress bar indicates how much data has left the source. Look at the play button or check your processor to usage to see if it has finished.There will always be one empty pin at the bottom of the muxer, this is normal.<br>
+<br><img src="http://www.illiminable.com/ogg/images/fully_connected.JPG" alt="Fully Connected graph">
+<br>
+<br>
+<a href="http://www.illiminable.com/ogg">Main Page</a><br><br>
+
+</body>
+</html>
\ No newline at end of file

Added: trunk/oggdsf/website/orig/graphedit.html
===================================================================
--- trunk/oggdsf/website/orig/graphedit.html	                        (rev 0)
+++ trunk/oggdsf/website/orig/graphedit.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>illiminable Ogg Directshow Filters - graphedit encoding</title>
+  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and vorbis, speex encoders.">
+  <meta name="keywords" content=" directshow, theora, vorbis, speex, ogg, media player, codec, audio, video, windows, wmp">
+</head>
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#FF00FF" alink="#FF0000">
+
+<a href="http://www.illiminable.com/ogg">Main Page</a><br><br>
+<b><u><font size="+2">Some sample encoding directshow graphs in graphedit</font></u></b><br>
+<br>
+
+<img src="http://www.illiminable.com/ogg/images/wave_to_vorbis_graphedit.JPG" alt="Wave to vorbis graph">
+<br>
+<b><u>Wave to vorbis encoding.</a></u> (Visit <a href="http://www.waixwave.com/index.php">WaixWave</a>)</b>
+<br>
+<br>
+
+<img src="http://www.illiminable.com/ogg/images/mp3_to_vorbis_graphedit.JPG" alt="MP3 to vorbis graph">
+<br>
+<b><u>MP3 to vorbis transcoding.</u></b>
+<br>
+<br>
+
+<img src="http://www.illiminable.com/ogg/images/ogg_split_graphedit.JPG" alt="Splitting multi-stream files graph">
+<br>
+<b><u>Splitting a theora+vorbis file to component parts.</u> (File : <a href="http://www.polycrystal.org/lego/movies.html">Lego Man Movies</a>)</b>
+<br>
+<br>
+
+<img src="http://www.illiminable.com/ogg/images/wma_to_vorbis_graphedit.JPG" alt="WMA to vorbis graph">
+<br>
+<b><u>WMA to vorbis transcoding.</u></b>
+<br>
+<br>
+
+<img src="http://www.illiminable.com/ogg/images/mp3_to_speex_graphedit.JPG" alt="MP3 to speex graph">
+<br>
+<b><u>MP3 to speex transcoding.</u></b>
+<br>
+<br>
+
+<img src="http://www.illiminable.com/ogg/images/vorbis_to_mp3_graphedit.JPG" alt="Vorbis to MP3 graph">
+<br>
+<b><u>Vorbis to MP3 transcoding.</u></b>
+<br>
+<br>
+<a href="http://www.illiminable.com/ogg">Main Page</a><br><br>
+
+</body>
+</html>
\ No newline at end of file

Added: trunk/oggdsf/website/orig/history.html
===================================================================
--- trunk/oggdsf/website/orig/history.html	                        (rev 0)
+++ trunk/oggdsf/website/orig/history.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,1343 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
+  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and vorbis, speex encoders.">
+  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#DDDDDD" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.xiph.org">Xiph.org</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.vorbis.com">Vorbis</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.speex.org">Speex</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.theora.org">Theora</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://flac.sourceforge.net/">FLAC</a></DIV>
+</FONT>
+</TD>
+
+<TD width=15%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><a href="http://www.annodex.net">Annodex</a></DIV>
+</FONT>
+</TD>
+
+<TD width=10%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>ogg at illiminable.com</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+
+
+</TABLE>
+</DIV>
+</FONT>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><b><font size="+2">History of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC</font></b></DIV>
+</FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#070707" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+<a href="http://www.illiminable.com/ogg">Main Page</a><br>
+<br>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>How it started...</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+I first began working on ogg media directshow filters whilst under contract to CSIRO's <a href="http://www.annodex.net">annodex.net</a> project group. Much of the knowledge I needed to write these filters was gained through my work with this project.My initial implementation was for a specific annodex (which uses the ogg encapsulation format)demuxer. Part of my aim of this project was to use the knowledge gained to create a set of filters that works with generic ogg physical streams rather than just a particular physical bitstream format and to release these back to the open source community. There were several limitations to the approach taken to the original annodex filters which is why I decided to start from scratch to design the filter architecture over again with the experience of the first attempt.<br>
+<br>
+Another of my aims of this project is to rewrite the annodex demuxer to use this new design in order for it to be more extensible and easier to work with. This time writing the generic ogg case first and then basing the annodex demuxer on this new design it will increase the consistency of the code between the two modules and provide less trouble integrating new codecs, with the aim of making annodex technology available in the standard applications that come default with windows.<br>
+<br>
+I encourage you all to go and check out the <a href="http://www.annodex.net">annodex project</a> and to consider coding some applications to utilise this new technology. There are many interesting posibilities this new technology presents to continuous media and search technology which will expand the internet to be a richer more dynamic multimedia experience.<br>
+<br>
+Thankyou to CSIRO's annodex.net project group (Silvia Pfeiffer, Conrad Parker and André Pang) for the opportunity to work on this exciting new technology and sparking my interest in directshow and the <a href="http://xiph.org">xiph.org</a> range of codecs.<br>
+<br>
+On the 1st of May 2004, this project began to be maintained in the <a href="http://www.xiph.org">xiph.org</a> subversion repository. It can be found at <a href="http://svn.xiph.org/trunk/oggdsf/">svn.xiph.org/trunk/oggdsf/</a><br>
+<br>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Versions</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<b><font size="+1">Only download these if you have problems with the <a href="http://www.illiminable.com/ogg/">new version</a>.</font></b><br>
+<br>
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.70.0827) - 16/02/2006</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+Wow... has it been a whole year :) Yes, this project is still alive! There's a fair bit of new code, so if you have problems you might want to try the <a href="http://www.illiminable.com/ogg/history.html">history</a> page and get version 0.69. One notable thing that this new version does not do correctly, is it no longer handles chained icecast streams, but it handles streaming static files on a server much better. The previous solution for icecast was a real hack which is no longer possible, it will be fixed properly fairly soon.
+<br>
+<br>
+I'm releasing now, because otherwise you'll be waiting forever! Releases should be coming much more frequently hopefully. As always, email me your bugs and feature requests. The unicode filenames will be fixed as soon as I can, sorry, I keep putting that one off.
+<br>
+<br>
+
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows All Versions</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">824,581 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.70.0827.exe">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+</TABLE>
+</DIV>
+</FONT>
+
+<b><u></u></b><br>
+	<li>Theora can seek without artefacts to any frame, even non-keyframes.(95% of the time, there's still a slight bug)</li>
+	<li>All seeking in all codecs is accurate to within a single audio sample (ie. sub-second)</li>
+	<li>Complete rewrite of demux, it's much easier for me to continue now.</li>
+	<li>OGM support is improved a bit, still not great. It does not associate with the .ogm extension to avoid messing with other solutions for .ogm you might have. But renaming the .ogm file to .ogg it will attempt to play it.</li>
+	<li>Improved handling of static files on servers (still not seeking over http)</li>
+	<li>Be aware that it builds a seektable for all on-disk files. For really large files (>250MB) it may take a little while for the file to load</li>
+	<li>Updated most libraries, vorbis is still at 1.1.1, speex still 1.1.10. Another release soonish may rectify this. I just want to release what I've got now, or it will keep being put off.</li>
+
+<br>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.69.8924) - 15/02/2005</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+Lots of bufixes, especially memory leaks and memory management. Along with a new installer based on <a href="http://nsis.sourceforge.net/">NSIS</a>, which is just click-and-run.
+<br>
+<br>
+
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows All Versions</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">816,782 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.69.8924.exe">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+
+<b><u></u></b><br>
+	<li>Removed several major memory leaks in encoders and decoders</li>
+	<li>More intelligent buffer sizing, reduces memory footprint about about 5-10 fold</li>
+	<li>Much more <a href="http://www.illiminable.com/ogg/docs/index.html">documentation</a></li>
+	<li>Vorbis encoder has programmatic interface for setting quality</li>
+	<li>Annodex Muxing support</li>
+	<li>Programmitic interface for encoding progress</li>
+	<li>Can seek in WMP6.4</li>
+	<li>Several other tools (not included in this binary) for server side seeking, and .NET media players added to <a href="http://www.illiminable.com/ogg/about_sdk.html">SDK</a></li>
+<br>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.68.8333) - 06/12/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+Mainly bugfixes.
+<br>
+<br>
+
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows XP</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">994,706 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.68.8333.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows NT/2000</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,777,163 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.68.8333.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows 98/ME</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,662,269 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.68.8333.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+
+<b><u></u></b><br>
+	<li>Fixed playback from windows network drives.</li>
+	<li>Fixed bug where audio would stop if you seek really close to the end.</li>
+	<li>Seeking performance back to almost instant</li>
+<br>
+<br>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.67.8171) - 05/11/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+Added support for playing native flac files (.flac). No major bufixes in this release, I'm quite busy at the moment, but a new version which addresses many of 
+ the outstanding bugs will be ready in 2-3 weeks. Thanks for being patient.</br>
+<br>
+<br>
+
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows XP</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">969,047 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.67.8171.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows NT/2000</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,751,504 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.67.8171.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows 98/ME</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,636,610 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.67.8171.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+<b><u></u></b><br>
+	<li>Now supports native FLAC (.flac files) without ogg container.</li>
+<br>
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.66.8063) - 21/10/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+Added support for the new Ogg FLAC format and fixed that Explorer problem with locked files. A fair bit of internal shuffling, but mainly a whole lot of memory leaks have been eliminated.<br>
+<br>
+<br>
+
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows XP</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">952,518 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.66.8063.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows NT/2000</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,734,975 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.66.8063.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows 98/ME</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,620,081 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.66.8063.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+<b><u></u></b><br>
+	<li>FLAC can now be muxed into a multi-stream file.</li>
+	<li>Now supports both the new Ogg FLAC (1.1.1) and the old Ogg FLAC (still not native FLAC)</li>
+	<li>Fixed the explorer problem by removing the offending registry key at installation</li>
+	<li>Removed a heap of memory leaks, WMP should run a fair bit leaner now</li>
+	<li>Some internal changes to the queueing mechanism</li>
+	<li>There's some skeleton <a href="http://www.illiminable.com/ogg/docs/index.html">API documentation</a> for developers. It's pretty sparse on info still though.</li>
+<br>
+<br>
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.65.7923) - 07/10/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+Added support for icecast vorbis streams. Works for most streams, though there is a limitation that the stream can't change codebooks, or audio settings mid-stream, but 
+this shouldn't be a problem for most streams. Also an internal fix on the format blocks of the filters. To use icecast streams in WMP you need paste the url in to the 
+Open Url dialog box (File->Open URL...). WMP doesn't support .pls files... so if this is what form the stream takes, for now, you need to save the .pls file, and copy-paste 
+the link that is inside it into WMP.
+
+
+<br>
+<br>
+Most of the major functionality bugs are sorted out now, I'm quite happy with this release and the previous one, though still a way to go.
+<br>
+<br>
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows XP</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">938,166 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.65.7923.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows NT/2000</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,720,623 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.65.7923.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows 98/ME</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,605,729 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.65.7923.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+
+<b><u></u></b><br>
+	<li>Can now play most vorbis icecast streams.</li>
+	<li>Fixed some random values in the format blocks (Thanks to Robert Huitl for reporting this.)</li>
+<br>
+<br>
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#BBBBBB" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.64.7878) - 25/09/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+<br>
+Fixed up the seeking in WMP 9 and 10 mainly... and a few other fixes. Also added more colour space conversions for the encoder.
+<br>
+<br>
+<br>
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows XP</DIV>
+</FONT>
+</TD>
+
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">948,458 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.64.7878.zip">Download Now</a></div></DIV></FONT>
+</TD>
+
+</TR>
+
+
+
+<TR valign=top>
+
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows NT/2000</DIV>
+</FONT>
+</TD>
+
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,730,915 bytes</div></DIV></FONT>
+</TD>
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.64.7878.zip">Download Now</a></div></DIV></FONT>
+</TD>
+
+</TR>
+
+
+
+
+<TR valign=top>
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows 98/ME</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,616,021 bytes</div></DIV></FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.64.7878.zip">Download Now</a></div></DIV></FONT>
+</TD>
+</TR>
+
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+
+<b><u></u></b><br>
+	<li>Fixed seeking in WMP 9 and 10.</li>
+	<li>Fixed a bug using the WMP activeX control.</li>
+	<li>Theora encoder accepts new media types ie RGB24, RGB32, AYUV, IYUV, UYVY, YVYU... only RGB32 has been tested, as i don't have any source of the other types.</li>
+<br>
+<br>
+
+
+
+
+
+
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.63.7755) - 13/09/2004</b></DIV>
+</FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+<br>
+I put the installers back in the packages. Just makes it easier for people who aren't computer savvy. Also theora now plays in WMP9 and 10 (but still can't seek in these two players). 
+Also fixed a bug in the speex encoder that made a mess of theora+speex files. Fixed a few more memory leaks.<br>
+<br>
+<br>
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows XP</DIV>
+</FONT>
+</TD>
+
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">950,311 bytes</div></DIV></FONT>
+</TD>
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_XP_0.63.7755.zip">Download Now</a></div></DIV></FONT>
+</TD>
+
+</TR>
+
+
+
+<TR valign=top>
+
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows NT/2000</DIV>
+</FONT>
+</TD>
+
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,732,768 bytes</div></DIV></FONT>
+</TD>
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_2K_0.63.7755.zip">Download Now</a></div></DIV></FONT>
+</TD>
+
+</TR>
+
+
+
+
+<TR valign=top>
+
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows 98/ME</DIV>
+</FONT>
+</TD>
+
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">2,617,874 bytes</div></DIV></FONT>
+</TD>
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_9X_0.63.7755.zip">Download Now</a></div></DIV></FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+
+<b><u></u></b><br>
+	<li>Fixed a few memory leaks... there are still more left though.</li>
+	<li>Fixed some bugs in speex encoder. Can now make proper speex+theora files</li>
+	<li>Theora playback works in WMP 9 and 10 now... but no seeking in these two players</li>
+	<li>Fixed a muxing problem with large packets.</li>
+	<li>Increased some of the buffer sizes. Trying to encode very high quality theora was crashing as the buffer was too small</li>
+<br>
+<br>
+
+
+
+
+
+
+
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.62.7673) - 01/09/2004</b></DIV>
+</FONT>
+</TD>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+To stop people unnecessarily downloading the windows installer over and over, the packages will no longer include the installer. If you have a pre-XP 
+windows, and don't already have the windows installer on your system (almost everyone who has ever installed something should have it already) you can
+download the installer seperately from the links at the top of the page.<br>
+<br>
+Fixed the network streaming, and removed all the .NET sample apps from this release. <a href="http://www.illiminable.com/ogg/sse_builds.html">Experimental SSE/SSE2 builds can be found here</a><br>
+Changed the installer a bit so people realise when they download via download "shell sites", which hide the true source of the download, where it came from and where to look for updates.<br>
+<br>
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows 98/ME/NT/2K/XP</DIV>
+</FONT>
+</TD>
+
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">942,859 bytes</div></DIV></FONT>
+</TD>
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.62.7673.zip">Download Now</a></div></DIV></FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+<br>
+	<li>Fixed a few memory leaks... there are still more left though.</li>
+	<li>Removed all the .NET sample applications to avoid those without .NET being forced to install it.</li>
+	<li>Streaming greatly improved. Will now cache a file as it streams in the TEMP directory as specified in environment variables.</li>
+	<li>Made experimental SSE/SSE2 optimised builds of all libraries.</li>
+	<li>Changed the installer so that you have to click through the BSD licenses, and to show where the software came from as many sites are linking directly to the .zip files so users are not getting the opportunity to read about known issues, or even know if they are getting the current version.</li>
+<br>
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.61.7571) - 16/08/2004</b></DIV>
+</FONT>
+</TD>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+
+To stop people unnecessarily downloading the windows installer over and over, the packages will no longer include the installer. If you have a pre-XP 
+windows, and don't already have the windows installer on your system (almost everyone who has ever installed something should have it already) you can
+download the installer seperately from the links at the top of the page.<br>
+<br>
+Fixed a few bugs in theora, seeking almost never crashes now. FLAC playback and seeking now works properly, though not extensively tested. Includes a FLAC encoder filter. Starting from the
+next release I will start offering different build configurations, ie minimal decode only installation, builds with SSE2 optimisations etc.<br>
+<br>
+
+
+
+<FONT size=2 color="#000000" face="Arial">
+<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+<TD width=40%><FONT size=2 color="#000000" face="Arial">
+<DIV>Ogg Codecs for windows</DIV>
+</FONT>
+</TD>
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV>Windows 98/ME/NT/2K/XP</DIV>
+</FONT>
+</TD>
+
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right">1,076,031 bytes</div></DIV></FONT>
+</TD>
+
+<TD width=20%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_0.61.7571.zip">Download Now</a></div></DIV></FONT>
+</TD>
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+<br>
+
+	<li>Fixed seeking crash problems with theora</li>
+	<li>Fixed FLAC playback</li>
+	<li>Added a FLAC encoder filter</li>
+	<li>Added a very simple .NET media player called DNPlay</li>
+	<li>Added a .NET directshow playback library</li>
+	<li>Added a validation program for ogg files OOOggValidate</li>
+<br>
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.60.7043) - 08/07/2004</b></DIV>
+</FONT>
+</TD>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+Quite a fair bit added this time, most notably an encoder for theora... see <a href="http://www.illiminable.com/ogg/enc_theora_graphedit.html">Encoding theora</a><br>
+Only a few encoding parameters are currently exposed via a filter property page. Also modified the demuxer so it can handle http streams though there are some issues. The buffering is very simple, it doesn't optimise buffer based on bandwidth. Network steams are currently non-seekable. Also only non-chained
+files should be streamed. Most encoded files are not chained. However some icecast streams, Which are not continuous, have breaks where songs change, this type of stream will likely crash the media player. However continuous live streams... such as radio broadcasts etc generally work fine. The network streaming has only recently be added, so i expect it to still be fairly buggy.<br>
+<br>
+To all the people interested in FLAC, I will be spending some time sorting out the bugs that have been there for ages very soon, thanks for your patience !<br>
+<br>
+This release has a lot of new code added, I'd really appreciate feedback on the installation process, and the encoding. I will leave the links to the previous version up for a while further down the page.<br>
+
+<br>
+	<li>Added <a href="http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html">CMML</a> Decoder filter</li>
+	<li>Added a simple subtitle renderer based on VMR 9</li>
+	<li>Added an OO vorbis comment parsing library</li>
+	<li>Added an example tool called OOOggCommentDump which dumps comment information from the first stream in a file</li>
+	<li>Added container class library for <a href="http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html">CMML</a></li>
+	<li>Added minimal <a href="http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html">CMML</a> parsing library based on MSXML</a>
+	<li>Added a demuxer filter for <a href="http://www.annodex.net/">Annodex</a>, will only play in graphedit currently, and needs to manually build graphs to include the VMR9 as video renderer, also won't play the mpeg coded videos that are on the annodex site.</li>
+	<li>Added network support for demuxer to stream .ogg files</li>
+	<li>Fixed the speex encoder (I think)</li>
+	<li>Ogg Mux filter now supports multiple stream muxing</li>
+	<li>Added a theora encode filter, with a minimal configurable property page</li>
+	<li>Theora encode filter supports YUY2 input (generally from mpeg) or YV12 (generally from avi codecs, in particular those decoded by ffdshow)</li>
+	<li>Fixed some bad implementation of frame offsets in the theora decoder</li>
+	<li>Now files can be added to the WMP9+ Media Library, however no media metadata is yet extracted from the vorbis comments. Nor can you currently use the rip or burn functionality.</li>
+
+<br>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.57.6744) - 22/05/2004</b></DIV>
+</FONT>
+</TD>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+Previous release a few hours ago had hundreds of debug statements in the release build. It may have created log files in your C:\ Root directory as well as C:\temp and possibly in G:\ if you have a writable G drive. Sorry if you got this a few hours ago.
+<br>
+	<li>Removed a whole heap of debugging code.</li>
+	<li>See 0.56.6741 release below for latest changes.</li>
+
+<br>
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.56.6741) - 21/05/2004</b></DIV>
+</FONT>
+</TD>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+Most of the changes in this build are internal modifications to better deal with the need to determine start times of all samples in order to properly synchronise multi-stream files. The main externally visible change is the limited ability to seek in theora files without total loss of synch. There are still a few issues to be ironed out though.
+<br>
+	<li>Modified internal timestamping mechanism, to allow resynch easier in theora.</li>
+	<li>Now able to seek in theora (not to keyframe), but occasionally crashes after seek.</li>
+	<li>Speex and vorbis, don't have seg fault any more, though very rarely after a seek there is no audio. Another seek fixes it.</li>
+	<li>Added simple new tool called OOOggStat, to give info on contained streams.</li>
+
+<br>
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.55.0115) - 27/04/2004</b></DIV>
+</FONT>
+</TD>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+Vorbis and speex playback are now pretty much finished bar the very rare bug I mention below. I've played dozens of speex and vorbis files and they all seem just fine. Pretty much fully functional.<br>
+The track duration shows up incorrectly in all codecs besides speex and vorbis because I haven't coded it yet !<br>
+A seek table is built as the file is loaded... this is currently done by basicly processing the entire file... so there may be a small delay loading large files. When I get time I'll replace this with a better method that doesn't try and process the entire file, but can skip through to the relevant parts.<br>
+	<li>NOTE: I suggest you don't distribute files encoded with these codecs yet... there may still be problems with them</li>
+	<li>Fixed clumpy playback of divx, bad timestamping</li>
+	<li>Added seeking, duration and position info to vorbis and speex</li>
+	<li>Fixed a few internal errors with regards to timestamping</li>
+	<li>Added a seek table for rapid seeking</li>
+<br>
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+
+
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.52.0093) - 18/04/2004</b></DIV>
+</FONT>
+</TD>
+
+
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+	<li>NOTE: I suggest you don't distribute files encoded with these codecs yet... there may still be problems with them</li>
+	<li>See version 0.50.0090 for information</li>
+	<li>Now checksums pages properly.</li>
+	<li>Properly organises initial header packets in pages.</li>
+	
+
+<br>
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.51.0092) - 18/04/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+	<li>See version 0.50.0090 for information</li>
+	<li>Stuffed up some packaging and linking in the last version... probably won't affect it, but just to be safe, did rebuild and package. Sorry if you got it 5 minutes ago !</li>
+	
+<br>
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.50.0090) - 18/04/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+Start of encoding support has been added... see <a href="http://www.illiminable.com/ogg/graphedit.html">example filter graphs</a>. Use graphedit (<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9216652f-51e0-402e-b7b5-feb68d00f298&displaylang=en">DirectX9 SDK</a>)</li>
+	<li>Added support for OGM style video encapsulation *decode only*, requires <a href="http://sourceforge.net/projects/ffdshow">ffdshow</a>. Should recognise any format ffdshow can handle. (Video quite clumpy at the moment)</li>
+	<li>Added single stream Ogg Muxer... for muxing theora, speex and vorbis</li>
+	<li>Added vorbis encoder filter</li>
+	<li>Added speex encoder filter</li>
+	<li>Included Abstract Audio Encoder library</li>
+	
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.40.0069) - 08/04/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+
+This new release completes the basic functionality for the four major codecs, though there are still bugs. Theora hasn't been extensively tested
+as I don't have many test files to work with. FLAC is still pretty buggy... theora less so... but still buggy.
+	<li>NOTE: Untested with DirectX 8 or lower. I'm pretty sure theora will only play with DX9. Others *should* work with DX8.</li>
+	<li>Added basic Theora support (alpha 3 *only*, previous bitstream formats are depracated). See issues below.</li>
+	<li>Included OO Theora wrapper library</li>
+	<li>Included Abstract Video Decoder library</li>
+<br>
+<br>
+
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.30.0058) - 31/03/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+
+Just thought I'd release this update. It includes some FLAC support but it's very buggy, I suggest you don't use FLAC just yet.<br>
+Vorbis and speex are the same as before but with below changes. Vorbis and Speex won't crash<br>
+	<li>Fixed bug in stream recogniser which defaulted unknown to speex.</li>
+	<li>Fixed minor defect in audio when stopping and replaying</li>
+	<li>Split Vorbis and Speex to seperate filters</li>
+	<li>Included Abstract Codec Library</li>
+	<li>Now ignores unknown streams. ie. Playing a theora/vorbis will only play the vorbis</li>
+	<li>Major abstractions to demux filter in preperation for theora/annodex</li>
+	<li>Included very basic Ogg FLAC playback (very buggy, see below, update in a day or two to fix)</li>
+	<li>Included one of my basic debugging tools. OOOggDump. Usage : OOOggDump filename, be sure to redirect output to a file</li>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.22.0035) - 24/03/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+	<li>Updated libfishsound to 0.6.0</li>
+	<li>Changes to attribution text files.</li>
+	<li>Release builds with compiler optimisations.</li>
+<br>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.21.0032) - 24/03/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+	<li>Fixed audio defects.</li>
+	<li>Added clipping to account for out of range floats from vorbis</li>
+	<li>Updated vorbis to 1.0.1 and speex to 1.0.3</li><br>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.20.0022) - 23/03/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+	<li>Added support for speex.</li>
+	<li>Recognises speex files with .ogg .spx or .speex extensions</li><br>
+<br>
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.11.0020) - 22/03/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+
+	<li>Removed several memory leaks.</li>
+	<li>Media Player doesn't make the error sound on exiting any more.</li>
+	<li>Fixed a few crashing bugs that only show up in graphedit by doing stupid things.</li>
+	<li>Package is more compressed now.</li>
+	<li>Fixed a crashing bug in libfishsound</li><br>
+<br>
+
+
+
+<FONT size=2 color="#101010" face="Arial">
+<DIV><TABLE width=100% bgcolor="#CCCCCC" border=0 cellpadding=2 cellspacing=2>
+<TR valign=top>
+<TD width=100%><FONT size=2 color="#000000" face="Arial">
+<DIV><div align="left"><b>Previous Version (0.10.0019) - 22/03/2004</b></DIV>
+</FONT>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</FONT>
+
+	<li>Initial binary release.</li><br>
+<br>
+<a href="http://www.illiminable.com/ogg">Main Page</a><br>
+<br>
+</body>
+</html>
+

Added: trunk/oggdsf/website/pmwiki.php
===================================================================
--- trunk/oggdsf/website/pmwiki.php	                        (rev 0)
+++ trunk/oggdsf/website/pmwiki.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,2037 @@
+<?php
+/*
+    PmWiki
+    Copyright 2001-2007 Patrick R. Michaud
+    pmichaud at pobox.com
+    http://www.pmichaud.com/
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    ----
+    Note from Pm:  Trying to understand the PmWiki code?  Wish it had 
+    more comments?  If you want help with any of the code here,
+    write me at <pmichaud at pobox.com> with your question(s) and I'll
+    provide explanations (and add comments) that answer them.
+*/
+error_reporting(E_ALL ^ E_NOTICE);
+StopWatch('PmWiki');
+ at ini_set('magic_quotes_runtime', 0);
+ at ini_set('magic_quotes_sybase', 0);
+if (@ini_get('pcre.backtrack_limit') < 1000000) 
+  @ini_set('pcre.backtrack_limit', 1000000);
+if (ini_get('register_globals')) 
+  foreach($_REQUEST as $k=>$v) { 
+    if (preg_match('/^(GLOBALS|_SERVER|_GET|_POST|_COOKIE|_FILES|_ENV|_REQUEST|_SESSION|FarmD|WikiDir)$/i', $k)) exit();
+    ${$k}=''; unset(${$k}); 
+  }
+$UnsafeGlobals = array_keys($GLOBALS); $GCount=0; $FmtV=array();
+SDV($FarmD,dirname(__FILE__));
+SDV($WorkDir,'wiki.d');
+define('PmWiki',1);
+if (preg_match('/\\w\\w:/', $FarmD)) exit();
+ at include_once("$FarmD/scripts/version.php");
+$GroupPattern = '[[:upper:]][\\w]*(?:-\\w+)*';
+$NamePattern = '[[:upper:]\\d][\\w]*(?:-\\w+)*';
+$BlockPattern = 'form|div|table|t[rdh]|p|[uo]l|d[ltd]|h[1-6r]|pre|blockquote';
+$WikiWordPattern = '[[:upper:]][[:alnum:]]*(?:[[:upper:]][[:lower:]0-9]|[[:lower:]0-9][[:upper:]])[[:alnum:]]*';
+$WikiDir = new PageStore('wiki.d/{$FullName}');
+$WikiLibDirs = array(&$WikiDir,new PageStore('$FarmD/wikilib.d/{$FullName}'));
+$LocalDir = 'local';
+$InterMapFiles = array("$FarmD/scripts/intermap.txt",
+  "$FarmD/local/farmmap.txt", '$SiteGroup.InterMap', 'local/localmap.txt');
+$Newline = "\263";                                 # deprecated, 2.0.0
+$KeepToken = "\235\235";  
+$Now=time();
+define('READPAGE_CURRENT', $Now+604800);
+$TimeFmt = '%B %d, %Y, at %I:%M %p';
+$TimeISOFmt = '%Y-%m-%dT%H:%M:%S';
+$TimeISOZFmt = '%Y-%m-%dT%H:%M:%SZ';
+$MessagesFmt = array();
+$BlockMessageFmt = "<h3 class='wikimessage'>$[This post has been blocked by the administrator]</h3>";
+$EditFields = array('text');
+$EditFunctions = array('EditTemplate', 'RestorePage', 'ReplaceOnSave',
+  'SaveAttributes', 'PostPage', 'PostRecentChanges', 'AutoCreateTargets',
+  'PreviewPage');
+$EnablePost = 1;
+$ChangeSummary = substr(preg_replace('/[\\x00-\\x1f]|=\\]/', '', 
+                                     stripmagic(@$_REQUEST['csum'])), 0, 100);
+$AsSpacedFunction = 'AsSpaced';
+$SpaceWikiWords = 0;
+$RCDelimPattern = '  ';
+$RecentChangesFmt = array(
+  '$SiteGroup.AllRecentChanges' => 
+    '* [[{$Group}.{$Name}]]  . . . $CurrentTime $[by] $AuthorLink: [=$ChangeSummary=]',
+  '$Group.RecentChanges' =>
+    '* [[{$Group}/{$Name}]]  . . . $CurrentTime $[by] $AuthorLink: [=$ChangeSummary=]');
+$UrlScheme = (@$_SERVER['HTTPS']=='on' || @$_SERVER['SERVER_PORT']==443)
+             ? 'https' : 'http';
+$ScriptUrl = $UrlScheme.'://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
+$PubDirUrl = preg_replace('#/[^/]*$#', '/pub', $ScriptUrl, 1);
+$HTMLVSpace = "<vspace>";
+$HTMLPNewline = '';
+$MarkupFrame = array();
+$MarkupFrameBase = array('cs' => array(), 'vs' => '', 'ref' => 0,
+  'closeall' => array(), 'is' => array(),
+  'escape' => 1);
+$WikiWordCountMax = 1000000;
+$WikiWordCount['PmWiki'] = 1;
+$TableRowIndexMax = 1;
+$UrlExcludeChars = '<>"{}|\\\\^`()[\\]\'';
+$QueryFragPattern = "[?#][^\\s$UrlExcludeChars]*";
+$SuffixPattern = '(?:-?[[:alnum:]]+)*';
+$LinkPageSelfFmt = "<a class='selflink' href='\$LinkUrl'>\$LinkText</a>";
+$LinkPageExistsFmt = "<a class='wikilink' href='\$LinkUrl'>\$LinkText</a>";
+$LinkPageCreateFmt = 
+  "<a class='createlinktext' rel='nofollow' 
+    href='{\$PageUrl}?action=edit'>\$LinkText</a><a rel='nofollow' 
+    class='createlink' href='{\$PageUrl}?action=edit'>?</a>";
+$UrlLinkFmt = 
+  "<a class='urllink' href='\$LinkUrl' rel='nofollow'>\$LinkText</a>";
+umask(002);
+$CookiePrefix = '';
+$SiteGroup = 'Site';
+$SiteAdminGroup = 'SiteAdmin';
+$DefaultGroup = 'Main';
+$DefaultName = 'HomePage';
+$GroupHeaderFmt = '(:include {$Group}.GroupHeader self=0 basepage={*$FullName}:)(:nl:)';
+$GroupFooterFmt = '(:nl:)(:include {$Group}.GroupFooter self=0 basepage={*$FullName}:)';
+$PagePathFmt = array('{$Group}.$1','$1.$1','$1.{$DefaultName}');
+$PageAttributes = array(
+  'passwdread' => '$[Set new read password:]',
+  'passwdedit' => '$[Set new edit password:]',
+  'passwdattr' => '$[Set new attribute password:]');
+$XLLangs = array('en');
+if (preg_match('/^C$|\.UTF-?8/i',setlocale(LC_ALL,0)))
+  setlocale(LC_ALL,'en_US');
+$FmtP = array();
+$FmtPV = array(
+  # '$ScriptUrl'    => 'PUE($ScriptUrl)',   ## $ScriptUrl is special
+  '$PageUrl'      => 
+    'PUE(($EnablePathInfo) 
+         ? "$ScriptUrl/$group/$name"
+         : "$ScriptUrl?n=$group.$name")',
+  '$FullName'     => '"$group.$name"',
+  '$Groupspaced'  => '$AsSpacedFunction($group)',
+  '$Namespaced'   => '$AsSpacedFunction($name)',
+  '$Group'        => '$group',
+  '$Name'         => '$name',
+  '$Titlespaced'  => 
+    '@$page["title"] ? $page["title"] : $AsSpacedFunction($name)',
+  '$Title'        => 
+    '@$page["title"] ? $page["title"] : ($GLOBALS["SpaceWikiWords"]
+       ? $AsSpacedFunction($name) : $name)',
+  '$LastModifiedBy' => '@$page["author"]',
+  '$LastModifiedHost' => '@$page["host"]',
+  '$LastModified' => 'strftime($GLOBALS["TimeFmt"], $page["time"])',
+  '$LastModifiedSummary' => '@$page["csum"]',
+  '$Description' => '@$page["description"]',
+  '$SiteGroup'    => '$GLOBALS["SiteGroup"]',
+  '$VersionNum'   => '$GLOBALS["VersionNum"]',
+  '$Version'      => '$GLOBALS["Version"]',
+  '$Author'       => 'NoCache($GLOBALS["Author"])',
+  '$AuthId'       => 'NoCache($GLOBALS["AuthId"])',
+  '$DefaultGroup' => '$GLOBALS["DefaultGroup"]',
+  '$DefaultName'  => '$GLOBALS["DefaultName"]',
+  '$BaseName'     => 'MakeBaseName($pn)',
+  '$Action'       => '$GLOBALS["action"]',
+  '$PasswdRead'   => 'PasswdVar($pn, "read")',
+  '$PasswdEdit'   => 'PasswdVar($pn, "edit")',
+  '$PasswdAttr'   => 'PasswdVar($pn, "attr")',
+  );
+$SaveProperties = array('title', 'description', 'keywords');
+$PageTextVarPatterns = array(
+  'var:'        => '/^(:*\\s*(\\w[-\\w]*)\\s*:[ \\t]?)(.*)($)/m',
+  '(:var:...:)' => '/(\\(: *(\\w[-\\w]*) *:(?!\\))\\s?)(.*?)(:\\))/s'
+  );
+
+
+$WikiTitle = 'PmWiki';
+$Charset = 'ISO-8859-1';
+$HTTPHeaders = array(
+  "Expires: Tue, 01 Jan 2002 00:00:00 GMT",
+  "Cache-Control: no-store, no-cache, must-revalidate",
+  "Content-type: text/html; charset=ISO-8859-1;");
+$CacheActions = array('browse','diff','print');
+$EnableHTMLCache = 0;
+$NoHTMLCache = 0;
+$HTMLDoctypeFmt = 
+  "<!DOCTYPE html 
+    PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
+    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
+  <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'><head>\n";
+$HTMLStylesFmt['pmwiki'] = "
+  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }
+  code.escaped { white-space: nowrap; }
+  .vspace { margin-top:1.33em; }
+  .indent { margin-left:40px; }
+  .outdent { margin-left:40px; text-indent:-40px; }
+  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }
+  a.createlink { text-decoration:none; position:relative; top:-0.5em;
+    font-weight:bold; font-size:smaller; border-bottom:none; }
+  img { border:0px; }
+  ";
+$HTMLHeaderFmt['styles'] = array(
+  "<style type='text/css'><!--",&$HTMLStylesFmt,"\n--></style>");
+$HTMLBodyFmt = "</head>\n<body>";
+$HTMLStartFmt = array('headers:',&$HTMLDoctypeFmt,&$HTMLHeaderFmt,
+  &$HTMLBodyFmt);
+$HTMLEndFmt = "\n</body>\n</html>";
+$PageStartFmt = array(&$HTMLStartFmt,"\n<div id='contents'>\n");
+$PageEndFmt = array('</div>',&$HTMLEndFmt);
+
+$HandleActions = array(
+  'browse' => 'HandleBrowse', 'print' => 'HandleBrowse',
+  'edit' => 'HandleEdit', 'source' => 'HandleSource', 
+  'attr' => 'HandleAttr', 'postattr' => 'HandlePostAttr',
+  'logout' => 'HandleLogoutA', 'login' => 'HandleLoginA');
+$HandleAuth = array(
+  'browse' => 'read', 'source' => 'read', 'print' => 'read',
+  'edit' => 'edit', 'attr' => 'attr', 'postattr' => 'attr',
+  'logout' => 'read', 'login' => 'login');
+$ActionTitleFmt = array(
+  'edit' => '| $[Edit]',
+  'attr' => '| $[Attributes]');
+$DefaultPasswords = array('admin'=>'*','read'=>'','edit'=>'','attr'=>'');
+$AuthCascade = array('edit'=>'read', 'attr'=>'edit');
+$AuthList = array('' => 1, 'nopass:' => 1, '@nopass' => 1);
+
+$Conditions['enabled'] = '(boolean)@$GLOBALS[$condparm]';
+$Conditions['false'] = 'false';
+$Conditions['true'] = 'true';
+$Conditions['group'] = 
+  "(boolean)MatchPageNames(\$pagename, FixGlob(\$condparm, '$1$2.*'))";
+$Conditions['name'] = 
+  "(boolean)MatchPageNames(\$pagename, FixGlob(\$condparm, '$1*.$2'))";
+$Conditions['match'] = 'preg_match("!$condparm!",$pagename)';
+$Conditions['authid'] = 'NoCache(@$GLOBALS["AuthId"] > "")';
+$Conditions['exists'] = 'PageExists(MakePageName(\$pagename, \$condparm))';
+$Conditions['equal'] = 'CompareArgs($condparm) == 0';
+function CompareArgs($arg) 
+  { $arg = ParseArgs($arg); return strcmp(@$arg[''][0], @$arg[''][1]); }
+
+$Conditions['auth'] = 'NoCache(CondAuth($pagename, $condparm))';
+function CondAuth($pagename, $condparm) {
+  @list($level, $pn) = explode(' ', $condparm, 2);
+  $pn = ($pn > '') ? MakePageName($pagename, $pn) : $pagename;
+  return (boolean)RetrieveAuthPage($pn, $level, false, READPAGE_CURRENT);
+}
+
+## CondExpr handles complex conditions (expressions)
+## Portions Copyright 2005 by D. Faure (dfaure at cpan.org)
+function CondExpr($pagename, $condname, $condparm) {
+  global $CondExprOps;
+  SDV($CondExprOps, 'and|x?or|&&|\\|\\||[!()]');
+  if ($condname == '(' || $condname == '[')
+    $condparm = preg_replace('/[\\]\\)]\\s*$/', '', $condparm);
+  $condparm = str_replace('&amp;&amp;', '&&', $condparm);
+  $terms = preg_split("/(?<!\\S)($CondExprOps)(?!\\S)/i", $condparm, -1,
+                      PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+  foreach($terms as $i => $t) {
+    $t = trim($t);
+    if (preg_match("/^($CondExprOps)$/i", $t)) continue;
+    if ($t) $terms[$i] = CondText($pagename, "if $t", 'TRUE') ? '1' : '0';
+  }
+  return @eval('return(' . implode(' ', $terms) . ');');
+}
+$Conditions['expr'] = 'CondExpr($pagename, $condname, $condparm)';
+$Conditions['('] = 'CondExpr($pagename, $condname, $condparm)';
+$Conditions['['] = 'CondExpr($pagename, $condname, $condparm)';
+
+$MarkupTable['_begin']['seq'] = 'B';
+$MarkupTable['_end']['seq'] = 'E';
+Markup('fulltext','>_begin');
+Markup('split','>fulltext',"\n",
+  '$RedoMarkupLine=1; return explode("\n",$x);');
+Markup('directives','>split');
+Markup('inline','>directives');
+Markup('links','>inline');
+Markup('block','>links');
+Markup('style','>block');
+Markup('closeall', '_begin',
+  '/^\\(:closeall:\\)$/e', 
+  "'<:block>' . MarkupClose()");
+
+$ImgExtPattern="\\.(?:gif|jpg|jpeg|png|GIF|JPG|JPEG|PNG)";
+$ImgTagFmt="<img src='\$LinkUrl' alt='\$LinkAlt' title='\$LinkAlt' />";
+
+$BlockMarkups = array(
+  'block' => array('','','',0),
+  'ul' => array('<ul><li>','</li><li>','</li></ul>',1),
+  'dl' => array('<dl>','</dd>','</dd></dl>',1),
+  'ol' => array('<ol><li>','</li><li>','</li></ol>',1),
+  'p' => array('<p>','','</p>',0),
+  'indent' => 
+     array("<div class='indent'>","</div><div class='indent'>",'</div>',1),
+  'outdent' => 
+     array("<div class='outdent'>","</div><div class='outdent'>",'</div>',1),
+  'pre' => array('<pre>','','</pre>',0),
+  'table' => array("<table width='100%'>",'','</table>',0));
+
+foreach(array('http:','https:','mailto:','ftp:','news:','gopher:','nap:',
+    'file:') as $m) 
+  { $LinkFunctions[$m] = 'LinkIMap';  $IMap[$m]="$m$1"; }
+$LinkFunctions['<:page>'] = 'LinkPage';
+
+$q = preg_replace('/(\\?|%3f)([-\\w]+=)/', '&$2', @$_SERVER['QUERY_STRING']);
+if ($q != @$_SERVER['QUERY_STRING']) {
+  unset($_GET);
+  parse_str($q, $_GET);
+  $_REQUEST = array_merge($_REQUEST, $_GET, $_POST);
+}
+
+if (isset($_GET['action'])) $action = $_GET['action'];
+elseif (isset($_POST['action'])) $action = $_POST['action'];
+else $action = 'browse';
+
+$pagename = @$_REQUEST['n'];
+if (!$pagename) $pagename = @$_REQUEST['pagename'];
+if (!$pagename && 
+    preg_match('!^'.preg_quote($_SERVER['SCRIPT_NAME'],'!').'/?([^?]*)!',
+      $_SERVER['REQUEST_URI'],$match))
+  $pagename = urldecode($match[1]);
+if (preg_match('/[\\x80-\\xbf]/',$pagename)) 
+  $pagename=utf8_decode($pagename);
+$pagename = preg_replace('![^[:alnum:]\\x80-\\xff]+$!','',$pagename);
+$FmtPV['$RequestedPage'] = "'".htmlspecialchars($pagename, ENT_QUOTES)."'";
+$Cursor['*'] = &$pagename;
+
+if (file_exists("$FarmD/local/farmconfig.php")) 
+  include_once("$FarmD/local/farmconfig.php");
+if (IsEnabled($EnableLocalConfig,1)) {
+  if (file_exists("$LocalDir/config.php")) 
+    include_once("$LocalDir/config.php");
+  elseif (file_exists('config.php'))
+    include_once('config.php');
+}
+
+SDV($CurrentTime, strftime($TimeFmt, $Now));
+SDV($CurrentTimeISO, strftime($TimeISOFmt, $Now));
+
+if (IsEnabled($EnableStdConfig,1))
+  include_once("$FarmD/scripts/stdconfig.php");
+
+foreach((array)$InterMapFiles as $f) {
+  $f = FmtPageName($f, $pagename);
+  if (($v = @file($f))) 
+    $v = preg_replace('/^\\s*(?>\\w[-\\w]*)(?!:)/m', '$0:', implode('', $v));
+  else if (PageExists($f)) {
+    $p = ReadPage($f, READPAGE_CURRENT);
+    $v = $p['text'];
+  } else continue;
+  if (!preg_match_all("/^\\s*(\\w[-\\w]*:)[^\\S\n]+(\\S*)/m", $v, 
+                      $match, PREG_SET_ORDER)) continue;
+  foreach($match as $m) {
+    if (strpos($m[2], '$1') === false) $m[2] .= '$1';
+    $LinkFunctions[$m[1]] = 'LinkIMap';
+    $IMap[$m[1]] = FmtPageName($m[2], $pagename);
+  }
+}
+
+$LinkPattern = implode('|',array_keys($LinkFunctions));
+SDV($LinkPageCreateSpaceFmt,$LinkPageCreateFmt);
+
+$keys = array_keys($AuthCascade);
+while ($keys) {
+  $k = array_shift($keys); $t = $AuthCascade[$k];
+  if (in_array($t, $keys)) 
+    { unset($AuthCascade[$k]); $AuthCascade[$k] = $t; array_push($keys, $k); }
+}
+
+$ActionTitle = FmtPageName(@$ActionTitleFmt[$action], $pagename);
+if (!@$HandleActions[$action] || !function_exists($HandleActions[$action])) 
+  $action='browse';
+if (IsEnabled($EnableActions, 1)) HandleDispatch($pagename, $action);
+Lock(0);
+return;
+
+##  HandleDispatch() is used to dispatch control to the appropriate
+##  action handler with the appropriate permissions.
+##  If a message is supplied, it is added to $MessagesFmt.
+function HandleDispatch($pagename, $action, $msg=NULL) {
+  global $MessagesFmt, $HandleActions, $HandleAuth;
+  if ($msg) $MessagesFmt[] = "<div class='wikimessage'>$msg</div>";
+  $fn = $HandleActions[$action];
+  $auth = $HandleAuth[$action];
+  if (!$auth) $auth = 'read';
+  return $fn($pagename, $auth);
+}
+
+## helper functions
+function stripmagic($x) 
+  { return get_magic_quotes_gpc() ? stripslashes($x) : $x; }
+function pre_r(&$x)
+  { return '<pre>'.htmlspecialchars(print_r($x, true)).'</pre>'; }
+function PSS($x) 
+  { return str_replace('\\"','"',$x); }
+function PVS($x) 
+  { return preg_replace("/\n[^\\S\n]*(?=\n)/", "\n<:vspace>", $x); }
+function PVSE($x) { return PVS(htmlspecialchars($x, ENT_NOQUOTES)); }
+function PZZ($x,$y='') { return ''; }
+function PRR($x=NULL) 
+  { if ($x || is_null($x)) $GLOBALS['RedoMarkupLine']++; return $x; }
+function PUE($x)
+  { return preg_replace('/[\\x80-\\xff \'"]/e', "'%'.dechex(ord('$0'))", $x); }
+function PQA($x) { 
+  $out = '';
+  if (preg_match_all('/([a-zA-Z]+)\\s*=\\s*("[^"]*"|\'[^\']*\'|\\S*)/',
+                     $x, $attr, PREG_SET_ORDER)) {
+    foreach($attr as $a) {
+      if (preg_match('/^on/i', $a[1])) continue;
+      $out .= $a[1] . '=' 
+              . preg_replace( '/^(?![\'"]).*$/e', 
+                  "\"'\".str_replace(\"'\", '&#39;', PSS('$0')).\"'\"", $a[2])
+              . ' ';
+    }
+  }
+  return $out;
+}
+function SDV(&$v,$x) { if (!isset($v)) $v=$x; }
+function SDVA(&$var,$val) 
+  { foreach($val as $k=>$v) if (!isset($var[$k])) $var[$k]=$v; }
+function IsEnabled(&$var,$f=0)
+  { return (isset($var)) ? $var : $f; }
+function SetTmplDisplay($var, $val) 
+  { NoCache(); $GLOBALS['TmplDisplay'][$var] = $val; }
+function NoCache($x = '') { $GLOBALS['NoHTMLCache'] |= 1; return $x; }
+function ParseArgs($x, $optpat = '(?>(\\w+)[:=])') {
+  $z = array();
+  preg_match_all("/($optpat|[-+])?(\"[^\"]*\"|'[^']*'|\\S+)/",
+    $x, $terms, PREG_SET_ORDER);
+  foreach($terms as $t) {
+    $v = preg_replace('/^([\'"])?(.*)\\1$/', '$2', $t[3]);
+    if ($t[2]) { $z['#'][] = $t[2]; $z[$t[2]] = $v; }
+    else { $z['#'][] = $t[1]; $z[$t[1]][] = $v; }
+    $z['#'][] = $v;
+  }
+  return $z;
+}
+function StopWatch($x) { 
+  global $StopWatch, $EnableStopWatch;
+  if (!$EnableStopWatch) return;
+  static $wstart = 0, $ustart = 0;
+  list($usec,$sec) = explode(' ',microtime());
+  $wtime = ($sec+$usec); 
+  if (!$wstart) $wstart = $wtime;
+  if ($EnableStopWatch != 2) 
+    { $StopWatch[] = sprintf("%05.2f %s", $wtime-$wstart, $x); return; }
+  $dat = getrusage();
+  $utime = ($dat['ru_utime.tv_sec']+$dat['ru_utime.tv_usec']/1000000);
+  if (!$ustart) $ustart=$utime;
+  $StopWatch[] = 
+    sprintf("%05.2f %05.2f %s", $wtime-$wstart, $utime-$ustart, $x);
+}
+
+
+## DRange converts a variety of string formats into date (ranges).
+## It returns the start and end timestamps (+1 second) of the specified date.
+function DRange($when) {
+  global $Now;
+  ##  unix/posix @timestamp dates
+  if (preg_match('/^\\s*@(\\d+)\\s*(.*)$/', $when, $m)) {
+    $t0 = $m[2] ? strtotime($m[2], $m[1]) : $m[1];
+    return array($t0, $t0+1);
+  }
+  ##  ISO-8601 dates
+  $dpat = '/
+    (?<!\\d)                 # non-digit
+    (19\\d\\d|20[0-3]\\d)    # year ($1)
+    ([-.\\/]?)               # date separator ($2)
+    (0\\d|1[0-2])            # month ($3)
+    (?: \\2                  # repeat date separator
+      ([0-2]\\d|3[0-1])      # day ($4)
+      (?: T                  # time marker
+        ([01]\\d|2[0-4])     # hour ($5)
+        ([.:]?)              # time separator ($6)
+        ([0-5]\\d)           # minute ($7)
+        (?: \\6              # repeat time separator
+          ([0-5]\\d|60)      # seconds ($8)
+        )?                   # optional :ss
+      )?                     # optional Thh:mm:ss
+    )?                       # optional -ddThh:mm:ss
+    (?!\d)                   # non-digit
+    /x';
+  if (preg_match($dpat, $when, $m)) {
+    $n = $m;
+    ##  if no day given, assume 1st of month and full month range
+    if (@$m[4] == '') { $m[4] = 1; $n[4] = 1; $n[3]++; }
+    ##  if no time given, assume range of 1 day
+    if (@$m[5] == '') { @$n[4]++; }
+    ##  if no seconds given, assume range of 1 minute
+    if (@$m[8] == '') { @$n[7]++; }
+    $t0 = @mktime($m[5], $m[7], $m[8], $m[3], $m[4], $m[1]);
+    $t1 = @mktime($n[5], $n[7], $n[8], $n[3], $n[4], $n[1]);
+    return array($t0, $t1);
+  }
+  ##  now, today, tomorrow, yesterday
+  NoCache();
+  if ($when == 'now') return array($Now, $Now+1);
+  $m = localtime(time());
+  if ($when == 'tomorrow') { $m[3]++; $when = 'today'; }
+  if ($when == 'yesterday') { $m[3]--; $when = 'today'; }
+  if ($when == 'today') 
+    return array(mktime(0, 0, 0, $m[4]+1, $m[3]  , $m[5]+1900),
+                 mktime(0, 0, 0, $m[4]+1, $m[3]+1, $m[5]+1900));
+  if (preg_match('/^\\s*$/', $when)) return array(-1, -1);
+  $t0 = strtotime($when);
+  $t1 = strtotime("+1 day", $t0);
+  return array($t0, $t1);
+}
+
+## AsSpaced converts a string with WikiWords into a spaced version
+## of that string.  (It can be overridden via $AsSpacedFunction.)
+function AsSpaced($text) {
+  $text = preg_replace("/([[:lower:]\\d])([[:upper:]])/", '$1 $2', $text);
+  $text = preg_replace('/([^-\\d])(\\d[-\\d]*( |$))/','$1 $2',$text);
+  return preg_replace("/([[:upper:]])([[:upper:]][[:lower:]\\d])/",
+    '$1 $2', $text);
+}
+
+## Lock is used to make sure only one instance of PmWiki is running when
+## files are being written.  It does not "lock pages" for editing.
+function Lock($op) { 
+  global $WorkDir, $LockFile, $EnableReadOnly;
+  if ($op > 0 && IsEnabled($EnableReadOnly, 0))
+    Abort('Cannot modify site -- $EnableReadOnly is set', 'readonly');
+  SDV($LockFile, "$WorkDir/.flock");
+  mkdirp(dirname($LockFile));
+  static $lockfp,$curop;
+  if (!$lockfp) $lockfp = @fopen($LockFile, "w");
+  if (!$lockfp) { 
+    if ($op <= 0) return;
+    @unlink($LockFile); 
+    $lockfp = fopen($LockFile,"w") or
+      Abort('Cannot acquire lockfile', 'flock');
+    fixperms($LockFile);
+  }
+  if ($op<0) { flock($lockfp,LOCK_UN); fclose($lockfp); $lockfp=0; $curop=0; }
+  elseif ($op==0) { flock($lockfp,LOCK_UN); $curop=0; }
+  elseif ($op==1 && $curop<1) 
+    { session_write_close(); flock($lockfp,LOCK_SH); $curop=1; }
+  elseif ($op==2 && $curop<2) 
+    { session_write_close(); flock($lockfp,LOCK_EX); $curop=2; }
+}
+
+## mkdirp creates a directory and its parents as needed, and sets
+## permissions accordingly.
+function mkdirp($dir) {
+  global $ScriptUrl;
+  if (file_exists($dir)) return;
+  if (!file_exists(dirname($dir))) mkdirp(dirname($dir));
+  if (mkdir($dir, 0777)) {
+    fixperms($dir);
+    if (@touch("$dir/xxx")) { unlink("$dir/xxx"); return; }
+    rmdir($dir);
+  }
+  $parent = realpath(dirname($dir)); 
+  $perms = decoct(fileperms($parent) & 03777);
+  $msg = "PmWiki needs to have a writable <tt>$dir/</tt> directory 
+    before it can continue.  You can create the directory manually 
+    by executing the following commands on your server:
+    <pre>    mkdir $parent/$dir\n    chmod 777 $parent/$dir</pre>
+    Then, <a href='{$ScriptUrl}'>reload this page</a>.";
+  $safemode = ini_get('safe_mode');
+  if (!$safemode) $msg .= "<br /><br />Or, for a slightly more 
+    secure installation, try executing <pre>    chmod 2777 $parent</pre> 
+    on your server and following <a target='_blank' href='$ScriptUrl'>
+    this link</a>.  Afterwards you can restore the permissions to 
+    their current setting by executing <pre>    chmod $perms $parent</pre>.";
+  Abort($msg);
+}
+
+## fixperms attempts to correct permissions on a file or directory
+## so that both PmWiki and the account (current dir) owner can manipulate it
+function fixperms($fname, $add = 0) {
+  clearstatcache();
+  if (!file_exists($fname)) Abort('?no such file');
+  $bp = 0;
+  if (fileowner($fname)!=@fileowner('.')) $bp = (is_dir($fname)) ? 007 : 006;
+  if (filegroup($fname)==@filegroup('.')) $bp <<= 3;
+  $bp |= $add;
+  if ($bp && (fileperms($fname) & $bp) != $bp)
+    @chmod($fname,fileperms($fname)|$bp);
+}
+
+## GlobToPCRE converts wildcard patterns into pcre patterns for
+## inclusion and exclusion.  Wildcards beginning with '-' or '!'
+## are treated as things to be excluded.
+function GlobToPCRE($pat) {
+  $pat = preg_quote($pat, '/');
+  $pat = str_replace(array('\\*', '\\?', '\\[', '\\]', '\\^'),
+                     array('.*',  '.',   '[',   ']',   '^'), $pat);
+  $excl = array(); $incl = array();
+  foreach(preg_split('/,+\s?/', $pat, -1, PREG_SPLIT_NO_EMPTY) as $p) {
+    if ($p{0} == '-' || $p{0} == '!') $excl[] = '^'.substr($p, 1).'$';
+    else $incl[] = "^$p$";
+  }
+  return array(implode('|', $incl), implode('|', $excl));
+}
+
+## FixGlob changes wildcard patterns without '.' to things like
+## '*.foo' (name matches) or 'foo.*' (group matches).
+function FixGlob($x, $rep = '$1*.$2') {
+  return preg_replace('/([\\s,][-!]?)([^\\/.\\s,]+)(?=[\\s,])/', $rep, ",$x,");
+}
+
+## MatchPageNames reduces $pagelist to those pages with names
+## matching the pattern(s) in $pat.  Patterns can be either
+## regexes to include ('/'), regexes to exclude ('!'), or
+## wildcard patterns (all others).
+function MatchPageNames($pagelist, $pat) {
+  $pagelist = (array)$pagelist;
+  foreach((array)$pat as $p) {
+    if (count($pagelist) < 1) break;
+    if (!$p) continue;
+    switch ($p{0}) {
+      case '/': 
+        $pagelist = preg_grep($p, $pagelist); 
+        continue;
+      case '!':
+        $pagelist = array_diff($pagelist, preg_grep($p, $pagelist)); 
+        continue;
+      default:
+        list($inclp, $exclp) = GlobToPCRE(str_replace('/', '.', $p));
+        if ($exclp) 
+          $pagelist = array_diff($pagelist, preg_grep("/$exclp/i", $pagelist));
+        if ($inclp)
+          $pagelist = preg_grep("/$inclp/i", $pagelist);
+    }
+  }
+  return $pagelist;
+}
+  
+## ResolvePageName "normalizes" a pagename based on the current
+## settings of $DefaultPage and $PagePathFmt.  It's normally used
+## during initialization to fix up any missing or partial pagenames.
+function ResolvePageName($pagename) {
+  global $DefaultPage, $DefaultGroup, $DefaultName,
+    $GroupPattern, $NamePattern, $EnableFixedUrlRedirect;
+  SDV($DefaultPage, "$DefaultGroup.$DefaultName");
+  $pagename = preg_replace('!([./][^./]+)\\.html$!', '$1', $pagename);
+  if ($pagename == '') return $DefaultPage;
+  $p = MakePageName($DefaultPage, $pagename);
+  if (!preg_match("/^($GroupPattern)[.\\/]($NamePattern)$/i", $p)) {
+    header('HTTP/1.1 404 Not Found');
+    Abort('$[?invalid page name]');
+  }
+  if (preg_match("/^($GroupPattern)[.\\/]($NamePattern)$/i", $pagename))
+    return $p;
+  if (IsEnabled($EnableFixedUrlRedirect, 1)
+      && $p && (PageExists($p) || preg_match('/[\\/.]/', $pagename)))
+    { Redirect($p); exit(); }
+  return MakePageName($DefaultPage, "$pagename.$pagename");
+}
+
+## MakePageName is used to convert a string $str into a fully-qualified
+## pagename.  If $str doesn't contain a group qualifier, then 
+## MakePageName uses $basepage and $PagePathFmt to determine the 
+## group of the returned pagename.
+function MakePageName($basepage, $str) {
+  global $MakePageNameFunction, $PageNameChars, $PagePathFmt,
+    $MakePageNamePatterns;
+  if (@$MakePageNameFunction) return $MakePageNameFunction($basepage, $str);
+  SDV($PageNameChars,'-[:alnum:]');
+  SDV($MakePageNamePatterns, array(
+    "/'/" => '',			   # strip single-quotes
+    "/[^$PageNameChars]+/" => ' ',         # convert everything else to space
+    '/((^|[^-\\w])\\w)/e' => "strtoupper('$1')",
+    '/ /' => ''));
+  $str = preg_replace('/[#?].*$/', '', $str);
+  $m = preg_split('/[.\\/]/', $str);
+  if (count($m)<1 || count($m)>2 || $m[0]=='') return '';
+  ##  handle "Group.Name" conversions
+  if (@$m[1] > '') {
+    $group = preg_replace(array_keys($MakePageNamePatterns),
+               array_values($MakePageNamePatterns), $m[0]);
+    $name = preg_replace(array_keys($MakePageNamePatterns),
+              array_values($MakePageNamePatterns), $m[1]);
+    return "$group.$name";
+  }
+  $name = preg_replace(array_keys($MakePageNamePatterns),
+            array_values($MakePageNamePatterns), $m[0]);
+  $isgrouphome = count($m) > 1;
+  foreach((array)$PagePathFmt as $pg) {
+    if ($isgrouphome && strncmp($pg, '$1.', 3) !== 0) continue;
+    $pn = FmtPageName(str_replace('$1', $name, $pg), $basepage);
+    if (PageExists($pn)) return $pn;
+  }
+  if ($isgrouphome) {
+    foreach((array)$PagePathFmt as $pg) 
+      if (strncmp($pg, '$1.', 3) == 0)
+        return FmtPageName(str_replace('$1', $name, $pg), $basepage);
+    return "$name.$name";
+  }
+  return preg_replace('/[^\\/.]+$/', $name, $basepage);
+}
+
+
+## MakeBaseName uses $BaseNamePatterns to return the "base" form
+## of a given pagename -- i.e., stripping any recipe-defined
+## prefixes or suffixes from the page.
+function MakeBaseName($pagename, $patlist = NULL) {
+  global $BaseNamePatterns;
+  if (is_null($patlist)) $patlist = (array)@$BaseNamePatterns;
+  foreach($patlist as $pat => $rep) 
+    $pagename = preg_replace($pat, $rep, $pagename);
+  return $pagename;
+}
+
+
+## PCache caches basic information about a page and its attributes--
+## usually everything except page text and page history.  This makes
+## for quicker access to certain values in PageVar below.
+function PCache($pagename, $page) {
+  global $PCache;
+  foreach($page as $k=>$v) 
+    if ($k!='text' && strpos($k,':')===false) $PCache[$pagename][$k]=$v;
+}
+
+## SetProperty saves a page property into $PCache.  For convenience
+## it returns the $value of the property just set.  If $sep is supplied,
+## then $value is appended to the current property (with $sep as
+## as separator) instead of replacing it.
+function SetProperty($pagename, $prop, $value, $sep = NULL) {
+  global $PCache, $KeepToken;
+  NoCache();
+  $prop = "=p_$prop";
+  $value = preg_replace("/$KeepToken(\\d.*?)$KeepToken/e", 
+                        "\$GLOBALS['KPV']['$1']", $value);
+  if (!is_null($sep) && isset($PCache[$pagename][$prop]))
+    $value = $PCache[$pagename][$prop] . $sep . $value;
+  $PCache[$pagename][$prop] = $value;
+  return $value;
+}
+
+
+## PageTextVar loads a page's text variables (defined by
+## $PageTextVarPatterns) into a page's $PCache entry, and returns
+## the property associated with $var.
+function PageTextVar($pagename, $var) {
+  global $PCache, $PageTextVarPatterns;
+  if (!@$PCache[$pagename]['=pagetextvars']) {
+    $pc = &$PCache[$pagename];
+    $pc['=pagetextvars'] = 1;
+    $page = RetrieveAuthPage($pagename, 'read', false, READPAGE_CURRENT);
+    if ($page) {
+      foreach((array)$PageTextVarPatterns as $pat) 
+        if (preg_match_all($pat, @$page['text'], $match, PREG_SET_ORDER))
+          foreach($match as $m) {
+            $t = preg_replace("/\\{\\$:{$m[2]}\\}/", '', $m[3]);
+            $pc["=p_{$m[2]}"] = Qualify($pagename, $t);
+          }
+    }
+  }
+  return @$PCache[$pagename]["=p_$var"];
+}
+
+
+function PageVar($pagename, $var, $pn = '') {
+  global $Cursor, $PCache, $FmtPV, $AsSpacedFunction, $ScriptUrl,
+    $EnablePathInfo;
+  if ($var == '$ScriptUrl') return PUE($ScriptUrl);
+  if ($pn) {
+    $pn = isset($Cursor[$pn]) ? $Cursor[$pn] : MakePageName($pagename, $pn);
+  } else $pn = $pagename;
+  if ($pn) {
+    if (preg_match('/^(.+)[.\\/]([^.\\/]+)$/', $pn, $match)
+        && !isset($PCache[$pn]['time']) 
+        && (!@$FmtPV[$var] || strpos($FmtPV[$var], '$page') !== false)) 
+      { $page = ReadPage($pn, READPAGE_CURRENT); PCache($pn, $page); }
+    @list($d, $group, $name) = $match;
+    $page = &$PCache[$pn];
+  } else { $group = ''; $name = ''; }
+  if (@$FmtPV[$var]) return eval("return ({$FmtPV[$var]});");
+  if (strncmp($var, '$:', 2)==0) return PageTextVar($pn, substr($var, 2));
+  return '';
+}
+
+  
+## FmtPageName handles $[internationalization] and $Variable 
+## substitutions in strings based on the $pagename argument.
+function FmtPageName($fmt, $pagename) {
+  # Perform $-substitutions on $fmt relative to page given by $pagename
+  global $GroupPattern, $NamePattern, $EnablePathInfo, $ScriptUrl,
+    $GCount, $UnsafeGlobals, $FmtV, $FmtP, $FmtPV, $PCache, $AsSpacedFunction;
+  if (strpos($fmt,'$')===false) return $fmt;                  
+  $fmt = preg_replace('/\\$([A-Z]\\w*Fmt)\\b/e','$GLOBALS[\'$1\']',$fmt);
+  $fmt = preg_replace('/\\$\\[(?>([^\\]]+))\\]/e',"XL(PSS('$1'))",$fmt);
+  $fmt = str_replace('{$ScriptUrl}', '$ScriptUrl', $fmt);
+  $fmt = 
+    preg_replace('/\\{(\\$[A-Z]\\w+)\\}/e', "PageVar(\$pagename, '$1')", $fmt);
+  if (strpos($fmt,'$')===false) return $fmt;
+  if ($FmtP) $fmt = preg_replace(array_keys($FmtP), array_values($FmtP), $fmt);
+  static $pv, $pvpat;
+  if ($pv != count($FmtPV)) {
+    $pvpat = str_replace('$', '\\$', implode('|', array_keys($FmtPV)));
+    $pv = count($FmtPV);
+  }
+  $fmt = preg_replace("/(?:$pvpat)\\b/e", "PageVar(\$pagename, '$0')", $fmt);
+  $fmt = preg_replace('!\\$ScriptUrl/([^?#\'"\\s<>]+)!e', 
+    (@$EnablePathInfo) ? "'$ScriptUrl/'.PUE('$1')" :
+        "'$ScriptUrl?n='.str_replace('/','.',PUE('$1'))",
+    $fmt);
+  if (strpos($fmt,'$')===false) return $fmt;
+  static $g;
+  if ($GCount != count($GLOBALS)+count($FmtV)) {
+    $g = array();
+    foreach($GLOBALS as $n=>$v) {
+      if (is_array($v) || is_object($v) ||
+         isset($FmtV["\$$n"]) || in_array($n,$UnsafeGlobals)) continue;
+      $g["\$$n"] = $v;
+    }
+    $GCount = count($GLOBALS)+count($FmtV);
+    krsort($g); reset($g);
+  }
+  $fmt = str_replace(array_keys($g),array_values($g),$fmt);
+  $fmt = preg_replace('/(?>(\\$[[:alpha:]]\\w+))/e', 
+          "isset(\$FmtV['$1']) ? \$FmtV['$1'] : '$1'", $fmt); 
+  return $fmt;
+}
+
+##  FmtTemplateVars uses $vars to replace all occurrences of 
+##  {$$key} in $text with $vars['key'].
+function FmtTemplateVars($text, $vars, $pagename = NULL) {
+  global $FmtPV;
+  if ($pagename) {
+    $pat = implode('|', array_map('preg_quote', array_keys($FmtPV)));
+    $text = preg_replace("/\\{\\$($pat)\\}/e", 
+                         "PageVar('$pagename', '$1')", $text);
+  }
+  foreach(preg_grep('/^[\\w$]/', array_keys($vars)) as $k)
+    if (!is_array($vars[$k]))
+      $text = str_replace("{\$\$$k}", $vars[$k], $text);
+  return $text;
+}
+
+## The XL functions provide translation tables for $[i18n] strings
+## in FmtPageName().
+function XL($key) {
+  global $XL,$XLLangs;
+  foreach($XLLangs as $l) if (isset($XL[$l][$key])) return $XL[$l][$key];
+  return $key;
+}
+function XLSDV($lang,$a) {
+  global $XL;
+  foreach($a as $k=>$v) { if (!isset($XL[$lang][$k])) $XL[$lang][$k]=$v; }
+}
+function XLPage($lang,$p) {
+  global $TimeFmt,$XLLangs,$FarmD;
+  $page = ReadPage($p, READPAGE_CURRENT);
+  if (!$page) return;
+  $text = preg_replace("/=>\\s*\n/",'=> ',@$page['text']);
+  foreach(explode("\n",$text) as $l)
+    if (preg_match('/^\\s*[\'"](.+?)[\'"]\\s*=>\\s*[\'"](.+)[\'"]/',$l,$match))
+      $xl[stripslashes($match[1])] = stripslashes($match[2]);
+  if (isset($xl)) {
+    if (@$xl['xlpage-i18n']) {
+      $i18n = preg_replace('/[^-\\w]/','',$xl['xlpage-i18n']);
+      include_once("$FarmD/scripts/xlpage-$i18n.php");
+    }
+    if (@$xl['Locale']) setlocale(LC_ALL,$xl['Locale']);
+    if (@$xl['TimeFmt']) $TimeFmt=$xl['TimeFmt'];
+    if (!in_array($lang, $XLLangs)) array_unshift($XLLangs, $lang);
+    XLSDV($lang,$xl);
+  }
+}
+
+## CmpPageAttr is used with uksort to order a page's elements with
+## the latest items first.  This can make some operations more efficient.
+function CmpPageAttr($a, $b) {
+  @list($x, $agmt) = explode(':', $a);
+  @list($x, $bgmt) = explode(':', $b);
+  if ($agmt != $bgmt) 
+    return ($agmt==0 || $bgmt==0) ? $agmt - $bgmt : $bgmt - $agmt;
+  return strcmp($a, $b);
+}
+
+## class PageStore holds objects that store pages via the native
+## filesystem.
+class PageStore {
+  var $dirfmt;
+  var $iswrite;
+  var $attr;
+  function PageStore($d='$WorkDir/$FullName', $w=0, $a=NULL) { 
+    $this->dirfmt = $d; $this->iswrite = $w; $this->attr = (array)$a;
+    $GLOBALS['PageExistsCache'] = array();
+  }
+  function pagefile($pagename) {
+    global $FarmD;
+    $dfmt = $this->dirfmt;
+    if ($pagename > '') {
+      $pagename = str_replace('/', '.', $pagename);
+      if ($dfmt == 'wiki.d/{$FullName}')               # optimizations for
+        return "wiki.d/$pagename";                     # standard locations
+      if ($dfmt == '$FarmD/wikilib.d/{$FullName}')     # 
+        return "$FarmD/wikilib.d/$pagename";           #
+      if ($dfmt == 'wiki.d/{$Group}/{$FullName}')
+        return preg_replace('/([^.]+).*/', 'wiki.d/$1/$0', $pagename);
+    }
+    return FmtPageName($dfmt, $pagename);
+  }
+  function read($pagename, $since=0) {
+    $newline = '';
+    $urlencoded = false;
+    $pagefile = $this->pagefile($pagename);
+    if ($pagefile && ($fp=@fopen($pagefile, "r"))) {
+      $page = $this->attr;
+      while (!feof($fp)) {
+        $line = fgets($fp, 4096);
+        while (substr($line, -1, 1) != "\n" && !feof($fp)) 
+          { $line .= fgets($fp, 4096); }
+        $line = rtrim($line);
+        if ($urlencoded) $line = urldecode(str_replace('+', '%2b', $line));
+        @list($k,$v) = explode('=', $line, 2);
+        if (!$k) continue;
+        if ($k == 'version') { 
+          $ordered = (strpos($v, 'ordered=1') !== false); 
+          $urlencoded = (strpos($v, 'urlencoded=1') !== false); 
+          if (strpos($v, 'pmwiki-0.')!==false) $newline="\262";
+        }
+        if ($k == 'newline') { $newline = $v; continue; }
+        if ($since > 0 && preg_match('/:(\\d+)/', $k, $m) && $m[1] < $since) {
+          if ($ordered) break;
+          continue;
+        }
+        if ($newline) $v = str_replace($newline, "\n", $v);
+        $page[$k] = $v;
+      }
+      fclose($fp);
+    }
+    return @$page;
+  }
+  function write($pagename,$page) {
+    global $Now, $Version;
+    $page['name'] = $pagename;
+    $page['time'] = $Now;
+    $page['host'] = $_SERVER['REMOTE_ADDR'];
+    $page['agent'] = @$_SERVER['HTTP_USER_AGENT'];
+    $page['rev'] = @$page['rev']+1;
+    unset($page['version']); unset($page['newline']);
+    uksort($page, 'CmpPageAttr');
+    $s = false;
+    $pagefile = $this->pagefile($pagename);
+    $dir = dirname($pagefile); mkdirp($dir);
+    if (!file_exists("$dir/.htaccess") && $fp = @fopen("$dir/.htaccess", "w")) 
+      { fwrite($fp, "Order Deny,Allow\nDeny from all\n"); fclose($fp); }
+    if ($pagefile && ($fp=fopen("$pagefile,new","w"))) {
+      $r0 = array('%', "\n", '<');
+      $r1 = array('%25', '%0a', '%3c');
+      $x = "version=$Version ordered=1 urlencoded=1\n";
+      $s = true && fputs($fp, $x); $sz = strlen($x);
+      foreach($page as $k=>$v) 
+        if ($k > '' && $k{0} != '=') {
+          $x = str_replace($r0, $r1, "$k=$v") . "\n";
+          $s = $s && fputs($fp, $x); $sz += strlen($x);
+        }
+      $s = fclose($fp) && $s;
+      $s = $s && (filesize("$pagefile,new") > $sz * 0.95);
+      if (file_exists($pagefile)) $s = $s && unlink($pagefile);
+      $s = $s && rename("$pagefile,new", $pagefile);
+    }
+    $s && fixperms($pagefile);
+    if (!$s)
+      Abort("Cannot write page to $pagename ($pagefile)...changes not saved");
+    PCache($pagename, $page);
+  }
+  function exists($pagename) {
+    if (!$pagename) return false;
+    $pagefile = $this->pagefile($pagename);
+    return ($pagefile && file_exists($pagefile));
+  }
+  function delete($pagename) {
+    global $Now;
+    $pagefile = $this->pagefile($pagename);
+    @rename($pagefile,"$pagefile,del-$Now");
+  }
+  function ls($pats=NULL) {
+    global $GroupPattern, $NamePattern;
+    StopWatch("PageStore::ls begin {$this->dirfmt}");
+    $pats=(array)$pats; 
+    array_push($pats, "/^$GroupPattern\.$NamePattern$/");
+    $dir = $this->pagefile('$Group.$Name');
+    $maxslash = substr_count($dir, '/');
+    $dirlist = array(preg_replace('!/*[^/]*\\$.*$!','',$dir));
+    $out = array();
+    while (count($dirlist)>0) {
+      $dir = array_shift($dirlist);
+      $dfp = @opendir($dir); if (!$dfp) { continue; }
+      $dirslash = substr_count($dir, '/') + 1;
+      $o = array();
+      while ( ($pagefile = readdir($dfp)) !== false) {
+        if ($pagefile{0} == '.') continue;
+        if ($dirslash < $maxslash && is_dir("$dir/$pagefile"))
+          { array_push($dirlist,"$dir/$pagefile"); continue; }
+        if ($dirslash == $maxslash) $o[] = $pagefile;
+      }
+      closedir($dfp);
+      StopWatch("PageStore::ls merge {$this->dirfmt}");
+      $out = array_merge($out, MatchPageNames($o, $pats));
+    }
+    StopWatch("PageStore::ls end {$this->dirfmt}");
+    return $out;
+  }
+}
+
+function ReadPage($pagename, $since=0) {
+  # read a page from the appropriate directories given by $WikiReadDirsFmt.
+  global $WikiLibDirs,$Now;
+  foreach ($WikiLibDirs as $dir) {
+    $page = $dir->read($pagename, $since);
+    if ($page) break;
+  }
+  if (@!$page) $page['ctime'] = $Now;
+  if (@!$page['time']) $page['time'] = $Now;
+  return $page;
+}
+
+function WritePage($pagename,$page) {
+  global $WikiLibDirs,$WikiDir,$LastModFile;
+  $WikiDir->iswrite = 1;
+  for($i=0; $i<count($WikiLibDirs); $i++) {
+    $wd = &$WikiLibDirs[$i];
+    if ($wd->iswrite && $wd->exists($pagename)) break;
+  }
+  if ($i >= count($WikiLibDirs)) $wd = &$WikiDir;
+  $wd->write($pagename,$page);
+  if ($LastModFile && !@touch($LastModFile)) 
+    { unlink($LastModFile); touch($LastModFile); fixperms($LastModFile); }
+}
+
+function PageExists($pagename) {
+  ##  note:  $PageExistsCache might change or disappear someday
+  global $WikiLibDirs, $PageExistsCache;
+  if (!isset($PageExistsCache[$pagename])) {
+    foreach((array)$WikiLibDirs as $dir)
+      if ($PageExistsCache[$pagename] = $dir->exists($pagename)) break;
+  }
+  return $PageExistsCache[$pagename];
+}
+
+function ListPages($pat=NULL) {
+  global $WikiLibDirs;
+  foreach((array)$WikiLibDirs as $dir) 
+    $out = array_unique(array_merge($dir->ls($pat),(array)@$out));
+  return $out;
+}
+
+function RetrieveAuthPage($pagename, $level, $authprompt=true, $since=0) {
+  global $AuthFunction;
+  SDV($AuthFunction,'PmWikiAuth');
+  if (!function_exists($AuthFunction)) return ReadPage($pagename, $since);
+  return $AuthFunction($pagename, $level, $authprompt, $since);
+}
+
+function Abort($msg, $info='') {
+  # exit pmwiki with an abort message
+  global $ScriptUrl;
+  if ($info) 
+    $info = "<p class='vspace'><a target='_blank' rel='nofollow' href='http://www.pmwiki.org/pmwiki/info/$info'>$[More information]</a></p>";
+  $msg = "<h3>$[PmWiki can't process your request]</h3>
+    <p class='vspace'>$msg</p>
+    <p class='vspace'>We are sorry for any inconvenience.</p>
+    $info
+    <p class='vspace'><a href='$ScriptUrl'>$[Return to] $ScriptUrl</a></p>";
+  echo preg_replace('/\\$\\[([^\\]]+)\\]/e', "XL(PSS('$1'))", $msg);
+  exit;
+}
+
+function Redirect($pagename, $urlfmt='$PageUrl') {
+  # redirect the browser to $pagename
+  global $EnableRedirect, $RedirectDelay, $EnableStopWatch;
+  SDV($RedirectDelay, 0);
+  clearstatcache();
+  $pageurl = FmtPageName($urlfmt,$pagename);
+  if (IsEnabled($EnableRedirect,1) && 
+      (!isset($_REQUEST['redirect']) || $_REQUEST['redirect'])) {
+    header("Location: $pageurl");
+    header("Content-type: text/html");
+    echo "<html><head>
+      <meta http-equiv='Refresh' Content='$RedirectDelay; URL=$pageurl' />
+     <title>Redirect</title></head><body></body></html>";
+     exit;
+  }
+  echo "<a href='$pageurl'>Redirect to $pageurl</a>";
+  if (@$EnableStopWatch && function_exists('StopWatchHTML'))
+    StopWatchHTML($pagename, 1);
+  exit;
+}
+
+function PrintFmt($pagename,$fmt) {
+  global $HTTPHeaders,$FmtV;
+  if (is_array($fmt)) 
+    { foreach($fmt as $f) PrintFmt($pagename,$f); return; }
+  if ($fmt == 'headers:') {
+    foreach($HTTPHeaders as $h) (@$sent++) ? @header($h) : header($h);
+    return;
+  }
+  $x = FmtPageName($fmt,$pagename);
+  if (strncmp($fmt, 'function:', 9) == 0 &&
+      preg_match('/^function:(\S+)\s*(.*)$/s', $x, $match) &&
+      function_exists($match[1]))
+    { $match[1]($pagename,$match[2]); return; }
+  if (strncmp($fmt, 'file:', 5) == 0 && preg_match("/^file:(.+)/s",$x,$match)) {
+    $filelist = preg_split('/[\\s]+/',$match[1],-1,PREG_SPLIT_NO_EMPTY);
+    foreach($filelist as $f) {
+      if (file_exists($f)) { include($f); return; }
+    }
+    return;
+  }
+  if (substr($x, 0, 7) == 'markup:')
+    { print MarkupToHTML($pagename, substr($x, 7)); return; }
+  if (substr($x, 0, 5) == 'wiki:')
+    { PrintWikiPage($pagename, substr($x, 5), 'read'); return; }
+  if (substr($x, 0, 5) == 'page:')
+    { PrintWikiPage($pagename, substr($x, 5), ''); return; }
+  echo $x;
+}
+
+function PrintWikiPage($pagename, $wikilist=NULL, $auth='read') {
+  if (is_null($wikilist)) $wikilist=$pagename;
+  $pagelist = preg_split('/\s+/',$wikilist,-1,PREG_SPLIT_NO_EMPTY);
+  foreach($pagelist as $p) {
+    if (PageExists($p)) {
+      $page = ($auth) ? RetrieveAuthPage($p, $auth, false, READPAGE_CURRENT)
+              : ReadPage($p, READPAGE_CURRENT);
+      if ($page['text']) 
+        echo MarkupToHTML($pagename,Qualify($p, $page['text']));
+      return;
+    }
+  }
+}
+
+function Keep($x, $pool=NULL) {
+  # Keep preserves a string from being processed by wiki markups
+  global $BlockPattern, $KeepToken, $KPV, $KPCount;
+  $x = preg_replace("/$KeepToken(\\d.*?)$KeepToken/e", "\$KPV['\$1']", $x);
+  if (is_null($pool) && preg_match("!</?($BlockPattern)\\b!", $x)) $pool = 'B';
+  $KPCount++; $KPV[$KPCount.$pool]=$x;
+  return $KeepToken.$KPCount.$pool.$KeepToken;
+}
+
+
+##  MarkupEscape examines markup source and escapes any [@...@]
+##  and [=...=] sequences using Keep().  MarkupRestore undoes the
+##  effect of any MarkupEscape().
+function MarkupEscape($text) {
+  global $EscapePattern;
+  SDV($EscapePattern, '\\[([=@]).*?\\1\\]');
+  return preg_replace("/$EscapePattern/es", "Keep(PSS('$0'))", $text);
+}
+function MarkupRestore($text) {
+  global $KeepToken, $KPV;
+  return preg_replace("/$KeepToken(\\d.*?)$KeepToken/e", "\$KPV['$1']", $text);
+}
+
+
+##  Qualify() applies $QualifyPatterns to convert relative links
+##  and references into absolute equivalents.
+function Qualify($pagename, $text) {
+  global $QualifyPatterns, $KeepToken, $KPV;
+  if (!@$QualifyPatterns) return $text;
+  $text = MarkupEscape($text);
+  $group = PageVar($pagename, '$Group');
+  $name = PageVar($pagename, '$Name');
+  foreach((array)$QualifyPatterns as $pat => $rep) 
+    $text = preg_replace($pat, $rep, $text);
+  return MarkupRestore($text);
+}
+
+
+function CondText($pagename,$condspec,$condtext) {
+  global $Conditions;
+  if (!preg_match("/^(\\S+)\\s*(!?)\\s*(\\S+)?\\s*(.*?)\\s*$/",
+    $condspec,$match)) return '';
+  @list($condstr,$condtype,$not,$condname,$condparm) = $match;
+  if (isset($Conditions[$condname])) {
+    $tf = @eval("return (".$Conditions[$condname].");");
+    if (!$tf xor $not) $condtext='';
+  }
+  return $condtext;
+}
+
+
+##  TextSection extracts a section of text delimited by page anchors.
+##  The $sections parameter can have the form
+##    #abc           - [[#abc]] to next anchor
+##    #abc#def       - [[#abc]] up to [[#def]]
+##    #abc#, #abc..  - [[#abc]] to end of text
+##    ##abc, ..#abc  - beginning of text to [[#abc]]
+##  Returns the text unchanged if no sections are requested,
+##  or false if a requested beginning anchor isn't in the text.
+function TextSection($text, $sections, $args = NULL) {
+  $args = (array)$args;
+  $npat = '[[:alpha:]][-\\w*]*';
+  if (!preg_match("/#($npat)?(\\.\\.)?(#($npat)?)?/", $sections, $match))
+    return $text;
+  @list($x, $aa, $dots, $b, $bb) = $match;
+  if (!$dots && !$b) $bb = $npat;
+  if ($aa) {
+    $pos = strpos($text, "[[#$aa]]");  if ($pos === false) return false;
+    if (@$args['anchors']) 
+      while ($pos > 0 && $text[$pos-1] != "\n") $pos--;
+    else $pos += strlen("[[#$aa]]");
+    $text = substr($text, $pos);
+  }
+  if ($bb)
+    $text = preg_replace("/(\n)[^\n]*\\[\\[#$bb\\]\\].*$/s", '$1', $text, 1);
+  return $text;
+}
+
+
+##  RetrieveAuthSection extracts a section of text from a page.
+##  If $pagesection starts with anything other than '#', it identifies
+##  the page to extract text from.  Otherwise RetrieveAuthSection looks
+##  in the pages given by $list, or in $pagename if $list is not specified.
+##  The selected page is placed in the global $RASPageName variable.
+##  The caller is responsible for calling Qualify() as needed.
+function RetrieveAuthSection($pagename, $pagesection, $list=NULL, $auth='read') {
+  global $RASPageName;
+  if ($pagesection{0} != '#')
+    $list = array(MakePageName($pagename, $pagesection));
+  else if (is_null($list)) $list = array($pagename);
+  foreach((array)$list as $t) {
+    $t = FmtPageName($t, $pagename);
+    if (!PageExists($t)) continue;
+    $tpage = RetrieveAuthPage($t, $auth, false, READPAGE_CURRENT);
+    if (!$tpage) continue;
+    $text = TextSection($tpage['text'], $pagesection);
+    if ($text !== false) { $RASPageName = $t; return $text; }
+  }
+  $RASPageName = '';
+  return false;
+}
+
+
+function IncludeText($pagename, $inclspec) {
+  global $MaxIncludes, $IncludeOpt, $InclCount;
+  SDV($MaxIncludes,50);
+  SDVA($IncludeOpt, array('self'=>1));
+  $npat = '[[:alpha:]][-\\w]*';
+  if ($InclCount++>=$MaxIncludes) return Keep($inclspec);
+  $args = array_merge($IncludeOpt, ParseArgs($inclspec));
+  while (count($args['#'])>0) {
+    $k = array_shift($args['#']); $v = array_shift($args['#']);
+    if ($k=='') {
+      if ($v{0} != '#') {
+        if (isset($itext)) continue;
+        $iname = MakePageName($pagename, $v);
+        if (!$args['self'] && $iname == $pagename) continue;
+        $ipage = RetrieveAuthPage($iname, 'read', false, READPAGE_CURRENT);
+        $itext = @$ipage['text'];
+      }
+      $itext = TextSection($itext, $v, array('anchors' => 1));
+      continue;
+    }
+    if (preg_match('/^(?:line|para)s?$/', $k)) {
+      preg_match('/^(\\d*)(\\.\\.(\\d*))?$/', $v, $match);
+      @list($x, $a, $dots, $b) = $match;
+      $upat = ($k{0} == 'p') ? ".*?(\n\\s*\n|$)" : "[^\n]*(?:\n|$)";
+      if (!$dots) { $b=$a; $a=0; }
+      if ($a>0) $a--;
+      $itext=preg_replace("/^(($upat){0,$b}).*$/s",'$1',$itext,1);
+      $itext=preg_replace("/^($upat){0,$a}/s",'',$itext,1);
+      continue;
+    }
+  }
+  $basepage = isset($args['basepage']) 
+              ? MakePageName($pagename, $args['basepage'])
+              : $iname;
+  if ($basepage) $itext = Qualify(@$basepage, @$itext);
+  return FmtTemplateVars(PVSE($itext), $args);
+}
+
+
+function RedirectMarkup($pagename, $opt) {
+  $k = Keep("(:redirect $opt:)");
+  global $MarkupFrame;
+  if (!@$MarkupFrame[0]['redirect']) return $k;
+  $opt = ParseArgs($opt);
+  $to = @$opt['to']; if (!$to) $to = @$opt[''][0];
+  if (!$to) return $k;
+  if (preg_match('/^([^#]+)(#[A-Za-z][-\\w]*)$/', $to, $match)) 
+    { $to = $match[1]; $anchor = $match[2]; }
+  $to = MakePageName($pagename, $to);
+  if (!PageExists($to)) return $k;
+  if ($to == $pagename) return '';
+  if (@$opt['from'] 
+      && !MatchPageNames($pagename, FixGlob($opt['from'], '$1*.$2')))
+    return '';
+  if (preg_match('/^30[1237]$/', @$opt['status'])) 
+     header("HTTP/1.1 {$opt['status']}");
+  Redirect($to, @"{\$PageUrl}?from=$pagename$anchor");
+  exit();
+}
+   
+
+function Block($b) {
+  global $BlockMarkups,$HTMLVSpace,$HTMLPNewline,$MarkupFrame;
+  $mf = &$MarkupFrame[0]; $cs = &$mf['cs']; $vspaces = &$mf['vs'];
+  $out = '';
+  if ($b == 'vspace') {
+    $vspaces .= "\n";
+    while (count($cs)>0 && @end($cs)!='pre' && @$BlockMarkups[@end($cs)][3]==0) 
+      { $c = array_pop($cs); $out .= $BlockMarkups[$c][2]; }
+    return $out;
+  }
+  @list($code, $depth, $icol) = explode(',', $b);
+  if (!$code) $depth = 1;
+  if ($depth == 0) $depth = strlen($depth);
+  if ($icol == 0) $icol = strlen($icol);
+  if ($depth > 0) $depth += @$mf['idep'];
+  if ($icol > 0) $mf['is'][$depth] = $icol + @$mf['icol'];
+  @$mf['idep'] = @$mf['icol'] = 0;
+  while (count($cs)>$depth) 
+    { $c = array_pop($cs); $out .= $BlockMarkups[$c][2]; }
+  if (!$code) {
+    if (@end($cs) == 'p') { $out .= $HTMLPNewline; $code = 'p'; }
+    else if ($depth < 2) { $code = 'p'; $mf['is'][$depth] = 0; }
+    else { $out .= $HTMLPNewline; $code = 'block'; }
+  }
+  if ($depth>0 && $depth==count($cs) && $cs[$depth-1]!=$code)
+    { $c = array_pop($cs); $out .= $BlockMarkups[$c][2]; }
+  while (count($cs)>0 && @end($cs)!=$code &&
+      @$BlockMarkups[@end($cs)][3]==0)
+    { $c = array_pop($cs); $out .= $BlockMarkups[$c][2]; }
+  if ($vspaces) { 
+    $out .= (@end($cs) == 'pre') ? $vspaces : $HTMLVSpace; 
+    $vspaces=''; 
+  }
+  if ($depth==0) { return $out; }
+  if ($depth==count($cs)) { return $out.$BlockMarkups[$code][1]; }
+  while (count($cs)<$depth-1) { 
+    array_push($cs, 'dl'); $mf['is'][count($cs)] = 0;
+    $out .= $BlockMarkups['dl'][0].'<dd>'; 
+  }
+  if (count($cs)<$depth) {
+    array_push($cs,$code);
+    $out .= $BlockMarkups[$code][0];
+  }
+  return $out;
+}
+
+
+function MarkupClose($key = '') {
+  global $MarkupFrame;
+  $cf = & $MarkupFrame[0]['closeall'];
+  $out = '';
+  if ($key == '' || isset($cf[$key])) {
+    $k = array_keys((array)$cf);
+    while ($k) { 
+      $x = array_pop($k); $out .= $cf[$x]; unset($cf[$x]);
+      if ($x == $key) break;
+    }
+  }
+  return $out;
+}
+
+
+function FormatTableRow($x, $sep = '\\|\\|') {
+  global $Block, $TableCellAttrFmt, $MarkupFrame, $TableRowAttrFmt, 
+    $TableRowIndexMax, $FmtV;
+  static $rowcount;
+  $x = preg_replace("/$sep\\s*$/",'',$x);
+  $td = preg_split("/$sep/", $x); $y = '';
+  for($i=0;$i<count($td);$i++) {
+    if ($td[$i]=='') continue;
+    $FmtV['$TableCellCount'] = $i;
+    $attr = FmtPageName(@$TableCellAttrFmt, '');
+    $td[$i] = preg_replace('/^(!?)\\s+$/', '$1&nbsp;', $td[$i]);
+    if (preg_match('/^!(.*?)!$/',$td[$i],$match))
+      { $td[$i]=$match[1]; $t='caption'; $attr=''; }
+    elseif (preg_match('/^!(.*)$/',$td[$i],$match)) 
+      { $td[$i]=$match[1]; $t='th'; }
+    else $t='td';
+    if (preg_match('/^\\s.*\\s$/',$td[$i])) { $attr .= " align='center'"; }
+    elseif (preg_match('/^\\s/',$td[$i])) { $attr .= " align='right'"; }
+    elseif (preg_match('/\\s$/',$td[$i])) { $attr .= " align='left'"; }
+    for ($colspan=1;$i+$colspan<count($td);$colspan++) 
+      if ($td[$colspan+$i]!='') break;
+    if ($colspan>1) { $attr .= " colspan='$colspan'"; }
+    $y .= "<$t $attr>".trim($td[$i])."</$t>";
+  }
+  if ($t=='caption') return "<:table,1>$y";
+  if (@$MarkupFrame[0]['cs'][0] != 'table') $rowcount = 0; else $rowcount++;
+  $FmtV['$TableRowCount'] = $rowcount + 1;
+  $FmtV['$TableRowIndex'] = ($rowcount % $TableRowIndexMax) + 1;
+  $trattr = FmtPageName(@$TableRowAttrFmt, '');
+  return "<:table,1><tr $trattr>$y</tr>";
+}
+
+function LinkIMap($pagename,$imap,$path,$alt,$txt,$fmt=NULL) {
+  global $FmtV, $IMap, $IMapLinkFmt, $UrlLinkFmt;
+  $FmtV['$LinkUrl'] = PUE(str_replace('$1',$path,$IMap[$imap]));
+  $FmtV['$LinkText'] = $txt;
+  $FmtV['$LinkAlt'] = str_replace(array('"',"'"),array('&#34;','&#39;'),$alt);
+  if (!$fmt) 
+    $fmt = (isset($IMapLinkFmt[$imap])) ? $IMapLinkFmt[$imap] : $UrlLinkFmt;
+  return str_replace(array_keys($FmtV),array_values($FmtV),$fmt);
+}
+
+function LinkPage($pagename,$imap,$path,$alt,$txt,$fmt=NULL) {
+  global $QueryFragPattern, $LinkPageExistsFmt, $LinkPageSelfFmt,
+    $LinkPageCreateSpaceFmt, $LinkPageCreateFmt, $LinkTargets,
+    $EnableLinkPageRelative;
+  if (!$fmt && $path{0} == '#') {
+    $path = preg_replace("/[^-.:\\w]/", '', $path);
+    return ($path) ? "<a href='#$path'>$txt</a>" : '';
+  }
+  if (!preg_match("/^\\s*([^#?]+)($QueryFragPattern)?$/",$path,$match))
+    return '';
+  $tgtname = MakePageName($pagename, $match[1]); 
+  if (!$tgtname) return '';
+  $qf = @$match[2];
+  @$LinkTargets[$tgtname]++;
+  if (!$fmt) {
+    if (!PageExists($tgtname) && !preg_match('/[&?]action=/', $qf))
+      $fmt = preg_match('/\\s/', $txt) 
+             ? $LinkPageCreateSpaceFmt : $LinkPageCreateFmt;
+    else
+      $fmt = ($tgtname == $pagename && $qf == '') 
+             ? $LinkPageSelfFmt : $LinkPageExistsFmt;
+  }
+  $url = PageVar($tgtname, '$PageUrl');
+  if (@$EnableLinkPageRelative) 
+    $url = preg_replace('!^[a-z]+://[^/]*!i', '', $url);
+  $fmt = str_replace(array('$LinkUrl', '$LinkText'),
+                     array($url.PUE($qf), $txt), $fmt);
+  return FmtPageName($fmt,$tgtname);
+}
+
+function MakeLink($pagename,$tgt,$txt=NULL,$suffix=NULL,$fmt=NULL) {
+  global $LinkPattern,$LinkFunctions,$UrlExcludeChars,$ImgExtPattern,$ImgTagFmt;
+  $t = preg_replace('/[()]/','',trim($tgt));
+  $t = preg_replace('/<[^>]*>/','',$t);
+  preg_match("/^($LinkPattern)?(.+?)(\"(.*)\")?$/",$t,$m);
+  if (!$m[1]) $m[1]='<:page>';
+  if (preg_match("/(($LinkPattern)([^$UrlExcludeChars]+$ImgExtPattern))(\"(.*)\")?$/",$txt,$tm)) 
+    $txt = $LinkFunctions[$tm[2]]($pagename,$tm[2],$tm[3],@$tm[5],
+      $tm[1],$ImgTagFmt);
+  else {
+    if (is_null($txt)) {
+      $txt = preg_replace('/\\([^)]*\\)/','',$tgt);
+      if ($m[1]=='<:page>') {
+        $txt = preg_replace('!/\\s*$!', '', $txt);
+        $txt = preg_replace('!^.*[^<]/!', '', $txt);
+      }
+    }
+    $txt .= $suffix;
+  }
+  $out = $LinkFunctions[$m[1]]($pagename,$m[1],$m[2],@$m[4],$txt,$fmt);
+  return $out;
+}
+
+function Markup($id, $when, $pat=NULL, $rep=NULL) {
+  global $MarkupTable,$MarkupRules;
+  unset($MarkupRules);
+  if (preg_match('/^([<>])?(.+)$/', $when, $m)) {
+    $MarkupTable[$id]['cmd'] = $when;
+    $MarkupTable[$m[2]]['dep'][$id] = $m[1];
+    if (!$m[1]) $m[1] = '=';
+    if (@$MarkupTable[$m[2]]['seq']) {
+      $MarkupTable[$id]['seq'] = $MarkupTable[$m[2]]['seq'].$m[1];
+      foreach((array)@$MarkupTable[$id]['dep'] as $i=>$m)
+        Markup($i,"$m$id");
+      unset($MarkupTable[$id]['dep']);
+    }
+  }
+  if ($pat && !isset($MarkupTable[$id]['pat'])) {
+    $MarkupTable[$id]['pat'] = $pat;
+    $MarkupTable[$id]['rep'] = $rep;
+  }
+}
+
+function DisableMarkup() {
+  global $MarkupTable;
+  $idlist = func_get_args();
+  unset($MarkupRules);
+  while (count($idlist)>0) {
+    $id = array_shift($idlist);
+    if (is_array($id)) { $idlist = array_merge($idlist, $id); continue; }
+    $MarkupTable[$id] = array('cmd' => 'none', 'pat'=>'');
+  }
+}
+    
+function mpcmp($a,$b) { return @strcmp($a['seq'].'=',$b['seq'].'='); }
+function BuildMarkupRules() {
+  global $MarkupTable,$MarkupRules,$LinkPattern;
+  if (!$MarkupRules) {
+    uasort($MarkupTable,'mpcmp');
+    foreach($MarkupTable as $id=>$m) 
+      if (@$m['pat'] && @$m['seq']) 
+        $MarkupRules[str_replace('\\L',$LinkPattern,$m['pat'])]=$m['rep'];
+  }
+  return $MarkupRules;
+}
+
+
+function MarkupToHTML($pagename, $text, $opt = NULL) {
+  # convert wiki markup text to HTML output
+  global $MarkupRules, $MarkupFrame, $MarkupFrameBase, $WikiWordCount,
+    $K0, $K1, $RedoMarkupLine;
+
+  StopWatch('MarkupToHTML begin');
+  array_unshift($MarkupFrame, array_merge($MarkupFrameBase, (array)$opt));
+  $MarkupFrame[0]['wwcount'] = $WikiWordCount;
+  $markrules = BuildMarkupRules();
+  foreach((array)$text as $l) 
+    $lines[] = $MarkupFrame[0]['escape'] ? PVSE($l) : $l;
+  $lines[] = '(:closeall:)';
+  $out = '';
+  while (count($lines)>0) {
+    $x = array_shift($lines);
+    $RedoMarkupLine=0;
+    foreach($markrules as $p=>$r) {
+      if ($p{0} == '/') $x=preg_replace($p,$r,$x); 
+      elseif (strstr($x,$p)!==false) $x=eval($r);
+      if (isset($php_errormsg)) 
+        { echo "ERROR: pat=$p $php_errormsg"; unset($php_errormsg); }
+      if ($RedoMarkupLine) { $lines=array_merge((array)$x,$lines); continue 2; }
+    }
+    if ($x>'') $out .= "$x\n";
+  }
+  foreach((array)(@$MarkupFrame[0]['posteval']) as $v) eval($v);
+  array_shift($MarkupFrame);
+  StopWatch('MarkupToHTML end');
+  return $out;
+}
+   
+function HandleBrowse($pagename, $auth = 'read') {
+  # handle display of a page
+  global $DefaultPageTextFmt, $PageNotFoundHeaderFmt, $HTTPHeaders,
+    $EnableHTMLCache, $NoHTMLCache, $PageCacheFile, $LastModTime, $IsHTMLCached,
+    $FmtV, $HandleBrowseFmt, $PageStartFmt, $PageEndFmt, $PageRedirectFmt;
+  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
+  if (!$page) Abort("?cannot read $pagename");
+  PCache($pagename,$page);
+  if (PageExists($pagename)) $text = @$page['text'];
+  else {
+    SDV($DefaultPageTextFmt,'(:include $[{$SiteGroup}.PageNotFound]:)');
+    $text = FmtPageName($DefaultPageTextFmt, $pagename);
+    SDV($PageNotFoundHeaderFmt, 'HTTP/1.1 404 Not Found');
+    SDV($HTTPHeaders['status'], $PageNotFoundHeaderFmt);
+  }
+  $opt = array();
+  SDV($PageRedirectFmt,"<p><i>($[redirected from] <a rel='nofollow' 
+    href='{\$PageUrl}?action=edit'>{\$FullName}</a>)</i></p>\$HTMLVSpace\n");
+  if (@!$_GET['from']) { $opt['redirect'] = 1; $PageRedirectFmt = ''; }
+  else $PageRedirectFmt = FmtPageName($PageRedirectFmt, $_GET['from']);
+  if (@$EnableHTMLCache && !$NoHTMLCache && $PageCacheFile && 
+      @filemtime($PageCacheFile) > $LastModTime) {
+    list($ctext) = unserialize(file_get_contents($PageCacheFile));
+    $FmtV['$PageText'] = "<!--cached-->$ctext";
+    $IsHTMLCached = 1;
+    StopWatch("HandleBrowse: using cached copy");
+  } else {
+    $IsHTMLCached = 0;
+    $text = '(:groupheader:)'.@$text.'(:groupfooter:)';
+    $t1 = time();
+    $FmtV['$PageText'] = MarkupToHTML($pagename, $text, $opt);
+    if (@$EnableHTMLCache > 0 && !$NoHTMLCache && $PageCacheFile
+        && (time() - $t1 + 1) >= $EnableHTMLCache) {
+      $fp = @fopen("$PageCacheFile,new", "x");
+      if ($fp) { 
+        StopWatch("HandleBrowse: caching page");
+        fwrite($fp, serialize(array($FmtV['$PageText']))); fclose($fp);
+        rename("$PageCacheFile,new", $PageCacheFile);
+      }
+    }
+  }
+  SDV($HandleBrowseFmt,array(&$PageStartFmt, &$PageRedirectFmt, '$PageText',
+    &$PageEndFmt));
+  PrintFmt($pagename,$HandleBrowseFmt);
+}
+
+
+## UpdatePage goes through all of the steps needed to update a page,
+## preserving page history, computing link targets, page titles, 
+## and other page attributes.  It does this by calling each entry
+## in $EditFunctions.  $pagename is the name of the page to be updated,
+## $page is the old version of the page (used for page history),
+## $new is the new version of the page to be saved, and $fnlist is
+## an optional list of functions to use instead of $EditFunctions.
+function UpdatePage(&$pagename, &$page, &$new, $fnlist = NULL) {
+  global $EditFunctions, $IsPagePosted;
+  StopWatch("UpdatePage: begin $pagename");
+  if (is_null($fnlist)) $fnlist = $EditFunctions;
+  $IsPagePosted = false;
+  foreach((array)$fnlist as $fn) {
+    StopWatch("UpdatePage: $fn ($pagename)");
+    $fn($pagename, $page, $new);
+  }
+  StopWatch("UpdatePage: end $pagename");
+  return $IsPagePosted;
+}
+
+
+# EditTemplate allows a site administrator to pre-populate new pages
+# with the contents of another page.
+function EditTemplate($pagename, &$page, &$new) {
+  global $EditTemplatesFmt;
+  if (@$new['text'] > '') return;
+  if (@$_REQUEST['template'] && PageExists($_REQUEST['template'])) {
+    $p = RetrieveAuthPage($_REQUEST['template'], 'read', false,
+             READPAGE_CURRENT);
+    if ($p['text'] > '') $new['text'] = $p['text']; 
+    return;
+  }
+  foreach((array)$EditTemplatesFmt as $t) {
+    $p = RetrieveAuthPage(FmtPageName($t,$pagename), 'read', false,
+             READPAGE_CURRENT);
+    if (@$p['text'] > '') { $new['text'] = $p['text']; return; }
+  }
+}
+
+# RestorePage handles returning to the version of text as of
+# the version given by $restore or $_REQUEST['restore'].
+function RestorePage($pagename,&$page,&$new,$restore=NULL) {
+  if (is_null($restore)) $restore=@$_REQUEST['restore'];
+  if (!$restore) return;
+  $t = $page['text'];
+  $nl = (substr($t,-1)=="\n");
+  $t = explode("\n",$t);
+  if ($nl) array_pop($t);
+  krsort($page); reset($page);
+  foreach($page as $k=>$v) {
+    if ($k<$restore) break;
+    if (strncmp($k, 'diff:', 5) != 0) continue;
+    foreach(explode("\n",$v) as $x) {
+      if (preg_match('/^(\\d+)(,(\\d+))?([adc])(\\d+)/',$x,$match)) {
+        $a1 = $a2 = $match[1];
+        if ($match[3]) $a2=$match[3];
+        $b1 = $match[5];
+        if ($match[4]=='d') array_splice($t,$b1,$a2-$a1+1);
+        if ($match[4]=='c') array_splice($t,$b1-1,$a2-$a1+1);
+        continue;
+      }
+      if (strncmp($x,'< ',2) == 0) { $nlflag=true; continue; }
+      if (preg_match('/^> (.*)$/',$x,$match)) {
+        $nlflag=false;
+        array_splice($t,$b1-1,0,$match[1]); $b1++;
+      }
+      if ($x=='\\ No newline at end of file') $nl=$nlflag;
+    }
+  }
+  if ($nl) $t[]='';
+  $new['text']=implode("\n",$t);
+  return $new['text'];
+}
+
+## ReplaceOnSave performs text replacements on the text being posted.
+## Patterns held in $ROEPatterns are replaced on every edit request,
+## patterns held in $ROSPatterns are replaced only when the page
+## is being posted (as signaled by $EnablePost).
+function ReplaceOnSave($pagename,&$page,&$new) {
+  global $EnablePost, $ROSPatterns, $ROEPatterns;
+  foreach ((array)@$ROEPatterns as $pat => $rep)
+    $new['text'] = preg_replace($pat, $rep, $new['text']);
+  if (!$EnablePost) return;
+  foreach((array)@$ROSPatterns as $pat=>$rep) 
+    $new['text'] = preg_replace($pat, $rep, $new['text']);
+}
+
+function SaveAttributes($pagename,&$page,&$new) {
+  global $EnablePost, $LinkTargets, $SaveAttrPatterns, $PCache,
+    $SaveProperties;
+  if (!$EnablePost) return;
+  $text = preg_replace(array_keys($SaveAttrPatterns), 
+                       array_values($SaveAttrPatterns), $new['text']);
+  $LinkTargets = array();
+  $html = MarkupToHTML($pagename,$text);
+  $new['targets'] = implode(',',array_keys((array)$LinkTargets));
+  $p = & $PCache[$pagename];
+  foreach((array)$SaveProperties as $k) {
+    if (@$p["=p_$k"]) $new[$k] = $p["=p_$k"];
+    else unset($new[$k]);
+  }
+  unset($new['excerpt']);
+}
+
+function PostPage($pagename, &$page, &$new) {
+  global $DiffKeepDays, $DiffFunction, $DeleteKeyPattern, $EnablePost,
+    $Now, $Charset, $Author, $WikiDir, $IsPagePosted;
+  SDV($DiffKeepDays,3650);
+  SDV($DeleteKeyPattern,"^\\s*delete\\s*$");
+  $IsPagePosted = false;
+  if ($EnablePost) {
+    $new['charset'] = $Charset;
+    $new['author'] = @$Author;
+    $new["author:$Now"] = @$Author;
+    $new["host:$Now"] = $_SERVER['REMOTE_ADDR'];
+    $diffclass = preg_replace('/\\W/','',@$_POST['diffclass']);
+    if ($page['time']>0 && function_exists(@$DiffFunction)) 
+      $new["diff:$Now:{$page['time']}:$diffclass"] =
+        $DiffFunction($new['text'],@$page['text']);
+    $keepgmt = $Now-$DiffKeepDays * 86400;
+    $keys = array_keys($new);
+    foreach($keys as $k)
+      if (preg_match("/^\\w+:(\\d+)/",$k,$match) && $match[1]<$keepgmt)
+        unset($new[$k]);
+    if (preg_match("/$DeleteKeyPattern/",$new['text']))
+      $WikiDir->delete($pagename);
+    else WritePage($pagename,$new);
+    $IsPagePosted = true;
+  }
+}
+
+function PostRecentChanges($pagename,&$page,&$new) {
+  global $IsPagePosted, $RecentChangesFmt, $RCDelimPattern, $RCLinesMax;
+  if (!$IsPagePosted) return;
+  foreach($RecentChangesFmt as $rcfmt=>$pgfmt) {
+    $rcname = FmtPageName($rcfmt,$pagename);  if (!$rcname) continue;
+    $pgtext = FmtPageName($pgfmt,$pagename);  if (!$pgtext) continue;
+    if (@$seen[$rcname]++) continue;
+    $rcpage = ReadPage($rcname);
+    $rcelim = preg_quote(preg_replace("/$RCDelimPattern.*$/",' ',$pgtext),'/');
+    $rcpage['text'] = preg_replace("/^.*$rcelim.*\n/m", '', @$rcpage['text']);
+    if (!preg_match("/$RCDelimPattern/",$rcpage['text'])) 
+      $rcpage['text'] .= "$pgtext\n";
+    else
+      $rcpage['text'] = preg_replace("/([^\n]*$RCDelimPattern.*\n)/",
+        "$pgtext\n$1", $rcpage['text'], 1);
+    if (@$RCLinesMax > 0) 
+      $rcpage['text'] = implode("\n", array_slice(
+          explode("\n", $rcpage['text'], $RCLinesMax + 1), 0, $RCLinesMax));
+    WritePage($rcname, $rcpage);
+  }
+}
+
+function AutoCreateTargets($pagename, &$page, &$new) {
+  global $IsPagePosted, $AutoCreate, $LinkTargets;
+  if (!$IsPagePosted) return;
+  foreach((array)@$AutoCreate as $pat => $init) {
+    if (is_null($init)) continue;
+    foreach(preg_grep($pat, array_keys((array)@$LinkTargets)) as $aname) {
+      if (PageExists($aname)) continue;
+      $x = RetrieveAuthPage($aname, 'edit', false, READPAGE_CURRENT);
+      if (!$x) continue;
+      WritePage($aname, $init);
+    }
+  }
+}
+    
+function PreviewPage($pagename,&$page,&$new) {
+  global $IsPageSaved, $FmtV;
+  if (@$_POST['preview']) {
+    $text = '(:groupheader:)'.$new['text'].'(:groupfooter:)';
+    $FmtV['$PreviewText'] = MarkupToHTML($pagename,$text);
+  } 
+}
+  
+function HandleEdit($pagename, $auth = 'edit') {
+  global $IsPagePosted, $EditFields, $ChangeSummary, $EditFunctions, 
+    $EnablePost, $FmtV, $Now, $EditRedirectFmt, 
+    $PageEditForm, $HandleEditFmt, $PageStartFmt, $PageEditFmt, $PageEndFmt;
+  SDV($EditRedirectFmt, '$FullName');
+  if (@$_POST['cancel']) 
+    { Redirect(FmtPageName($EditRedirectFmt, $pagename)); return; }
+  Lock(2);
+  $page = RetrieveAuthPage($pagename, $auth, true);
+  if (!$page) Abort("?cannot edit $pagename"); 
+  PCache($pagename,$page);
+  $new = $page;
+  foreach((array)$EditFields as $k) 
+    if (isset($_POST[$k])) $new[$k]=str_replace("\r",'',stripmagic($_POST[$k]));
+  $new['csum'] = $ChangeSummary;
+  if ($ChangeSummary) $new["csum:$Now"] = $ChangeSummary;
+  $EnablePost &= preg_grep('/^post/', array_keys(@$_POST));
+  UpdatePage($pagename, $page, $new);
+  Lock(0);
+  if ($IsPagePosted && !@$_POST['postedit']) 
+    { Redirect(FmtPageName($EditRedirectFmt, $pagename)); return; }
+  $FmtV['$DiffClassMinor'] = 
+    (@$_POST['diffclass']=='minor') ?  "checked='checked'" : '';
+  $FmtV['$EditText'] = 
+    str_replace('$','&#036;',htmlspecialchars(@$new['text'],ENT_NOQUOTES));
+  $FmtV['$EditBaseTime'] = $Now;
+  if (@$PageEditForm) {
+    $efpage = FmtPageName($PageEditForm, $pagename);
+    $form = RetrieveAuthPage($efpage, 'read', false, READPAGE_CURRENT);
+    if (!$form || !@$form['text']) 
+      Abort("?unable to retrieve edit form $efpage", 'editform');
+    $FmtV['$EditForm'] = MarkupToHTML($pagename, $form['text']);
+  }
+  SDV($PageEditFmt, "<div id='wikiedit'>
+    <h2 class='wikiaction'>$[Editing {\$FullName}]</h2>
+    <form method='post' rel='nofollow' action='\$PageUrl?action=edit'>
+    <input type='hidden' name='action' value='edit' />
+    <input type='hidden' name='n' value='\$FullName' />
+    <input type='hidden' name='basetime' value='\$EditBaseTime' />
+    \$EditMessageFmt
+    <textarea id='text' name='text' rows='25' cols='60'
+      onkeydown='if (event.keyCode==27) event.returnValue=false;'
+      >\$EditText</textarea><br />
+    <input type='submit' name='post' value=' $[Save] ' />");
+  SDV($HandleEditFmt, array(&$PageStartFmt, &$PageEditFmt, &$PageEndFmt));
+  PrintFmt($pagename, $HandleEditFmt);
+}
+
+function HandleSource($pagename, $auth = 'read') {
+  global $HTTPHeaders;
+  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
+  if (!$page) Abort("?cannot source $pagename");
+  foreach ($HTTPHeaders as $h) {
+    $h = preg_replace('!^Content-type:\\s+text/html!i',
+             'Content-type: text/plain', $h);
+    header($h);
+  }
+  echo @$page['text'];
+}
+
+## PmWikiAuth provides password-protection of pages using PHP sessions.
+## It is normally called from RetrieveAuthPage.  Since RetrieveAuthPage
+## can be called a lot within a single page execution (i.e., for every
+## page accessed), we cache the results of site passwords and 
+## GroupAttribute pages to be able to speed up subsequent calls.
+function PmWikiAuth($pagename, $level, $authprompt=true, $since=0) {
+  global $DefaultPasswords, $GroupAttributesFmt, $AllowPassword,
+    $AuthCascade, $FmtV, $AuthPromptFmt, $PageStartFmt, $PageEndFmt, 
+    $AuthId, $AuthList, $NoHTMLCache;
+  static $acache;
+  SDV($GroupAttributesFmt,'$Group/GroupAttributes');
+  SDV($AllowPassword,'nopass');
+  $page = ReadPage($pagename, $since);
+  if (!$page) { return false; }
+  if (!isset($acache)) 
+    SessionAuth($pagename, (@$_POST['authpw']) 
+                           ? array('authpw' => array($_POST['authpw'] => 1))
+                           : '');
+  if (@$AuthId) {
+    $AuthList["id:$AuthId"] = 1;
+    $AuthList["id:-$AuthId"] = -1;
+    $AuthList["id:*"] = 1;
+  }
+  $gn = FmtPageName($GroupAttributesFmt, $pagename);
+  if (!isset($acache[$gn])) {
+    $gp = ReadPage($gn, READPAGE_CURRENT);
+    foreach($DefaultPasswords as $k => $v) {
+      $x = array(2, array(), '');
+      $acache['@site'][$k] = IsAuthorized($v, 'site', $x);
+      $AuthList["@_site_$k"] = $acache['@site'][$k][0] ? 1 : 0;
+      $acache[$gn][$k] = IsAuthorized(@$gp["passwd$k"], 'group', 
+                                      $acache['@site'][$k]);
+    }
+  }
+  foreach($DefaultPasswords as $k => $v) 
+    list($page['=auth'][$k], $page['=passwd'][$k], $page['=pwsource'][$k]) =
+      IsAuthorized(@$page["passwd$k"], 'page', $acache[$gn][$k]);
+  foreach($AuthCascade as $k => $t) {
+    if ($page['=auth'][$k]+0 == 2) {
+      $page['=auth'][$k] = $page['=auth'][$t];
+      if ($page['=passwd'][$k] = $page['=passwd'][$t])         # assign
+        $page['=pwsource'][$k] = "cascade:$t";
+    }
+  }
+  if (@$page['=auth']['admin']) 
+    foreach($page['=auth'] as $lv=>$a) @$page['=auth'][$lv] = 3;
+  if (@$page['=passwd']['read']) $NoHTMLCache |= 2;
+  if ($level=='ALWAYS' || @$page['=auth'][$level]) return $page;
+  if (!$authprompt) return false;
+  $GLOBALS['AuthNeeded'] = (@$_POST['authpw']) 
+    ? $page['=pwsource'][$level] . ' ' . $level : '';
+  PCache($pagename, $page);
+  $postvars = '';
+  foreach($_POST as $k=>$v) {
+    if ($k == 'authpw' || $k == 'authid') continue;
+    $v = str_replace('$', '&#036;', 
+             htmlspecialchars(stripmagic($v), ENT_COMPAT));
+    $postvars .= "<input type='hidden' name='$k' value=\"$v\" />\n";
+  }
+  $FmtV['$PostVars'] = $postvars;
+  SDV($AuthPromptFmt,array(&$PageStartFmt,
+    "<p><b>$[Password required]</b></p>
+      <form name='authform' action='{$_SERVER['REQUEST_URI']}' method='post'>
+        $[Password]: <input tabindex='1' type='password' name='authpw' 
+          value='' />
+        <input type='submit' value='OK' />\$PostVars</form>
+        <script language='javascript' type='text/javascript'><!--
+          document.authform.authpw.focus() //--></script>", &$PageEndFmt));
+  PrintFmt($pagename,$AuthPromptFmt);
+  exit;
+}
+
+function IsAuthorized($chal, $source, &$from) {
+  global $AuthList, $AuthPw, $AllowPassword;
+  if (!$chal) return $from;
+  $auth = 0; 
+  $passwd = array();
+  foreach((array)$chal as $c) {
+    $x = '';
+    $pwchal = preg_split('/([, ]|\\w+:)/', $c, -1, PREG_SPLIT_DELIM_CAPTURE);
+    foreach($pwchal as $pw) {
+      if ($pw == ',' || $pw == '') continue;
+      else if ($pw == ' ') { $x = ''; continue; }
+      else if (substr($pw, -1, 1) == ':') { $x = $pw; continue; }
+      else if ($pw{0} != '@' && $x > '') $pw = $x . $pw;
+      if (!$pw) continue;
+      $passwd[] = $pw;
+      if ($auth < 0) continue;
+      if ($x || $pw{0} == '@') {
+        if (@$AuthList[$pw]) $auth = $AuthList[$pw];
+        continue;
+      }
+      if (crypt($AllowPassword, $pw) == $pw)           # nopass
+        { $auth=1; continue; }
+      foreach((array)$AuthPw as $pwresp)                       # password
+        if (crypt($pwresp, $pw) == $pw) { $auth=1; continue; }
+    }
+  }
+  if (!$passwd) return $from;
+  if ($auth < 0) $auth = 0;
+  return array($auth, $passwd, $source);
+}
+
+
+## SessionAuth works with PmWikiAuth to manage authorizations
+## as stored in sessions.  First, it can be used to set session
+## variables by calling it with an $auth argument.  It then
+## uses the authid, authpw, and authlist session variables
+## to set the corresponding values of $AuthId, $AuthPw, and $AuthList
+## as needed.
+function SessionAuth($pagename, $auth = NULL) {
+  global $AuthId, $AuthList, $AuthPw;
+  static $called;
+
+  @$called++;
+  if (!$auth && ($called > 1 || !@$_REQUEST[session_name()])) return;
+
+  $sid = session_id();
+  @session_start();
+  foreach((array)$auth as $k => $v)
+    if ($k) $_SESSION[$k] = (array)$v + (array)@$_SESSION[$k];
+
+  if (!isset($AuthId)) $AuthId = @end($_SESSION['authid']);
+  $AuthPw = array_keys((array)@$_SESSION['authpw']);
+  $AuthList = array_merge($AuthList, (array)@$_SESSION['authlist']);
+  if (!$sid) session_write_close();
+}
+
+
+function PasswdVar($pagename, $level) {
+  global $PCache, $PasswdVarAuth, $FmtV;
+  $page = $PCache[$pagename];
+  if (!isset($page['=passwd'][$level])) {
+    $page = RetrieveAuthPage($pagename, 'ALWAYS', false, READPAGE_CURRENT);
+    if ($page) PCache($pagename, $page);
+  }
+  SDV($PasswdVarAuth, 'attr');
+  if ($PasswdVarAuth && !@$page['=auth'][$PasswdVarAuth]) return '(protected)';
+  $pwsource = $page['=pwsource'][$level];
+  if (strncmp($pwsource, 'cascade:', 8) == 0) {
+    $FmtV['$PWCascade'] = substr($pwsource, 8);
+    return FmtPageName('$[(using $PWCascade password)]', $pagename);
+  }
+  $setting = implode(' ', preg_replace('/^(?!@|\\w+:).+$/', '****',
+                                       (array)$page['=passwd'][$level]));
+  if ($pwsource == 'group' || $pwsource == 'site') {
+    $FmtV['$PWSource'] = $pwsource;
+    $setting = FmtPageName('$[(set by $PWSource)] ', $pagename) . $setting;
+  }
+  return $setting;
+}
+
+
+function PrintAttrForm($pagename) {
+  global $PageAttributes, $PCache, $FmtV;
+  echo FmtPageName("<form action='\$PageUrl' method='post'>
+    <input type='hidden' name='action' value='postattr' />
+    <input type='hidden' name='n' value='\$FullName' />
+    <table>",$pagename);
+  $page = $PCache[$pagename];
+  foreach($PageAttributes as $attr=>$p) {
+    if (!$p) continue;
+    if (strncmp($attr, 'passwd', 6) == 0) {
+      $setting = PageVar($pagename, '$Passwd'.ucfirst(substr($attr, 6)));
+      $value = '';
+    } else { $setting = @$page[$attr]; $value = @$page[$attr]; }
+    $prompt = FmtPageName($p,$pagename);
+    echo "<tr><td>$prompt</td>
+      <td><input type='text' name='$attr' value='$value' /></td>
+      <td>$setting</td></tr>";
+  }
+  echo FmtPageName("</table><input type='submit' value='$[Save]' /></form>",
+         $pagename);
+}
+
+function HandleAttr($pagename, $auth = 'attr') {
+  global $PageAttrFmt,$PageStartFmt,$PageEndFmt;
+  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
+  if (!$page) { Abort("?unable to read $pagename"); }
+  PCache($pagename,$page);
+  XLSDV('en', array('EnterAttributes' =>
+    "Enter new attributes for this page below.  Leaving a field blank
+    will leave the attribute unchanged.  To clear an attribute, enter
+    'clear'."));
+  SDV($PageAttrFmt,"<div class='wikiattr'>
+    <h2 class='wikiaction'>$[{\$FullName} Attributes]</h2>
+    <p>$[EnterAttributes]</p></div>");
+  SDV($HandleAttrFmt,array(&$PageStartFmt,&$PageAttrFmt,
+    'function:PrintAttrForm',&$PageEndFmt));
+  PrintFmt($pagename,$HandleAttrFmt);
+}
+
+function HandlePostAttr($pagename, $auth = 'attr') {
+  global $PageAttributes, $EnablePostAttrClearSession;
+  Lock(2);
+  $page = RetrieveAuthPage($pagename, $auth, true);
+  if (!$page) { Abort("?unable to read $pagename"); }
+  foreach($PageAttributes as $attr=>$p) {
+    $v = stripmagic(@$_POST[$attr]);
+    if ($v == '') continue;
+    if ($v=='clear') unset($page[$attr]);
+    else if (strncmp($attr, 'passwd', 6) != 0) $page[$attr] = $v;
+    else {
+      $a = array();
+      preg_match_all('/"[^"]*"|\'[^\']*\'|\\S+/', $v, $match);
+      foreach($match[0] as $pw) 
+        $a[] = preg_match('/^(@|\\w+:)/', $pw) ? $pw 
+                   : crypt(preg_replace('/^([\'"])(.*)\\1$/', '$2', $pw));
+      if ($a) $page[$attr] = implode(' ',$a);
+    }
+  }
+  WritePage($pagename,$page);
+  Lock(0);
+  if (IsEnabled($EnablePostAttrClearSession, 1)) {
+    @session_start();
+    unset($_SESSION['authid']);
+    unset($_SESSION['authlist']);
+    $_SESSION['authpw'] = array();
+  }
+  Redirect($pagename);
+  exit;
+} 
+
+
+function HandleLogoutA($pagename, $auth = 'read') {
+  global $LogoutRedirectFmt, $LogoutCookies;
+  SDV($LogoutRedirectFmt, '$FullName');
+  SDV($LogoutCookies, array());
+  @session_start();
+  $_SESSION = array();
+  if (isset($_COOKIE[session_name()]))
+    setcookie(session_name(), '', time()-43200, '/');
+  foreach ($LogoutCookies as $c)
+    if (isset($_COOKIE[$c])) setcookie($c, '', time()-43200, '/');
+  session_destroy();
+  Redirect(FmtPageName($LogoutRedirectFmt, $pagename));
+}
+
+
+function HandleLoginA($pagename, $auth = 'login') {
+  global $AuthId, $DefaultPasswords;
+  unset($DefaultPasswords['admin']);
+  $prompt = @(!$_POST['authpw'] || ($AuthId != $_POST['authid']));
+  $page = RetrieveAuthPage($pagename, $auth, $prompt, READPAGE_CURRENT);
+  Redirect($pagename);
+}
+


Property changes on: trunk/oggdsf/website/pmwiki.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/oggdsf/website/pub/guiedit/README
===================================================================
--- trunk/oggdsf/website/pub/guiedit/README	                        (rev 0)
+++ trunk/oggdsf/website/pub/guiedit/README	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,6 @@
+The images in this directory are part of the GUIEdit module
+for PmWiki, Copyright 2005-2006 Patrick R. Michaud (pmichaud at pobox.com)
+These images are part of PmWiki; you can redistribute it and/or modify
+them under the terms of the GNU General Public License as published
+by the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.  See pmwiki.php for full details.

Added: trunk/oggdsf/website/pub/guiedit/attach.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/attach.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/big.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/big.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/blank.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/blank.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/center.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/center.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/em.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/em.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/extlink.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/extlink.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/guiedit.js
===================================================================
--- trunk/oggdsf/website/pub/guiedit/guiedit.js	                        (rev 0)
+++ trunk/oggdsf/website/pub/guiedit/guiedit.js	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,62 @@
+/*  Copyright 2004 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file provides Javascript functions to support WYSIWYG-style
+    editing.  The concepts are borrowed from the editor used in Wikipedia,
+    but the code has been rewritten from scratch to integrate better with
+    PHP and PmWiki's codebase.  
+*/
+
+function insButton(mopen, mclose, mtext, mlabel, mkey) {
+  if (mkey > '') { mkey = 'accesskey="' + mkey + '" ' }
+  document.write("<a " + mkey + "href=\"javascript:insMarkup('"
+    + mopen + "','"
+    + mclose + "','"
+    + mtext + "');\">"
+    + mlabel + "</a>");
+}
+
+function insMarkup(mopen, mclose, mtext) {
+  var tarea = document.getElementById('text');
+  if (tarea.setSelectionRange > '') {
+    var p0 = tarea.selectionStart;
+    var p1 = tarea.selectionEnd;
+    var top = tarea.scrollTop;
+    var str = mtext;
+    var cur0 = p0 + mopen.length;
+    var cur1 = p0 + mopen.length + str.length;
+    while (p1 > p0 && tarea.value.substring(p1-1, p1) == ' ') p1--; 
+    if (p1 > p0) {
+      str = tarea.value.substring(p0, p1);
+      cur0 = p0 + mopen.length + str.length + mclose.length;
+      cur1 = cur0;
+    }
+    tarea.value = tarea.value.substring(0,p0)
+      + mopen + str + mclose
+      + tarea.value.substring(p1);
+    tarea.focus();
+    tarea.selectionStart = cur0;
+    tarea.selectionEnd = cur1;
+    tarea.scrollTop = top;
+  } else if (document.selection) {
+    var str = document.selection.createRange().text;
+    tarea.focus();
+    range = document.selection.createRange()
+    if (str == '') {
+      range.text = mopen + mtext + mclose;
+      range.moveStart('character', -mclose.length - mtext.length );
+      range.moveEnd('character', -mclose.length );
+    } else {
+      if (str.charAt(str.length - 1) == " ") {
+        mclose = mclose + " ";
+        str = str.substr(0, str.length - 1);
+      }
+      range.text = mopen + str + mclose;
+    }
+    range.select();
+  } else { tarea.value += mopen + mtext + mclose; }
+  return;
+}

Added: trunk/oggdsf/website/pub/guiedit/h.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/h.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/h1.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/h1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/h2.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/h2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/h3.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/h3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/hr.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/hr.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/indent.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/indent.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/left.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/left.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/math.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/math.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/ol.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/ol.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/outdent.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/outdent.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/pagelink.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/pagelink.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/preview.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/preview.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/right.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/right.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/save.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/save.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/small.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/small.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/spellcheck.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/spellcheck.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/strong.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/strong.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/sub.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/sub.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/sup.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/sup.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/table.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/table.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/ul.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/ul.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/guiedit/underline.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/guiedit/underline.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/skins/barthelme/barthelme.css
===================================================================
--- trunk/oggdsf/website/pub/skins/barthelme/barthelme.css	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/barthelme/barthelme.css	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,234 @@
+/*  
+NAME: barthelme.css
+AUTHOR: Chi Shang Cheng <chengsta at chengsta com>
+CREATED: 2007-01-07
+DESCRIPTION: This is a port of the Barthelme Wordpress theme for PmWiki.
+ORIGINAL AUTHOR: Scott Allan Wallick
+ORIGINAL AUTHOR URI: http://scottwallick.com/
+*/
+/*
+"Barthelme" (C) 2006 Scott Allan Wallick - http://scottwallick.com/ - and distributed under the terms of the GNU General Public License v2
+*/
+html, body {
+	margin: 0;
+	padding: 0;
+}
+body {
+	background-color: #fff;
+	color: #222;
+	line-height: 150%;
+}
+/* GLOBAL ELEMENT COMBINATIONS */
+div#sidebar ul li h2 {
+	background: #fff;
+	color: #888;
+}
+div#content blockquote, div#content h1, div#content h2, div#content h4,div#content h5, div#content h6, div#sidebar ul li p {
+	background: #fff;
+	color: #444;
+}
+/* HEADER STUFF */
+div#header {
+	background: #bac8da url(./images/header.png) repeat-x top center;
+	color: #f5f5f5;
+	margin: 3em 0;
+	padding: 1.2em 0 1.2em 3em;
+}
+h1#title {
+	font-size: 2.2em;
+	font-weight: normal;
+	line-height: normal;
+	margin: 0;
+}
+p#description {
+	font-size: 1.3em;
+	margin: 0;
+}
+/* WRAPPER - CONTAINER - CONTENT STUFF */
+div#container {
+	float: right;
+	width: 100%;
+	margin: 0 0 0 -20em;
+}
+div.narrowcolumn {
+	margin: 0 0 0 19.5em;
+	padding: 0 2% 0 1%;
+}
+div.widecolumn {
+	margin: 0 0 0 19em;
+	padding: 0 4% 0 2%;
+}
+div#content h2 {
+	font-size: 1.7em;
+	font-weight: normal;
+	margin: 0.3em 0 1em 0;
+}
+div#content h3 {
+	font-size: 1.1em;
+	color: #888;
+	margin: 0;
+}
+div#content p {
+	line-height: 150%;
+	margin: 1em 0;
+}
+div#content ul li { list-style: square; }
+div#content ul li, div#content ol li { line-height: 150%; }
+div#content blockquote {
+	border-left: 1em solid #cfd5dd;
+	font-size: 0.9em;
+	padding-left: 1em;
+}
+div#content hr {
+	border: 0;
+	border-bottom: 1px solid #888;
+	margin: 1em 0 1em 0;
+}
+/* SIDEBAR STUFF */
+div#sidebar {
+	float: left;
+	width: 16em;
+}
+div#sidebar ul {
+	margin: 0 1.5em 0 3em;
+	padding: 0;
+}
+div#sidebar ul li {
+	font-size: 1em;
+	line-height: 175%;
+	list-style: none;
+	margin: 0 0 1.5em 0;
+	padding: 0;
+}
+div#sidebar ul li h2 {
+	font-size: 1em;
+	margin: 0;
+	text-transform: uppercase;
+}
+div#sidebar ul li, div#sidebar ul li ul, div#sidebar ul li ul li {
+	margin: 0;
+	padding: 0;
+}
+div#sidebar ul li ul li ul li {
+	font-size: 0.9em;
+	margin: 0 0 0 1em;
+}
+/* FOOTER STUFF */
+div#footer {
+	background: #fff;
+	clear: both;
+	color: #888;
+	padding: 5em 0 1em 3em;
+}
+div#footer p {
+	font-size: 0.9em;
+	margin: 0;
+}
+/* GLOBAL ALIGNMENT AND MISC ELEMENTS */
+.alignleft { float: left; }
+.alignright  { float: right; }
+abbr, acronym {
+	border-bottom: 1px dotted #546188;
+	cursor: help;
+}
+code, pre {
+	font: 1em/normal "courier new", courier, monospace;
+}
+.clearer {
+	clear: both;
+	height: 0;
+}
+/* IMAGE ELEMENTS, INCLUDING LINKS */
+img { border: none; }
+div#content img.center {
+	display: block;
+	margin: 0.4em auto;
+}
+div#content img.alignright { margin: 0.4em 0 0.4em 1.1em }
+div#content img.alignleft { margin: 0.4em 1.1em 0.4em 0; }
+/* FORMS FOR COMMENTS AND SEARCH / INCLUDES STYLES FOR THE WP-CONTACTFORM PLUGIN */
+div.formcontainer p{
+	margin: 0.5em 0 1em 0;
+}
+form {
+	margin: 0.3em 0 0 0;
+	padding: 0;
+}
+input#s {
+	margin: 0 0 0.4em 0;
+	padding: 0.2em;
+	width: 70%;
+}
+textarea {
+	/* height: 13em; */
+	overflow: auto;
+	float: left;
+	width: 100%;
+	margin: 0 0 0.5em 0;
+}
+input#searchsubmit, input#submit, input.e_button { border: 1px outset #999; }
+input#s, input#summary, input#author { width: 66%; }
+input#s, input#summary, input#author, textarea {
+	border: 1px inset #999;
+	padding: 0.2em;
+}
+div.formcontainer {
+	font-size: 1em;
+	margin: 0 0 3em 0;
+	width: 100%;
+}
+span.formright, span.formleft {
+	display: inline;
+	float: left;
+	margin: 0 0 0.5em 0;
+}
+span.formleft {
+	clear: both;
+	text-align: right;
+	width: 15%;
+	margin: 0 2% 0 0;
+}
+span.formright { width: 80%; }
+/* LINK STYLES */
+div#header a, div#header a:active, div#header a:link, div#header a:visited {
+	background: transparent;
+	color: #fff;
+	text-decoration: none;
+}
+div#header a:hover {
+	background: transparent;
+	color: #e5e5e5;
+}
+div#content a, div#content a:active, div#content a:link, div#content a:visited {
+	color: #546188;
+	background: transparent;
+}
+div#content a:hover {
+	color: #000;
+	background: transparent;
+}
+div#sidebar a, div#sidebar a:active, div#sidebar a:link, div#sidebar a:visited {
+	background: #fff;
+	color: #999;
+	text-decoration: none;
+}
+div#sidebar a:hover {
+	background: #fff;
+	color: #2f4e6f;
+	text-decoration: underline;
+}
+div#footer a, div#footer a:active, div#footer a:link, div#footer a:visited {
+	background: #fff;
+	color: #888;
+}
+div#footer a:hover {
+	background: #fff;
+	color: #222;
+	text-decoration: none;
+}
+
+.sidehead {
+  font-size:11pt; font-weight:bold; font-style:normal;
+}
+.sidehead a
+  { color:#505050; font-weight:bold; font-style:normal; }

Added: trunk/oggdsf/website/pub/skins/barthelme/barthelme.php
===================================================================
--- trunk/oggdsf/website/pub/skins/barthelme/barthelme.php	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/barthelme/barthelme.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,100 @@
+<?php if (!defined('PmWiki')) exit();
+
+/************************************************************************************
+ * FUNCTION DEFAULTS
+ ************************************************************************************/
+
+global $barthelme_bodyfontsize;
+global $barthelme_bodyfontfamily;
+global $barthelme_headerfontfamily;
+global $barthelme_postentryalignment;
+global $barthelme_wrapperwidth;
+global $barthelme_sidebartext;
+
+global $barthelme_sidebar_visible, $EnableMenuBar;
+
+if ($EnableMenuBar != 1) {
+	$barthelme_sidebar_visible = "style=\"display: none;\"";
+}
+
+$barthelme_sidebartext_visible = FALSE;
+
+/************************************************************************************
+ * FUNCTION CALLS
+ ************************************************************************************/
+
+function barthelme_bodyfontsize() {
+	if (isset($barthelme_bodyfontsize)) {
+		print 'body { font-size: ';
+		print $barthelme_bodyfontsize;
+		print "; }\n";
+	}
+	else {
+		print 'body { font-size: ';
+		print '75%';
+		print "; }\n";
+	}
+}
+
+function barthelme_bodyfontfamily() {
+	if (isset($barthelme_bodyfontfamily)) {
+		print 'body { font-family: ';
+		print $barthelme_bodyfontfamily;
+		print "; }\n";
+	}
+	else {
+		print 'body { font-family: ';
+		print 'arial, helvetica, sans-serif';
+		print "; }\n";
+	}
+}	
+
+function barthelme_headerfontfamily() {
+	if (isset($barthelme_headerfontfamily)) {
+		print 'div.post-header, h2.post-title, p.post-date-single, h2.post-title-single, div.post-entry h1, div.post-entry h2, div.post-entry h3, div.post-entry h4, div.post-entry h5, div.post-entry h6, div.post-entry blockquote, div.post-footer, h3#comment-count, h4#comment-header, div#comments ol li p.comment-metadata, h4#respond { font-family: ';
+		print $barthelme_headerfontfamily;
+		print "; }\n";
+	}
+	else {
+		print 'div#content h1, div#content h2 { font-family: ';
+		print 'georgia, times, serif';
+		print "; }\n";
+	}	
+}
+
+function barthelme_postentryalignment() {
+	if (isset($barthelme_postentryalignment)) {
+		print 'div#content p { text-align: ';
+		print $barthelme_postentryalignment;
+		print "; }\n";
+	}
+	else {
+		print 'div#content p { text-align: ';
+		print 'left';
+		print "; }\n";
+	}
+	
+}
+
+function barthelme_wrapperwidth() {
+	if (isset($barthelme_wrapperwidth)) {
+		print 'div#wrapper { width: ';
+		print $barthelme_wrapperwidth;
+		print "; }\n";
+	}
+	else {
+		print 'div#wrapper { width: ';
+		print '90%';
+		print "; }\n";
+	}
+}
+
+function barthelme_sidebartext() {
+	if (empty($barthelme_sidebartext) && $barthelme_sidebartext_visible) {
+		print '<li><h2>About</h2><p>Lorem ipusm text here can be customized in the <em>Presentation > blog.txt Themes Options</em> menu. You can also select within the options to exclude this section completely. <em>Most</em> XHTML <strong>tags</strong> will <span style="text-decoration:underline;">work</span>.</p></li>';
+	}
+}
+
+function barthelme_copyrightyear() {
+	print date("Y");
+}

Added: trunk/oggdsf/website/pub/skins/barthelme/barthelme.tmpl
===================================================================
--- trunk/oggdsf/website/pub/skins/barthelme/barthelme.tmpl	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/barthelme/barthelme.tmpl	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<head profile='http://gmpg.org/xfn/11'>
+	<title>$WikiTitle :: {$Group} / {$Title} $ActionTitle</title>
+	<meta http-equiv='Content-Style-Type' content='text/css' />
+  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and encoders.">
+  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
+	<link rel='stylesheet' title='Barthelme' href='$SkinDirUrl/barthelme.css' type='text/css' media='all' />
+	<link rel='start' href='{$ScriptUrl}' title='$WikiTitle' />
+	<style type='text/css' media='all'>
+		<!--function:barthelme_bodyfontsize-->
+		<!--function:barthelme_bodyfontfamily-->
+		<!--function:barthelme_headerfontfamily-->
+		<!--function:barthelme_postentryalignment-->
+		<!--function:barthelme_wrapperwidth-->
+	</style>
+	<!--HTMLHeader-->
+</head>
+<body>
+<div id='wrapper'>
+<!--PageHeaderFmt-->
+	<div id='header' onclick='location.href="{$ScriptUrl}";' style='cursor:pointer;'>
+	  <div id='logo' style='float:right;'><img src='$PageLogoUrl'/></div>
+		<h1 id='title'><a href='{$ScriptUrl}' title='$WikiTitle'>$WikiTitle</a></h1>
+		<p id='description'><a href='{$ScriptUrl}/{$Group}'>{$Group}</a> / <a href='{$ScriptUrl}/{$Group}.{$Title}'>{$Title}</a></p>
+	</div>
+<!--/PageHeaderFmt-->
+
+<div id='container'>
+	<div id='content' class='widecolumn'>
+	<!--PageText-->
+	</div>
+</div>
+
+<!--PageLeftFmt-->
+<div id='sidebar' $barthelme_sidebar_visible>
+	<ul>
+		<!--function:barthelme_sidebartext-->
+		<li>
+			<!--wiki:Site.SideBar-->
+		</li>
+		<li id='search'>
+			<h2><label for='s'>Search</label></h2>
+			<form id='searchform' action='{$ScriptUrl}'>
+			<div>
+				<input type='hidden' name='n' value='{$FullName}' />
+    				<input type='hidden' name='action' value='search' />
+				<input id='s' name='q' type='text' value='' tabindex='1' size='10' />
+				<br />
+				<input id='searchsubmit' name='searchsubmit' type='submit' value='Find' tabindex='2' />
+			</div>
+			</form><br/>
+		</li>
+		<li>
+			<h2>Actions</h2>
+			<!--wiki:Site.PageActions-->
+		</li>
+	</ul>
+</div>
+<!--/PageLeftFmt-->
+
+	<div id='footer'>
+		<p>
+			&copy; <!--function:barthelme_copyrightyear--> Administrator
+			|
+			Powered by <a href='http://www.pmwiki.com/' title='PmWiki'>PmWiki</a>
+			|
+			<a href='http://www.plaintxt.org/themes/barthelme/' title='Barthelme for WordPress' rel='follow'>Barthelme</a> theme by <a href='http://scottwallick.com/' title='scottwallick.com' rel='follow'>Scott</a> and ported by <a href='http://cscheng.info/blog'>Chi Shang</a>
+			|
+			Valid <a href='http://validator.w3.org/check?uri={$ScriptUrl}&amp;outline=1&amp;verbose=1' title='Valid XHTML 1.0 Strict' rel='nofollow'>XHTML</a> &amp; <a href='http://jigsaw.w3.org/css-validator/validator?uri=$SkinDirUrl/barthelme.css&amp;profile=css2&amp;warning=no' title='Valid CSS' rel='nofollow'>CSS</a>
+		</p>
+	</div>
+
+</div>
+
+<!-- The 'Barthelme' theme copyright (c) 2006 Scott Allan Wallick - http://www.plaintxt.org/themes/ -->
+
+</body>
+</html>

Added: trunk/oggdsf/website/pub/skins/barthelme/images/bk.png
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/skins/barthelme/images/bk.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/skins/barthelme/images/feed.png
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/skins/barthelme/images/feed.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/skins/barthelme/images/header.png
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/skins/barthelme/images/header.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/skins/pmwiki/README
===================================================================
--- trunk/oggdsf/website/pub/skins/pmwiki/README	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/pmwiki/README	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,22 @@
+This directory contains the files to display pages in PmWiki according
+to the default layout.  
+
+==>Don't edit these files directly, as you may lose your edits the
+next time you upgrade PmWiki!
+
+Instead, copy the files to another directory in pub/skins/ and edit
+them there.  You can then configure PmWiki to use your modified layout
+files by setting the $Skin variable in your local/config.php.  For 
+example, if you copy your custom skin to pub/skins/custom, then you 
+would set
+   $Skin = 'custom';
+in local/config.php.
+
+The files in this directory:
+    pmwiki.tmpl   -- the default template for page layouts
+    pmwiki.css    -- PmWiki's default css
+    pmwiki-32.gif -- the PmWiki logo
+
+If you just want to change the logo, you can do it by setting $PageLogoUrl
+to the url location of your logo.
+

Added: trunk/oggdsf/website/pub/skins/pmwiki/pmwiki-32.gif
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/pub/skins/pmwiki/pmwiki-32.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/pub/skins/pmwiki/pmwiki.css
===================================================================
--- trunk/oggdsf/website/pub/skins/pmwiki/pmwiki.css	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/pmwiki/pmwiki.css	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,102 @@
+/***********************************************************************
+** pmwiki.css
+**  Copyright 2004-2006 Patrick R. Michaud (pmichaud at pobox.com)
+**  Copyright 2006 Hagan Fox
+**  This file is part of PmWiki; you can redistribute it and/or modify
+**  it under the terms of the GNU General Public License as published
+**  by the Free Software Foundation; either version 2 of the License, or
+**  (at your option) any later version.  See pmwiki.php for full details.
+***********************************************************************/
+
+/* This sets the overall frame for the site */
+body {
+  margin:0px; background-color:#f7f7f7; 
+  font-family:Arial,Helvetica,sans-serif; font-size:11pt;
+}
+
+/* These control the fixed-width text elements of the page */
+textarea, pre, code { font-size:0.9em; }
+pre, code { font-family:'Lucida Console','Andale Mono','Courier New',Courier,monospace; }
+pre { line-height:1.2em; }
+pre code, code code, pre pre { font-size:100%; }
+
+/* These primarily adjust the size and spacing of heading elements,
+** most browsers have atrocious defaults for these. */
+h1, h2, h3, h4, h5, h6 { margin-top:1.0em; margin-bottom:0.6em; }
+h1, h2, h3, h6 { font-weight:normal; }
+h4, h5 { font-weight:bold; }
+h1 code, h2 code, h3 code, h4 code { font-size:1em; }
+h1 { font-size:1.8em; }
+h2 { font-size:1.44em; }
+h3 { font-size:1.22em; }
+h4 { font-size:1.07em; }
+h5 { font-size:1.0em; }
+h6 { font-size:1.0em; }
+
+/* The #wikilogo element is the logo from $PageLogoFmt */
+#wikilogo { margin-top:4px; padding:6px; border-bottom:1px #cccccc solid; }
+
+/* This controls the rest of the heading (primarily the search box) */
+#wikihead { 
+  position:absolute; right:10px; top:10px; 
+  font-family:Verdana,sans-serif; font-size:85%; 
+}
+#wikihead input { font-size:85%; } 
+
+/* These are for the left-sidebar. */
+#wikileft { 
+  width:155px; 
+  padding:6px; border-right:1px #cccccc solid; 
+  line-height:1.33em;
+  font-size:9.4pt; font-family:Verdana,sans-serif;
+}
+#wikileft .vspace { margin-top:1.125em; }
+#wikileft a { text-decoration:none; color:black; }
+#wikileft a:hover { text-decoration:underline; color:blue; }
+#wikileft ul { list-style:none; padding:0px; margin:0px; }
+#wikileft li { margin:0px; padding-left: 6px; }
+.sidehead {
+  margin:0px; padding:4px 2px 2px 2px;
+  font-size:11pt; font-weight:bold; font-style:normal; 
+}
+.sidehead a 
+  { color:#505050; font-weight:bold; font-style:normal; }
+
+/* These affect the main content area. */
+#wikibody { 
+  padding:0px 10px 10px 10px; background-color:white; 
+  font-size:11pt; 
+}
+#wikicmds { 
+  float:right; white-space:nowrap; 
+  font-family:Verdana,sans-serif; font-size:80%; 
+}
+#wikicmds ul { list-style:none; margin:0px; padding:0px; }
+#wikicmds li { display:inline; margin:0px 5px; }
+#wikicmds li a { text-decoration:none; color:black; border:none; }
+#wikicmds li a.createlink { display:none; }
+#wikicmds li a:hover { text-decoration:underline; color:blue; }
+.pagegroup { margin-top:8px; margin-bottom:2px; }
+.pagetitle { line-height:1em; margin:0px; font-size:1.6em; font-weight:normal; }
+.wikiaction { margin-top:4px; margin-bottom:4px; }
+#wikitext { margin-top:12px; line-height:1.33em; }
+#wikitext table { font-size:100%; line-height:1.33em; } /* For MSIE 5.5 */
+
+/* These are for the edit form. */
+#wikiedit form { margin:0px; width:100%; }
+#wikiedit textarea { width:100%; }
+.wikimessage { margin-top:4px; margin-bottom:4px; font-style:italic; }
+
+/* These affect the lines at the very bottom. */
+#wikifoot { 
+  padding-left:178px; padding-bottom:4px; border-top:1px #cccccc solid;
+  font-family:Verdana,sans-serif; font-size:80%; 
+}
+
+/* These affect the printed appearance of the web view (not the separate
+** print view) of pages.  The sidebar and action links aren't printed. */
+ at media print {
+  body { width:auto; margin:0px; padding:0.5em; }
+  #wikihead, #wikileft, #wikicmds, .footnav { display:none; }
+  #wikifoot { padding:2px; }
+}

Added: trunk/oggdsf/website/pub/skins/pmwiki/pmwiki.tmpl
===================================================================
--- trunk/oggdsf/website/pub/skins/pmwiki/pmwiki.tmpl	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/pmwiki/pmwiki.tmpl	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,52 @@
+<!DOCTYPE html 
+    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>$WikiTitle | {$Group} / {$Title} $ActionTitle</title>
+  <meta http-equiv='Content-Style-Type' content='text/css' />
+  <link rel='stylesheet' href='$SkinDirUrl/pmwiki.css' type='text/css' />
+  <!--HTMLHeader-->
+</head>
+<body>
+<!--PageHeaderFmt-->
+  <div id='wikilogo'><a href='{$ScriptUrl}'><img src='$PageLogoUrl'
+    alt='$WikiTitle' border='0' /></a></div>
+  <div id='wikihead'>
+  <form action='{$ScriptUrl}'>
+    <span class='headnav'><a href='{$ScriptUrl}/$[{$Group}/RecentChanges]'
+      accesskey='$[ak_recentchanges]'>$[Recent Changes]</a> -</span>
+    <input type='hidden' name='n' value='{$FullName}' />
+    <input type='hidden' name='action' value='search' />
+    <a href='{$ScriptUrl}/$[{$SiteGroup}/Search]'>$[Search]</a>:
+    <input type='text' name='q' value='' class='inputbox searchbox' />
+    <input type='submit' class='inputbutton searchbutton'
+      value='$[Go]' /></form></div>
+<!--/PageHeaderFmt-->
+  <table id='wikimid' width='100%' cellspacing='0' cellpadding='0'><tr>
+<!--PageLeftFmt-->
+      <td id='wikileft' valign='top'>
+        <!--wiki:{$Group}.SideBar {$SiteGroup}.SideBar--></td>
+<!--/PageLeftFmt-->
+      <td id='wikibody' valign='top'>
+<!--PageActionFmt-->
+        <div id='wikicmds'><!--wiki:{$Group}.PageActions {$SiteGroup}.PageActions--></div>
+<!--PageTitleFmt-->
+        <div id='wikititle'>
+          <div class='pagegroup'><a href='{$ScriptUrl}/{$Group}'>{$Group}</a> /</div>
+          <h1 class='pagetitle'>{$Title}</h1></div>
+<!--PageText-->
+      </td>
+    </tr></table>
+<!--PageFooterFmt-->
+  <div id='wikifoot'>
+    <div class='footnav'>
+      <a rel="nofollow" href='{$PageUrl}?action=edit'>$[Edit]</a> -
+      <a rel="nofollow" href='{$PageUrl}?action=diff'>$[History]</a> -
+      <a rel="nofollow" href='{$PageUrl}?action=print' target='_blank'>$[Print]</a> -
+      <a href='{$ScriptUrl}/$[{$Group}/RecentChanges]'>$[Recent Changes]</a> -
+      <a href='{$ScriptUrl}/$[{$SiteGroup}/Search]'>$[Search]</a></div>
+    <div class='lastmod'>$[Page last modified on {$LastModified}]</div></div>
+<!--HTMLFooter-->
+</body>
+</html>

Added: trunk/oggdsf/website/pub/skins/print/README
===================================================================
--- trunk/oggdsf/website/pub/skins/print/README	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/print/README	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,20 @@
+This directory contains the files to print pages in PmWiki for ?action=print.
+This is a template just like any other layout skin, except that for
+?action=print PmWiki looks for print.tmpl instead of screen.tmpl.
+
+==>Don't edit these files directly, as you may lose your edits the
+next time you upgrade PmWiki!
+
+Instead, copy the files to another directory in pub/skins/ and edit
+them there.  You can then configure PmWiki to use your modified layout
+files by setting $ActionSkin['print'] to the name of your new skin.
+For example, if you copy your custom print skin to pub/skins/custom, 
+then you would set
+   $ActionSkin['print'] = 'custom';
+in local/config.php.
+
+The files in this directory:
+    print.tmpl    -- the default template for ?action=print
+    print.css     -- the print template's css
+    print.php     -- loaded when the skin is loaded, it redefines the link
+                     formats to a form better suited for printing

Added: trunk/oggdsf/website/pub/skins/print/print.css
===================================================================
--- trunk/oggdsf/website/pub/skins/print/print.css	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/print/print.css	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,50 @@
+/***********************************************************************
+** print.css
+**  Copyright 2004 Patrick R. Michaud (pmichaud at pobox.com)
+**  This file is part of PmWiki; you can redistribute it and/or modify
+**  it under the terms of the GNU General Public License as published
+**  by the Free Software Foundation; either version 2 of the License, or
+**  (at your option) any later version.  See pmwiki.php for full details.
+***********************************************************************/
+
+/***********************************************************************
+** These settings are part of the ?action=print skin.  If you want
+** to change these settings, create a new print template and set
+** $PrintTemplateFmt in the config.php file to point to your new 
+** printing skin.
+***********************************************************************/
+
+body { 
+  width:auto;
+  background-color:white;
+  color:black;
+  font-family:serif;
+}
+
+#printhead { 
+  font-family:sans-serif;
+  border-top:3px solid #a0a0a0; 
+  border-bottom:5px solid #a0a0a0; 
+  margin-bottom:1em; 
+}
+#printhead h3 { margin-top:0px; } 
+#printhead h1 { margin-bottom:0px; }
+
+#printtitle { 
+}
+
+#printfoot {
+  clear:both;
+  margin-top:1em; 
+  border-top:5px solid #a0a0a0; 
+  font-size:smaller; 
+}
+
+  
+a:link { color:#444444; font-weight:bold; text-decoration:none; }
+a:visited { color:#444444; font-weight:bold; text-decoration:none; }
+a.wikilink:hover { color: #444444; text-decoration:underline; }
+a.createlink { color:#444444; }
+a.createlink:visited { color:#444444; }
+a.createlink:hover { color:#ff2222; }
+

Added: trunk/oggdsf/website/pub/skins/print/print.php
===================================================================
--- trunk/oggdsf/website/pub/skins/print/print.php	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/print/print.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,29 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script defines additional settings needed when the 'print'
+    skin is loaded (usually in response to ?action=print, as controlled
+    by the $ActionSkin['print'] setting.  See scripts/skins.php for
+    more details.
+
+    The changes made are:
+      - Redefines the standard layout to a format suitable for printing
+      - Redefines internal links to keep ?action=print
+      - Changes the display of URL and mailto: links
+      - Uses GroupPrintHeader and GroupPrintFooter pages instead
+        of GroupHeader and GroupFooter
+*/
+
+global $LinkPageExistsFmt, $GroupPrintHeaderFmt, 
+  $GroupPrintFooterFmt, $GroupHeaderFmt, $GroupFooterFmt;
+
+$LinkPageExistsFmt = "<a class='wikilink' href='\$PageUrl?action=print'>\$LinkText</a>";
+SDV($GroupPrintHeaderFmt,'(:include $Group.GroupPrintHeader:)(:nl:)');
+SDV($GroupPrintFooterFmt,'(:nl:)(:include $Group.GroupPrintFooter:)');
+$GroupHeaderFmt = $GroupPrintHeaderFmt;
+$GroupFooterFmt = $GroupPrintFooterFmt;
+

Added: trunk/oggdsf/website/pub/skins/print/print.tmpl
===================================================================
--- trunk/oggdsf/website/pub/skins/print/print.tmpl	                        (rev 0)
+++ trunk/oggdsf/website/pub/skins/print/print.tmpl	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,20 @@
+<!DOCTYPE html 
+    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head>
+  <title>$WikiTitle | {$Group} / {$Title}</title>
+  <link rel='stylesheet' href='$SkinDirUrl/print.css' type='text/css' />
+  <!--HTMLHeader-->
+</head>
+<body>
+  <div id='printhead'>
+    <h3>$[From $WikiTitle]</h3>
+    <h1 class='pagename'><a href='$ScriptUrl/{$Group}'>{$Group}: {$Title}</a></h1>
+  </div>
+<!--PageText-->
+  <div id='printfoot'>
+    <div class='from'>$[Retrieved from {$PageUrl}]</div>
+    <div class='lastmod'>$[Page last modified on {$LastModified}]</div></div>
+<!--HTMLFooter-->
+</body>
+</html>

Added: trunk/oggdsf/website/scripts/.htaccess
===================================================================
--- trunk/oggdsf/website/scripts/.htaccess	                        (rev 0)
+++ trunk/oggdsf/website/scripts/.htaccess	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+# This file is cookbook/.htaccess -- the default distribution contains this
+# file to prevent cookbook/ scripts from being accessed directly by browsers
+# (this is a potential, albeit very unlikely, security hole).
+#
+# If you alter or replace this file, it will likely be overwritten when
+# you upgrade from one version of PmWiki to another.  Be sure to save
+# a copy of your alterations in another location so you can restore them,
+# and you might try changing this file to be read-only to prevent a PmWiki
+# upgrade from overwriting your altered version.
+
+Order Deny,Allow
+Deny from all

Added: trunk/oggdsf/website/scripts/author.php
===================================================================
--- trunk/oggdsf/website/scripts/author.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/author.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,55 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script handles author tracking.
+*/
+
+SDV($AuthorNameChars, "- '\\w\\x80-\\xff");
+SDV($AuthorCookie, $CookiePrefix.'author');
+SDV($AuthorCookieExpires,$Now+60*60*24*30);
+SDV($AuthorCookieDir,'/');
+SDV($AuthorGroup,'Profiles');
+SDV($AuthorRequiredFmt,
+  "<h3 class='wikimessage'>$[An author name is required.]</h3>");
+Markup('[[~','<links','/\\[\\[~(.*?)\\]\\]/',"[[$AuthorGroup/$1]]");
+
+$LogoutCookies[] = $AuthorCookie;
+
+if (!isset($Author)) {
+  if (isset($_POST['author'])) {
+    $x = stripmagic($_POST['author']);
+    setcookie($AuthorCookie, $x, $AuthorCookieExpires, $AuthorCookieDir);
+  } elseif (@$_COOKIE[$AuthorCookie]) {
+    $x = stripmagic(@$_COOKIE[$AuthorCookie]);
+  } else $x = @$AuthId;
+  $Author = htmlspecialchars(preg_replace("/[^$AuthorNameChars]/", '', $x), 
+                ENT_QUOTES);
+}
+if (!isset($AuthorPage)) $AuthorPage = 
+    FmtPageName('$AuthorGroup/$Name', MakePageName($pagename, $Author));
+SDV($AuthorLink,($Author) ? "[[~$Author]]" : '?');
+
+if (IsEnabled($EnableAuthorSignature,1)) {
+  SDVA($ROSPatterns, array(
+    '/(?<!~)~~~~(?!~)/e' 
+      => "FmtPageName('[[~\$Author]] \$CurrentTime', \$pagename)",
+    '/(?<!~)~~~(?!~)/e' 
+      => "FmtPageName('[[~\$Author]]', \$pagename)"));
+  Markup('~~~~','<links','/(?<!~)~~~~(?!~)/',"[[~$Author]] $CurrentTime");
+  Markup('~~~','>~~~~','/(?<!~)~~~(?!~)/',"[[~$Author]]");
+}
+if (IsEnabled($EnablePostAuthorRequired,0))
+  array_unshift($EditFunctions,'RequireAuthor');
+
+## RequireAuthor forces an author to enter a name before posting.
+function RequireAuthor($pagename, &$page, &$new) {
+  global $Author, $MessagesFmt, $AuthorRequiredFmt, $EnablePost;
+  if (!$Author) {
+    $MessagesFmt[] = $AuthorRequiredFmt;
+    $EnablePost = 0;
+  }
+}

Added: trunk/oggdsf/website/scripts/authuser.php
===================================================================
--- trunk/oggdsf/website/scripts/authuser.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/authuser.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,210 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2005-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    The APR compatible MD5 encryption algorithm in _crypt() below is 
+    based on code Copyright 2005 by D. Faure and the File::Passwd
+    PEAR library module by Mike Wallner <mike at php.net>.
+
+    This script enables simple authentication based on username and 
+    password combinations.  At present this script can authenticate
+    from passwords held in arrays or in .htpasswd-formatted files,
+    but eventually it will support authentication via sources such
+    as LDAP and Active Directory.
+
+    To configure a .htpasswd-formatted file for authentication, do
+        $AuthUser['htpasswd'] = '/path/to/.htpasswd';
+    prior to including this script.  
+
+    Individual username/password combinations can also be placed
+    directly in the $AuthUser array, such as:
+        $AuthUser['pmichaud'] = crypt('secret');
+
+    To authenticate against an LDAP server, put the url for
+    the server in $AuthUser['ldap'], as in:
+        $AuthUser['ldap'] = 'ldap://ldap.example.com/ou=People,o=example?uid';
+*/
+
+# let Site.AuthForm know that we're doing user-based authorization
+$EnableAuthUser = 1;
+
+if (@$_POST['authid']) 
+  AuthUserId($pagename, stripmagic(@$_POST['authid']), 
+             stripmagic(@$_POST['authpw']));
+else SessionAuth($pagename);
+
+function AuthUserId($pagename, $id, $pw=NULL) {
+  global $AuthUser, $AuthUserPageFmt, $AuthUserFunctions, 
+    $AuthId, $MessagesFmt;
+
+  $auth = array();
+  foreach((array)$AuthUser as $k=>$v) $auth[$k] = (array)$v;
+  $authid = '';
+
+  # load information from SiteAdmin.AuthUser (or page in $AuthUserPageFmt)
+  SDV($AuthUserPageFmt, '$SiteAdminGroup.AuthUser');
+  SDVA($AuthUserFunctions, array(
+    'htpasswd' => 'AuthUserHtPasswd',
+    'ldap' => 'AuthUserLDAP',
+#    'mysql' => 'AuthUserMySQL',
+    $id => 'AuthUserConfig'));
+
+  $pn = FmtPageName($AuthUserPageFmt, $pagename);
+  $apage = ReadPage($pn, READPAGE_CURRENT);
+  if ($apage && preg_match_all("/^\\s*([@\\w][^\\s:]*):(.*)/m", 
+                               $apage['text'], $matches, PREG_SET_ORDER)) {
+    foreach($matches as $m) {
+      if (!preg_match_all('/\\bldaps?:\\S+|[^\\s,]+/', $m[2], $v))
+        continue;
+      if ($m[1]{0} == '@') 
+        foreach($v[0] as $g) $auth[$g][] = $m[1];
+      else $auth[$m[1]] = array_merge((array)@$auth[$m[1]], $v[0]);
+    }
+  }
+
+  if (is_null($pw)) $authid = $id;
+  else 
+    foreach($AuthUserFunctions as $k => $fn) 
+      if ($auth[$k] && $fn($pagename, $id, $pw, $auth[$k])) 
+        { $authid = $id; break; }
+
+  if (!$authid) { $GLOBALS['InvalidLogin'] = 1; return; }
+  if (!isset($AuthId)) $AuthId = $authid;
+  $authlist["id:$authid"] = 1;
+  $authlist["id:-$authid"] = -1;
+  foreach(preg_grep('/^@/', (array)@$auth[$authid]) as $g) 
+    $authlist[$g] = 1;
+  foreach(preg_grep('/^@/', (array)@$auth['*']) as $g) 
+    $authlist[$g] = 1;
+  foreach(preg_grep('/^@/', array_keys($auth)) as $g) 
+    if (in_array($authid, $auth[$g])) $authlist[$g] = 1;
+  if ($auth['htgroup']) {
+    foreach(AuthUserHtGroup($pagename, $id, $pw, $auth['htgroup']) as $g)
+      $authlist["@$g"] = 1;
+  }
+  SessionAuth($pagename, array('authid' => $authid, 'authlist' => $authlist));
+}
+
+
+function AuthUserConfig($pagename, $id, $pw, $pwlist) {
+  foreach ((array)$pwlist as $chal) 
+    if (_crypt($pw, $chal) == $chal) return true;
+  return false;
+}
+
+
+function AuthUserHtPasswd($pagename, $id, $pw, $pwlist) {
+  foreach ((array)$pwlist as $f) {
+    $fp = fopen($f, "r"); if (!$fp) continue;
+    while ($x = fgets($fp, 1024)) {
+      $x = rtrim($x);
+      list($i, $c, $r) = explode(':', $x, 3);
+      if ($i == $id && _crypt($pw, $c) == $c) { fclose($fp); return true; }
+    }
+    fclose($fp);
+  }
+  return false;
+}
+
+
+function AuthUserHtGroup($pagename, $id, $pw, $pwlist) {
+  $groups = array();
+  foreach ((array)$pwlist as $f) {
+    $fp = fopen($f, 'r'); if (!$fp) continue;
+    while ($x = fgets($fp, 4096)) {
+      if (preg_match('/^(\\w[^\\s:]+)\\s*:(.*)$/', trim($x), $match)) {
+        $glist = preg_split('/[\\s,]+/', $match[2], -1, PREG_SPLIT_NO_EMPTY);
+        if (in_array($id, $glist)) $groups[$match[1]] = 1;
+      }
+    }
+    fclose($fp);
+  }
+  return array_keys($groups);
+}
+  
+
+function AuthUserLDAP($pagename, $id, $pw, $pwlist) {
+  global $AuthLDAPBindDN, $AuthLDAPBindPassword;
+  if (!$pw) return false;
+  if (!function_exists('ldap_connect')) 
+    Abort('authuser: LDAP authentication requires PHP ldap functions','ldapfn');
+  foreach ((array)$pwlist as $ldap) {
+    if (!preg_match('!(ldaps?://[^/]+)/(.*)$!', $ldap, $match))
+      continue;
+    ##  connect to the LDAP server
+    list($z, $url, $path) = $match;
+    $ds = ldap_connect($url);
+    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
+    ##  For Active Directory, don't specify a path and we simply
+    ##  attempt to bind with the username and password directly
+    if (!$path && @ldap_bind($ds, $id, $pw)) { ldap_close($ds); return true; }
+    ##  Otherwise, we use Apache-style urls for LDAP authentication
+    ##  Split the path into its search components
+    list($basedn, $attr, $sub, $filter) = explode('?', $path);
+    if (!$attr) $attr = 'uid';
+    if (!$sub) $sub = 'one';
+    if (!$filter) $filter = '(objectClass=*)';
+    $binddn = @$AuthLDAPBindDN;
+    $bindpw = @$AuthLDAPBindPassword;
+    if (ldap_bind($ds, $binddn, $bindpw)) {
+      ##  Search for the appropriate uid
+      $fn = ($sub == 'sub') ? 'ldap_search' : 'ldap_list';
+      $sr = $fn($ds, $basedn, "(&$filter($attr=$id))", array($attr));
+      $x = ldap_get_entries($ds, $sr);
+      ##  If we find a unique id, bind to it for success
+      if ($x['count'] == 1) {
+        $dn = $x[0]['dn'];
+        if (@ldap_bind($ds, $dn, $pw)) { ldap_close($ds); return true; }
+      }
+    }
+    ldap_close($ds);
+  }
+  return false;
+}
+
+
+#  The _crypt function provides support for SHA1 encrypted passwords 
+#  (keyed by '{SHA}') and Apache MD5 encrypted passwords (keyed by 
+#  '$apr1$'); otherwise it just calls PHP's crypt() for the rest.
+#  The APR MD5 encryption code was contributed by D. Faure.
+
+function _crypt($plain, $salt=null) {
+  if (strncmp($salt, '{SHA}', 5) == 0) 
+    return '{SHA}'.base64_encode(pack('H*', sha1($plain)));
+  if (strncmp($salt, '$apr1$', 6) == 0) {
+    preg_match('/^\\$apr1\\$([^$]+)/', $salt, $match);
+    $salt = $match[1];
+    $length = strlen($plain);
+    $context = $plain . '$apr1$' . $salt;
+    $binary = pack('H32', md5($plain . $salt . $plain));
+    for($i = $length; $i > 0; $i -= 16) 
+      $context .= substr($binary, 0, min(16, $i));
+    for($i = $length; $i > 0; $i >>= 1)
+      $context .= ($i & 1) ? chr(0) : $plain{0};
+    $binary = pack('H32', md5($context));
+    for($i = 0; $i < 1000; $i++) {
+      $new = ($i & 1) ? $plain : $binary;
+      if ($i % 3) $new .= $salt;
+      if ($i % 7) $new .= $plain;
+      $new .= ($i & 1) ? $binary : $plain;
+      $binary = pack('H32', md5($new));
+    }
+    $q = '';
+    for ($i = 0; $i < 5; $i++) {
+      $k = $i + 6;
+      $j = $i + 12;
+      if ($j == 16) $j = 5;
+      $q = $binary{$i}.$binary{$k}.$binary{$j} . $q;
+    }
+    $q = chr(0).chr(0).$binary{11} . $q;
+    $q = strtr(strrev(substr(base64_encode($q), 2)),
+           'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
+           './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
+    return "\$apr1\$$salt\$$q";
+  }
+  if (md5($plain) == $salt) return $salt;
+  return crypt($plain, $salt);
+}

Added: trunk/oggdsf/website/scripts/blocklist.php
===================================================================
--- trunk/oggdsf/website/scripts/blocklist.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/blocklist.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,239 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2006-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script adds blocklisting capabilities to PmWiki, and can
+    be enabled by simply setting the following in local/config.php:
+
+        $EnableBlocklist = 1;
+
+    With $EnableBlocklist set to 1, this module will search through
+    the SiteAdmin.Blocklist page, as well as any other pages given by
+    the $Blocklist pages variable, looking for lines of the
+    form "block:some phrase" or "block:/regex/", with "some phrase" 
+    and "/regex/" indicating things to be excluded from any 
+    posting to the site.  
+
+    In addition, if a page contains IP addresses of the form
+    "a.b.c.d" or "a.b.c.*", then any posts coming from hosts
+    matching the address will be blocked.
+
+    There is also an "unblock:..." form, which removes an entry
+    from the blocklist.  This is useful for removing specific
+    block items in wikifarms and with automatically downloaded
+    blocklists (below).
+
+    The script also has the capability of automatically downloading
+    blocklists from other sources, such as chongqed.org and
+    and the MoinMaster blocklist.  These are configured using
+    the $BlocklistDownload array.  An $EnableBlocklist value
+    of at least 10 configures PmWiki to automatically download
+    these external blocklists and refresh them daily.
+
+    More information about blocklists is available in the
+    PmWiki.Blocklist page.
+*/
+
+
+##   Some recipes do page updates outside of the built-in posting
+##   cycle, so $EnableBlocklistImmediate is used to determine if
+##   we need to catch these.  Currently this defaults to enabled,
+##   but at some point we may change the default to disabled.
+if (IsEnabled($EnableBlocklistImmediate, 1)) {
+  SDVA($BlocklistActions, array('comment' => 1));
+  if (isset($_POST['text']) && $BlocklistActions[$action]) {
+    Blocklist($pagename, $_POST['text']);
+    if (!$EnablePost) {
+      unset($_POST['post']);
+      unset($_POST['postattr']);
+      unset($_POST['postedit']);
+    }
+  }
+}
+
+
+##   If $EnableBlocklist is set to 10 or higher, then arrange to 
+##   periodically download the "chongqed" and "moinmaster" blacklists.
+if ($EnableBlocklist >= 10) {
+  SDVA($BlocklistDownload['SiteAdmin.Blocklist-Chongqed'], array(
+    'url' => 'http://blacklist.chongqed.org/',
+    'format' => 'regex'));
+  SDVA($BlocklistDownload['SiteAdmin.Blocklist-MoinMaster'], array(
+    'url' => 'http://moinmaster.wikiwikiweb.de/BadContent?action=raw',
+    'format' => 'regex'));
+}
+
+
+##   CheckBlocklist is inserted into $EditFunctions, to automatically
+##   check for blocks on anything being posted through the normal
+##   "update a page cycle"
+array_unshift($EditFunctions, 'CheckBlocklist');
+function CheckBlocklist($pagename, &$page, &$new) { 
+  StopWatch("CheckBlocklist: begin $pagename");
+  $ptext = implode('', @$_POST);
+  if (@$ptext) Blocklist($pagename, $ptext); 
+  StopWatch("CheckBlocklist: end $pagename");
+}
+
+
+##   Blocklist is the function that does all of the work of
+##   checking for reasons to block a posting.  It reads
+##   the available blocklist pages ($BlocklistPages) and
+##   builds an array of strings and regular expressiongs to
+##   be checked against the page; if any are found, then
+##   posting is blocked (via $EnablePost=0).  The function
+##   also checks the REMOTE_ADDR against any blocked IP addresses.
+function Blocklist($pagename, $text) {
+  global $BlocklistPages, $BlockedMessagesFmt, $BlocklistDownload,
+    $BlocklistDownloadRefresh, $Now, $EnablePost, $WhyBlockedFmt,
+    $MessagesFmt, $BlocklistMessageFmt, $EnableWhyBlocked, $IsBlocked;
+
+  StopWatch("Blocklist: begin $pagename");
+
+  $BlocklistDownload = (array)@$BlocklistDownload;
+  SDV($BlocklistPages, 
+    array_merge(array('$SiteAdminGroup.Blocklist', 
+                      '$SiteAdminGroup.Blocklist-Farm'),
+                array_keys($BlocklistDownload)));
+  SDV($BlocklistMessageFmt, "<h3 class='wikimessage'>$[This post has been blocked by the administrator]</h3>");
+  SDVA($BlockedMessagesFmt, array(
+    'ip' => '$[Address blocked from posting]: ',
+    'text' => '$[Text blocked from posting]: '));
+  SDV($BlocklistDownloadRefresh, 86400);
+
+  ##  Loop over all blocklist pages
+  foreach((array)$BlocklistPages as $b) {
+
+    ##  load the current blocklist page
+    $pn = FmtPageName($b, $pagename);
+    $page = ReadPage($pn, READPAGE_CURRENT);
+    if (!$page) continue;
+
+    ##  if the page being checked is a blocklist page, stop blocking
+    if ($pagename == $pn) return;
+
+    ##  If the blocklist page is managed by automatic download,
+    ##  schedule any new downloads here
+    if (@$BlocklistDownload[$pn]) {
+      $bd = &$BlocklistDownload[$pn];
+      SDVA($bd, array(
+        'refresh' => $BlocklistDownloadRefresh,
+        'url' => "http://www.pmwiki.org/blocklists/$pn" ));
+      if (!@$page['text'] || $page['time'] < $Now - $bd['refresh'])
+        register_shutdown_function('BlocklistDownload', $pn, getcwd());
+    }
+
+    ##  If the blocklist is simply a list of regexes to be matched, load 
+    ##  them into $terms['block'] and continue to the next blocklist page.
+    ##  Some regexes from remote sites aren't well-formed, so we have
+    ##  to escape any slashes that aren't already escaped.
+    if (strpos($page['text'], 'blocklist-format: regex') !==false) {
+      if (preg_match_all('/^([^\\s#].+)/m', $page['text'], $match)) 
+        foreach($match[0] as $m) {
+          $m = preg_replace('#(?<!\\\\)/#', '\\/', trim($m));
+          $terms['block'][] = "/$m/";
+        }
+      continue;
+    }
+
+    ##  Treat the page as a pmwiki-format blocklist page, with
+    ##  IP addresses and "block:"-style declarations.  First, see
+    ##  if we need to block the author based on a.b.c.d or a.b.c.*
+    ##  IP addresses.
+    $ip = preg_quote($_SERVER['REMOTE_ADDR']);
+    $ip = preg_replace('/\\d+$/', '($0\\b|\\*)', $ip);
+    if (preg_match("/\\b$ip/", $page['text'], $match)) {
+      $EnablePost = 0;
+      $IsBlocked = 1;
+      $WhyBlockedFmt[] = $BlockedMessagesFmt['ip'] . $match[0];
+    }
+
+    ##  Now we'll load any "block:" or "unblock:" specifications
+    ##  from the page text.
+    if (preg_match_all('/(un)?(?:block|regex):(.*)/', $page['text'], 
+                       $match, PREG_SET_ORDER)) 
+      foreach($match as $m) $terms[$m[1].'block'][] = trim($m[2]);
+  }
+
+  ##  okay, we've loaded all of the terms, now subtract any 'unblock'
+  ##  terms from the block set.
+  StopWatch("Blocklist: diff unblock");
+  $blockterms = array_diff((array)@$terms['block'], (array)@$terms['unblock']);
+
+  ##  go through each of the remaining blockterms and see if it matches the
+  ##  text -- if so, disable posting and add a message to $WhyBlockedFmt.
+  StopWatch('Blocklist: blockterms (count='.count($blockterms).')');
+  $itext = strtolower($text);
+  foreach($blockterms as $b) {
+    if ($b{0} == '/') {
+      if (!preg_match($b, $text)) continue;
+    } else if (strpos($itext, strtolower($b)) === false) continue;
+    $EnablePost = 0;
+    $IsBlocked = 1;
+    $WhyBlockedFmt[] = $BlockedMessagesFmt['text'] . $b;
+  }
+  StopWatch('Blocklist: blockterms done');
+
+  ##  If we came across any reasons to block, let's provide a message
+  ##  to the author that it was blocked.  If $EnableWhyBlocked is set,
+  ##  we'll even tell the author why.  :-)
+  if (@$WhyBlockedFmt) {
+    $MessagesFmt[] = $BlocklistMessageFmt;
+    if (IsEnabled($EnableWhyBlocked, 0)) 
+      foreach((array)$WhyBlockedFmt as $why) 
+        $MessagesFmt[] = "<pre class='blocklistmessage'>$why</pre>\n";
+  }
+  StopWatch("Blocklist: end $pagename");
+}
+
+
+##   BlocklistDownload() handles retrieving blocklists from
+##   external sources into PmWiki pages.  If it's able to
+##   download an updated list, it uses that; otherwise it leaves
+##   any existing list alone.
+function BlocklistDownload($pagename, $dir = '') {
+  global $BlocklistDownloadFmt, $BlocklistDownload, $FmtV;
+
+  if ($dir) { flush(); chdir($dir); }
+  SDV($BlocklistDownloadFmt, "
+  [@
+## blocklist-note:   NOTE: This page is automatically generated by blocklist.php
+## blocklist-note:   NOTE: Any edits to this page may be lost!
+## blocklist-url:    \$BlocklistDownloadUrl
+## blocklist-when:   \$CurrentTimeISO
+#  blocklist-format: \$BlocklistFormat
+\$BlocklistData
+  @]
+");
+
+  ##  get the existing blocklist page
+  $bd = &$BlocklistDownload[$pagename];
+  $page = ReadPage($pagename, READPAGE_CURRENT);
+
+  ##  try to retrieve the remote data
+  $blocklistdata = @file($bd['url']);
+
+  ##  if we didn't get it, and we don't already have text, save a
+  ##  note in the page so we know what happened
+  if (!$blocklistdata && !@$page['text']) {
+    $auf = ini_get('allow_url_fopen');
+    $blocklistdata = "#### Unable to download blocklist (allow_url_fopen=$auf)";
+  }
+
+  ##  if we have some new text to save, let's format it and save it
+  if ($blocklistdata) {
+    $blocklistdata = implode('', (array)$blocklistdata);
+    $blocklistdata = preg_replace('/^##blocklist.*/m', '', $blocklistdata);
+    $FmtV['$BlocklistData'] = $blocklistdata;
+    $FmtV['$BlocklistDownloadUrl'] = $bd['url'];
+    $FmtV['$BlocklistFormat'] = $bd['format'];
+    $page['text'] = FmtPageName($BlocklistDownloadFmt, $pagename);
+    SDV($page['passwdread'], '@lock');
+  }
+
+  ##  save our updated(?) blocklist page
+  WritePage($pagename, $page);
+}

Added: trunk/oggdsf/website/scripts/caches.php
===================================================================
--- trunk/oggdsf/website/scripts/caches.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/caches.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,58 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+*/
+
+## Browser cache-control.  If this is a cacheable action (e.g., browse,
+## diff), then set the Last-Modified header to the time the site was 
+## last modified.  If the browser has provided us with a matching 
+## If-Modified-Since request header, we can return 304 Not Modified.
+SDV($LastModFile,"$WorkDir/.lastmod");
+if (!$LastModFile) return;
+
+$LastModTime = @filemtime($LastModFile);
+foreach(get_included_files() as $f) 
+  { $v = @filemtime($f); if ($v > $LastModTime) $LastModTime = $v; }
+
+if (@$EnableIMSCaching) {
+  SDV($IMSCookie, $CookiePrefix.'imstime');
+  SDV($IMSCookieExpires, $Now + 60*60*24*30);
+  SDV($IMSInvalidators, array('authpw', 'author'));
+  $LogoutCookies[] = $IMSCookie;
+
+  if ($IMSCookie) {
+    $IMSTime = @$_COOKIE[$IMSCookie];
+    if ($IMSTime < $LastModTime
+        || array_intersect($IMSInvalidators, array_keys($_POST))) {
+      $IMSTime = $Now; 
+      setcookie($IMSCookie, $IMSTime, $IMSCookieExpires, '/');
+    }
+  } else $IMSTime = $LastModTime;
+
+  if (in_array($action, (array)$CacheActions)) {
+    $HTTPLastMod = gmdate('D, d M Y H:i:s \G\M\T',$IMSTime);
+    $HTTPHeaders[] = "Cache-Control: no-cache";
+    $HTTPHeaders[] = "Last-Modified: $HTTPLastMod";
+    if (@$_SERVER['HTTP_IF_MODIFIED_SINCE']==$HTTPLastMod)
+      { header("HTTP/1.0 304 Not Modified"); exit(); }
+  }
+}
+
+if ($NoHTMLCache 
+    || !@$PageCacheDir
+    || count($_POST) > 0
+    || count($_GET) > 2
+    || (count($_GET) == 1 && !@$_GET['n'])) { $NoHTMLCache |= 1; return; }
+
+mkdirp($PageCacheDir);
+if (!file_exists("$PageCacheDir/.htaccess") 
+    && $fp = @fopen("$PageCacheDir/.htaccess", "w"))
+  { fwrite($fp, "Order Deny,Allow\nDeny from all\n"); fclose($fp); }
+$PageCacheFile = "$PageCacheDir/$pagename,cache";
+if (file_exists($PageCacheFile) && @filemtime($PageCacheFile) < $LastModTime) 
+  @unlink($PageCacheFile);
+

Added: trunk/oggdsf/website/scripts/creole.php
===================================================================
--- trunk/oggdsf/website/scripts/creole.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/creole.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,66 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script adds Creole v0.4 markup (http://www.wikicreole.org/)
+    to PmWiki.  To activate this script, simply add the following into
+    a local customization file:
+
+        include_once('scripts/creole.php');
+
+*/
+
+## **strong**
+Markup('**', 'inline', 
+  '/^\\*\\*(?>(.+?)\\*\\*)(?!\\S)|(?<!^)\\*\\*(.+?)\\*\\*/',
+  '<strong>$1$2</strong>');
+
+## //emphasized//
+Markup('//', 'inline', 
+  '/(?<!http:|ftp:)\\/\\/(.*?)\\/\\//',
+  '<em>$1</em>');
+
+## == Headings ==
+Markup('^=', 'block',
+  '/^(={1,6})\\s?(.*?)(\\s*=*\\s*)$/e',
+  "'<:block,1><h'.strlen('$1').PSS('>$2</h').strlen('$1').'>'");
+
+## Line breaks
+Markup('\\\\', 'inline', '/\\\\\\\\/', '<br />');
+
+## Preformatted
+Markup('^{{{', '[=',
+  "/^\\{\\{\\{\n(.*?\n)\\}\\}\\}[^\\S\n]*\n/sme",
+  "Keep(PSS('<pre class=\"escaped\">$1</pre>'))");
+Markup('{{{', '>{{{',
+  '/\\{\\{\\{(.*?)\\}\\}\\}/se',
+  "Keep(PSS('<code class=\"escaped\">$1</code>'))");
+
+## Tables
+Markup('|-table', '>^||',
+  '/^\\|(.*)$/e',
+  "FormatTableRow(PSS('$0'), '\\|')");
+
+## Images
+Markup('{{', 'inline',
+  '/\\{\\{(?>(\\L))([^|\\]]*)(?:\\|\\s*(.*?)\\s*)?\\}\\}/e',
+  "Keep(\$GLOBALS['LinkFunctions']['$1'](\$pagename, '$1', '$2', '$3',
+     '$1$2', \$GLOBALS['ImgTagFmt']),'L')");
+
+
+## GUIButtons
+SDVA($GUIButtons, array(
+  'em'       => array(100, "//", "//", '$[Emphasized]',
+                  '$GUIButtonDirUrlFmt/em.gif"$[Emphasized (italic)]"',
+                  '$[ak_em]'),
+  'strong'   => array(110, "**", "**", '$[Strong]',
+                  '$GUIButtonDirUrlFmt/strong.gif"$[Strong (bold)]"',
+                  '$[ak_strong]'),
+  'h2'       => array(400, '\\n== ', ' ==\\n', '$[Heading]',
+                  '$GUIButtonDirUrlFmt/h.gif"$[Heading]"'),
+
+  ));
+

Added: trunk/oggdsf/website/scripts/crypt.php
===================================================================
--- trunk/oggdsf/website/scripts/crypt.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/crypt.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,40 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2002-2004 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script defines ?action=crypt, providing help for WikiAdministrators
+    to set up site-wide passwords in the installation.
+*/
+
+SDV($HandleActions['crypt'],'HandleCrypt');
+SDV($ActionTitleFmt['crypt'],'| $[Password encryption]');
+
+function HandleCrypt($pagename, $auth='read') {
+  global $ScriptUrl,$HTMLStartFmt,$HTMLEndFmt;
+  PrintFmt($pagename,$HTMLStartFmt);
+  $passwd = @$_POST["passwd"];
+  echo FmtPageName(
+    "<form action='{\$ScriptUrl}' method='POST'><p>
+      Enter password to encrypt: 
+      <input type='text' name='passwd' value='$passwd' />
+      <input type='submit' />
+      <input type='hidden' name='n' value='{\$FullName}' />
+      <input type='hidden' name='action' value='crypt' /></p></form>",
+    $pagename);
+  if ($passwd) { 
+    $crypt = crypt($passwd);
+    echo "<p class='vspace'>Encrypted password = $crypt</p>"; 
+    echo "<p class='vspace'>To set a site-wide password, insert the line below
+      in your <i>config.php</i> file, <br />replacing <tt>'type'</tt> with
+      one of <tt>'admin'</tt>, <tt>'read'</tt>, <tt>'edit'</tt>,
+      or <tt>'attr'</tt>.  <br />See <a 
+      href='$ScriptUrl?n=PmWiki.PasswordsAdmin'>PasswordsAdmin</a> for more
+      details.</p>
+      <pre class='vspace'>  \$DefaultPasswords['type']='$crypt';</pre>";
+  }
+  PrintFmt($pagename,$HTMLEndFmt);
+}
+

Added: trunk/oggdsf/website/scripts/diag.php
===================================================================
--- trunk/oggdsf/website/scripts/diag.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/diag.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,53 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2003-2005, 2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file adds "?action=diag" and "?action=phpinfo" actions to PmWiki.  
+    This produces lots of diagnostic output that may be helpful to the 
+    software authors when debugging PmWiki or other scripts.
+*/
+
+ at ini_set('display_errors', '1');
+ at ini_set('track_errors','1');
+
+if ($action=='diag') {
+  @session_start();
+  header('Content-type: text/plain');
+  print_r($GLOBALS);
+  exit();
+}
+
+if ($action=='phpinfo') { phpinfo(); exit(); }
+
+function Ruleset() {
+  global $MarkupTable;
+  $out = '';
+  BuildMarkupRules();
+  foreach($MarkupTable as $id=>$m) 
+    $out .= sprintf("%-16s %-16s %-16s\n",$id,@$m['cmd'],@$m['seq']);
+  return $out;
+}
+
+$HandleActions['ruleset'] = 'HandleRuleset';
+
+function HandleRuleset($pagename) {
+  header("Content-type: text/plain");
+  print Ruleset();
+}
+
+function StopWatchHTML($pagename, $print = 0) {
+  global $StopWatch;
+  StopWatch('now');
+  $l = strlen(count($StopWatch));
+  $out = '<pre>';
+  foreach((array)$StopWatch as $i => $x)
+    $out .= sprintf("%{$l}d: %s\n", $i, $x);
+  $out .= '</pre>';
+  if (is_array($StopWatch)) array_pop($StopWatch);
+  if ($print) print $out;
+  return $out;
+}
+

Added: trunk/oggdsf/website/scripts/draft.php
===================================================================
--- trunk/oggdsf/website/scripts/draft.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/draft.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,63 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+*/
+
+SDV($DraftSuffix, '-Draft');
+if ($DraftSuffix) 
+  SDV($SearchPatterns['normal']['draft'], "!$DraftSuffix\$!");
+
+##  set up a 'publish' authorization level, defaulting to 'edit' authorization
+SDV($DefaultPasswords['publish'], '');
+SDV($AuthCascade['publish'], 'edit');
+SDV($FmtPV['$PasswdPublish'], 'PasswdVar($pn, "publish")');
+if ($AuthCascade['attr'] == 'edit') $AuthCascade['attr'] = 'publish';
+
+## Add a 'publish' page attribute if desired
+if (IsEnabled($EnablePublishAttr, 0))
+  SDV($PageAttributes['passwdpublish'], '$[Set new publish password:]');
+
+##  with drafts enabled, the 'post' operation requires 'publish' permissions
+if ($action == 'edit' && $_POST['post'] && $HandleAuth['edit'] == 'edit')
+  $HandleAuth['edit'] = 'publish';
+
+$basename = preg_replace("/$DraftSuffix\$/", '', $pagename);
+##  if no -Draft page, switch to $basename
+if (!PageExists($pagename) && PageExists($basename)) $pagename = $basename;
+
+##  set edit form button labels to reflect draft prompts
+SDVA($InputTags['e_savebutton'], array('value' => ' '.XL('Publish').' '));
+SDVA($InputTags['e_saveeditbutton'], array('value' => ' '.XL('Save draft and edit').' '));
+SDVA($InputTags['e_savedraftbutton'], array(
+    ':html' => "<input type='submit' \$InputFormArgs />",
+    'name' => 'postdraft', 'value' => ' '.XL('Save draft').' ',
+    'accesskey' => XL('ak_savedraft')));
+
+##  disable the 'publish' button if not authorized to publish
+if (!CondAuth($basename, 'publish')) 
+  SDVA($InputTags['e_savebutton'], array('disabled' => 'disabled'));
+
+##  add the draft handler into $EditFunctions
+if ($action == 'edit') array_unshift($EditFunctions, 'EditDraft');
+function EditDraft(&$pagename, &$page, &$new) {
+  global $WikiDir, $DraftSuffix, $DeleteKeyPattern, 
+    $DraftRecentChangesFmt, $RecentChangesFmt;
+  SDV($DeleteKeyPattern, "^\\s*delete\\s*$");
+  $basename = preg_replace("/$DraftSuffix\$/", '', $pagename);
+  $draftname = $basename . $DraftSuffix;
+  if ($_POST['postdraft'] || $_POST['postedit']) $pagename = $draftname; 
+  else if ($_POST['post'] && !preg_match("/$DeleteKeyPattern/", $new['text'])) { 
+    $pagename = $basename; 
+    $page = ReadPage($basename);
+    $WikiDir->delete($draftname);
+  }
+  else if (PageExists($draftname) && $pagename != $draftname)
+    { Redirect($draftname, '$PageUrl?action=edit'); exit(); }
+  if ($pagename == $draftname && isset($DraftRecentChangesFmt))
+    $RecentChangesFmt = $DraftRecentChangesFmt;
+}
+
+

Added: trunk/oggdsf/website/scripts/feeds.php
===================================================================
--- trunk/oggdsf/website/scripts/feeds.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/feeds.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,544 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2005-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script provides a number of syndication feed and xml-based 
+    metadata options to PmWiki, including Atom, RSS 2.0, RSS 1.0 (RDF), 
+    and the Dublin Core Metadata extensions.  This module is typically
+    activated from a local configuration file via a line such as
+
+      if ($action == 'atom') include_once("$FarmD/scripts/feeds.php");
+      if ($action == 'dc') include_once("$FarmD/scripts/feeds.php");
+
+    When enabled, ?action=atom, ?action=rss, and ?action=rdf produce
+    syndication feeds based on any wikitrail contained in the page,
+    or, for Category pages, on the pages in the category.  The feeds
+    are generated using pagelist, thus one can include parameters such
+    as count=, list=, order=, etc. in the url to adjust the feed output.
+
+    ?action=dc will normally generate Dublin Core Metadata for the 
+    current page only, but placing a group=, trail=, or link= argument 
+    in the url causes it to generate metadata for all pages in the
+    associated group, trail, or backlink.
+
+    There are a large number of customizations available, most of which
+    are controlled by the $FeedFmt array.  Elements $FeedFmt look like
+
+        $FeedFmt['atom']['feed']['rights'] = 'All Rights Reserved';
+
+    where the first index corresponds to the action (?action=atom),
+    the second index indicates a per-feed or per-item element, and
+    the third index is the name of the element being generated.
+    The above setting would therefore generate a
+    "<rights>All Rights Reserved</rights>" in the feed for
+    ?action=atom.  If the value of an entry begins with a '<',
+    then feeds.php doesn't automatically add the tag around it.
+    Elements can also be callable functions which are called to
+    generate the appropriate output.
+
+    For example, to set the RSS 2.0 <author> element to the
+    value of the last author to modify a page, one can set 
+    (in local/config.php):
+
+        $FeedFmt['rss']['item']['author'] = '$LastModifiedBy';
+
+    To use the RSS 2.0 <description> element to contain the
+    change summary of the most recent edit, set
+
+        $FeedFmt['rss']['item']['description'] = '$LastModifiedSummary';
+
+    Feeds.php can also be combined with attachments to support
+    podcasting via ?action=rss.  Any page such as "PageName"
+    that has an mp3 attachment with the same name as the page
+    ("PageName.mp3") will have an appropriate <enclosure> element
+    in the feed output.  The set of allowed attachments can be
+    extended using the $RSSEnclosureFmt array:
+
+        $RSSEnclosureFmt = array('{$Name}.mp3', '{$Name}.mp4');
+
+    References:
+      http://www.atomenabled.org/developers/syndication/
+      http://dublincore.org/documents/dcmes-xml/
+      http://en.wikipedia.org/wiki/Podcasting
+*/
+
+## Settings for ?action=atom
+SDVA($FeedFmt['atom']['feed'], array(
+  '_header' => 'Content-type: text/xml; charset="$Charset"',
+  '_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
+<feed xmlns="http://www.w3.org/2005/Atom">'."\n",
+  '_end' => "</feed>\n",
+  'title' => '$WikiTitle',
+  'link' => '<link rel="self" href="{$PageUrl}?action=atom" />',
+  'id' => '{$PageUrl}?action=atom',
+  'updated' => '$FeedISOTime',
+  'author' => "<author><name>$WikiTitle</name></author>\n",
+  'generator' => '$Version',
+  'logo' => '$PageLogoUrl'));
+SDVA($FeedFmt['atom']['item'], array(
+  '_start' => "<entry>\n",
+  'id' => '{$PageUrl}',
+  'title' => '{$Title}',
+  'updated' => '$ItemISOTime',
+  'link' => "<link rel=\"alternate\" href=\"{\$PageUrl}\" />\n",
+  'author' => "<author><name>{\$LastModifiedBy}</name></author>\n",
+  'summary' => '{$Description}',
+  'category' => "<category term=\"\$Category\" />\n",
+  '_end' => "</entry>\n"));
+
+## Settings for ?action=dc
+SDVA($FeedFmt['dc']['feed'], array(
+  '_header' => 'Content-type: text/xml; charset="$Charset"',
+  '_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
+<!DOCTYPE rdf:RDF PUBLIC "-//DUBLIN CORE//DCMES DTD 2002/07/31//EN"
+    "http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.dtd">
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:dc="http://purl.org/dc/elements/1.1/">'."\n",
+  '_end' => "</rdf:RDF>\n"));
+SDVA($FeedFmt['dc']['item'], array(
+  '_start' => "<rdf:Description rdf:about=\"{\$PageUrl}\">\n",
+  'dc:title' => '{$Title}',
+  'dc:identifier' => '{$PageUrl}',
+  'dc:date' => '$ItemISOTime',
+  'dc:type' => 'Text',
+  'dc:format' => 'text/html',
+  'dc:description' => '{$Description}',
+  'dc:subject' => "<dc:subject>\$Category</dc:subject>\n",
+  'dc:publisher' => '$WikiTitle',
+  'dc:author' => '{$LastModifiedBy}',
+  '_end' => "</rdf:Description>\n"));
+
+## RSS 2.0 settings for ?action=rss
+SDVA($FeedFmt['rss']['feed'], array(
+  '_header' => 'Content-type: text/xml; charset="$Charset"',
+  '_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<channel>'."\n",
+  '_end' => "</channel>\n</rss>\n",
+  'title' => '$WikiTitle | {$Group} / {$Title}',
+  'link' => '{$PageUrl}?action=rss',
+  'description' => '{$Group}.{$Title}',
+  'lastBuildDate' => '$FeedRSSTime'));
+SDVA($FeedFmt['rss']['item'], array(
+  '_start' => "<item>\n",
+  '_end' => "</item>\n",
+  'title' => '{$Group} / {$Title}',
+  'link' => '{$PageUrl}',
+  'description' => '{$Description}',
+  'dc:contributor' => '{$LastModifiedBy}',
+  'dc:date' => '$ItemISOTime',
+  'pubDate' => '$ItemRSSTime',
+  'enclosure' => 'RSSEnclosure'));
+
+## RDF 1.0, for ?action=rdf
+SDVA($FeedFmt['rdf']['feed'], array(
+  '_header' => 'Content-type: text/xml; charset="$Charset"',
+  '_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
+<rdf:RDF xmlns="http://purl.org/rss/1.0/"
+         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <channel rdf:about="{$PageUrl}?action=rdf">'."\n",
+  'title' => '$WikiTitle | {$Group} / {$Title}',
+  'link' => '{$PageUrl}?action=rdf',
+  'description' => '{$Group}.{$Title}',
+  'dc:date' => '$FeedISOTime',
+  'items' => "<items>\n<rdf:Seq>\n\$FeedRDFSeq</rdf:Seq>\n</items>\n",
+  '_items' => "</channel>\n",
+  '_end' => "</rdf:RDF>\n"));
+SDVA($FeedFmt['rdf']['item'], array(
+  '_start' => "<item rdf:about=\"{\$PageUrl}\">\n",
+  '_end' => "</item>\n",
+  'title' => '$WikiTitle | {$Group} / {$Title}',
+  'link' => '{$PageUrl}',
+  'description' => '{$Description}',
+  'dc:date' => '$ItemISOTime'));
+  
+foreach(array_keys($FeedFmt) as $k) {
+  SDV($HandleActions[$k], 'HandleFeed');
+  SDV($HandleAuth[$k], 'read');
+}
+
+function HandleFeed($pagename, $auth = 'read') {
+  global $FeedFmt, $action, $PCache, $FmtV, $TimeISOZFmt, $RSSTimeFmt,
+    $FeedPageListOpt, $FeedCategoryOpt, $FeedTrailOpt,
+    $FeedDescPatterns, $CategoryGroup, $EntitiesTable;
+  SDV($RSSTimeFmt, 'D, d M Y H:i:s \G\M\T');
+  SDV($FeedDescPatterns, 
+    array('/<[^>]*$/' => ' ', '/\\w+$/' => '', '/<[^>]+>/' => ''));
+  $FeedPageListOpt = (array)@$FeedPageListOpt;
+  SDVA($FeedCategoryOpt, array('link' => $pagename));
+  SDVA($FeedTrailOpt, array('trail' => $pagename, 'count' => 10));
+
+  $f = $FeedFmt[$action];
+  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
+  if (!$page) Abort("?cannot generate feed");
+  $feedtime = $page['time'];
+
+  # determine list of pages to display
+  if (@($_REQUEST['trail'] || $_REQUEST['group'] || $_REQUEST['link'] 
+        || $_REQUEST['name'])) 
+    $opt = $FeedPageListOpt;
+  else if (preg_match("/^$CategoryGroup\\./", $pagename)) 
+    $opt = $FeedCategoryOpt;
+  else if ($action != 'dc') $opt = $FeedTrailOpt;
+  else { 
+    PCache($pagename, $page); 
+    $pagelist = array($pagename); 
+  }
+  if (!@$pagelist) {
+    $opt = array_merge($opt, @$_REQUEST);
+    $pagelist = MakePageList($pagename, $opt, 0);
+  }
+
+  # process list of pages in feed
+  $rdfseq = '';
+  $pl = array();
+  foreach($pagelist as $pn) {
+    if (!PageExists($pn)) continue;
+    if (!isset($PCache[$pn]['time'])) 
+      { $page = ReadPage($pn, READPAGE_CURRENT); PCache($pn, $page); }
+    $pc = & $PCache[$pn];
+    $pl[] = $pn;
+    if (@$opt['count'] && count($pl) >= $opt['count']) break;
+    $rdfseq .= FmtPageName("<rdf:li resource=\"{\$PageUrl}\" />\n", $pn);
+    if ($pc['time'] > $feedtime) $feedtime = $pc['time'];
+  }
+  $pagelist = $pl;
+
+  $FmtV['$FeedRDFSeq'] = $rdfseq;
+  $FmtV['$FeedISOTime'] = gmstrftime($TimeISOZFmt, $feedtime);
+  $FmtV['$FeedRSSTime'] = gmdate($RSSTimeFmt, $feedtime);
+  # format start of feed
+  $out = FmtPageName($f['feed']['_start'], $pagename);
+
+  # format feed elements
+  foreach($f['feed'] as $k => $v) {
+    if ($k{0} == '_' || !$v) continue;
+    $x = FmtPageName($v, $pagename);
+    if (!$x) continue;
+    $out .= ($v{0} == '<') ? $x : "<$k>$x</$k>\n";
+  }
+
+  # format items in feed
+  if (@$f['feed']['_items']) 
+    $out .= FmtPageName($f['feed']['_items'], $pagename);
+  foreach($pagelist as $pn) {
+    $page = &$PCache[$pn];
+    $FmtV['$ItemDesc'] = @$page['description'];
+    $FmtV['$ItemISOTime'] = gmstrftime($TimeISOZFmt, $page['time']);
+    $FmtV['$ItemRSSTime'] = gmdate($RSSTimeFmt, $page['time']);
+
+    $out .= FmtPageName($f['item']['_start'], $pn);
+    foreach((array)@$f['item'] as $k => $v) {
+      if ($k{0} == '_' || !$v) continue;
+      if (is_callable($v)) { $out .= $v($pn, $page, $k); continue; }
+      if (strpos($v, '$LastModifiedBy') !== false && !@$page['author']) 
+        continue;
+      if (strpos($v, '$Category') !== false) {
+        if (preg_match_all("/(?<=^|,)$CategoryGroup\\.([^,]+)/", 
+                           @$page['targets'], $match)) {
+          foreach($match[1] as $c) {
+            $FmtV['$Category'] = $c;
+            $out .= FmtPageName($v, $pn);
+          }
+        }
+        continue;
+      }
+      $x = FmtPageName($v, $pn);
+      if (!$x) continue;
+      $out .= ($v{0} == '<') ? $x : "<$k>$x</$k>\n";
+    }
+    $out .= FmtPageName($f['item']['_end'], $pn);
+  } 
+  $out .= FmtPageName($f['feed']['_end'], $pagename);
+  foreach((array)@$f['feed']['_header'] as $fmt)
+    header(FmtPageName($fmt, $pagename));
+  print str_replace(array_keys($EntitiesTable),
+                    array_values($EntitiesTable), $out);
+}
+
+## RSSEnclosure is called in ?action=rss to generate <enclosure>
+## tags for any pages that have an attached "PageName.mp3" file.
+## The set of attachments to enclose is given by $RSSEnclosureFmt.
+function RSSEnclosure($pagename, &$page, $k) {
+  global $RSSEnclosureFmt, $UploadFileFmt, $UploadExts;
+  if (!function_exists('MakeUploadName')) return '';
+  SDV($RSSEnclosureFmt, array('{$Name}.mp3'));
+  $encl = '';
+  foreach((array)$RSSEnclosureFmt as $fmt) {
+    $path = FmtPageName($fmt, $pagename);
+    $upname = MakeUploadName($pagename, $path);
+    $filepath = FmtPageName("$UploadFileFmt/$upname", $pagename);
+    if (file_exists($filepath)) {
+      $length = filesize($filepath);
+      $type = @$UploadExts[preg_replace('/.*\\./', '', $filepath)];
+      $url = LinkUpload($pagename, 'Attach:', $path, '', '', '$LinkUrl');
+      $encl .= "<$k url='$url' length='$length' type='$type' />";
+    }
+  }
+  return $encl;
+}
+
+## Since most feeds don't understand html character entities, we
+## convert the common ones to their numeric form here.
+SDVA($EntitiesTable, array(
+  # entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
+  '&nbsp;' => '&#160;', 
+  '&iexcl;' => '&#161;', 
+  '&cent;' => '&#162;', 
+  '&pound;' => '&#163;', 
+  '&curren;' => '&#164;', 
+  '&yen;' => '&#165;', 
+  '&brvbar;' => '&#166;', 
+  '&sect;' => '&#167;', 
+  '&uml;' => '&#168;', 
+  '&copy;' => '&#169;', 
+  '&ordf;' => '&#170;', 
+  '&laquo;' => '&#171;', 
+  '&not;' => '&#172;', 
+  '&shy;' => '&#173;', 
+  '&reg;' => '&#174;', 
+  '&macr;' => '&#175;', 
+  '&deg;' => '&#176;', 
+  '&plusmn;' => '&#177;', 
+  '&sup2;' => '&#178;', 
+  '&sup3;' => '&#179;', 
+  '&acute;' => '&#180;', 
+  '&micro;' => '&#181;', 
+  '&para;' => '&#182;', 
+  '&middot;' => '&#183;', 
+  '&cedil;' => '&#184;', 
+  '&sup1;' => '&#185;', 
+  '&ordm;' => '&#186;', 
+  '&raquo;' => '&#187;', 
+  '&frac14;' => '&#188;', 
+  '&frac12;' => '&#189;', 
+  '&frac34;' => '&#190;', 
+  '&iquest;' => '&#191;', 
+  '&Agrave;' => '&#192;', 
+  '&Aacute;' => '&#193;', 
+  '&Acirc;' => '&#194;', 
+  '&Atilde;' => '&#195;', 
+  '&Auml;' => '&#196;', 
+  '&Aring;' => '&#197;', 
+  '&AElig;' => '&#198;', 
+  '&Ccedil;' => '&#199;', 
+  '&Egrave;' => '&#200;', 
+  '&Eacute;' => '&#201;', 
+  '&Ecirc;' => '&#202;', 
+  '&Euml;' => '&#203;', 
+  '&Igrave;' => '&#204;', 
+  '&Iacute;' => '&#205;', 
+  '&Icirc;' => '&#206;', 
+  '&Iuml;' => '&#207;', 
+  '&ETH;' => '&#208;', 
+  '&Ntilde;' => '&#209;', 
+  '&Ograve;' => '&#210;', 
+  '&Oacute;' => '&#211;', 
+  '&Ocirc;' => '&#212;', 
+  '&Otilde;' => '&#213;', 
+  '&Ouml;' => '&#214;', 
+  '&times;' => '&#215;', 
+  '&Oslash;' => '&#216;', 
+  '&Ugrave;' => '&#217;', 
+  '&Uacute;' => '&#218;', 
+  '&Ucirc;' => '&#219;', 
+  '&Uuml;' => '&#220;', 
+  '&Yacute;' => '&#221;', 
+  '&THORN;' => '&#222;', 
+  '&szlig;' => '&#223;', 
+  '&agrave;' => '&#224;', 
+  '&aacute;' => '&#225;', 
+  '&acirc;' => '&#226;', 
+  '&atilde;' => '&#227;', 
+  '&auml;' => '&#228;', 
+  '&aring;' => '&#229;', 
+  '&aelig;' => '&#230;', 
+  '&ccedil;' => '&#231;', 
+  '&egrave;' => '&#232;', 
+  '&eacute;' => '&#233;', 
+  '&ecirc;' => '&#234;', 
+  '&euml;' => '&#235;', 
+  '&igrave;' => '&#236;', 
+  '&iacute;' => '&#237;', 
+  '&icirc;' => '&#238;', 
+  '&iuml;' => '&#239;', 
+  '&eth;' => '&#240;', 
+  '&ntilde;' => '&#241;', 
+  '&ograve;' => '&#242;', 
+  '&oacute;' => '&#243;', 
+  '&ocirc;' => '&#244;', 
+  '&otilde;' => '&#245;', 
+  '&ouml;' => '&#246;', 
+  '&divide;' => '&#247;', 
+  '&oslash;' => '&#248;', 
+  '&ugrave;' => '&#249;', 
+  '&uacute;' => '&#250;', 
+  '&ucirc;' => '&#251;', 
+  '&uuml;' => '&#252;', 
+  '&yacute;' => '&#253;', 
+  '&thorn;' => '&#254;', 
+  '&yuml;' => '&#255;', 
+  # entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
+  '&quot;' => '&#34;', 
+  #'&amp;' => '&#38;#38;', 
+  #'&lt;' => '&#38;#60;', 
+  #'&gt;' => '&#62;', 
+  '&apos;' => '&#39;', 
+  '&OElig;' => '&#338;', 
+  '&oelig;' => '&#339;', 
+  '&Scaron;' => '&#352;', 
+  '&scaron;' => '&#353;', 
+  '&Yuml;' => '&#376;', 
+  '&circ;' => '&#710;', 
+  '&tilde;' => '&#732;', 
+  '&ensp;' => '&#8194;', 
+  '&emsp;' => '&#8195;', 
+  '&thinsp;' => '&#8201;', 
+  '&zwnj;' => '&#8204;', 
+  '&zwj;' => '&#8205;', 
+  '&lrm;' => '&#8206;', 
+  '&rlm;' => '&#8207;', 
+  '&ndash;' => '&#8211;', 
+  '&mdash;' => '&#8212;', 
+  '&lsquo;' => '&#8216;', 
+  '&rsquo;' => '&#8217;', 
+  '&sbquo;' => '&#8218;', 
+  '&ldquo;' => '&#8220;', 
+  '&rdquo;' => '&#8221;', 
+  '&bdquo;' => '&#8222;', 
+  '&dagger;' => '&#8224;', 
+  '&Dagger;' => '&#8225;', 
+  '&permil;' => '&#8240;', 
+  '&lsaquo;' => '&#8249;', 
+  '&rsaquo;' => '&#8250;', 
+  '&euro;' => '&#8364;', 
+  # entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
+  '&fnof;' => '&#402;', 
+  '&Alpha;' => '&#913;', 
+  '&Beta;' => '&#914;', 
+  '&Gamma;' => '&#915;', 
+  '&Delta;' => '&#916;', 
+  '&Epsilon;' => '&#917;', 
+  '&Zeta;' => '&#918;', 
+  '&Eta;' => '&#919;', 
+  '&Theta;' => '&#920;', 
+  '&Iota;' => '&#921;', 
+  '&Kappa;' => '&#922;', 
+  '&Lambda;' => '&#923;', 
+  '&Mu;' => '&#924;', 
+  '&Nu;' => '&#925;', 
+  '&Xi;' => '&#926;', 
+  '&Omicron;' => '&#927;', 
+  '&Pi;' => '&#928;', 
+  '&Rho;' => '&#929;', 
+  '&Sigma;' => '&#931;', 
+  '&Tau;' => '&#932;', 
+  '&Upsilon;' => '&#933;', 
+  '&Phi;' => '&#934;', 
+  '&Chi;' => '&#935;', 
+  '&Psi;' => '&#936;', 
+  '&Omega;' => '&#937;', 
+  '&alpha;' => '&#945;', 
+  '&beta;' => '&#946;', 
+  '&gamma;' => '&#947;', 
+  '&delta;' => '&#948;', 
+  '&epsilon;' => '&#949;', 
+  '&zeta;' => '&#950;', 
+  '&eta;' => '&#951;', 
+  '&theta;' => '&#952;', 
+  '&iota;' => '&#953;', 
+  '&kappa;' => '&#954;', 
+  '&lambda;' => '&#955;', 
+  '&mu;' => '&#956;', 
+  '&nu;' => '&#957;', 
+  '&xi;' => '&#958;', 
+  '&omicron;' => '&#959;', 
+  '&pi;' => '&#960;', 
+  '&rho;' => '&#961;', 
+  '&sigmaf;' => '&#962;', 
+  '&sigma;' => '&#963;', 
+  '&tau;' => '&#964;', 
+  '&upsilon;' => '&#965;', 
+  '&phi;' => '&#966;', 
+  '&chi;' => '&#967;', 
+  '&psi;' => '&#968;', 
+  '&omega;' => '&#969;', 
+  '&thetasym;' => '&#977;', 
+  '&upsih;' => '&#978;', 
+  '&piv;' => '&#982;', 
+  '&bull;' => '&#8226;', 
+  '&hellip;' => '&#8230;', 
+  '&prime;' => '&#8242;', 
+  '&Prime;' => '&#8243;', 
+  '&oline;' => '&#8254;', 
+  '&frasl;' => '&#8260;', 
+  '&weierp;' => '&#8472;', 
+  '&image;' => '&#8465;', 
+  '&real;' => '&#8476;', 
+  '&trade;' => '&#8482;', 
+  '&alefsym;' => '&#8501;', 
+  '&larr;' => '&#8592;', 
+  '&uarr;' => '&#8593;', 
+  '&rarr;' => '&#8594;', 
+  '&darr;' => '&#8595;', 
+  '&harr;' => '&#8596;', 
+  '&crarr;' => '&#8629;', 
+  '&lArr;' => '&#8656;', 
+  '&uArr;' => '&#8657;', 
+  '&rArr;' => '&#8658;', 
+  '&dArr;' => '&#8659;', 
+  '&hArr;' => '&#8660;', 
+  '&forall;' => '&#8704;', 
+  '&part;' => '&#8706;', 
+  '&exist;' => '&#8707;', 
+  '&empty;' => '&#8709;', 
+  '&nabla;' => '&#8711;', 
+  '&isin;' => '&#8712;', 
+  '&notin;' => '&#8713;', 
+  '&ni;' => '&#8715;', 
+  '&prod;' => '&#8719;', 
+  '&sum;' => '&#8721;', 
+  '&minus;' => '&#8722;', 
+  '&lowast;' => '&#8727;', 
+  '&radic;' => '&#8730;', 
+  '&prop;' => '&#8733;', 
+  '&infin;' => '&#8734;', 
+  '&ang;' => '&#8736;', 
+  '&and;' => '&#8743;', 
+  '&or;' => '&#8744;', 
+  '&cap;' => '&#8745;', 
+  '&cup;' => '&#8746;', 
+  '&int;' => '&#8747;', 
+  '&there4;' => '&#8756;', 
+  '&sim;' => '&#8764;', 
+  '&cong;' => '&#8773;', 
+  '&asymp;' => '&#8776;', 
+  '&ne;' => '&#8800;', 
+  '&equiv;' => '&#8801;', 
+  '&le;' => '&#8804;', 
+  '&ge;' => '&#8805;', 
+  '&sub;' => '&#8834;', 
+  '&sup;' => '&#8835;', 
+  '&nsub;' => '&#8836;', 
+  '&sube;' => '&#8838;', 
+  '&supe;' => '&#8839;', 
+  '&oplus;' => '&#8853;', 
+  '&otimes;' => '&#8855;', 
+  '&perp;' => '&#8869;', 
+  '&sdot;' => '&#8901;', 
+  '&lceil;' => '&#8968;', 
+  '&rceil;' => '&#8969;', 
+  '&lfloor;' => '&#8970;', 
+  '&rfloor;' => '&#8971;', 
+  '&lang;' => '&#9001;', 
+  '&rang;' => '&#9002;', 
+  '&loz;' => '&#9674;', 
+  '&spades;' => '&#9824;', 
+  '&clubs;' => '&#9827;', 
+  '&hearts;' => '&#9829;', 
+  '&diams;' => '&#9830;'));
+

Added: trunk/oggdsf/website/scripts/forms.php
===================================================================
--- trunk/oggdsf/website/scripts/forms.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/forms.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,324 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2005-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+*/
+
+# $InputAttrs are the attributes we allow in output tags
+SDV($InputAttrs, array('name', 'value', 'id', 'class', 'rows', 'cols', 
+  'size', 'maxlength', 'action', 'method', 'accesskey', 'multiple',
+  'checked', 'disabled', 'readonly', 'enctype', 'src', 'alt'));
+
+# Set up formatting for text, submit, hidden, radio, etc. types
+foreach(array('text', 'submit', 'hidden', 'password', 'radio', 'checkbox',
+              'reset', 'file', 'image') as $t) 
+  SDV($InputTags[$t][':html'], "<input type='$t' \$InputFormArgs />");
+SDV($InputTags['text']['class'], 'inputbox');
+SDV($InputTags['password']['class'], 'inputbox');
+SDV($InputTags['submit']['class'], 'inputbutton');
+SDV($InputTags['reset']['class'], 'inputbutton');
+SDV($InputTags['radio'][':checked'], 'checked');
+SDV($InputTags['checkbox'][':checked'], 'checked');
+
+# (:input form:)
+SDVA($InputTags['form'], array(
+  ':args' => array('action', 'method'),
+  ':html' => "<form \$InputFormArgs>",
+  'method' => 'post'));
+
+# (:input end:)
+SDV($InputTags['end'][':html'], '</form>');
+
+# (:input textarea:)
+SDVA($InputTags['textarea'], array(
+  ':content' => array('value'),
+  ':attr' => array_diff($InputAttrs, array('value')),
+  ':html' => "<textarea \$InputFormArgs>\$InputFormContent</textarea>"));
+
+# (:input image:)
+SDV($InputTags['image'][':args'], array('name', 'src', 'alt'));
+
+# (:input select:)
+SDVA($InputTags['select-option'], array(
+  ':args' => array('name', 'value', 'label'),
+  ':content' => array('label', 'value', 'name'),
+  ':attr' => array('value', 'selected'),
+  ':checked' => 'selected',
+  ':html' => "<option \$InputFormArgs>\$InputFormContent</option>"));
+SDVA($InputTags['select'], array(
+  'class' => 'inputbox',
+  ':html' => "<select \$InputSelectArgs>\$InputSelectOptions</select>"));
+
+# (:input defaults?:)
+SDVA($InputTags['default'], array(':fn' => 'InputDefault'));
+SDVA($InputTags['defaults'], array(':fn' => 'InputDefault'));
+
+##  (:input ...:) directives
+Markup('input', 'directives',
+  '/\\(:input\\s+(\\w+)(.*?):\\)/ei',
+  "InputMarkup(\$pagename, '$1', PSS('$2'))");
+
+##  (:input select:) has its own markup processing
+Markup('input-select', '<input',
+  '/\\(:input\\s+select\\s.*?:\\)(?:\\s*\\(:input\\s+select\\s.*?:\\))*/ei',
+  "InputSelect(\$pagename, 'select', PSS('$0'))");
+
+##  The 'input+sp' rule combines multiple (:input select ... :)
+##  into a single markup line (to avoid split line effects)
+Markup('input+sp', '<split', 
+  '/(\\(:input\\s+select\\s(?>.*?:\\)))\\s+(?=\\(:input\\s)/', '$1');
+
+SDV($InputFocusFmt, 
+  "<script language='javascript' type='text/javascript'><!--
+   document.getElementById('\$InputFocusId').focus();//--></script>");
+
+##  InputToHTML performs standard processing on (:input ...:) arguments,
+##  and returns the formatted HTML string.
+function InputToHTML($pagename, $type, $args, &$opt) {
+  global $InputTags, $InputAttrs, $InputValues, $FmtV,
+    $InputFocusLevel, $InputFocusId, $InputFocusFmt, $HTMLFooterFmt;
+  if (!@$InputTags[$type]) return "(:input $type $args:)";
+  ##  get input arguments
+  if (!is_array($args)) $args = ParseArgs($args);
+  ##  convert any positional arguments to named arguments
+  $posnames = @$InputTags[$type][':args'];
+  if (!$posnames) $posnames = array('name', 'value');
+  while (count($posnames) > 0 && count(@$args['']) > 0) {
+    $n = array_shift($posnames);
+    if (!isset($args[$n])) $args[$n] = array_shift($args['']);
+  }
+  ##  merge defaults for input type with arguments
+  $opt = array_merge($InputTags[$type], $args);
+  ##  convert any remaining positional args to flags
+  foreach ((array)@$opt[''] as $a) 
+    { $a = strtolower($a); if (!isset($opt[$a])) $opt[$a] = $a; }
+  if (isset($opt['name'])) {
+    $opt['name'] = preg_replace('/^\\$:/', 'ptv_', @$opt['name']);
+    $name = $opt['name'];
+    ##  set control values from $InputValues array
+    ##  radio, checkbox, select, etc. require a flag of some sort,
+    ##  others just set 'value'
+    if (isset($InputValues[$name])) {
+      $checked = @$opt[':checked'];
+      if ($checked) {
+        $opt[$checked] = in_array(@$opt['value'], (array)$InputValues[$name])
+                         ? $checked : false;
+      } else if (!isset($opt['value'])) $opt['value'] = $InputValues[$name];
+    }
+  }
+  ##  build $InputFormContent
+  $FmtV['$InputFormContent'] = '';
+  foreach((array)@$opt[':content'] as $a)
+    if (isset($opt[$a])) { $FmtV['$InputFormContent'] = $opt[$a]; break; }
+  ##  hash and store any "secure" values
+  if (@$opt['secure'] == '#') $opt['secure'] = rand();
+  if (@$opt['secure'] > '') {
+    $md5 = md5($opt['secure'] . $opt['value']);
+    @session_start(); 
+    $_SESSION['forms'][$md5] = $opt['value'];
+    $opt['value'] = $md5;
+  }
+  ##  handle focus=# option
+  $focus = @$opt['focus'];
+  if (isset($focus)
+      && (!isset($InputFocusLevel) || $focus < $InputFocusLevel)) {
+    if (!isset($opt['id'])) $opt['id'] = "wikifocus$focus";
+    $InputFocusLevel = $focus;
+    $InputFocusId = $opt['id'];
+    $HTMLFooterFmt['inputfocus'] = $InputFocusFmt;
+  }
+  ##  build $InputFormArgs from $opt
+  $attrlist = (isset($opt[':attr'])) ? $opt[':attr'] : $InputAttrs;
+  $attr = array();
+  foreach ($attrlist as $a) {
+    if (!isset($opt[$a]) || $opt[$a]===false) continue;
+    $attr[] = "$a='".str_replace("'", '&#39;', $opt[$a])."'";
+  }
+  $FmtV['$InputFormArgs'] = implode(' ', $attr);
+  return FmtPageName($opt[':html'], $pagename);
+}
+
+
+##  InputMarkup handles the (:input ...:) directive.  It either
+##  calls any function given by the :fn element of the corresponding
+##  tag, or else just returns the result of InputToHTML().
+function InputMarkup($pagename, $type, $args) {
+  global $InputTags;
+  $fn = @$InputTags[$type][':fn'];
+  if ($fn) return $fn($pagename, $type, $args);
+  return Keep(InputToHTML($pagename, $type, $args, $opt));
+}
+
+
+##  (:input default:) directive.
+function InputDefault($pagename, $type, $args) {
+  global $InputValues, $PageTextVarPatterns;
+  $args = ParseArgs($args);
+  $args[''] = (array)@$args[''];
+  $name = (isset($args['name'])) ? $args['name'] : array_shift($args['']);
+  $name = preg_replace('/^\\$:/', 'ptv_', $name);
+  $value = (isset($args['value'])) ? $args['value'] : array_shift($args['']);
+  if (!isset($InputValues[$name])) $InputValues[$name] = $value;
+  if (@$args['request']) {
+    $req = array_merge($_GET, $_POST);
+    foreach($req as $k => $v) 
+      if (!isset($InputValues[$k])) 
+        $InputValues[$k] = htmlspecialchars(stripmagic($v), ENT_NOQUOTES);
+  }
+  $source = @$args['source'];
+  if ($source) {
+    $source = MakePageName($pagename, $source);
+    $page = RetrieveAuthPage($source, 'read', false, READPAGE_CURRENT);
+    if ($page) {
+      foreach((array)$PageTextVarPatterns as $pat)
+        if (preg_match_all($pat, $page['text'], $match, PREG_SET_ORDER))
+          foreach($match as $m)
+            if (!isset($InputValues['ptv_'.$m[1]]))
+              $InputValues['ptv_'.$m[2]] = 
+                htmlspecialchars(Qualify($source, $m[3]), ENT_NOQUOTES);
+    }
+  }
+  return '';
+}
+
+
+##  (:input select ...:) is special, because we need to process a bunch of
+##  them as a single unit.
+function InputSelect($pagename, $type, $markup) {
+  global $InputTags, $InputAttrs, $FmtV;
+  preg_match_all('/\\(:input\\s+\\S+\\s+(.*?):\\)/', $markup, $match);
+  $selectopt = (array)$InputTags[$type];
+  $opt = $selectopt;
+  $optionshtml = '';
+  $optiontype = isset($InputTags["$type-option"]) 
+                ? "$type-option" : "select-option";
+  foreach($match[1] as $args) {
+    $optionshtml .= InputToHTML($pagename, $optiontype, $args, $oo);
+    $opt = array_merge($opt, $oo);
+  }
+  $attrlist = array_diff($InputAttrs, array('value'));
+  foreach($attrlist as $a) {
+    if (!isset($opt[$a]) || $opt[$a]===false) continue;
+    $attr[] = "$a='".str_replace("'", '&#39;', $opt[$a])."'";
+  }
+  $FmtV['$InputSelectArgs'] = implode(' ', $attr);
+  $FmtV['$InputSelectOptions'] = $optionshtml;
+  return Keep(FmtPageName($selectopt[':html'], $pagename));
+}
+
+
+function InputActionForm($pagename, $type, $args) {
+  global $InputAttrs;
+  $args = ParseArgs($args);
+  if (@$args['pagename']) $pagename = $args['pagename'];
+  $opt = NULL;
+  $html = InputToHTML($pagename, $type, $args, $opt);
+  foreach(preg_grep('/^[\\w$]/', array_keys($args)) as $k) {
+    if (is_array($args[$k]) || in_array($k, $InputAttrs)) continue;
+    if ($k == 'n' || $k == 'pagename') continue;
+    $html .= "<input type='hidden' name='$k' value='{$args[$k]}' />";
+  }
+  return Keep($html);
+}
+
+
+## RequestArgs is used to extract values from controls (typically
+## in $_GET and $_POST).
+function RequestArgs($req = NULL) {
+  if (is_null($req)) $req = array_merge($_GET, $_POST);
+  foreach ($req as $k => $v) $req[$k] = stripmagic($req[$k]);
+  return $req;
+}
+
+
+## Form-based authorization prompts (for use with PmWikiAuth)
+
+SDVA($InputTags['auth_form'], array(
+  ':html' => "<form action='{$_SERVER['REQUEST_URI']}' method='post' 
+    name='authform'>\$PostVars"));
+SDV($AuthPromptFmt, array(&$PageStartFmt, 'page:$SiteGroup.AuthForm',
+  "<script language='javascript' type='text/javascript'><!--
+    try { document.authform.authid.focus(); }
+    catch(e) { document.authform.authpw.focus(); } //--></script>",
+  &$PageEndFmt));
+
+## The section below handles specialized EditForm pages.
+## We don't bother to load it if we're not editing.
+
+if ($action != 'edit') return;
+
+SDV($PageEditForm, '$SiteGroup.EditForm');
+SDV($PageEditFmt, '$EditForm');
+if (@$_REQUEST['editform']) {
+  $PageEditForm=$_REQUEST['editform'];
+  $PageEditFmt='$EditForm';
+}
+$Conditions['e_preview'] = '(boolean)$_POST["preview"]';
+
+XLSDV('en', array(
+  'ak_save' => 's',
+  'ak_saveedit' => 'u',
+  'ak_preview' => 'p',
+  'ak_textedit' => ',',
+  'e_rows' => '23',
+  'e_cols' => '60'));
+
+# (:e_preview:) displays the preview of formatted text.
+Markup('e_preview', 'directives',
+  '/^\\(:e_preview:\\)/e',
+  "Keep(\$GLOBALS['FmtV']['\$PreviewText'])");
+
+# If we didn't load guiedit.php, then set (:e_guibuttons:) to
+# simply be empty.
+Markup('e_guibuttons', 'directives', '/\\(:e_guibuttons:\\)/', '');
+
+# Prevent (:e_preview:) and (:e_guibuttons:) from 
+# participating in text rendering step.
+SDV($SaveAttrPatterns['/\\(:e_(preview|guibuttons):\\)/'], ' ');
+
+SDVA($InputTags['e_form'], array(
+  ':html' => "<form action='{\$PageUrl}?action=edit' method='post'
+    \$InputFormArgs><input type='hidden' name='action' value='edit' 
+    /><input type='hidden' name='n' value='{\$FullName}' 
+    /><input type='hidden' name='basetime' value='\$EditBaseTime' 
+    />"));
+SDVA($InputTags['e_textarea'], array(
+  ':html' => "<textarea \$InputFormArgs 
+    onkeydown='if (event.keyCode==27) event.returnValue=false;' 
+    >\$EditText</textarea>",
+  'name' => 'text', 'id' => 'text', 'accesskey' => XL('ak_textedit'),
+  'rows' => XL('e_rows'), 'cols' => XL('e_cols')));
+SDVA($InputTags['e_author'], array(
+  ':html' => "<input type='text' \$InputFormArgs />",
+  'name' => 'author', 'value' => $Author));
+SDVA($InputTags['e_changesummary'], array(
+  ':html' => "<input type='text' \$InputFormArgs />",
+  'name' => 'csum', 'size' => '60', 'maxlength' => '100',
+  'value' => htmlspecialchars(stripmagic(@$_POST['csum']), ENT_QUOTES)));
+SDVA($InputTags['e_minorcheckbox'], array(
+  ':html' => "<input type='checkbox' \$InputFormArgs />",
+  'name' => 'diffclass', 'value' => 'minor'));
+if (@$_POST['diffclass']=='minor') 
+  SDV($InputTags['e_minorcheckbox']['checked'], 'checked');
+SDVA($InputTags['e_savebutton'], array(
+  ':html' => "<input type='submit' \$InputFormArgs />",
+  'name' => 'post', 'value' => ' '.XL('Save').' ', 
+  'accesskey' => XL('ak_save')));
+SDVA($InputTags['e_saveeditbutton'], array(
+  ':html' => "<input type='submit' \$InputFormArgs />",
+  'name' => 'postedit', 'value' => ' '.XL('Save and edit').' ',
+  'accesskey' => XL('ak_saveedit')));
+SDVA($InputTags['e_savedraftbutton'], array(':html' => ''));
+SDVA($InputTags['e_previewbutton'], array(
+  ':html' => "<input type='submit' \$InputFormArgs />",
+  'name' => 'preview', 'value' => ' '.XL('Preview').' ', 
+  'accesskey' => XL('ak_preview')));
+SDVA($InputTags['e_cancelbutton'], array(
+  ':html' => "<input type='submit' \$InputFormArgs />",
+  'name' => 'cancel', 'value' => ' '.XL('Cancel').' ' ));
+SDVA($InputTags['e_resetbutton'], array(
+  ':html' => "<input type='reset' \$InputFormArgs />",
+  'value' => ' '.XL('Reset').' '));
+

Added: trunk/oggdsf/website/scripts/guiedit.php
===================================================================
--- trunk/oggdsf/website/scripts/guiedit.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/guiedit.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,82 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2005 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script adds a graphical button bar to the edit page form.
+    The buttons are placed in the $GUIButtons array; each button
+    is specified by an array of five values:
+      - the position of the button relative to others (a number)
+      - the opening markup sequence
+      - the closing markup sequence
+      - the default text if none was highlighted
+      - the text of the button, either (a) HTML markup or (b) the 
+        url of a gif/jpg/png image to be used for the button 
+        (along with optional "title" text in quotes).
+
+    The buttons specified in this file are the default buttons
+    for the standard markups.  Some buttons (e.g., the attach/upload
+    button) are specified in their respective cookbook module.
+*/
+
+$HTMLHeaderFmt[] = "<script language='javascript' type='text/javascript'
+  src='\$FarmPubDirUrl/guiedit/guiedit.js'></script>\n";
+
+SDV($GUIButtonDirUrlFmt,'$FarmPubDirUrl/guiedit');
+
+SDVA($GUIButtons, array(
+  'em'       => array(100, "''", "''", '$[Emphasized]',
+                  '$GUIButtonDirUrlFmt/em.gif"$[Emphasized (italic)]"', 
+                  '$[ak_em]'),
+  'strong'   => array(110, "'''", "'''", '$[Strong]',
+                  '$GUIButtonDirUrlFmt/strong.gif"$[Strong (bold)]"',
+                  '$[ak_strong]'),
+  'pagelink' => array(200, '[[', ']]', '$[Page link]', 
+                  '$GUIButtonDirUrlFmt/pagelink.gif"$[Link to internal page]"'),
+  'extlink'  => array(210, '[[', ']]', 'http:// | $[link text]',
+                  '$GUIButtonDirUrlFmt/extlink.gif"$[Link to external page]"'),
+  'big'      => array(300, "'+", "+'", '$[Big text]',
+                  '$GUIButtonDirUrlFmt/big.gif"$[Big text]"'),
+  'small'    => array(310, "'-", "-'", '$[Small text]',
+                  '$GUIButtonDirUrlFmt/small.gif"$[Small text]"'),
+  'sup'      => array(320, "'^", "^'", '$[Superscript]',
+                  '$GUIButtonDirUrlFmt/sup.gif"$[Superscript]"'),
+  'sub'      => array(330, "'_", "_'", '$[Subscript]',
+                  '$GUIButtonDirUrlFmt/sub.gif"$[Subscript]"'),
+  'h2'       => array(400, '\\n!! ', '\\n', '$[Heading]',
+                  '$GUIButtonDirUrlFmt/h.gif"$[Heading]"'),
+  'center'   => array(410, '%25center%25', '', '',
+                  '$GUIButtonDirUrlFmt/center.gif"$[Center]"')));
+
+Markup('e_guibuttons', 'directives',
+  '/\\(:e_guibuttons:\\)/e',
+  "Keep(FmtPageName(GUIButtonCode(\$pagename), \$pagename))");
+
+function GUIButtonCode($pagename) {
+  global $GUIButtons;
+  $cmpfn = create_function('$a,$b', 'return $a[0]-$b[0];');
+  usort($GUIButtons, $cmpfn);
+  $out = "<script language='javascript' type='text/javascript'>\n";
+  foreach ($GUIButtons as $k => $g) {
+    if (!$g) continue;
+    @list($when, $mopen, $mclose, $mtext, $tag, $mkey) = $g;
+    if ($tag{0} == '<') { 
+        $out .= "document.write(\"$tag\");\n";
+        continue; 
+    }
+    if (preg_match('/^(.*\\.(gif|jpg|png))("([^"]+)")?$/', $tag, $m)) {
+      $title = (@$m[4] > '') ? "title='{$m[4]}'" : '';
+      $tag = "<img src='{$m[1]}' $title style='border:0px;' />";
+    }
+    $mopen = str_replace(array('\\', "'"), array('\\\\', "\\\\'"), $mopen);
+    $mclose = str_replace(array('\\', "'"), array('\\\\', "\\\\'"), $mclose);
+    $mtext = str_replace(array('\\', "'"), array('\\\\', "\\\\'"), $mtext);
+    $out .= 
+      "insButton(\"$mopen\", \"$mclose\", '$mtext', \"$tag\", \"$mkey\");\n";
+  }
+  $out .= '</script>';
+  return $out;
+}
+

Added: trunk/oggdsf/website/scripts/httpauth.php
===================================================================
--- trunk/oggdsf/website/scripts/httpauth.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/httpauth.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,49 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2005 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file defines an alternate authentication scheme based on the
+    HTTP Basic authentication protocol (i.e., the scheme used by default
+    in PmWiki 1).
+*/
+
+## If the webserver has already authenticated someone, then use
+## that identifier for our authorization id.  We also disable
+## the use of the browser's Basic Auth form later, since it tends
+## to confuse webservers.
+if (IsEnabled($EnableRemoteUserAuth, 1) && @$_SERVER['REMOTE_USER']) {
+  SDV($EnableHTTPBasicAuth, 0);
+  SDV($AuthId, $_SERVER['REMOTE_USER']);
+}
+
+## If the browser supplied a password, add that password to the
+## list of passwords used for authentication
+if (@$_SERVER['PHP_AUTH_PW']) {
+  @session_start();
+  @$_SESSION['authpw'][$_SERVER['PHP_AUTH_PW']]++;
+  $_REQUEST[session_name()] = 1;
+}
+
+
+## $EnableHTTPBasicAuth tells PmWikiAuth to use the browser's
+## HTTP Basic protocol prompt instead of a form-based prompt.
+if (IsEnabled($EnableHTTPBasicAuth, 1)) 
+  SDV($AuthPromptFmt, 'function:HTTPBasicAuthPrompt');
+
+## HTTPBasicAuthPrompt replaces PmWikiAuth's form-based password
+## prompt with the browser-based HTTP Basic prompt.
+function HTTPBasicAuthPrompt($pagename) {
+  global $AuthRealmFmt, $AuthDeniedFmt;
+  SDV($AuthRealmFmt,$GLOBALS['WikiTitle']);
+  SDV($AuthDeniedFmt,'A valid password is required to access this feature.');
+  $realm=FmtPageName($AuthRealmFmt,$pagename);
+  header("WWW-Authenticate: Basic realm=\"$realm\"");
+  header("Status: 401 Unauthorized");
+  header("HTTP-Status: 401 Unauthorized");
+  PrintFmt($pagename,$AuthDeniedFmt);
+  exit;
+}
+

Added: trunk/oggdsf/website/scripts/intermap.txt
===================================================================
--- trunk/oggdsf/website/scripts/intermap.txt	                        (rev 0)
+++ trunk/oggdsf/website/scripts/intermap.txt	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,8 @@
+PmWiki:		http://www.pmwiki.org/wiki/PmWiki/
+Cookbook:	http://www.pmwiki.org/wiki/Cookbook/
+Wiki:		http://www.c2.com/cgi/wiki?
+UseMod:		http://www.usemod.com/cgi-bin/wiki.pl?
+Meatball:	http://www.usemod.com/cgi-bin/mb.pl?
+Wikipedia:	http://www.wikipedia.com/wiki/
+PITS:		http://www.pmwiki.org/PITS/
+Path:            

Added: trunk/oggdsf/website/scripts/markupexpr.php
===================================================================
--- trunk/oggdsf/website/scripts/markupexpr.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/markupexpr.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,126 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script implements "markup expressions" --  a method to
+    do simple computations and manipulations from markup.  The
+    generic form of a markup expression is "{(func arg1 arg2)}",
+    where the named function (held in the $MarkupExpr array)
+    is called with arg1 and arg2 as arguments.
+
+    Markup expressions can be nested.  For example, to strip
+    off the first five characters and convert the remainder to
+    lowercase, an author can write:
+
+        {(tolower (substr "HELLOWORLD" 5))}    # produces "world"
+
+    Some "built-in" expressions defined by this recipe include:
+        substr   - extract a portion of a string
+        ftime    - date/time formatting
+        strlen   - length of a string
+        rand     - generate a random number
+        pagename - build a pagename from a string
+        toupper  - convert string to uppercase
+        tolower  - convert string to lowercase
+        ucfirst  - convert first character to uppercase
+        ucwords  - convert first character of each word to uppercase
+        asspaced - spaceformatting of wikiwords
+
+    Custom expressions may be added by other recipes by adding
+    entries into the $MarkupExpr array.  Each entry's key is
+    the name of the function, the value is the code to be evaluated
+    for that function (similar to the way $FmtPV works).  By default,
+    any arguments for the expression are placed into the $args array:
+
+        ##  expressions like {(myfunc foo bar)}
+        $MarkupExpr['myfunc'] = 'myfunc($args[0], $args[1])';
+
+    The expression arguments are parsed using ParseArgs(), and the
+    result of this parsing is available through the $argp array:
+
+        ##  expressions like {(myfunc fmt=foo output=bar)}
+        $MarkupExpr['myfunc'] = 'myfunc($argp["fmt"], $argp["output"])';
+   
+    Finally, if the code in $MarkupExpr contains '$params', then
+    it is executed directly without any preprocessing into arguments,
+    and $params contains the entire argument string.  Note that $params
+    may contain escaped values representing quoted arguments and
+    results of other expressions; these values may be un-escaped
+    by using "preg_replace($rpat, $rrep, $params)".
+*/
+
+$RecipeInfo['MarkupExpressions']['Version'] = '2007-04-11';
+
+Markup('{(', '>{$var}',
+  '/\\{(\\(\\w+\\b.*?\\))\\}/e',
+  "MarkupExpression(\$pagename, PSS('$1'))");
+
+SDVA($MarkupExpr, array(
+  'substr' => 'call_user_func_array("substr", $args)',
+  'strlen' => 'strlen($args[0])',
+  'ftime' => 'ME_ftime(@$args[0], @$args[1], $argp)',
+  'rand'   => '($args) ? rand($args[0], $args[1]) : rand()',
+  'ucfirst' => 'ucfirst($args[0])',
+  'ucwords' => 'ucwords($args[0])',
+  'tolower' => 'strtolower($args[0])',
+  'toupper' => 'strtoupper($args[0])',
+  'asspaced' => '$GLOBALS["AsSpacedFunction"]($args[0])',
+  'pagename' => 'MakePageName($pagename, preg_replace($rpat, $rrep, $params))',
+));
+
+function MarkupExpression($pagename, $expr) {
+  global $KeepToken, $KPV, $MarkupExpr;
+  $rpat = "/$KeepToken(\\d+P)$KeepToken/e";
+  $rrep = '$KPV[\'$1\']';
+  $expr = preg_replace('/([\'"])(.*?)\\1/e', "Keep(PSS('$2'),'P')", $expr);
+  $expr = preg_replace('/\\(\\W/e', "Keep(PSS('$2'),'P')", $expr);
+  while (preg_match('/\\((\\w+)(\\s[^()]*)?\\)/', $expr, $match)) {
+    list($repl, $func, $params) = $match;
+    $code = @$MarkupExpr[$func];
+    ##  if not a valid function, save this string as-is and exit
+    if (!$code) break;
+    ##  if the code uses '$params', we just evaluate directly
+    if (strpos($code, '$params') !== false) {
+      $out = eval("return ({$code});");
+      if ($expr == $repl) { $expr = $out; break; }
+      $expr = str_replace($repl, $out, $expr);
+      continue;
+    }
+    ##  otherwise, we parse arguments into $args before evaluating
+    $argp = ParseArgs($params);
+    $x = $argp['#']; $args = array();
+    while ($x) {
+      list($k, $v) = array_splice($x, 0, 2);
+      if ($k == '' || $k == '+' || $k == '-') 
+        $args[] = $k.preg_replace($rpat, $rrep, $v);
+    }
+    ##  fix any quoted arguments
+    foreach ($argp as $k => $v)
+      if (!is_array($v)) $argp[$k] = preg_replace($rpat, $rrep, $v);
+    $out = eval("return ({$code});");
+    if ($expr == $repl) { $expr = $out; break; }
+    $expr = str_replace($repl, Keep($out, 'P'), $expr);
+  }
+  return preg_replace($rpat, $rrep, $expr);
+}
+
+##   ME_ftime handles {(ftime ...)} expressions.
+##
+function ME_ftime($arg0 = '', $arg1 = '', $argp = NULL) {
+  global $TimeFmt, $Now, $FTimeFmt;
+  if (@$argp['fmt']) $fmt = $argp['fmt']; 
+  else if (strpos($arg0, '%') !== false) { $fmt = $arg0; $arg0 = $arg1; }
+  else if (strpos($arg1, '%') !== false) $fmt = $arg1;
+  ## determine the timestamp
+  if (isset($argp['when'])) list($time, $x) = DRange($argp['when']);
+  else if ($arg0 > '') list($time, $x) = DRange($arg0);
+  else $time = $Now;
+  if (@$fmt == '') { SDV($FTimeFmt, $TimeFmt); $fmt = $FTimeFmt; }
+  ##  make sure we have %F available for ISO dates
+  $fmt = str_replace(array('%F', '%s'), array('%Y-%m-%d', $time), $fmt);
+  return strftime($fmt, $time);
+}
+

Added: trunk/oggdsf/website/scripts/notify.php
===================================================================
--- trunk/oggdsf/website/scripts/notify.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/notify.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,194 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script enables email notifications to be sent when posts
+    are made.  It is included by default from the stdconfig.php 
+    script if $EnableNotify is set to non-zero.
+
+    Once enabled, the addresses to receive messages are configured
+    via the Site.NotifyList page.  A simple line in that page
+    such as 
+
+        notify=somebody at example.com
+
+    will cause messages to be periodically sent to "somebody at example.com"
+    listing the pages that have changed on the site since the previous
+    message was sent.  Multiple notify lines can be placed in the page,
+    and there are options to restrict the types of notifications
+    desired.  For more details, see the PmWiki.Notify page in
+    the documentation.
+
+    Several variables set defaults for this script:
+
+    $NotifyFrom - return email address to use in message.
+    $NotifyDelay - number of seconds to wait before sending mail
+        after the first post.
+    $NotifySquelch - minimum number of seconds between sending email
+        messages to each address.  Individual "notify=" lines in
+        Site.NotifyList can override this value via a custom "squelch="
+        parameter.
+    $NotifyFile - scratchpad file used to keep track of pending emails.
+    $NotifyListPageFmt - name of the NotifyList configuration page.
+    $NotifySubjectFmt - subject line for sent messages.
+    $NotifyBodyFmt - body of message to be sent.  The string '$NotifyItems'
+        is replaced with the list of posts in the email.
+    $NotifyItemFmt - the format for each post to be included in a notification.
+    $NotifyTimeFmt - the format for dates and times ($PostTime) 
+        in notification messages.
+    $NotifyHeaders - any additional message headers to be sent.
+    $NotifyParameters - any additional parameters to be passed to PHP's
+        mail() function.
+*/
+
+SDV($NotifyDelay, 0);
+SDV($NotifySquelch, 10800);
+SDV($NotifyFile, "$WorkDir/.notifylist");
+SDV($NotifyListPageFmt, '$SiteAdminGroup.NotifyList');
+SDV($NotifySubjectFmt, '[$WikiTitle] recent notify posts');
+SDV($NotifyBodyFmt, 
+  "Recent \$WikiTitle posts:\n" 
+  . "  \$ScriptUrl/$[{\$SiteGroup}/AllRecentChanges]\n\n\$NotifyItems\n");
+SDV($NotifyTimeFmt, $TimeFmt);
+SDV($NotifyItemFmt, 
+  ' * {$FullName} . . . $PostTime by {$LastModifiedBy}');
+SDV($NotifyHeaders, '');
+SDV($NotifyParameters, '');
+
+if (@$NotifyFrom)
+  $NotifyHeaders = "From: $NotifyFrom\r\n$NotifyHeaders";
+
+$EditFunctions[] = 'PostNotify';
+
+##   check if we need to do notifications
+if ($action != 'edit') NotifyCheck($pagename);
+
+
+function NotifyCheck($pagename) {
+  global $NotifyFile, $Now, $LastModTime;
+  $nfp = @fopen($NotifyFile, 'r');
+  if (!$nfp) return;
+  $nextevent = fgets($nfp);
+  fclose($nfp);
+  if ($Now < $nextevent && $LastModTime < filemtime($NotifyFile)) return;
+  register_shutdown_function('NotifyUpdate', $pagename, getcwd());
+}
+
+    
+function PostNotify($pagename, &$page, &$new) {
+  global $IsPagePosted;
+  if ($IsPagePosted) 
+    register_shutdown_function('NotifyUpdate', $pagename, getcwd());
+}
+
+
+function NotifyUpdate($pagename, $dir='') {
+  global $NotifyList, $NotifyListPageFmt, $NotifyFile, $IsPagePosted,
+    $FmtV, $NotifyTimeFmt, $NotifyItemFmt, $SearchPatterns,
+    $NotifySquelch, $NotifyDelay, $Now,
+    $NotifySubjectFmt, $NotifyBodyFmt, $NotifyHeaders, $NotifyParameters;
+
+  $abort = ignore_user_abort(true);
+  if ($dir) { flush(); chdir($dir); }
+
+  $GLOBALS['EnableRedirect'] = 0;
+
+  ##   Read in the current notify configuration
+  $pn = FmtPageName($NotifyListPageFmt, $pagename);
+  $npage = ReadPage($pn, READPAGE_CURRENT);
+  preg_match_all('/^[\s*:#->]*(notify[:=].*)/m', $npage['text'], $nlist);
+  $nlist = array_merge((array)@$NotifyList, (array)@$nlist[1]);
+  if (!$nlist) return;
+
+  ##   make sure other processes are locked out
+  Lock(2);
+
+  ##   let's load the current .notifylist table
+  $nfile = FmtPageName($NotifyFile, $pagename);
+  $nfp = @fopen($nfile, 'r');
+  if ($nfp) {
+    ##   get our current squelch and delay timestamps
+    clearstatcache();
+    $sz = filesize($nfile);
+    list($nextevent, $firstpost) = explode(' ', rtrim(fgets($nfp, $sz)));
+    ##   restore our notify array
+    $notify = unserialize(fgets($nfp, $sz));
+    fclose($nfp);
+  }
+  if (!is_array($notify)) $notify = array();
+
+  ##   if this is for a newly posted page, get its information
+  if ($IsPagePosted) {
+    $page = ReadPage($pagename, READPAGE_CURRENT);
+    $FmtV['$PostTime'] = strftime($NotifyTimeFmt, $Now);
+    $item = urlencode(FmtPageName($NotifyItemFmt, $pagename));
+    if ($firstpost < 1) $firstpost = $Now;
+  }
+
+  foreach($nlist as $n) {
+    $opt = ParseArgs($n);
+    $mailto = preg_split('/[\s,]+/', $opt['notify']);
+    if (!$mailto) continue;
+    if ($opt['squelch']) 
+      foreach($mailto as $m) $squelch[$m] = $opt['squelch'];
+    if (!$IsPagePosted) continue;
+    if ($opt['link']) {
+      $link = MakePageName($pagename, $opt['link']);
+      if (!preg_match("/(^|,)$link(,|$)/i", $page['targets'])) continue;
+    }
+    $pats = @(array)$SearchPatterns[$opt['list']];
+    if ($opt['group']) $pats[] = FixGlob($opt['group'], '$1$2.*');
+    if ($opt['name']) $pats[] = FixGlob($opt['name'], '$1*.$2');
+    if ($pats && !MatchPageNames($pagename, $pats)) continue;
+    if ($opt['trail']) {
+      $trail = ReadTrail($pagename, $opt['trail']);
+      for ($i=0; $i<count($trail); $i++) 
+        if ($trail[$i]['pagename'] == $pagename) break;
+      if ($i >= count($trail)) continue;
+    }
+    foreach($mailto as $m) { $notify[$m][] = $item; }
+  }
+
+  $nnow = time();
+  if ($nnow < $firstpost + $NotifyDelay) 
+    $nextevent = $firstpost + $NotifyDelay;
+  else {
+    $firstpost = 0;
+    $nextevent = $nnow + 86400;
+    $mailto = array_keys($notify);
+    $subject = FmtPageName($NotifySubjectFmt, $pagename);
+    $body = FmtPageName($NotifyBodyFmt, $pagename);
+    foreach ($mailto as $m) {
+      $msquelch = @$notify[$m]['lastmail'] +
+                    ((@$squelch[$m]) ? $squelch[$m] : $NotifySquelch);
+      if ($nnow < $msquelch) {
+        if ($msquelch < $nextevent && count($notify[$m])>1)
+          $nextevent = $msquelch;
+        continue;
+      }
+      unset($notify[$m]['lastmail']);
+      if (!$notify[$m]) { unset($notify[$m]); continue; }
+      $mbody = str_replace('$NotifyItems',   
+                           urldecode(implode("\n", $notify[$m])), $body);
+      if ($NotifyParameters)
+        mail($m, $subject, $mbody, $NotifyHeaders, $NotifyParameters);
+      else 
+        mail($m, $subject, $mbody, $NotifyHeaders);
+      $notify[$m] = array('lastmail' => $nnow);
+    }
+  }
+
+  ##   save the updated notify status
+  $nfp = @fopen($nfile, "w");
+  if ($nfp) {
+    fputs($nfp, "$nextevent $firstpost\n");
+    fputs($nfp, serialize($notify) . "\n");
+    fclose($nfp);
+  }
+  Lock(0);
+  return true;
+}
+

Added: trunk/oggdsf/website/scripts/pagelist.php
===================================================================
--- trunk/oggdsf/website/scripts/pagelist.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/pagelist.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,796 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script implements (:pagelist:) and friends -- it's one
+    of the nastiest scripts you'll ever encounter.  Part of the reason
+    for this is that page listings are so powerful and flexible, so
+    that adds complexity.  They're also expensive, so we have to
+    optimize them wherever we can.
+
+    The core function is FmtPageList(), which will generate a 
+    listing according to a wide variety of options.  FmtPageList takes 
+    care of initial option processing, and then calls a "FPL"
+    (format page list) function to obtain the formatted output.
+    The FPL function is chosen by the 'fmt=' option to (:pagelist:).
+
+    Each FPL function calls MakePageList() to obtain the list
+    of pages, formats the list somehow, and returns the results
+    to FmtPageList.  FmtPageList then returns the output to
+    the caller, and calls Keep() (preserves HTML) or PRR() (re-evaluate
+    as markup) as appropriate for the output being returned.
+*/
+
+## $PageIndexFile is the index file for term searches and link= option
+if (IsEnabled($EnablePageIndex, 1)) {
+  SDV($PageIndexFile, "$WorkDir/.pageindex");
+  $EditFunctions[] = 'PostPageIndex';
+}
+
+SDV($StrFoldFunction, 'strtolower');
+
+## $SearchPatterns holds patterns for list= option
+SDV($SearchPatterns['all'], array());
+SDVA($SearchPatterns['normal'], array(
+  'recent' => '!\.(All)?Recent(Changes|Uploads)$!',
+  'group' => '!\.Group(Print)?(Header|Footer|Attributes)$!',
+  'self' => str_replace('.', '\\.', "!^$pagename$!")));
+
+## $FPLFormatOpt is a list of options associated with fmt=
+## values.  'default' is used for any undefined values of fmt=.
+SDVA($FPLFormatOpt, array(
+  'default' => array('fn' => 'FPLTemplate', 'fmt' => '#default'),
+  'bygroup' => array('fn' => 'FPLTemplate', 'template' => '#bygroup',
+                     'class' => 'fplbygroup'),
+  'simple'  => array('fn' => 'FPLTemplate', 'template' => '#simple',
+                     'class' => 'fplsimple'),
+  'group'   => array('fn' => 'FPLTemplate', 'template' => '#group',
+                     'class' => 'fplgroup'),
+  'title'   => array('fn' => 'FPLTemplate', 'template' => '#title',
+                     'class' => 'fpltitle', 'order' => 'title'),
+  'count'   => array('fn' => 'FPLCountA'),
+  ));
+
+SDV($SearchResultsFmt, "<div class='wikisearch'>\$[SearchFor]
+  <div class='vspace'></div>\$MatchList
+  <div class='vspace'></div>\$[SearchFound]</div>");
+SDV($SearchQuery, str_replace('$', '&#036;', 
+  htmlspecialchars(stripmagic(@$_REQUEST['q']), ENT_NOQUOTES)));
+XLSDV('en', array(
+  'SearchFor' => 'Results of search for <em>$Needle</em>:',
+  'SearchFound' => 
+    '$MatchCount pages found out of $MatchSearched pages searched.'));
+
+SDV($PageListArgPattern, '((?:\\$:?)?\\w+)[:=]');
+
+Markup('pagelist', 'directives',
+  '/\\(:pagelist(\\s+.*?)?:\\)/ei',
+  "FmtPageList('\$MatchList', \$pagename, array('o' => PSS('$1 ')))");
+Markup('searchbox', 'directives',
+  '/\\(:searchbox(\\s.*?)?:\\)/e',
+  "SearchBox(\$pagename, ParseArgs(PSS('$1'), '$PageListArgPattern'))");
+Markup('searchresults', 'directives',
+  '/\\(:searchresults(\\s+.*?)?:\\)/ei',
+  "FmtPageList(\$GLOBALS['SearchResultsFmt'], \$pagename, 
+       array('req' => 1, 'request'=>1, 'o' => PSS('$1')))");
+
+SDV($SaveAttrPatterns['/\\(:(searchresults|pagelist)(\\s+.*?)?:\\)/i'], ' ');
+
+SDV($HandleActions['search'], 'HandleSearchA');
+SDV($HandleAuth['search'], 'read');
+SDV($ActionTitleFmt['search'], '| $[Search Results]');
+
+SDVA($PageListFilters, array(
+  'PageListCache' => 80,
+  'PageListProtect' => 90,
+  'PageListSources' => 100,
+  'PageListPasswords' => 120,
+  'PageListIf' => 140,
+  'PageListTermsTargets' => 160,
+  'PageListVariables' => 180,
+  'PageListSort' => 900,
+));
+
+foreach(array('random', 'size', 'time', 'ctime') as $o) 
+  SDV($PageListSortCmp[$o], "@(\$PCache[\$x]['$o']-\$PCache[\$y]['$o'])");
+SDV($PageListSortCmp['title'], 
+  '@strcasecmp($PCache[$x][\'=title\'], $PCache[$y][\'=title\'])');
+
+define('PAGELIST_PRE' , 1);
+define('PAGELIST_ITEM', 2);
+define('PAGELIST_POST', 4);
+
+## SearchBox generates the output of the (:searchbox:) markup.
+## If $SearchBoxFmt is defined, that is used, otherwise a searchbox
+## is generated.  Options include group=, size=, label=.
+function SearchBox($pagename, $opt) {
+  global $SearchBoxFmt, $SearchBoxOpt, $SearchQuery, $EnablePathInfo;
+  if (isset($SearchBoxFmt)) return Keep(FmtPageName($SearchBoxFmt, $pagename));
+  SDVA($SearchBoxOpt, array('size' => '40', 
+    'label' => FmtPageName('$[Search]', $pagename),
+    'value' => str_replace("'", "&#039;", $SearchQuery)));
+  $opt = array_merge((array)$SearchBoxOpt, @$_GET, (array)$opt);
+  $opt['action'] = 'search';
+  $target = (@$opt['target']) 
+            ? MakePageName($pagename, $opt['target']) : $pagename;
+  $opt['n'] = IsEnabled($EnablePathInfo, 0) ? '' : $target;
+  $out = FmtPageName(" class='wikisearch' action='\$PageUrl' method='get'>",
+                     $target);
+  foreach($opt as $k => $v) {
+    if ($v == '' || is_array($v)) continue;
+    $v = str_replace("'", "&#039;", $v);
+    $opt[$k] = $v;
+    if ($k == 'q' || $k == 'label' || $k == 'value' || $k == 'size') continue;
+    $k = str_replace("'", "&#039;", $k);
+    $out .= "<input type='hidden' name='$k' value='$v' />";
+  }
+  $out .= "<input type='text' name='q' value='{$opt['value']}' 
+    class='inputbox searchbox' size='{$opt['size']}' /><input type='submit' 
+    class='inputbutton searchbutton' value='{$opt['label']}' />";
+  return '<form '.Keep($out).'</form>';
+}
+
+
+## FmtPageList combines options from markup, request form, and url,
+## calls the appropriate formatting function, and returns the string.
+function FmtPageList($outfmt, $pagename, $opt) {
+  global $GroupPattern, $FmtV, $PageListArgPattern, 
+    $FPLFormatOpt, $FPLFunctions;
+  # get any form or url-submitted request
+  $rq = htmlspecialchars(stripmagic(@$_REQUEST['q']), ENT_NOQUOTES);
+  # build the search string
+  $FmtV['$Needle'] = $opt['o'] . ' ' . $rq;
+  # Handle "group/" at the beginning of the form-submitted request
+  if (preg_match("!^($GroupPattern(\\|$GroupPattern)*)?/!i", $rq, $match)) {
+    $opt['group'] = @$match[1];
+    $rq = substr($rq, strlen(@$match[1])+1);
+  }
+  $opt = array_merge($opt, ParseArgs($opt['o'], $PageListArgPattern));
+  # merge markup options with form and url
+  if (@$opt['request']) 
+    $opt = array_merge($opt, ParseArgs($rq, $PageListArgPattern), @$_REQUEST);
+  # non-posted blank search requests return nothing
+  if (@($opt['req'] && !$opt['-'] && !$opt[''] && !$opt['+'] && !$opt['q']))
+    return '';
+  # terms and group to be included and excluded
+  $GLOBALS['SearchIncl'] = array_merge((array)@$opt[''], (array)@$opt['+']);
+  $GLOBALS['SearchExcl'] = (array)@$opt['-'];
+  $GLOBALS['SearchGroup'] = @$opt['group'];
+  $fmt = @$opt['fmt']; if (!$fmt) $fmt = 'default';
+  $fmtopt = @$FPLFormatOpt[$fmt];
+  if (!is_array($fmtopt)) {
+    if ($fmtopt) $fmtopt = array('fn' => $fmtopt);
+    elseif (@$FPLFunctions[$fmt]) 
+      $fmtopt = array('fn' => $FPLFunctions[$fmt]);
+    else $fmtopt = $FPLFormatOpt['default'];
+  }
+  $fmtfn = @$fmtopt['fn'];
+  if (!is_callable($fmtfn)) $fmtfn = $FPLFormatOpt['default']['fn'];
+  $matches = array();
+  $opt = array_merge($fmtopt, $opt);
+  $out = $fmtfn($pagename, $matches, $opt);
+  $FmtV['$MatchCount'] = count($matches);
+  if ($outfmt != '$MatchList') 
+    { $FmtV['$MatchList'] = $out; $out = FmtPageName($outfmt, $pagename); }
+  if ($out[0] == '<') $out = Keep($out);
+  return PRR($out);
+}
+
+
+## MakePageList generates a list of pages using the specifications given
+## by $opt.
+function MakePageList($pagename, $opt, $retpages = 1) {
+  global $MakePageListOpt, $PageListFilters, $PCache;
+
+  StopWatch('MakePageList pre');
+  SDVA($MakePageListOpt, array('list' => 'default'));
+  $opt = array_merge((array)$MakePageListOpt, (array)$opt);
+  if (!@$opt['order'] && !@$opt['trail']) $opt['order'] = 'name';
+
+  ksort($opt); $opt['=key'] = md5(serialize($opt));
+
+  $itemfilters = array(); $postfilters = array();
+  asort($PageListFilters);
+  $opt['=phase'] = PAGELIST_PRE; $list=array(); $pn=NULL; $page=NULL;
+  foreach($PageListFilters as $fn => $v) {
+    $ret = $fn($list, $opt, $pagename, $page);
+    if ($ret & PAGELIST_ITEM) $itemfilters[] = $fn;
+    if ($ret & PAGELIST_POST) $postfilters[] = $fn;
+  }
+
+  StopWatch("MakePageList items count=".count($list).", filters=".implode(',',$itemfilters));
+  $opt['=phase'] = PAGELIST_ITEM;
+  $matches = array(); $opt['=readc'] = 0;
+  foreach((array)$list as $pn) {
+    $page = array();
+    foreach((array)$itemfilters as $fn) 
+      if (!$fn($list, $opt, $pn, $page)) continue 2;
+    $page['pagename'] = $page['name'] = $pn;
+    PCache($pn, $page);
+    $matches[] = $pn;
+  }
+  $list = $matches;
+  StopWatch("MakePageList post count=".count($list).", readc={$opt['=readc']}");
+
+  $opt['=phase'] = PAGELIST_POST; $pn=NULL; $page=NULL;
+  foreach((array)$postfilters as $fn) 
+    $fn($list, $opt, $pagename, $page);
+  
+  if ($retpages) 
+    for($i=0; $i<count($list); $i++)
+      $list[$i] = &$PCache[$list[$i]];
+  StopWatch('MakePageList end');
+  return $list;
+}
+
+
+function PageListProtect(&$list, &$opt, $pn, &$page) {
+  global $EnablePageListProtect;
+
+  switch ($opt['=phase']) {
+    case PAGELIST_PRE:
+      if (!IsEnabled($EnablePageListProtect, 1) && @$opt['readf'] < 1000)
+        return 0;
+      StopWatch("PageListProtect enabled");
+      $opt['=protectexclude'] = array();
+      $opt['=protectsafe'] = (array)@$opt['=protectsafe'];
+      return PAGELIST_ITEM|PAGELIST_POST;
+
+    case PAGELIST_ITEM:
+      if (@$opt['=protectsafe'][$pn]) return 1;
+      $page = RetrieveAuthPage($pn, 'ALWAYS', false, READPAGE_CURRENT);
+      $opt['=readc']++;
+      if (!$page['=auth']['read']) $opt['=protectexclude'][$pn] = 1;
+      if (!$page['=passwd']['read']) $opt['=protectsafe'][$pn] = 1; 
+      else NoCache();
+      return 1;
+
+    case PAGELIST_POST:
+      $excl = array_keys($opt['=protectexclude']);
+      $safe = array_keys($opt['=protectsafe']);
+      StopWatch("PageListProtect excluded=" .count($excl)
+                . ", safe=" . count($safe));
+      $list = array_diff($list, $excl);
+      return 1;
+  }
+}
+
+
+function PageListSources(&$list, &$opt, $pn, &$page) {
+  global $SearchPatterns;
+
+  StopWatch('PageListSources begin');
+  ## add the list= option to our list of pagename filter patterns
+  $opt['=pnfilter'] = array_merge((array)@$opt['=pnfilter'], 
+                                  (array)@$SearchPatterns[$opt['list']]);
+
+  if (@$opt['group']) $opt['=pnfilter'][] = FixGlob($opt['group'], '$1$2.*');
+  if (@$opt['name']) $opt['=pnfilter'][] = FixGlob($opt['name'], '$1*.$2');
+
+  if (@$opt['trail']) {
+    $trail = ReadTrail($pn, $opt['trail']);
+    $tlist = array();
+    foreach($trail as $tstop) {
+      $n = $tstop['pagename'];
+      $tlist[] = $n;
+      $tstop['parentnames'] = array();
+      PCache($n, $tstop);
+    }
+    foreach($trail as $tstop) 
+      $PCache[$tstop['pagename']]['parentnames'][] = 
+        @$trail[$tstop['parent']]['pagename'];
+    if (!@$opt['=cached']) $list = MatchPageNames($tlist, $opt['=pnfilter']);
+  } else if (!@$opt['=cached']) $list = ListPages($opt['=pnfilter']);
+
+  StopWatch("PageListSources end count=".count($list));
+  return 0;
+}
+
+
+function PageListPasswords(&$list, &$opt, $pn, &$page) {
+  if ($opt['=phase'] == PAGELIST_PRE)
+    return (@$opt['passwd'] > '' && !@$opt['=cached']) ? PAGELIST_ITEM : 0;
+
+  if (!$page) { $page = ReadPage($pn, READPAGE_CURRENT); $opt['=readc']++; }
+  if (!$page) return 0;
+  return (boolean)preg_grep('/^passwd/', array_keys($page));
+}
+
+
+function PageListIf(&$list, &$opt, $pn, &$page) {
+  global $Conditions, $Cursor;
+
+  ##  See if we have any "if" processing to perform
+  if ($opt['=phase'] == PAGELIST_PRE) 
+    return (@$opt['if'] > '') ? PAGELIST_ITEM : 0;
+
+  $condspec = $opt['if'];
+  $Cursor['='] = $pn;
+  $varpat = '\\{([=*]|!?[-\\w.\\/\\x80-\\xff]*)(\\$:?\\w+)\\}';
+  while (preg_match("/$varpat/", $condspec, $match)) {
+    $condspec = preg_replace("/$varpat/e", 
+                    "PVSE(PageVar(\$pn, '$2', '$1'))", $condspec);
+  }
+  if (!preg_match("/^\\s*(!?)\\s*(\\S*)\\s*(.*?)\\s*$/", $condspec, $match)) 
+    return 0;
+  list($x, $not, $condname, $condparm) = $match;
+  if (!isset($Conditions[$condname])) return 1;
+  $tf = (int)@eval("return ({$Conditions[$condname]});");
+  return (boolean)($tf xor $not);
+}
+
+
+function PageListTermsTargets(&$list, &$opt, $pn, &$page) {
+  global $FmtV;
+  static $reindex = array();
+  $fold = $GLOBALS['StrFoldFunction'];
+
+  switch ($opt['=phase']) {
+    case PAGELIST_PRE:
+      $FmtV['$MatchSearched'] = count($list);
+      $incl = array(); $excl = array();
+      foreach((array)@$opt[''] as $i) { $incl[] = $fold($i); }
+      foreach((array)@$opt['+'] as $i) { $incl[] = $fold($i); }
+      foreach((array)@$opt['-'] as $i) { $excl[] = $fold($i); }
+
+      $indexterms = PageIndexTerms($incl);
+      foreach($incl as $i) {
+        $delim = (!preg_match('/[^\\w\\x80-\\xff]/', $i)) ? '$' : '/';
+        $opt['=inclp'][] = $delim . preg_quote($i,$delim) . $delim . 'i';
+      }
+      if ($excl) 
+        $opt['=exclp'][] = '$'.implode('|', array_map('preg_quote',$excl)).'$i';
+
+      if (@$opt['link']) {
+        $link = MakePageName($pn, $opt['link']);
+        $opt['=linkp'] = "/(^|,)$link(,|$)/i";
+        $indexterms[] = " $link ";
+      }
+
+      if (@$opt['=cached']) return 0;
+      if ($indexterms) {
+        StopWatch("PageListTermsTargets begin count=".count($list));
+        $xlist = PageIndexGrep($indexterms, true);
+        $list = array_diff($list, $xlist);
+        StopWatch("PageListTermsTargets end count=".count($list));
+      }
+
+      if (@$opt['=inclp'] || @$opt['=exclp'] || @$opt['=linkp']) 
+        return PAGELIST_ITEM|PAGELIST_POST; 
+      return 0;
+
+    case PAGELIST_ITEM:
+      if (!$page) { $page = ReadPage($pn, READPAGE_CURRENT); $opt['=readc']++; }
+      if (!$page) return 0;
+      if (@$opt['=linkp'] && !preg_match($opt['=linkp'], @$page['targets'])) 
+        { $reindex[] = $pn; return 0; }
+      if (@$opt['=inclp'] || @$opt['=exclp']) {
+        $text = $fold($pn."\n".@$page['targets']."\n".@$page['text']);
+        foreach((array)@$opt['=exclp'] as $i) 
+          if (preg_match($i, $text)) return 0;
+        foreach((array)@$opt['=inclp'] as $i) 
+          if (!preg_match($i, $text)) { 
+            if ($i{0} == '$') $reindex[] = $pn;
+            return 0; 
+          }
+      }
+      return 1;
+
+    case PAGELIST_POST:
+      if ($reindex) PageIndexQueueUpdate($reindex);
+      $reindex = array();
+      return 0;
+  }
+}
+
+
+function PageListVariables(&$list, &$opt, $pn, &$page) {
+  switch ($opt['=phase']) {
+    case PAGELIST_PRE:
+      $varlist = preg_grep('/^\\$/', array_keys($opt));
+      if (!$varlist) return 0;
+      foreach($varlist as $v) {
+        list($inclp, $exclp) = GlobToPCRE($opt[$v]);
+        if ($inclp) $opt['=varinclp'][$v] = "/$inclp/i";
+        if ($exclp) $opt['=varexclp'][$v] = "/$exclp/i";
+      }
+      return PAGELIST_ITEM;
+
+    case PAGELIST_ITEM:
+      if (@$opt['=varinclp'])
+        foreach($opt['=varinclp'] as $v => $pat) 
+          if (!preg_match($pat, PageVar($pn, $v))) return 0;
+      if (@$opt['=varexclp'])
+        foreach($opt['=varexclp'] as $v => $pat) 
+           if (preg_match($pat, PageVar($pn, $v))) return 0;
+      return 1;
+  }
+}        
+
+
+function PageListSort(&$list, &$opt, $pn, &$page) {
+  global $PageListSortCmp, $PCache, $PageListSortRead;
+  SDVA($PageListSortRead, array('name' => 0, 'group' => 0, 'random' => 0,
+    'title' => 0));
+
+  switch ($opt['=phase']) {
+    case PAGELIST_PRE:
+      $ret = 0;
+      foreach(preg_split('/[\\s,|]+/', @$opt['order'], -1, PREG_SPLIT_NO_EMPTY) 
+              as $o) {
+        $ret |= PAGELIST_POST;
+        $r = '+';
+        if ($o{0} == '-') { $r = '-'; $o = substr($o, 1); }
+        $opt['=order'][$o] = $r;
+        if ($o{0} != '$' && 
+            (!isset($PageListSortRead[$o]) || $PageListSortRead[$o]))
+          $ret |= PAGELIST_ITEM;
+      }
+      StopWatch(@"PageListSort pre ret=$ret order={$opt['order']}");
+      return $ret;
+
+    case PAGELIST_ITEM:
+      if (!$page) { $page = ReadPage($pn, READPAGE_CURRENT); $opt['=readc']++; }
+      return 1;
+  }
+
+  ## case PAGELIST_POST
+  StopWatch('PageListSort begin');
+  $order = $opt['=order'];
+  if (@$order['title'])
+    foreach($list as $pn) $PCache[$pn]['=title'] = PageVar($pn, '$Title');
+  if (@$order['group'])
+    foreach($list as $pn) $PCache[$pn]['group'] = PageVar($pn, '$Group');
+  if (@$order['random']) 
+    { NoCache(); foreach($list as $pn) $PCache[$pn]['random'] = rand(); }
+  foreach(preg_grep('/^\\$/', array_keys($order)) as $o) 
+    foreach($list as $pn) 
+      $PCache[$pn][$o] = PageVar($pn, $o);
+  $code = '';
+  foreach($opt['=order'] as $o => $r) {
+    if (@$PageListSortCmp[$o]) 
+      $code .= "\$c = {$PageListSortCmp[$o]}; "; 
+    else 
+      $code .= "\$c = @strcasecmp(\$PCache[\$x]['$o'],\$PCache[\$y]['$o']); ";
+    $code .= "if (\$c) return $r\$c;\n";
+  }
+  StopWatch('PageListSort sort');
+  if ($code) 
+    uasort($list,
+           create_function('$x,$y', "global \$PCache; $code return 0;"));
+  StopWatch('PageListSort end');
+}
+
+
+function PageListCache(&$list, &$opt, $pn, &$page) {
+  global $PageListCacheDir, $LastModTime, $PageIndexFile;
+
+  if (@!$PageListCacheDir) return 0;
+  if (isset($opt['cache']) && !$opt['cache']) return 0;
+ 
+  $key = $opt['=key'];
+  $cache = "$PageListCacheDir/$key,cache"; 
+  switch ($opt['=phase']) {
+    case PAGELIST_PRE:
+      if (!file_exists($cache) || filemtime($cache) <= $LastModTime)
+        return PAGELIST_POST;
+      StopWatch("PageListCache begin load key=$key");
+      list($list, $opt['=protectsafe']) = 
+        unserialize(file_get_contents($cache));
+      $opt['=cached'] = 1;
+      StopWatch("PageListCache end load");
+      return 0;
+
+    case PAGELIST_POST:
+      StopWatch("PageListCache begin save key=$key");
+      $fp = @fopen($cache, "w");
+      if ($fp) {
+        fputs($fp, serialize(array($list, $opt['=protectsafe'])));
+        fclose($fp);
+      }
+      StopWatch("PageListCache end save");
+      return 0;
+  }
+  return 0;
+}
+
+
+## HandleSearchA performs ?action=search.  It's basically the same
+## as ?action=browse, except it takes its contents from Site.Search.
+function HandleSearchA($pagename, $level = 'read') {
+  global $PageSearchForm, $FmtV, $HandleSearchFmt, 
+    $PageStartFmt, $PageEndFmt;
+  SDV($HandleSearchFmt,array(&$PageStartFmt, '$PageText', &$PageEndFmt));
+  SDV($PageSearchForm, '$[{$SiteGroup}/Search]');
+  $form = RetrieveAuthPage($pagename, $level, true, READPAGE_CURRENT);
+  if (!$form) Abort("?unable to read $pagename");
+  PCache($pagename, $form);
+  $text = preg_replace('/\\[([=@])(.*?)\\1\\]/s', ' ', @$form['text']);
+  if (!preg_match('/\\(:searchresults(\\s.*?)?:\\)/', $text))
+    foreach((array)$PageSearchForm as $formfmt) {
+      $form = ReadPage(FmtPageName($formfmt, $pagename), READPAGE_CURRENT);
+      if ($form['text']) break;
+    }
+  $text = @$form['text'];
+  if (!$text) $text = '(:searchresults:)';
+  $FmtV['$PageText'] = MarkupToHTML($pagename,$text);
+  PrintFmt($pagename, $HandleSearchFmt);
+}
+
+
+########################################################################
+## The functions below provide different formatting options for
+## the output list, controlled by the fmt= parameter and the
+## $FPLFormatOpt hash.
+########################################################################
+
+## This helper function handles the count= parameter for extracting
+## a range of pagelist in the list.
+function CalcRange($range, $n) {
+  if ($n < 1) return array(0, 0);
+  if (strpos($range, '..') === false) {
+    if ($range > 0) return array(1, min($range, $n));
+    if ($range < 0) return array(max($n + $range + 1, 1), $n);
+    return array(1, $n);
+  }
+  list($r0, $r1) = explode('..', $range);
+  if ($r0 < 0) $r0 += $n + 1;
+  if ($r1 < 0) $r1 += $n + 1;
+  else if ($r1 == 0) $r1 = $n;
+  if ($r0 < 1 && $r1 < 1) return array($n+1, $n+1);
+  return array(max($r0, 1), max($r1, 1));
+}
+
+
+##  FPLCountA handles fmt=count
+function FPLCountA($pagename, &$matches, $opt) {
+  $matches = array_values(MakePageList($pagename, $opt, 0));
+  return count($matches);
+}
+
+
+##  FPLTemplate handles PagelistTemplates
+function FPLTemplate($pagename, &$matches, $opt) {
+  global $Cursor, $FPLTemplatePageFmt, $RASPageName, $PageListArgPattern;
+  SDV($FPLTemplatePageFmt, array('{$FullName}',
+    '{$SiteGroup}.LocalTemplates', '{$SiteGroup}.PageListTemplates'));
+
+  StopWatch("FPLTemplate begin");
+  $template = @$opt['template'];
+  if (!$template) $template = @$opt['fmt'];
+  $ttext = RetrieveAuthSection($pagename, $template, $FPLTemplatePageFmt);
+  $ttext = PVSE(Qualify($RASPageName, $ttext));
+
+  ##  save any escapes
+  $ttext = MarkupEscape($ttext);
+  ##  remove any anchor markups to avoid duplications
+  $ttext = preg_replace('/\\[\\[#[A-Za-z][-.:\\w]*\\]\\]/', '', $ttext);
+  
+  ##  extract portions of template
+  $tparts = preg_split('/\\(:(template)\\s+(\\w+)\\s*(.*?):\\)/i', $ttext, -1,
+                       PREG_SPLIT_DELIM_CAPTURE);
+
+  ##  handle (:template defaults:)
+  $i = 0;
+  while ($i < count($tparts)) {
+    if ($tparts[$i] != 'template') { $i++; continue; }
+    if ($tparts[$i+1] != 'defaults' && $tparts[$i+1] != 'default') { $i+=4; continue; }
+    $opt = array_merge(ParseArgs($tparts[$i+2], $PageListArgPattern), $opt);
+    array_splice($tparts, $i, 3);
+  }
+
+  SDVA($opt, array('class' => 'fpltemplate', 'wrap' => 'div'));
+
+  ##  get the list of pages
+  $matches = array_values(MakePageList($pagename, $opt, 0));
+  ##  extract page subset according to 'count=' parameter
+  if (@$opt['count']) {
+    list($r0, $r1) = CalcRange($opt['count'], count($matches));
+    if ($r1 < $r0) 
+      $matches = array_reverse(array_slice($matches, $r1-1, $r0-$r1+1));
+    else 
+      $matches = array_slice($matches, $r0-1, $r1-$r0+1);
+  }
+
+  $savecursor = $Cursor;
+  $pagecount = 0; $groupcount = 0; $grouppagecount = 0;
+  $pseudovars = array('{$$PageCount}' => &$pagecount, 
+                      '{$$GroupCount}' => &$groupcount, 
+                      '{$$GroupPageCount}' => &$grouppagecount);
+
+  foreach(preg_grep('/^[\\w$]/', array_keys($opt)) as $k) 
+    if (!is_array($opt[$k]))
+      $pseudovars["{\$\$$k}"] = htmlspecialchars($opt[$k], ENT_NOQUOTES);
+
+  $vk = array_keys($pseudovars);
+  $vv = array_values($pseudovars);
+
+  $lgroup = ''; $out = '';
+  foreach($matches as $i => $pn) {
+    $group = PageVar($pn, '$Group');
+    if ($group != $lgroup) { $groupcount++; $grouppagecount = 0; $lgroup = $group; }
+    $grouppagecount++; $pagecount++;
+
+    $t = 0;
+    while ($t < count($tparts)) {
+      if ($tparts[$t] != 'template') { $item = $tparts[$t]; $t++; }
+      else {
+        list($when, $control, $item) = array_slice($tparts, $t+1, 3); $t+=4;
+        if (!$control) {
+          if ($when == 'first' && $i != 0) continue;
+          if ($when == 'last' && $i != count($matches) - 1) continue;
+        } else {
+          if ($when == 'first' || !isset($last[$t])) {
+            $Cursor['<'] = $Cursor['&lt;'] = (string)@$matches[$i-1];
+            $Cursor['='] = $pn;
+            $Cursor['>'] = $Cursor['&gt;'] = (string)@$matches[$i+1];
+            $curr = str_replace($vk, $vv, $control);
+            $curr = preg_replace('/\\{(=|&[lg]t;)(\\$:?\\w+)\\}/e',
+                        "PageVar(\$pn, '$2', '$1')", $curr);
+            if ($when == 'first' && $i > 0 && $last[$t] == $curr) continue;
+            $last[$t] = $curr;
+          }
+          if ($when == 'last') {
+            $Cursor['<'] = $Cursor['&lt;'] = $pn;
+            $Cursor['='] = (string)@$matches[$i+1];
+            $Cursor['>'] = $Cursor['&gt;'] = (string)@$matches[$i+2];
+            $next = str_replace($vk, $vv, $control);
+            $next = preg_replace('/\\{(=|&[lg]t;)(\\$:?\\w+)\\}/e',
+                        "PageVar(\$pn, '$2', '$1')", $next);
+            if ($next == $last[$t] && $i != count($matches) - 1) continue;
+            $last[$t] = $next;
+          }
+        }
+      }
+      $Cursor['<'] = $Cursor['&lt;'] = (string)@$matches[$i-1];
+      $Cursor['='] = $pn;
+      $Cursor['>'] = $Cursor['&gt;'] = (string)@$matches[$i+1];
+      $item = str_replace($vk, $vv, $item);
+      $item = preg_replace('/\\{(=|&[lg]t;)(\\$:?\\w+)\\}/e',
+                  "PVSE(PageVar(\$pn, '$2', '$1'))", $item);
+      $out .= MarkupRestore($item);
+    }
+  }
+
+  $class = preg_replace('/[^-a-zA-Z0-9\\x80-\\xff]/', ' ', @$opt['class']);
+  if ($class) $class = " class='$class'";
+  $wrap = @$opt['wrap'];
+  if ($wrap != 'inline') {
+    $out = MarkupToHTML($pagename, $out, array('escape' => 0));
+    if ($wrap != 'none') $out = "<div$class>$out</div>";
+  }
+  $Cursor = $savecursor;
+  StopWatch("FPLTemplate end");
+  return $out;
+}
+
+
+########################################################################
+## The functions below optimize searches by maintaining a file of
+## words and link cross references (the "page index").
+########################################################################
+
+## PageIndexTerms($terms) takes an array of strings and returns a
+## normalized list of associated search terms.  This reduces the
+## size of the index and speeds up searches.
+function PageIndexTerms($terms) {
+  global $StrFoldFunction;
+  $w = array();
+  foreach((array)$terms as $t) {
+    $w = array_merge($w, preg_split('/[^\\w\\x80-\\xff]+/', 
+           $StrFoldFunction($t), -1, PREG_SPLIT_NO_EMPTY));
+  }
+ return $w;
+}
+
+## The PageIndexUpdate($pagelist) function updates the page index
+## file with terms and target links for the pages in $pagelist.
+## The optional $dir parameter allows this function to be called
+## via register_shutdown_function (which sometimes changes directories
+## on us).
+function PageIndexUpdate($pagelist = NULL, $dir = '') {
+  global $EnableReadOnly, $PageIndexUpdateList, $PageIndexFile, 
+    $PageIndexTime, $Now;
+  if (IsEnabled($EnableReadOnly, 0)) return;
+  $abort = ignore_user_abort(true);
+  if ($dir) { flush(); chdir($dir); }
+  if (is_null($pagelist)) 
+    { $pagelist = (array)$PageIndexUpdateList; $PageIndexUpdateList = array(); }
+  if (!$pagelist || !$PageIndexFile) return;
+  SDV($PageIndexTime, 10);
+  $c = count($pagelist); $updatecount = 0;
+  StopWatch("PageIndexUpdate begin ($c pages to update)");
+  $pagelist = (array)$pagelist;
+  $timeout = time() + $PageIndexTime;
+  $cmpfn = create_function('$a,$b', 'return strlen($b)-strlen($a);');
+  Lock(2);
+  $ofp = fopen("$PageIndexFile,new", 'w');
+  foreach($pagelist as $pn) {
+    if (@$updated[$pn]) continue;
+    @$updated[$pn]++;
+    if (time() > $timeout) continue;
+    $page = ReadPage($pn, READPAGE_CURRENT);
+    if ($page) {
+      $targets = str_replace(',', ' ', @$page['targets']);
+      $terms = PageIndexTerms(array(@$page['text'], $targets, $pn));
+      usort($terms, $cmpfn);
+      $x = '';
+      foreach($terms as $t) { if (strpos($x, $t) === false) $x .= " $t"; }
+      fputs($ofp, "$pn:$Now: $targets :$x\n");
+    }
+    $updatecount++;
+  }
+  $ifp = @fopen($PageIndexFile, 'r');
+  if ($ifp) {
+    while (!feof($ifp)) {
+      $line = fgets($ifp, 4096);
+      while (substr($line, -1, 1) != "\n" && !feof($ifp)) 
+        $line .= fgets($ifp, 4096);
+      $i = strpos($line, ':');
+      if ($i === false) continue;
+      $n = substr($line, 0, $i);
+      if (@$updated[$n]) continue;
+      fputs($ofp, $line);
+    }
+    fclose($ifp);
+  }
+  fclose($ofp);
+  if (file_exists($PageIndexFile)) unlink($PageIndexFile); 
+  rename("$PageIndexFile,new", $PageIndexFile);
+  fixperms($PageIndexFile);
+  StopWatch("PageIndexUpdate end ($updatecount updated)");
+  ignore_user_abort($abort);
+}
+
+## PageIndexQueueUpdate specifies pages to be updated in
+## the index upon shutdown (via register_shutdown function).
+function PageIndexQueueUpdate($pagelist) {
+  global $PageIndexUpdateList;
+  if (!@$PageIndexUpdateList) 
+    register_shutdown_function('PageIndexUpdate', NULL, getcwd());
+  $PageIndexUpdateList = array_merge((array)@$PageIndexUpdateList,
+                                     (array)$pagelist);
+  $c1 = count($pagelist); $c2 = count($PageIndexUpdateList);
+  StopWatch("PageIndexQueueUpdate: queued $c1 pages ($c2 total)");
+}
+
+## PageIndexGrep returns a list of pages that match the strings
+## provided.  Note that some search terms may need to be normalized
+## in order to get the desired results (see PageIndexTerms above).
+## Also note that this just works for the index; if the index is
+## incomplete, then so are the results returned by this list.
+## (MakePageList above already knows how to deal with this.)
+function PageIndexGrep($terms, $invert = false) {
+  global $PageIndexFile;
+  if (!$PageIndexFile) return array();
+  StopWatch('PageIndexGrep begin');
+  $pagelist = array();
+  $fp = @fopen($PageIndexFile, 'r');
+  if ($fp) {
+    $terms = (array)$terms;
+    while (!feof($fp)) {
+      $line = fgets($fp, 4096);
+      while (substr($line, -1, 1) != "\n" && !feof($fp))
+        $line .= fgets($fp, 4096);
+      $i = strpos($line, ':');
+      if (!$i) continue;
+      $add = true;
+      foreach($terms as $t) 
+        if (strpos($line, $t) === false) { $add = false; break; }
+      if ($add xor $invert) $pagelist[] = substr($line, 0, $i);
+    }
+    fclose($fp);
+  }
+  StopWatch('PageIndexGrep end');
+  return $pagelist;
+}
+  
+## PostPageIndex is inserted into $EditFunctions to update
+## the linkindex whenever a page is saved.
+function PostPageIndex($pagename, &$page, &$new) {
+  global $IsPagePosted;
+  if ($IsPagePosted) PageIndexQueueUpdate($pagename);
+}

Added: trunk/oggdsf/website/scripts/pagerev.php
===================================================================
--- trunk/oggdsf/website/scripts/pagerev.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/pagerev.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,143 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script defines routines for displaying page revisions.  It
+    is included by default from the stdconfig.php script.
+*/
+
+function LinkSuppress($pagename,$imap,$path,$title,$txt,$fmt=NULL) 
+  { return $txt; }
+
+SDV($DiffShow['minor'],(@$_REQUEST['minor']!='n')?'y':'n');
+SDV($DiffShow['source'],(@$_REQUEST['source']=='y')?'y':'n');
+SDV($DiffMinorFmt, ($DiffShow['minor']=='y') ?
+  "<a href='{\$PageUrl}?action=diff&amp;source=".$DiffShow['source']."&amp;minor=n'>$[Hide minor edits]</a>" :
+  "<a href='{\$PageUrl}?action=diff&amp;source=".$DiffShow['source']."&amp;minor=y'>$[Show minor edits]</a>" );
+SDV($DiffSourceFmt, ($DiffShow['source']=='y') ?
+  "<a href='{\$PageUrl}?action=diff&amp;source=n&amp;minor=".$DiffShow['minor']."'>$[Show changes to output]</a>" :
+  "<a href='{\$PageUrl}?action=diff&amp;source=y&amp;minor=".$DiffShow['minor']."'>$[Show changes to markup]</a>");
+SDV($PageDiffFmt,"<h2 class='wikiaction'>$[{\$FullName} History]</h2>
+  <p>$DiffMinorFmt - $DiffSourceFmt</p>
+  ");
+SDV($DiffStartFmt,"
+      <div class='diffbox'><div class='difftime'>\$DiffTime 
+        \$[by] <span class='diffauthor' title='\$DiffHost'>\$DiffAuthor</span> - \$DiffChangeSum</div>");
+SDV($DiffDelFmt['a'],"
+        <div class='difftype'>\$[Deleted line \$DiffLines:]</div>
+        <div class='diffdel'>");
+SDV($DiffDelFmt['c'],"
+        <div class='difftype'>\$[Changed line \$DiffLines from:]</div>
+        <div class='diffdel'>");
+SDV($DiffAddFmt['d'],"
+        <div class='difftype'>\$[Added line \$DiffLines:]</div>
+        <div class='diffadd'>");
+SDV($DiffAddFmt['c'],"</div>
+        <div class='difftype'>$[to:]</div>
+        <div class='diffadd'>");
+SDV($DiffEndDelAddFmt,"</div>");
+SDV($DiffEndFmt,"</div>");
+SDV($DiffRestoreFmt,"
+      <div class='diffrestore'><a href='{\$PageUrl}?action=edit&amp;restore=\$DiffId&amp;preview=y'>$[Restore]</a></div>");
+
+SDV($HandleActions['diff'], 'HandleDiff');
+SDV($HandleAuth['diff'], 'read');
+SDV($ActionTitleFmt['diff'], '| $[History]');
+SDV($HTMLStylesFmt['diff'], "
+  .diffbox { width:570px; border-left:1px #999999 solid; margin-top:1.33em; }
+  .diffauthor { font-weight:bold; }
+  .diffchangesum { font-weight:bold; }
+  .difftime { font-family:verdana,sans-serif; font-size:66%; 
+    background-color:#dddddd; }
+  .difftype { clear:both; font-family:verdana,sans-serif; 
+    font-size:66%; font-weight:bold; }
+  .diffadd { border-left:5px #99ff99 solid; padding-left:5px; }
+  .diffdel { border-left:5px #ffff99 solid; padding-left:5px; }
+  .diffrestore { clear:both; font-family:verdana,sans-serif; 
+    font-size:66%; margin:1.5em 0px; }
+  .diffmarkup { font-family:monospace; } ");
+
+function PrintDiff($pagename) {
+  global $DiffShow,$DiffStartFmt,$TimeFmt,$DiffDelFmt,$DiffAddFmt,
+    $DiffEndDelAddFmt,$DiffEndFmt,$DiffRestoreFmt,$FmtV, $LinkFunctions;
+  $page = ReadPage($pagename);
+  if (!$page) return;
+  krsort($page); reset($page);
+  $lf = $LinkFunctions;
+  $LinkFunctions['http:'] = 'LinkSuppress';
+  $LinkFunctions['https:'] = 'LinkSuppress';
+  foreach($page as $k=>$v) {
+    if (!preg_match("/^diff:(\d+):(\d+):?([^:]*)/",$k,$match)) continue;
+    $diffclass = $match[3];
+    if ($diffclass=='minor' && $DiffShow['minor']!='y') continue;
+    $diffgmt = $match[1]; $FmtV['$DiffTime'] = strftime($TimeFmt,$diffgmt); 
+    $diffauthor = @$page["author:$diffgmt"]; 
+    if (!$diffauthor) @$diffauthor=$page["host:$diffgmt"];
+    if (!$diffauthor) $diffauthor="unknown";
+    $FmtV['$DiffChangeSum'] = htmlspecialchars(@$page["csum:$diffgmt"]);
+    $FmtV['$DiffHost'] = @$page["host:$diffgmt"];
+    $FmtV['$DiffAuthor'] = $diffauthor;
+    $FmtV['$DiffId'] = $k; 
+    echo FmtPageName($DiffStartFmt,$pagename);
+    $difflines = explode("\n",$v."\n");
+    $in=array(); $out=array(); $dtype='';
+    foreach($difflines as $d) {
+      if ($d>'') {
+        if ($d[0]=='-' || $d[0]=='\\') continue;
+        if ($d[0]=='<') { $out[]=substr($d,2); continue; }
+        if ($d[0]=='>') { $in[]=substr($d,2); continue; }
+      }
+      if (preg_match("/^(\\d+)(,(\\d+))?([adc])(\\d+)(,(\\d+))?/",
+          $dtype,$match)) {
+        if (@$match[7]>'') {
+          $lines='lines';
+          $count=$match[1].'-'.($match[1]+$match[7]-$match[5]);
+        } elseif ($match[3]>'') {
+          $lines='lines'; $count=$match[1].'-'.$match[3];
+        } else { $lines='line'; $count=$match[1]; }
+        if ($match[4]=='a' || $match[4]=='c') {
+          $txt = str_replace('line',$lines,$DiffDelFmt[$match[4]]);
+          $FmtV['$DiffLines'] = $count;
+          echo FmtPageName($txt,$pagename);
+          if ($DiffShow['source']=='y') 
+            echo "<div class='diffmarkup'>",
+              str_replace("\n","<br />",htmlspecialchars(join("\n",$in))),
+              "</div>";
+          else echo MarkupToHTML($pagename,
+            preg_replace('/\\(:.*?:\\)/e',"Keep(PSS('$0'))",join("\n",$in)));
+        }
+        if ($match[4]=='d' || $match[4]=='c') {
+          $txt = str_replace('line',$lines,$DiffAddFmt[$match[4]]);
+          $FmtV['$DiffLines'] = $count;
+          echo FmtPageName($txt,$pagename);
+          if ($DiffShow['source']=='y') 
+            echo "<div class='diffmarkup'>",
+              str_replace("\n","<br />",htmlspecialchars(join("\n",$out))),
+              "</div>";
+          else echo MarkupToHTML($pagename,
+            preg_replace('/\\(:.*?:\\)/e',"Keep(PSS('$0'))",join("\n",$out)));
+        }
+        echo FmtPageName($DiffEndDelAddFmt,$pagename);
+      }
+      $in=array(); $out=array(); $dtype=$d;
+    }
+    echo FmtPageName($DiffEndFmt,$pagename);
+    echo FmtPageName($DiffRestoreFmt,$pagename);
+  }
+  $LinkFunctions = $lf;
+}
+
+function HandleDiff($pagename, $auth='read') {
+  global $HandleDiffFmt, $PageStartFmt, $PageDiffFmt, $PageEndFmt;
+  $page = RetrieveAuthPage($pagename, $auth, true);
+  if (!$page) { Abort("?cannot diff $pagename"); }
+  PCache($pagename, $page);
+  SDV($HandleDiffFmt,array(&$PageStartFmt,
+    &$PageDiffFmt,"<div id='wikidiff'>", 'function:PrintDiff', '</div>',
+    &$PageEndFmt));
+  PrintFmt($pagename,$HandleDiffFmt);
+}
+

Added: trunk/oggdsf/website/scripts/pgcust.php
===================================================================
--- trunk/oggdsf/website/scripts/pgcust.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/pgcust.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,39 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2002-2005 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script enables per-page and per-group customizations in the
+    local/ subdirectory (or whatever directory is given by $LocalDir).  
+    For example, to create customizations for the 'Demo' group, place 
+    them in a file called local/Demo.php.  To customize a single page, 
+    use the full page name (e.g., local/Demo.MyPage.php).  
+    Per-page/per-group customizations can be handled at any time by adding
+	include_once("scripts/pgcust.php");
+    to config.php.  It is automatically included by scripts/stdconfig.php
+    unless $EnablePGCust is set to zero in config.php.
+
+    A page's customization is loaded first, followed by any group
+    customization.  If no page or group customizations are loaded,
+    then 'local/default.php' is loaded.  
+
+    A per-page configuration file can prevent its group's config from 
+    loading by setting $EnablePGCust=0;.  A per-page configuration file 
+    can force group customizations to be loaded first by using include_once
+    on the group customization file.
+    
+*/
+
+$f = 1;
+for($p=$pagename;$p;$p=preg_replace('/\\.*[^.]*$/','',$p)) {
+  if (!IsEnabled($EnablePGCust,1)) return;
+  if (file_exists("$LocalDir/$p.php")) 
+    { include_once("$LocalDir/$p.php"); $f=0; }
+}
+
+if ($f && IsEnabled($EnablePGCust,1) && file_exists("$LocalDir/default.php"))
+  include_once("$LocalDir/default.php");
+
+

Added: trunk/oggdsf/website/scripts/phpdiff.php
===================================================================
--- trunk/oggdsf/website/scripts/phpdiff.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/phpdiff.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,116 @@
+<?php  if (!defined('PmWiki')) exit();
+/*  
+    Copyright 2003,2004 Nils Knappmeier (nk at knappi.org)
+    Copyright 2004-2005, 2007 Patrick R. Michaud (pmichaud at pobox.com)
+
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file implements a diff function in native PHP.  It is based
+    upon the PHPDiffEngine code written by Nils Knappmeier, who in turn
+    had used Daniel Unterberger's diff 
+    (http://www.holomind.de/phpnet/diff.php) as the basis for his code.
+
+    Pm's revision of Nils' code simply attempts to streamline it 
+    for speed (eliminate function calls and unnecessary string ops)
+    and place everything into a single file.
+
+*/
+
+## PHPDiff returns the differences between $old and $new, formatted
+## in the standard diff(1) output format.
+function PHPDiff($old, $new) 
+{
+   StopWatch("PHPDiff: begin");
+   # split the source text into arrays of lines
+   $t1 = explode("\n", $old);
+   $x = array_pop($t1); 
+   if ($x > '') $t1[] = "$x\n\\ No newline at end of file";
+   $t2 = explode("\n", $new);
+   $x = array_pop($t2); 
+   if ($x > '') $t2[] = "$x\n\\ No newline at end of file";
+
+   $t1_start = 0; $t1_end = count($t1);
+   $t2_start = 0; $t2_end = count($t2);
+
+   # stop with a common ending
+   while ($t1_start < $t1_end && $t2_start < $t2_end 
+          && $t1[$t1_end-1] == $t2[$t2_end-1]) { $t1_end--; $t2_end--; }
+
+   # skip over any common beginning
+   while ($t1_start < $t1_end && $t2_start < $t2_end 
+          && $t1[$t1_start] == $t2[$t2_start]) { $t1_start++; $t2_start++; }
+
+   # build a reverse-index array using the line as key and line number as value
+   # don't store blank lines, so they won't be targets of the shortest distance
+   # search
+   for($i = $t1_start; $i < $t1_end; $i++) if ($t1[$i]>'') $r1[$t1[$i]][] = $i;
+   for($i = $t2_start; $i < $t2_end; $i++) if ($t2[$i]>'') $r2[$t2[$i]][] = $i;
+
+   $a1 = $t1_start; $a2 = $t2_start;   # start at beginning of each list
+   $actions = array();
+
+   # walk this loop until we reach the end of one of the lists
+   while ($a1 < $t1_end && $a2 < $t2_end) {
+     # if we have a common element, save it and go to the next
+     if ($t1[$a1] == $t2[$a2]) { $actions[] = 4; $a1++; $a2++; continue; } 
+
+     # otherwise, find the shortest move (Manhattan-distance) from the
+     # current location
+     $best1 = $t1_end; $best2 = $t2_end;
+     $s1 = $a1; $s2 = $a2;
+     while(($s1 + $s2 - $a1 - $a2) < ($best1 + $best2 - $a1 - $a2)) {
+       $d = -1;
+       foreach((array)@$r1[$t2[$s2]] as $n) 
+         if ($n >= $s1) { $d = $n; break; }
+       if ($d >= $s1 && ($d + $s2 - $a1 - $a2) < ($best1 + $best2 - $a1 - $a2))
+         { $best1 = $d; $best2 = $s2; }
+       $d = -1;
+       foreach((array)@$r2[$t1[$s1]] as $n) 
+         if ($n >= $s2) { $d = $n; break; }
+       if ($d >= $s2 && ($s1 + $d - $a1 - $a2) < ($best1 + $best2 - $a1 - $a2))
+         { $best1 = $s1; $best2 = $d; }
+       $s1++; $s2++;
+     }
+     while ($a1 < $best1) { $actions[] = 1; $a1++; }  # deleted elements
+     while ($a2 < $best2) { $actions[] = 2; $a2++; }  # added elements
+  }
+
+  # we've reached the end of one list, now walk to the end of the other
+  while($a1 < $t1_end) { $actions[] = 1; $a1++; }  # deleted elements
+  while($a2 < $t2_end) { $actions[] = 2; $a2++; }  # added elements
+
+  # and this marks our ending point
+  $actions[] = 8;
+
+  # now, let's follow the path we just took and report the added/deleted
+  # elements into $out.
+  $op = 0;
+  $x0 = $x1 = $t1_start; $y0 = $y1 = $t2_start;
+  $out = array();
+  foreach($actions as $act) {
+    if ($act == 1) { $op |= $act; $x1++; continue; }
+    if ($act == 2) { $op |= $act; $y1++; continue; }
+    if ($op > 0) {
+      $xstr = ($x1 == ($x0+1)) ? $x1 : ($x0+1) . ",$x1";
+      $ystr = ($y1 == ($y0+1)) ? $y1 : ($y0+1) . ",$y1";
+      if ($op == 1) $out[] = "{$xstr}d{$y1}";
+      elseif ($op == 3) $out[] = "{$xstr}c{$ystr}";
+      while ($x0 < $x1) { $out[] = '< ' . $t1[$x0]; $x0++; }   # deleted elems
+      if ($op == 2) $out[] = "{$x1}a{$ystr}";
+      elseif ($op == 3) $out[] = '---';
+      while ($y0 < $y1) { $out[] = '> '.$t2[$y0]; $y0++; }   # added elems
+    }
+    $x1++; $x0 = $x1;
+    $y1++; $y0 = $y1;
+    $op = 0;
+  }
+  $out[] = '';
+  StopWatch("PHPDiff: end");
+  return join("\n",$out);
+}
+
+$DiffFunction = 'PHPDiff';
+

Added: trunk/oggdsf/website/scripts/prefs.php
===================================================================
--- trunk/oggdsf/website/scripts/prefs.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/prefs.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,47 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2005-2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script handles per-browser preferences.  Preference settings
+    are stored in wiki pages as XLPage translations, and a cookie on
+    the browser tells PmWiki where to find the browser's preferred
+    settings.
+
+    This script looks for a ?setprefs= request parameter (e.g., in
+    a url); when it finds one it sets a 'setprefs' cookie on the browser 
+    identifying the page to be used to load browser preferences,
+    and loads the associated preferences.
+
+    If there is no ?setprefs= request, then the script uses the
+    'setprefs' cookie from the browser to load the preference settings.
+*/
+
+SDV($PrefsCookie, $CookiePrefix.'setprefs');
+SDV($PrefsCookieExpires, $Now + 60 * 60 * 24 * 365);
+$LogoutCookies[] = $PrefsCookie;
+
+$sp = '';
+if (@$_COOKIE[$PrefsCookie]) $sp = $_COOKIE[$PrefsCookie];
+if (isset($_GET['setprefs'])) {
+  $sp = $_GET['setprefs'];
+  setcookie($PrefsCookie, $sp, $PrefsCookieExpires, '/');
+}
+if ($sp && PageExists($sp)) XLPage('prefs', $sp);
+
+XLSDV('en', array(
+  'ak_view' => '',
+  'ak_edit' => 'e',
+  'ak_history' => 'h',
+  'ak_print' => '',
+  'ak_recentchanges' => 'c',
+  'ak_save' => 's',
+  'ak_saveedit' => 'u',
+  'ak_savedraft' => 'd',
+  'ak_preview' => 'p',
+  'ak_em' => '',
+  'ak_strong' => '',
+  ));
+

Added: trunk/oggdsf/website/scripts/refcount.php
===================================================================
--- trunk/oggdsf/website/scripts/refcount.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/refcount.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,121 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file does simple reference counting on pages in a PmWiki site.
+    Simply activate this script using
+        include_once('scripts/refcount.php');
+    in the config.php file and then use ?action=refcount to bring up
+    the reference count form.  The output is a table where each row
+    of the table contains a page name or link reference, the number
+    of (non-RecentChanges) pages that contain links to the page,
+    the number of RecentChanges pages with links to the page, and the
+    total number of references in all pages.
+*/
+
+SDV($PageRefCountFmt,"<h2 class='wikiaction'>Reference Count Results</h2>");
+SDV($RefCountTimeFmt," <small>%Y-%b-%d %H:%M</small>");
+SDV($HandleActions['refcount'], 'HandleRefCount');
+
+function PrintRefCount($pagename) {
+  global $GroupPattern,$NamePattern,$PageRefCountFmt,$RefCountTimeFmt;
+  $pagelist = ListPages();
+  $grouplist = array();
+  foreach($pagelist as $pname) {
+    if (!preg_match("/^($GroupPattern)[\\/.]($NamePattern)$/",$pname,$m))
+      continue;
+    $grouplist[$m[1]]=$m[1];
+  }
+  asort($grouplist);
+  $grouplist = array_merge(array('all' => 'all groups'),$grouplist);
+
+  $wlist = array('all','missing','existing','orphaned');
+  $tlist = isset($_REQUEST['tlist']) ? $_REQUEST['tlist'] : array('all');
+  $flist = isset($_REQUEST['flist']) ? $_REQUEST['flist'] : array('all');
+  $whichrefs = @$_REQUEST['whichrefs'];
+  $showrefs = @$_REQUEST['showrefs'];
+  $submit = @$_REQUEST['submit'];
+
+  echo FmtPageName($PageRefCountFmt,$pagename);
+  echo "<form method='post'><input type='hidden' action='refcount'>
+    <table cellspacing='10'><tr><td valign='top'>Show
+    <br><select name='whichrefs'>";
+  foreach($wlist as $w)
+    echo "<option ",($whichrefs==$w) ? 'selected' : ''," value='$w'>$w\n";
+  echo "</select></td><td valign='top'> page names in group<br>
+    <select name='tlist[]' multiple size='4'>";
+  foreach($grouplist as $g=>$t)
+    echo "<option ",in_array($g,$tlist) ? 'selected' : ''," value='$g'>$t\n";
+  echo "</select></td><td valign='top'> referenced from pages in<br>
+    <select name='flist[]' multiple size='4'>";
+  foreach($grouplist as $g=>$t)
+    echo "<option ",in_array($g,$flist) ? 'selected' : ''," value='$g'>$t\n";
+  echo "</select></td></tr></table>
+    <p><input type='checkbox' name='showrefs' value='checked' $showrefs>
+      Display referencing pages
+    <p><input type='submit' name='submit' value='Search'></form><p><hr>";
+
+  if ($submit) {
+    foreach($pagelist as $pname) {
+      $ref = array();
+      $page = ReadPage($pname, READPAGE_CURRENT); 
+      if (!$page) continue;
+      $tref[$pname]['time'] = $page['time'];
+      if (!in_array('all',$flist) &&
+          !in_array(FmtPageName('$Group',$pname),$flist)) continue;
+      $rc = preg_match('/RecentChanges$/',$pname);
+      foreach(explode(',',@$page['targets']) as $r) {
+        if ($r=='') continue;
+        if ($rc) @$tref[$r]['rc']++;
+        else { @$tref[$r]['page']++; @$pref[$r][$pname]++; }
+      }
+    }
+    uasort($tref,'RefCountCmp');
+    echo "<table >
+      <tr><th></th><th colspan='2'>Referring pages</th></tr>
+      <tr><th>Name / Time</th><th>All</th><th>R.C.</th></tr>";
+    reset($tref);
+    foreach($tref as $p=>$c) {
+      if (!in_array('all',$tlist) &&
+          !in_array(FmtPageName('$Group',$p),$tlist)) continue;
+      if ($whichrefs=='missing' && PageExists($p)) continue;
+      elseif ($whichrefs=='existing' && !PageExists($p)) continue;
+      elseif ($whichrefs=='orphaned' &&
+        (@$tref[$p]['page']>0 || !PageExists($p))) continue;
+      echo "<tr><td valign='top'>",LinkPage($pagename, '', $p, '', $p);
+      if (@$tref[$p]['time']) echo strftime($RefCountTimeFmt,$tref[$p]['time']);
+      if ($showrefs && is_array(@$pref[$p])) {
+        foreach($pref[$p] as $pr=>$pc) 
+          echo "<dd>", LinkPage($pagename, '', $pr, '', $pr);
+      }
+      echo "</td>";
+      echo "<td align='center' valign='top'>",@$tref[$p]['page']+0,"</td>";
+      echo "<td align='center' valign='top'>",@$tref[$p]['rc']+0,"</td>";
+      echo "</tr>";
+    }
+    echo "</table>";
+  }
+}
+
+
+function RefCountCmp($ua,$ub) {
+  if (@($ua['page']!=$ub['page'])) return @($ub['page']-$ua['page']);
+  if (@($ua['rc']!=$ub['rc'])) return @($ub['rc']-$ua['rc']);
+  return @($ub['time']-$ua['time']);
+}
+
+
+
+function HandleRefCount($pagename, $auth='read') {
+  global $HandleRefCountFmt,$PageStartFmt,$PageEndFmt;
+  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
+  if (!$page) Abort('?unauthorized');
+  PCache($pagename, $page);
+  SDV($HandleRefCountFmt,array(&$PageStartFmt,
+    'function:PrintRefCount',&$PageEndFmt));
+  PrintFmt($pagename,$HandleRefCountFmt);
+}
+

Added: trunk/oggdsf/website/scripts/robots.php
===================================================================
--- trunk/oggdsf/website/scripts/robots.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/robots.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,76 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2005-2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file provides various features to allow PmWiki to control
+    what web crawlers (robots) see when they visit the site.  Of course
+    it's still possible to control robots at the webserver level 
+    and via robots.txt, but this page provides some finer level
+    of control.
+
+    The $MetaRobots variable controls generation of the 
+    <meta name='robots' ... /> tag in the head of the HTML document.
+    By default $MetaRobots is set so that robots do not index pages in
+    the Site, SiteAdmin, and PmWiki groups.
+
+    The $RobotPattern variable is used to determine if the user agent
+    accessing the site is a robot, and $IsRobotAgent is set accordingly.  
+    By default this pattern identifies Googlebot, Yahoo! Slurp, msnbot, 
+    BecomeBot, and HTTrack as robots.
+
+    If the agent is deemed a robot, then the $RobotActions array is
+    checked to see if robots are allowed to perform the given action,
+    and if not the robot is immediately sent an HTTP 403 Forbidden
+    response.
+
+    If $EnableRobotCloakActions is set, then a pattern is added to
+    $FmtP to hide any "?action=" url parameters in page urls
+    generated by PmWiki for actions that robots aren't allowed to
+    access.  This can greatly reduce the load on the server by 
+    not providing the robot with links to pages that it will be 
+    forbidden to index anyway.  
+*/
+
+## $MetaRobots provides the value for the <meta name='robots' ...> tag.
+SDV($MetaRobots,
+      ($action!='browse' || !PageExists($pagename)
+        || preg_match('#^PmWiki[./](?!PmWiki$)|^Site(Admin)?[./]#', $pagename))
+      ? 'noindex,nofollow' : 'index,follow');
+if ($MetaRobots)
+  $HTMLHeaderFmt['robots'] =
+    "  <meta name='robots' content='\$MetaRobots' />\n";
+
+## $RobotPattern is used to identify robots.
+SDV($RobotPattern,'Googlebot|Slurp|msnbot|Teoma|ia_archiver|BecomeBot|HTTrack|MJ12bot|XML Sitemaps');
+SDV($IsRobotAgent, 
+  $RobotPattern && preg_match("!$RobotPattern!", @$_SERVER['HTTP_USER_AGENT']));
+if (!$IsRobotAgent) return;
+
+## $RobotActions indicates which actions a robot is allowed to perform.
+SDVA($RobotActions, array('browse' => 1, 'rss' => 1, 'dc' => 1));
+if (!@$RobotActions[$action]) {
+  $pagename = ResolvePageName($pagename);
+  if (!PageExists($pagename)) {
+    header("HTTP/1.1 404 Not Found");
+    print("<h1>Not Found</h1>");
+    exit();
+  }
+  header("HTTP/1.1 403 Forbidden");
+  print("<h1>Forbidden</h1>");
+  exit();
+}
+
+## The following removes any ?action= parameters that robots aren't
+## allowed to access.
+if (IsEnabled($EnableRobotCloakActions, 0)) {
+  $p = create_function('$a', 'return (boolean)$a;');
+  $p = join('|', array_keys(array_filter($RobotActions, $p)));
+  $FmtPV['$PageUrl'] = 
+    'PUE(($EnablePathInfo)
+         ? "\\$ScriptUrl/$group/$name"
+         : "\\$ScriptUrl?n=$group.$name")';
+  $FmtP["/(\\\$ScriptUrl[^#\"'\\s<>]+)\\?action=(?!$p)\\w+/"] = '$1';
+}

Added: trunk/oggdsf/website/scripts/simuledit.php
===================================================================
--- trunk/oggdsf/website/scripts/simuledit.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/simuledit.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,67 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file enables merging of concurrent edits, using the "diff3"
+    program available on most Unix systems to merge the edits.  If 
+    diff3 is not available or you'd like to use a different command, 
+    then set $SysMergeCmd accordingly.
+*/
+
+array_unshift($EditFunctions,'MergeSimulEdits');
+$HTMLStylesFmt['simuledit'] = ".editconflict { color:green; 
+  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n";
+
+function Merge($newtext,$oldtext,$pagetext) {
+  global $WorkDir,$SysMergeCmd;
+  SDV($SysMergeCmd,"/usr/bin/diff3 -L '' -L '' -L '' -m -E");
+  if (substr($newtext,-1,1)!="\n") $newtext.="\n";
+  if (substr($oldtext,-1,1)!="\n") $oldtext.="\n";
+  if (substr($pagetext,-1,1)!="\n") $pagetext.="\n";
+  $tempnew = tempnam($WorkDir,"new");
+  $tempold = tempnam($WorkDir,"old");
+  $temppag = tempnam($WorkDir,"page");
+  if ($newfp=fopen($tempnew,'w')) { fputs($newfp,$newtext); fclose($newfp); }
+  if ($oldfp=fopen($tempold,'w')) { fputs($oldfp,$oldtext); fclose($oldfp); }
+  if ($pagfp=fopen($temppag,'w')) { fputs($pagfp,$pagetext); fclose($pagfp); }
+  $mergetext = '';
+  $merge_handle = popen("$SysMergeCmd $tempnew $tempold $temppag",'r');
+  if ($merge_handle) {
+    while (!feof($merge_handle)) $mergetext .= fread($merge_handle,4096);
+    pclose($merge_handle);
+  }
+  @unlink($tempnew); @unlink($tempold); @unlink($temppag);
+  return $mergetext;
+}
+
+function MergeSimulEdits($pagename,&$page,&$new) {
+  global $Now, $EnablePost, $MessagesFmt, $WorkDir;
+  if (@!$_POST['basetime'] || !PageExists($pagename) 
+      || $page['time'] >= $Now
+      || $_POST['basetime']>=$page['time']
+      || $page['text'] == $new['text']) return;
+  $EnablePost = 0;
+  $old = array();
+  RestorePage($pagename,$page,$old,"diff:{$_POST['basetime']}");
+  $text = Merge($new['text'],$old['text'],$page['text']);
+  if ($text > '') { $new['text'] = $text; $ec = '$[EditConflict]'; }
+  else $ec = '$[EditWarning]';
+  XLSDV('en', array(
+    'EditConflict' => "The page you are
+      editing has been modified since you started editing it.
+      The modifications have been merged into the text below, 
+      you may want to verify the results of the merge before
+      pressing save.  Conflicts the system couldn't resolve are
+      bracketed by &lt;&lt;&lt;&lt;&lt;&lt;&lt; and
+      &gt;&gt;&gt;&gt;&gt;&gt;&gt;.",
+    'EditWarning' => "The page you are editing has been modified
+      since you started editing it.  If you continue, your
+      changes will overwrite any changes that others have made."));
+  $MessagesFmt[] = "<p class='editconflict'>$ec
+    (<a target='_blank' href='\$PageUrl?action=diff'>$[View changes]</a>)
+    </p>\n";
+}
+

Added: trunk/oggdsf/website/scripts/skins.php
===================================================================
--- trunk/oggdsf/website/scripts/skins.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/skins.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,147 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file implements the skin selection code for PmWiki.  Skin 
+    selection is controlled by the $Skin variable, which can also
+    be an array (in which case the first skin found is loaded).
+
+    In addition, $ActionSkin[$action] specifies other skins to be
+    searched based on the current action.
+
+*/
+
+SDV($Skin, 'pmwiki');
+SDV($ActionSkin['print'], 'print');
+SDV($FarmPubDirUrl, $PubDirUrl);
+SDV($PageLogoUrl, "$FarmPubDirUrl/skins/pmwiki/pmwiki-32.gif");
+SDVA($TmplDisplay, array('PageEditFmt' => 0));
+
+# $PageTemplateFmt is deprecated
+if (isset($PageTemplateFmt)) LoadPageTemplate($pagename,$PageTemplateFmt);
+else {
+  $x = array_merge((array)@$ActionSkin[$action], (array)$Skin);
+  SetSkin($pagename, $x);
+}
+
+SDV($PageCSSListFmt,array(
+  'pub/css/local.css' => '$PubDirUrl/css/local.css',
+  'pub/css/{$Group}.css' => '$PubDirUrl/css/{$Group}.css',
+  'pub/css/{$FullName}.css' => '$PubDirUrl/css/{$FullName}.css'));
+
+foreach((array)$PageCSSListFmt as $k=>$v) 
+  if (file_exists(FmtPageName($k,$pagename))) 
+    $HTMLHeaderFmt[] = "<link rel='stylesheet' type='text/css' href='$v' />\n";
+
+# SetSkin changes the current skin to the first available skin from 
+# the $skin array.
+function SetSkin($pagename, $skin) {
+  global $Skin, $SkinLibDirs, $SkinDir, $SkinDirUrl, 
+    $IsTemplateLoaded, $PubDirUrl, $FarmPubDirUrl, $FarmD, $GCount;
+  SDV($SkinLibDirs, array(
+    "./pub/skins/\$Skin"      => "$PubDirUrl/skins/\$Skin",
+    "$FarmD/pub/skins/\$Skin" => "$FarmPubDirUrl/skins/\$Skin"));
+  foreach((array)$skin as $sfmt) {
+    $Skin = FmtPageName($sfmt, $pagename); $GCount = 0;
+    foreach($SkinLibDirs as $dirfmt => $urlfmt) {
+      $SkinDir = FmtPageName($dirfmt, $pagename);
+      if (is_dir($SkinDir)) 
+        { $SkinDirUrl = FmtPageName($urlfmt, $pagename); break 2; }
+    }
+  }
+  if (!is_dir($SkinDir)) {
+    unset($Skin);
+    Abort("?unable to find skin from list ".implode(' ',(array)$skin));
+  }
+  $IsTemplateLoaded = 0;
+  if (file_exists("$SkinDir/$Skin.php"))
+    include_once("$SkinDir/$Skin.php");
+  else if (file_exists("$SkinDir/skin.php"))
+    include_once("$SkinDir/skin.php");
+  if ($IsTemplateLoaded) return;
+  if (file_exists("$SkinDir/$Skin.tmpl")) 
+    LoadPageTemplate($pagename, "$SkinDir/$Skin.tmpl");
+  else if (file_exists("$SkinDir/skin.tmpl"))
+    LoadPageTemplate($pagename, "$SkinDir/skin.tmpl");
+  else if (($dh = opendir($SkinDir))) {
+    while (($fname = readdir($dh)) !== false) {
+      if ($fname[0] == '.') continue;
+      if (substr($fname, -5) != '.tmpl') continue;
+      if ($IsTemplateLoaded) 
+        Abort("?unable to find unique template in $SkinDir");
+      LoadPageTemplate($pagename, "$SkinDir/$fname");
+    }
+    closedir($dh);
+  }
+  if (!$IsTemplateLoaded) Abort("Unable to load $Skin template", 'skin');
+}
+
+
+# LoadPageTemplate loads a template into $TmplFmt
+function LoadPageTemplate($pagename,$tfilefmt) {
+  global $PageStartFmt, $PageEndFmt, 
+    $EnableSkinDiag, $HTMLHeaderFmt, $HTMLFooterFmt,
+    $IsTemplateLoaded, $TmplFmt, $TmplDisplay,
+    $PageTextStartFmt, $PageTextEndFmt, $SkinDirectivesPattern;
+
+  SDV($PageTextStartFmt, "\n<div id='wikitext'>\n");
+  SDV($PageTextEndFmt, "</div>\n");
+  SDV($SkinDirectivesPattern, 
+      "[[<]!--((?:wiki|file|function|markup):.*?)--[]>]");
+
+  $sddef = array('PageEditFmt' => 0);
+  $k = implode('', file(FmtPageName($tfilefmt, $pagename)));
+
+  if (IsEnabled($EnableSkinDiag, 0)) {
+    if (!preg_match('/<!--((No)?(HT|X)MLHeader|HeaderText)-->/i', $k))
+      Abort("Skin template missing &lt;!--HTMLHeader--&gt;", 'htmlheader');
+    if (!preg_match('/<!--(No)?(HT|X)MLFooter-->/i', $k))
+      Abort("Skin template missing &lt;!--HTMLFooter--&gt;", 'htmlheader');
+  }
+
+  $sect = preg_split(
+    '#[[<]!--(/?(?:Page[A-Za-z]+Fmt|(?:HT|X)ML(?:Head|Foot)er|HeaderText|PageText).*?)--[]>]#',
+    $k, 0, PREG_SPLIT_DELIM_CAPTURE);
+  $TmplFmt['Start'] = array_merge(array('headers:'),
+    preg_split("/$SkinDirectivesPattern/s",
+      array_shift($sect),0,PREG_SPLIT_DELIM_CAPTURE));
+  $TmplFmt['End'] = array($PageTextEndFmt);
+  $ps = 'Start';
+  while (count($sect)>0) {
+    $k = array_shift($sect);
+    $v = preg_split("/$SkinDirectivesPattern/s",
+      array_shift($sect),0,PREG_SPLIT_DELIM_CAPTURE);
+    $TmplFmt[$ps][] = "<!--$k-->";
+    if ($k{0} == '/') 
+      { $TmplFmt[$ps][] = (count($v) > 1) ? $v : $v[0]; continue; }
+    @list($var, $sd) = explode(' ', $k, 2);
+    $GLOBALS[$var] = (count($v) > 1) ? $v : $v[0];
+    if ($sd > '') $sddef[$var] = $sd;
+    if ($var == 'PageText') { $ps = 'End'; }
+    if ($var == 'HTMLHeader' || $var == 'XMLHeader') 
+      $TmplFmt[$ps][] = &$HTMLHeaderFmt; 
+    if ($var == 'HTMLFooter' || $var == 'XMLFooter') 
+      $TmplFmt[$ps][] = &$HTMLFooterFmt; 
+    ##   <!--HeaderText--> deprecated, 2.1.16
+    if ($var == 'HeaderText') { $TmplFmt[$ps][] = &$HTMLHeaderFmt; }
+    $TmplFmt[$ps][$var] =& $GLOBALS[$var];
+  }
+  array_push($TmplFmt['Start'], $PageTextStartFmt);
+  $PageStartFmt = 'function:PrintSkin Start';
+  $PageEndFmt = 'function:PrintSkin End';
+  $IsTemplateLoaded = 1;
+  SDVA($TmplDisplay, $sddef);
+}
+
+# This function is called to print a portion of the skin template
+# according to the settings in $TmplDisplay.
+function PrintSkin($pagename, $arg) {
+  global $TmplFmt, $TmplDisplay;
+  foreach ($TmplFmt[$arg] as $k => $v) 
+    if (!isset($TmplDisplay[$k]) || $TmplDisplay[$k])
+      PrintFmt($pagename, $v);
+}
+

Added: trunk/oggdsf/website/scripts/stdconfig.php
===================================================================
--- trunk/oggdsf/website/scripts/stdconfig.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/stdconfig.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,89 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2002-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This file allows features to be easily enabled/disabled in config.php.
+    Simply set variables for the features to be enabled/disabled in config.php
+    before including this file.  For example:
+        $EnableQAMarkup=0;                      #disable Q: and A: tags
+        $EnableWikiStyles=1;                    #include default wikistyles
+    Each feature has a default setting, if the corresponding $Enable
+    variable is not set then you get the default.
+
+    To avoid processing any of the features of this file, set 
+        $EnableStdConfig = 0;
+    in config.php.
+*/
+
+$pagename = ResolvePageName($pagename);
+
+if (!IsEnabled($EnableStdConfig,1)) return;
+
+if (!function_exists('session_start') && IsEnabled($EnableRequireSession, 1))
+  Abort('PHP is lacking session support', 'session');
+
+if (IsEnabled($EnablePGCust,1))
+  include_once("$FarmD/scripts/pgcust.php");
+
+if (IsEnabled($EnableRobotControl,1))
+  include_once("$FarmD/scripts/robots.php");
+
+if (IsEnabled($EnableCaches, 1))
+  include_once("$FarmD/scripts/caches.php");
+
+## Scripts that are part of a standard PmWiki distribution.
+if (IsEnabled($EnableAuthorTracking,1)) 
+  include_once("$FarmD/scripts/author.php");
+if (IsEnabled($EnablePrefs, 1))
+  include_once("$FarmD/scripts/prefs.php");
+if (IsEnabled($EnableSimulEdit, 1))
+  include_once("$FarmD/scripts/simuledit.php");
+if (IsEnabled($EnableDrafts, 0))
+  include_once("$FarmD/scripts/draft.php");        # after simuledit + prefs
+if (IsEnabled($EnableSkinLayout,1))
+  include_once("$FarmD/scripts/skins.php");        # must come after prefs
+if (@$Transition || IsEnabled($EnableTransitions, 0))
+  include_once("$FarmD/scripts/transition.php");   # must come after skins
+if (@$LinkWikiWords || IsEnabled($EnableWikiWords, 0))
+  include_once("$FarmD/scripts/wikiwords.php");    # must come before stdmarkup
+if (IsEnabled($EnableStdMarkup,1))
+  include_once("$FarmD/scripts/stdmarkup.php");    # must come after transition
+if ($action=='diff' && @!$HandleActions['diff'])
+  include_once("$FarmD/scripts/pagerev.php");
+if (IsEnabled($EnableWikiTrails,1))
+  include_once("$FarmD/scripts/trails.php");
+if (IsEnabled($EnableWikiStyles,1))
+  include_once("$FarmD/scripts/wikistyles.php");
+if (IsEnabled($EnableMarkupExpressions, 1) 
+    && !function_exists('MarkupExpression'))
+  include_once("$FarmD/scripts/markupexpr.php");
+if (IsEnabled($EnablePageList,1))
+  include_once("$FarmD/scripts/pagelist.php");
+if (IsEnabled($EnableVarMarkup,1))
+  include_once("$FarmD/scripts/vardoc.php");
+if (!function_exists(@$DiffFunction)) 
+  include_once("$FarmD/scripts/phpdiff.php");
+if ($action=='crypt')
+  include_once("$FarmD/scripts/crypt.php");
+if ($action=='edit' && IsEnabled($EnableGUIButtons,0))
+  include_once("$FarmD/scripts/guiedit.php");
+if (IsEnabled($EnableForms,1))                     
+  include_once("$FarmD/scripts/forms.php");       # must come after prefs
+if (IsEnabled($EnableUpload,0))
+  include_once("$FarmD/scripts/upload.php");      # must come after forms
+if (IsEnabled($EnableBlocklist, 0))
+  include_once("$FarmD/scripts/blocklist.php");
+if (IsEnabled($EnableNotify,0))
+  include_once("$FarmD/scripts/notify.php");
+if (IsEnabled($EnableDiag,0)) 
+  include_once("$FarmD/scripts/diag.php");
+
+if (IsEnabled($EnableUpgradeCheck,1)) {
+  SDV($StatusPageName, "$SiteAdminGroup.Status");
+  $page = ReadPage($StatusPageName, READPAGE_CURRENT);
+  if (@$page['updatedto'] != $VersionNum) 
+    { $action = 'upgrade'; include_once("$FarmD/scripts/upgrades.php"); }
+}

Added: trunk/oggdsf/website/scripts/stdmarkup.php
===================================================================
--- trunk/oggdsf/website/scripts/stdmarkup.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/stdmarkup.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,490 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script defines PmWiki's standard markup.  It is automatically
+    included from stdconfig.php unless $EnableStdMarkup==0.
+
+    Each call to Markup() below adds a new rule to PmWiki's translation
+    engine (unless a rule with the same name has already been defined).  
+    The form of the call is Markup($id,$where,$pat,$rep); 
+    $id is a unique name for the rule, $where is the position of the rule
+    relative to another rule, $pat is the pattern to look for, and
+    $rep is the string to replace it with.
+*/
+
+## first we preserve text in [=...=] and [@...@]
+function PreserveText($sigil, $text, $lead) {
+  if ($sigil=='=') return $lead.Keep($text);
+  if (strpos($text, "\n")===false) 
+    return "$lead<code class='escaped'>".Keep($text)."</code>";
+  $text = preg_replace("/\n[^\\S\n]+$/", "\n", $text);
+  if ($lead == "" || $lead == "\n") 
+    return "$lead<pre class='escaped'>".Keep($text)."</pre>";
+  return "$lead<:pre,1>".Keep($text);
+}
+
+Markup('[=','_begin',"/(\n[^\\S\n]*)?\\[([=@])(.*?)\\2\\]/se",
+    "PreserveText('$2', PSS('$3'), '$1')");
+Markup('restore','<_end',"/$KeepToken(\\d.*?)$KeepToken/e",
+    '$GLOBALS[\'KPV\'][\'$1\']');
+Markup('<:', '>restore',
+  '/<:[^>]*>/', '');
+Markup('<vspace>', '<restore', 
+  '/<vspace>/', 
+  "<div class='vspace'></div>");
+Markup('<vspace><p>', '<<vspace>',
+  "/<vspace><p\\b(([^>]*)(\\s)class=(['\"])([^>]*?)\\4)?/",
+  "<p$2 class='vspace$3$5'");
+
+## remove carriage returns before preserving text
+Markup('\\r','<[=','/\\r/','');
+
+# $[phrase] substitutions
+Markup('$[phrase]', '>[=',
+  '/\\$\\[(?>([^\\]]+))\\]/e', "NoCache(XL(PSS('$1')))");
+
+# {$var} substitutions
+Markup('{$var}', '>$[phrase]',
+  '/\\{(\\*|!?[-\\w.\\/\\x80-\\xff]*)(\\$:?\\w+)\\}/e', 
+  "PRR(PVSE(PageVar(\$pagename, '$2', '$1')))");
+
+# invisible (:textvar:...:) definition
+Markup('textvar:', '<split',
+  '/\\(:\\w[-\\w]*:(?!\\)).*?:\\)/s', '');
+
+## handle relative text vars in includes
+if (IsEnabled($EnableRelativePageVars, 0)) 
+  SDV($QualifyPatterns["/\\{([-\\w\\x80-\\xfe]*)(\\$:?\\w+\\})/e"], 
+    "'{' . ('$1' ? MakePageName(\$pagename, '$1') : \$pagename) . '$2'");
+
+## character entities
+Markup('&','<if','/&amp;(?>([A-Za-z0-9]+|#\\d+|#[xX][A-Fa-f0-9]+));/',
+  '&$1;');
+Markup('&amp;amp;', '<&', '/&amp;amp;/', Keep('&amp;'));
+
+
+## (:if:)/(:elseif:)/(:else:)
+Markup('if', 'fulltext',
+  "/ \\(:if (?:end)? \\b[^\n]*?:\\)
+     .*?
+     (?: \\(: (?:if|ifend) \\s* :\\)
+     |   (?=\\(:(?:if|ifend)\\b[^\n]*?:\\) | $)
+     )
+   /seix",
+  "CondText2(\$pagename, PSS('$0'))");
+
+function CondText2($pagename, $text) {
+  global $Conditions;
+  $parts = preg_split('/\\(:(?:ifend|if|else *if|else)\\b\\s*(.*?)\\s*:\\)/', 
+                      $text, -1, PREG_SPLIT_DELIM_CAPTURE);
+  $x = array_shift($parts);
+  while ($parts) {
+    list($condspec, $condtext) = array_splice($parts, 0, 2);
+    if (!preg_match("/^\\s*(!?)\\s*(\\S*)\\s*(.*?)\\s*$/", $condspec, $match)) continue;
+    list($x, $not, $condname, $condparm) = $match;
+    if (!isset($Conditions[$condname])) return $condtext;
+    $tf = @eval("return ({$Conditions[$condname]});");
+    if ($tf xor $not) return $condtext;
+  }
+  return '';
+}
+
+
+## (:include:)
+Markup('include', '>if',
+  '/\\(:include\\s+(\\S.*?):\\)/ei',
+  "PRR(IncludeText(\$pagename, PSS('$1')))");
+
+## (:redirect:)
+Markup('redirect', '<include',
+  '/\\(:redirect\\s+(\\S.*?):\\)/ei',
+  "RedirectMarkup(\$pagename, PSS('$1'))");
+
+$SaveAttrPatterns['/\\(:(if|include|redirect)(\\s.*?)?:\\)/i'] = ' ';
+
+## GroupHeader/GroupFooter handling
+Markup('nogroupheader', '>include',
+  '/\\(:nogroupheader:\\)/ei',
+  "PZZ(\$GLOBALS['GroupHeaderFmt']='')");
+Markup('nogroupfooter', '>include',
+  '/\\(:nogroupfooter:\\)/ei',
+  "PZZ(\$GLOBALS['GroupFooterFmt']='')");
+Markup('groupheader', '>nogroupheader',
+  '/\\(:groupheader:\\)/ei',
+  "PRR(FmtPageName(\$GLOBALS['GroupHeaderFmt'],\$pagename))");
+Markup('groupfooter','>nogroupfooter',
+  '/\\(:groupfooter:\\)/ei',
+  "PRR(FmtPageName(\$GLOBALS['GroupFooterFmt'],\$pagename))");
+
+## (:nl:)
+Markup('nl0','<split',"/([^\n])(?>(?:\\(:nl:\\))+)([^\n])/i","$1\n$2");
+Markup('nl1','>nl0',"/\\(:nl:\\)/i",'');
+
+## \\$  (end of line joins)
+Markup('\\$','>nl1',"/\\\\(?>(\\\\*))\n/e",
+  "str_repeat('<br />',strlen('$1'))");
+
+## Remove one <:vspace> after !headings
+Markup('!vspace', '>\\$', "/^(!(?>[^\n]+)\n)<:vspace>/m", '$1');
+
+## (:noheader:),(:nofooter:),(:notitle:)...
+Markup('noheader', 'directives',
+  '/\\(:noheader:\\)/ei',
+  "SetTmplDisplay('PageHeaderFmt',0)");
+Markup('nofooter', 'directives',
+  '/\\(:nofooter:\\)/ei',
+  "SetTmplDisplay('PageFooterFmt',0)");
+Markup('notitle', 'directives',
+  '/\\(:notitle:\\)/ei',
+  "SetTmplDisplay('PageTitleFmt',0)");
+Markup('noleft', 'directives',
+  '/\\(:noleft:\\)/ei',
+  "SetTmplDisplay('PageLeftFmt',0)");
+Markup('noright', 'directives',
+  '/\\(:noright:\\)/ei',
+  "SetTmplDisplay('PageRightFmt',0)");
+Markup('noaction', 'directives',
+  '/\\(:noaction:\\)/ei',
+  "SetTmplDisplay('PageActionFmt',0)");
+
+## (:spacewikiwords:)
+Markup('spacewikiwords', 'directives',
+  '/\\(:(no)?spacewikiwords:\\)/ei',
+  "PZZ(\$GLOBALS['SpaceWikiWords']=('$1'!='no'))");
+
+## (:linkwikiwords:)
+Markup('linkwikiwords', 'directives',
+  '/\\(:(no)?linkwikiwords:\\)/ei',
+  "PZZ(\$GLOBALS['LinkWikiWords']=('$1'!='no'))");
+
+## (:linebreaks:)
+Markup('linebreaks', 'directives',
+  '/\\(:(no)?linebreaks:\\)/ei',
+  "PZZ(\$GLOBALS['HTMLPNewline'] = ('$1'!='no') ? '<br  />' : '')");
+
+## (:messages:)
+Markup('messages', 'directives',
+  '/^\\(:messages:\\)/ei',
+  "'<:block>'.Keep(
+    FmtPageName(implode('',(array)\$GLOBALS['MessagesFmt']), \$pagename))");
+
+## (:comment:)
+Markup('comment', 'directives', '/\\(:comment .*?:\\)/i', '');
+
+## (:title:)
+Markup('title','directives',
+  '/\\(:title\\s(.*?):\\)/ei',
+  "PZZ(PCache(\$pagename, 
+         \$zz=array('title' => SetProperty(\$pagename, 'title', PSS('$1')))))");
+
+## (:keywords:), (:description:)
+Markup('keywords', 'directives', 
+  "/\\(:keywords?\\s+(.+?):\\)/ei",
+  "PZZ(SetProperty(\$pagename, 'keywords', PSS('$1'), ', '))");
+Markup('description', 'directives',
+  "/\\(:description\\s+(.+?):\\)/ei",
+  "PZZ(SetProperty(\$pagename, 'description', PSS('$1'), '\n'))");
+$HTMLHeaderFmt['meta'] = 'function:PrintMetaTags';
+function PrintMetaTags($pagename, $args) {
+  global $PCache;
+  foreach(array('keywords', 'description') as $n) {
+    foreach((array)@$PCache[$pagename]["=p_$n"] as $v) {
+      $v = str_replace("'", '&#039;', $v);
+      print "<meta name='$n' content='$v' />\n";
+    }
+  }
+}
+
+#### inline markups ####
+## ''emphasis''
+Markup("''",'inline',"/''(.*?)''/",'<em>$1</em>');
+
+## '''strong'''
+Markup("'''","<''","/'''(.*?)'''/",'<strong>$1</strong>');
+
+## '''''strong emphasis'''''
+Markup("'''''","<'''","/'''''(.*?)'''''/",'<strong><em>$1</em></strong>');
+
+## @@code@@
+Markup('@@','inline','/@@(.*?)@@/','<code>$1</code>');
+
+## '+big+', '-small-'
+Markup("'+","<'''''","/'\\+(.*?)\\+'/",'<big>$1</big>');
+Markup("'-","<'''''","/'\\-(.*?)\\-'/",'<small>$1</small>');
+
+## '^superscript^', '_subscript_'
+Markup("'^","<'''''","/'\\^(.*?)\\^'/",'<sup>$1</sup>');
+Markup("'_","<'''''","/'_(.*?)_'/",'<sub>$1</sub>');
+
+## [+big+], [-small-]
+Markup('[+','inline','/\\[(([-+])+)(.*?)\\1\\]/e',
+  "'<span style=\'font-size:'.(round(pow(6/5,$2strlen('$1'))*100,0)).'%\'>'.
+    PSS('$3</span>')");
+
+## {+ins+}, {-del-}
+Markup('{+','inline','/\\{\\+(.*?)\\+\\}/','<ins>$1</ins>');
+Markup('{-','inline','/\\{-(.*?)-\\}/','<del>$1</del>');
+
+## [[<<]] (break)
+Markup('[[<<]]','inline','/\\[\\[&lt;&lt;\\]\\]/',"<br clear='all' />");
+
+###### Links ######
+## [[free links]]
+Markup('[[','links',"/(?>\\[\\[\\s*(.*?)\\]\\])($SuffixPattern)/e",
+  "Keep(MakeLink(\$pagename,PSS('$1'),NULL,'$2'),'L')");
+
+## [[!Category]]
+SDV($CategoryGroup,'Category');
+SDV($LinkCategoryFmt,"<a class='categorylink' href='\$LinkUrl'>\$LinkText</a>");
+Markup('[[!','<[[','/\\[\\[!(.*?)\\]\\]/e',
+  "Keep(MakeLink(\$pagename,PSS('$CategoryGroup/$1'),NULL,'',\$GLOBALS['LinkCategoryFmt']),'L')");
+# This is a temporary workaround for blank category pages.
+# It may be removed in a future release (Pm, 2006-01-24)
+if (preg_match("/^$CategoryGroup\\./", $pagename)) {
+  SDV($DefaultPageTextFmt, '');
+  SDV($PageNotFoundHeaderFmt, 'HTTP/1.1 200 Ok');
+}
+
+## [[target | text]]
+Markup('[[|','<[[',
+  "/(?>\\[\\[([^|\\]]*)\\|\\s*)(.*?)\\s*\\]\\]($SuffixPattern)/e",
+  "Keep(MakeLink(\$pagename,PSS('$1'),PSS('$2'),'$3'),'L')");
+
+## [[text -> target ]]
+Markup('[[->','>[[|',
+  "/(?>\\[\\[([^\\]]+?)\\s*-+&gt;\\s*)(.*?)\\]\\]($SuffixPattern)/e",
+  "Keep(MakeLink(\$pagename,PSS('$2'),PSS('$1'),'$3'),'L')");
+
+if (IsEnabled($EnableRelativePageLinks, 1))
+  SDV($QualifyPatterns['/(\\[\\[(?>[^\\]]+?->)?\\s*)([-\\w\\s\'()]+([|#?].*?)?\\]\\])/e'], "PSS('$1').\$group.PSS('/$2')");
+
+## [[#anchor]]
+Markup('[[#','<[[','/(?>\\[\\[#([A-Za-z][-.:\\w]*))\\]\\]/e',
+  "Keep(TrackAnchors('$1') ? '' : \"<a name='$1' id='$1'></a>\", 'L')");
+function TrackAnchors($x) { global $SeenAnchor; return @$SeenAnchor[$x]++; }
+
+## [[target |#]] reference links
+Markup('[[|#', '<[[|',
+  "/(?>\\[\\[([^|\\]]+))\\|\\s*#\\s*\\]\\]/e",  
+  "Keep(MakeLink(\$pagename,PSS('$1'),'['.++\$MarkupFrame[0]['ref'].']'),'L')");
+
+## [[target |+]] title links
+Markup('[[|+', '<[[|',
+  "/(?>\\[\\[([^|\\]]+))\\|\\s*\\+\\s*]]/e",
+  "Keep(MakeLink(\$pagename, PSS('$1'),
+                 PageVar(MakePageName(\$pagename,PSS('$1')), '\$Title')
+                ),'L')");
+
+## bare urllinks 
+Markup('urllink','>[[',
+  "/\\b(?>(\\L))[^\\s$UrlExcludeChars]*[^\\s.,?!$UrlExcludeChars]/e",
+  "Keep(MakeLink(\$pagename,'$0','$0'),'L')");
+
+## mailto: links 
+Markup('mailto','<urllink',
+  "/\\bmailto:([^\\s$UrlExcludeChars]*[^\\s.,?!$UrlExcludeChars])/e",
+  "Keep(MakeLink(\$pagename,'$0','$1'),'L')");
+
+## inline images
+Markup('img','<urllink',
+  "/\\b(?>(\\L))([^\\s$UrlExcludeChars]+$ImgExtPattern)(\"([^\"]*)\")?/e",
+  "Keep(\$GLOBALS['LinkFunctions']['$1'](\$pagename,'$1','$2','$4','$1$2',
+    \$GLOBALS['ImgTagFmt']),'L')");
+
+## bare wikilinks
+##    v2.2: markup rule moved to scripts/wikiwords.php)
+Markup('wikilink', '>urllink');
+
+## escaped `WikiWords 
+##    v2.2: rule kept here for markup compatibility with 2.1 and earlier
+Markup('`wikiword', '<wikilink',
+  "/`(($GroupPattern([\\/.]))?($WikiWordPattern))/e",
+  "Keep('$1')");
+
+#### Block markups ####
+## Completely blank lines don't do anything.
+Markup('blank', '<block', '/^\\s+$/', '');
+
+## process any <:...> markup (after all other block markups)
+Markup('^<:','>block','/^(?=\\s*\\S)(<:([^>]+)>)?/e',"Block('$2')");
+
+## unblocked lines w/block markup become anonymous <:block>
+Markup('^!<:', '<^<:',
+  "/^(?!<:)(?=.*(<\\/?($BlockPattern)\\b)|$KeepToken\\d+B$KeepToken)/",
+  '<:block>');
+
+## Lines that begin with displayed images receive their own block.  A
+## pipe following the image indicates a "caption" (generates a linebreak).
+Markup('^img', 'block',
+  "/^((?>(\\s+|%%|%[A-Za-z][-,=:#\\w\\s'\".]*%)*)$KeepToken(\\d+L)$KeepToken)(\\s*\\|\\s?)?(.*)$/e",
+  "PSS((strpos(\$GLOBALS['KPV']['$3'],'<img')===false) ? '$0' : 
+       '<:block,1><div>$1' . ('$4' ? '<br />' : '') .'$5</div>')");
+
+## Whitespace at the beginning of lines can be used to maintain the
+## indent level of a previous list item, or a preformatted text block.
+Markup('^ws', '<^img', '/^\\s+ #1/ex', "WSIndent('$0')");
+function WSIndent($i) {
+  global $MarkupFrame;
+  $icol = strlen($i);
+  for($depth = count(@$MarkupFrame[0]['cs']); $depth > 0; $depth--)
+    if (@$MarkupFrame[0]['is'][$depth] == $icol) {
+      $MarkupFrame[0]['idep'] = $depth;
+      $MarkupFrame[0]['icol'] = $icol;
+      return '';
+    }
+  return $i;
+}
+
+## The $EnableWSPre setting uses leading spaces on markup lines to indicate
+## blocks of preformatted text.
+SDV($EnableWSPre, 1);
+Markup('^ ', 'block', 
+  '/^\\s+ #2/ex',
+  "(\$GLOBALS['EnableWSPre'] > 0 && strlen('$0') >= \$GLOBALS['EnableWSPre']) 
+     ? '<:pre,1>$0' : '$0'");
+
+## bullet lists
+Markup('^*','block','/^(\\*+)\\s?(\\s*)/','<:ul,$1,$0>$2');
+
+## numbered lists
+Markup('^#','block','/^(#+)\\s?(\\s*)/','<:ol,$1,$0>$2');
+
+## indented (->) /hanging indent (-<) text
+Markup('^->','block','/^(?>(-+))&gt;\\s?(\\s*)/','<:indent,$1,$1  $2>$2');
+Markup('^-<','block','/^(?>(-+))&lt;\\s?(\\s*)/','<:outdent,$1,$1  $2>$2');
+
+## definition lists
+Markup('^::','block','/^(:+)(\s*)([^:]+):/','<:dl,$1,$1$2><dt>$2$3</dt><dd>');
+
+## Q: and A:
+Markup('^Q:', 'block', '/^Q:(.*)$/', "<:block,1><p class='question'>$1</p>");
+Markup('^A:', 'block', '/^A:/', Keep(''));
+
+## tables
+## ||cell||, ||!header cell||, ||!caption!||
+Markup('^||||', 'block', 
+  '/^\\|\\|.*\\|\\|.*$/e',
+  "FormatTableRow(PSS('$0'))");
+## ||table attributes
+Markup('^||','>^||||','/^\\|\\|(.*)$/e',
+  "PZZ(\$GLOBALS['BlockMarkups']['table'][0] = '<table '.PQA(PSS('$1')).'>')
+    .'<:block,1>'");
+
+## headings
+Markup('^!', 'block',
+  '/^(!{1,6})\\s?(.*)$/e',
+  "'<:block,1><h'.strlen('$1').PSS('>$2</h').strlen('$1').'>'");
+
+## horiz rule
+Markup('^----','>^->','/^----+/','<:block,1><hr />');
+
+#### (:table:) markup (AdvancedTables)
+
+function Cells($name,$attr) {
+  global $MarkupFrame;
+  $attr = PQA($attr);
+  $tattr = @$MarkupFrame[0]['tattr'];
+  $name = strtolower($name);
+  $key = preg_replace('/end$/', '', $name);
+  if (strncmp($key, 'cell', 4) == 0) $key = 'cell';
+  $out = '<:block>'.MarkupClose($key);
+  if (substr($name, -3) == 'end') return $out;
+  $cf = & $MarkupFrame[0]['closeall'];
+  if ($name == 'table') $MarkupFrame[0]['tattr'] = $attr; 
+  else if (strncmp($name, 'cell', 4) == 0) {
+    if (strpos($attr, "valign=")===false) $attr .= " valign='top'";
+    if (!@$cf['table']) {
+       $tattr = @$MarkupFrame[0]['tattr'];
+       $out .= "<table $tattr><tr><td $attr>";
+       $cf['table'] = '</td></tr></table>';
+    } else if ($name == 'cellnr') $out .= "</td></tr><tr><td $attr>";
+    else $out .= "</td><td $attr>";
+    $cf['cell'] = '';
+  } else {
+    $out .= "<div $attr>";
+    $cf[$key] = '</div>';
+  }
+  return $out;
+}
+
+Markup('table', '<block',
+  '/^\\(:(table|cell|cellnr|tableend|div\\d*(?:end)?)(\\s.*?)?:\\)/ie',
+  "Cells('$1',PSS('$2'))");
+Markup('^>>', '<table',
+  '/^&gt;&gt;(.+?)&lt;&lt;(.*)$/',
+  '(:div:)%div $1 apply=div%$2 ');
+Markup('^>><<', '<^>>',
+  '/^&gt;&gt;&lt;&lt;/',
+  '(:divend:)');
+
+#### special stuff ####
+## (:markup:) for displaying markup examples
+function MarkupMarkup($pagename, $text, $opt = '') {
+  $MarkupMarkupOpt = array('class' => 'vert');
+  $opt = array_merge($MarkupMarkupOpt, ParseArgs($opt));
+  $html = MarkupToHTML($pagename, $text, array('escape' => 0));
+  if (@$opt['caption']) 
+    $caption = str_replace("'", '&#039;', 
+                           "<caption>{$opt['caption']}</caption>");
+  $class = preg_replace('/[^-\\s\\w]+/', ' ', @$opt['class']);
+  if (strpos($class, 'horiz') !== false) 
+    { $sep = ''; $pretext = wordwrap($text, 40); } 
+  else 
+    { $sep = '</tr><tr>'; $pretext = wordwrap($text, 75); }
+  return Keep(@"<table class='markup $class' align='center'>$caption
+      <tr><td class='markup1' valign='top'><pre>$pretext</pre></td>$sep<td 
+        class='markup2' valign='top'>$html</td></tr></table>");
+}
+
+Markup('markup', '<[=',
+  "/\\(:markup(\\s+([^\n]*?))?:\\)[^\\S\n]*\\[([=@])(.*?)\\3\\]/sei",
+  "MarkupMarkup(\$pagename, PSS('$4'), PSS('$2'))");
+Markup('markupend', '>markup',
+  "/\\(:markup(\\s+([^\n]*?))?:\\)[^\\S\n]*\n(.*?)\\(:markupend:\\)/sei",
+  "MarkupMarkup(\$pagename, PSS('$3'), PSS('$1'))");
+
+SDV($HTMLStylesFmt['markup'], "
+  table.markup { border:2px dotted #ccf; width:90%; }
+  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }
+  table.vert td.markup1 { border-bottom:1px solid #ccf; }
+  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }
+  table.markup caption { text-align:left; }
+  div.faq p, div.faq pre { margin-left:2em; }
+  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }
+  div.faqtoc div.faq * { display:none; }
+  div.faqtoc div.faq p.question 
+    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }
+  div.faqtoc div.faq p.question * { display:inline; }
+  ");
+
+#### Special conditions ####
+## The code below adds (:if date:) conditions to the markup.
+$Conditions['date'] = "CondDate(\$condparm)";
+
+function CondDate($condparm) {
+  global $Now;
+  if (!preg_match('/^(\\S*?)(\\.\\.(\\S*))?(\\s+\\S.*)?$/',
+                  trim($condparm), $match))
+    return false;
+  if ($match[4] == '') { $x0 = $Now; NoCache(); }
+  else { list($x0, $x1) = DRange($match[4]); }
+  if ($match[1] > '') {
+    list($t0, $t1) = DRange($match[1]);
+    if ($x0 < $t0) return false;
+    if ($match[2] == '' && $x0 >= $t1) return false;
+  }
+  if ($match[3] > '') {
+    list($t0, $t1) = DRange($match[3]);
+    if ($x0 >= $t1) return false;
+  }
+  return true;
+}
+
+# This pattern enables the (:encrypt <phrase>:) markup/replace-on-save
+# pattern.
+SDV($ROSPatterns['/\\(:encrypt\\s+([^\\s:=]+).*?:\\)/e'], "crypt(PSS('$1'))");
+

Added: trunk/oggdsf/website/scripts/trails.php
===================================================================
--- trunk/oggdsf/website/scripts/trails.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/trails.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,126 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2002-2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script enables markup of the form <<|TrailPage|>> to be 
+    used to build "trails" through wiki documents.
+
+    This feature is automatically included from stdconfig.php unless
+    disabled by $EnableWikiTrails = 0; .  To explicitly include this feature,
+    execute
+   	include_once("scripts/trails.php");
+    from config.php somewhere.
+
+    Once enabled, the <<|TrailPage|>> markup is replaced with
+    << PrevPage | TrailPage | NextPage >> on output.  TrailPage should
+    contain either a bullet or number list defining the sequence of pages
+    in the "trail".
+
+    The ^|TrailPage|^ markup uses the depth of the bullets to display
+    the ancestry of the TrailPage to the current one.  The <|TrailPage|> 
+    markup is like <<|TrailPage|>> except that "< PrevPage |" and 
+    "| NextPage >" are omitted if at the beginning or end of the 
+    trail respectively.  Thanks to John Rankin for contributing these
+    markups and the original suggestion for WikiTrails.
+*/
+
+Markup('<<|','<links','/&lt;&lt;\\|([^|]+|\\[\\[(.+?)\\]\\])\\|&gt;&gt;/e',
+  "MakeTrailStop(\$pagename,'$1')");
+Markup('<|','><<|','/&lt;\\|([^|]+|\\[\\[(.+?)\\]\\])\\|&gt;/e',
+  "MakeTrailStopB(\$pagename,'$1')");
+Markup('^|','<links','/\\^\\|([^|]+|\\[\\[(.+?)\\]\\])\\|\\^/e',
+  "MakeTrailPath(\$pagename,'$1')");
+
+SDVA($SaveAttrPatterns, array(
+   '/<<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>>/' => '$1',
+   '/<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>/' => '$1',
+   '/\\^\\|([^|]+|\\[\\[(.+?)\\]\\])\\|\\^/' => '$1'));
+
+$Conditions['ontrail'] = 'CondOnTrail($pagename, $condparm)';
+
+function CondOnTrail($pagename, $condparm) {
+  @list($trailname, $pn) = preg_split('/\\s+/', $condparm, 2);
+  $trail = ReadTrail($pagename, $trailname);
+  if (!$trail) return false;
+  $pn = ($pn > '') ? MakePageName($pagename, $pn) : $pagename;
+  foreach($trail as $t)
+    if ($t['pagename'] == $pn) return true;
+  return false;
+}
+
+function ReadTrail($pagename, $trailname) {
+  global $RASPageName, $SuffixPattern, $GroupPattern, $WikiWordPattern,
+    $LinkWikiWords;
+  if (preg_match('/^\\[\\[(.+?)(-&gt;|\\|)(.+?)\\]\\]$/', $trailname, $m)) 
+    $trailname = ($m[2] == '|') ? $m[1] : $m[3];
+  $trailtext = RetrieveAuthSection($pagename, $trailname);
+  $trailname = $RASPageName;
+  $t = array();
+  $n = 0;
+  foreach(explode("\n", htmlspecialchars(@$trailtext, ENT_NOQUOTES)) 
+          as $x) {
+    $x = preg_replace("/\\[\\[([^\\]]*)-&gt;([^\\]]*)\\]\\]/",'[[$2|$1]]',$x);
+    if (!preg_match("/^([#*:]+) \\s* 
+          (\\[\\[([^:#!|][^|:]*?)(\\|.*?)?\\]\\]($SuffixPattern)
+          | (($GroupPattern([\\/.]))?$WikiWordPattern)) (.*)/x",$x,$match))
+       continue;
+    if (@$match[6]) {
+       if (!$LinkWikiWords) continue;
+       $tgt = MakePageName($trailname, $match[6]);
+    } else $tgt = MakePageName($trailname,
+                               preg_replace('/[#?].+/', '', $match[3]));
+    $t[$n]['depth'] = $depth = strlen($match[1]);
+    $t[$n]['pagename'] = $tgt;
+    $t[$n]['markup'] = $match[2];
+    $t[$n]['detail'] = $match[9];
+    for($i=$depth;$i<10;$i++) $d[$i]=$n;
+    if ($depth>1) $t[$n]['parent']=@$d[$depth-1];
+    $n++;
+  }
+  return $t;
+}
+
+function MakeTrailStop($pagename,$trailname) {
+  $t = ReadTrail($pagename,$trailname);
+  $prev=''; $next='';
+  for($i=0;$i<count($t);$i++) {
+    if ($t[$i]['pagename']==$pagename) {
+      if ($i>0) $prev = $t[$i-1]['markup'];
+      if ($i+1<count($t)) $next = $t[$i+1]['markup'];
+    }
+  }
+  return "<span class='wikitrail'>&lt;&lt; $prev | $trailname | $next &gt;&gt;</span>";
+}
+
+function MakeTrailStopB($pagename,$trailname) {
+  $t = ReadTrail($pagename,$trailname);
+  $prev = ''; $next = '';
+  for($i=0;$i<count($t);$i++) {
+    if ($t[$i]['pagename']==$pagename) {
+      if ($i>0) $prev = '&lt; '.$t[$i-1]['markup'].' | ';
+      if ($i+1<count($t)) $next = ' | '.$t[$i+1]['markup'].' &gt;';
+    }
+  }
+  return "<span class='wikitrail'>$prev$trailname$next</span>";
+} 
+
+function MakeTrailPath($pagename,$trailname) {
+  global $TrailPathSep;
+  SDV($TrailPathSep,' | ');
+  $t = ReadTrail($pagename,$trailname);
+  $crumbs = '';
+  for($i=0;$i<count($t);$i++) {
+    if ($t[$i]['pagename']==$pagename) {
+      while (@$t[$i]['depth']>0) {
+        $crumbs = $TrailPathSep.$t[$i]['markup'].$crumbs;
+        $i = @$t[$i]['parent'];
+      }
+      return "<span class='wikitrail'>$trailname$crumbs</span>";
+    }
+  }
+  return $trailname;
+}
+

Added: trunk/oggdsf/website/scripts/transition.php
===================================================================
--- trunk/oggdsf/website/scripts/transition.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/transition.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,261 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2005-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script handles various "fixup transitions" that might need to 
+    occur to help existing sites smoothly upgrade to newer releases of 
+    PmWiki.  Rather than put the workarounds in the main code files, we 
+    try to centralize them here so we can see what's deprecated and a
+    simple switch (?trans=0 in the url) can tell the admin if his site 
+    is relying on an outdated feature or way of doing things.
+
+    Transitions defined in this script:
+
+      $Transition['wspre']              - leading spaces are pre text
+
+      $Transition['version'] < 2001941  - all transitions listed above
+
+      $Transition['wikiwords']          - 2.1-style WikiWord processing
+
+      $Transition['version'] < 2001924  - all transitions listed above
+
+      $Transition['abslinks']           - absolute links/page vars
+
+      $Transition['version'] < 2001901  - all transitions listed above
+
+      $Transition['vspace']             - restore <p class='vspace'></p>
+
+      $Transition['version'] < 2001006  - all transitions listed above
+
+      $Transition['fplbygroup']         - restore FPLByGroup function
+
+      $Transition['version'] < 2000915  - all transitions listed above
+    
+      $Transition['mainrc']             - keep using Main.AllRecentChanges
+      $Transition['mainapprovedurls']   - keep using Main.ApprovedUrls
+      $Transition['pageeditfmt']        - default $PageEditFmt value
+      $Transition['mainpages']          - other default pages in Main
+
+      $Transition['version'] < 1999944  - all transitions listed above
+
+    To get all of the transitions for compatibility with a previous
+    version of PmWiki, simply set $Transition['version'] in a local
+    configuration file to the version number you want compatibility
+    with.  All of the transitions associated with that version will
+    then be enabled. Example:
+
+            # Keep compatibility with PmWiki version 2.0.13
+            $Transition['version'] = 2000013;
+
+    To explicitly enable or disable specific transitions, set
+    the corresponding $Transition[] element to 1 or 0.  This will 
+    override the $Transition['version'] item listed above.  For 
+    example, to enable just the 'pageeditfmt' transition, use
+
+            $Transition['pageeditfmt'] = 1;
+
+*/
+
+## if ?trans=0 is specified, then we don't do any fixups.
+if (@$_REQUEST['trans']==='0') return;
+
+## Transitions from 2.2.0-beta41
+if (@$Transition['version'] < 2001941)
+  SDVA($Transition, array('wspre' => 1));
+
+if (@$Transition['wspre']) SDV($EnableWSPre, 1);
+
+## Transitions from 2.2.0-beta24
+if (@$Transition['version'] < 2001924)
+  SDVA($Transition, array('wikiwords' => 1));
+
+## wikiwords:
+##   This restores the PmWiki 2.1 behavior for WikiWord processing.
+##   WikiWords aren't linked by default, but appear with
+##   <span class='wikiword'>...</span> tags around them.
+if (@$Transition['wikiwords']) {
+  SDV($EnableWikiWords, 1);
+  SDV($LinkWikiWords, 0);
+}
+
+## Transitions from 2.2.0-beta1
+if (@$Transition['version'] < 2001901) 
+  SDVA($Transition, array('abslinks' => 1));
+
+## abslinks:
+##   This restores settings so that PmWiki treats all links
+##   as absolute (following the 2.1.x and earlier interpretation).
+if (@$Transition['abslinks']) {
+  SDV($EnableRelativePageLinks, 0);
+  SDV($EnableRelativePageVars, 0);
+}
+
+## Transitions from 2.1.12
+
+if (@$Transition['version'] < 2001012) 
+  SDVA($Transition, array('nodivnest' => 1));
+
+## nodivnest:
+##   This restores the PmWiki 2.1.11 behavior that doesn't
+##   allow nesting of divs and tables.
+if (@$Transition['nodivnest']) {
+  function TCells($name,$attr) {
+    global $MarkupFrame;
+    $attr = preg_replace('/([a-zA-Z]=)([^\'"]\\S*)/',"\$1'\$2'",$attr);
+    $tattr = @$MarkupFrame[0]['tattr'];
+    $name = strtolower($name);
+    $out = '<:block>';
+    if (strncmp($name, 'cell', 4) != 0 || @$MarkupFrame[0]['closeall']['div']) {
+      $out .= @$MarkupFrame[0]['closeall']['div'];
+      unset($MarkupFrame[0]['closeall']['div']);
+      $out .= @$MarkupFrame[0]['closeall']['table'];
+      unset($MarkupFrame[0]['closeall']['table']);
+    }
+    if ($name == 'div') {
+      $MarkupFrame[0]['closeall']['div'] = "</div>";
+      $out .= "<div $attr>";
+    }
+    if ($name == 'table') $MarkupFrame[0]['tattr'] = $attr;
+    if (strncmp($name, 'cell', 4) == 0) {
+      if (strpos($attr, "valign=")===false) $attr .= " valign='top'";
+      if (!@$MarkupFrame[0]['closeall']['table']) {
+        $MarkupFrame[0]['closeall']['table'] = "</td></tr></table>";
+        $out .= "<table $tattr><tr><td $attr>";
+      } else if ($name == 'cellnr') $out .= "</td></tr><tr><td $attr>";
+      else $out .= "</td><td $attr>";
+    }
+    return $out;
+  }
+
+  Markup('table', '<block',
+    '/^\\(:(table|cell|cellnr|tableend|div|divend)(\\s.*?)?:\\)/ie',
+    "TCells('$1',PSS('$2'))");
+}
+
+
+## Transitions from 2.1.7
+
+if (@$Transition['version'] < 2001007)
+  SDVA($Transition, array('vspace' => 1));
+
+## vspace:
+##   This restores PmWiki's use of <p class='vspace'></p> to mark
+##   vertical space in the output.
+if (@$Transition['vspace']) $HTMLVSpace = "<p class='vspace'></p>";
+
+
+## Transitions from 2.1.beta15
+
+if (@$Transition['version'] < 2000915) 
+  SDVA($Transition, array('fplbygroup' => 1));
+
+## fplbygroup:
+##   The FPLByGroup function was removed in 2.1.beta15, this restores it.
+if (@$Transition['fplbygroup'] && !function_exists('FPLByGroup')) {
+  SDV($FPLFormatOpt['bygroup'], array('fn' => 'FPLByGroup'));
+  function FPLByGroup($pagename, &$matches, $opt) {
+    global $FPLByGroupStartFmt, $FPLByGroupEndFmt, $FPLByGroupGFmt,
+      $FPLByGroupIFmt, $FPLByGroupOpt;
+    SDV($FPLByGroupStartFmt,"<dl class='fplbygroup'>");
+    SDV($FPLByGroupEndFmt,'</dl>');
+    SDV($FPLByGroupGFmt,"<dt><a href='\$ScriptUrl/\$Group'>\$Group</a> /</dt>\n");
+    SDV($FPLByGroupIFmt,"<dd><a href='\$PageUrl'>\$Name</a></dd>\n");
+    SDVA($FPLByGroupOpt, array('readf' => 0, 'order' => 'name'));
+    $matches = MakePageList($pagename, 
+                            array_merge((array)$FPLByGroupOpt, $opt), 0);
+    if (@$opt['count']) array_splice($matches, $opt['count']);
+    if (count($matches)<1) return '';
+    $out = '';
+    foreach($matches as $pn) {
+      $pgroup = FmtPageName($FPLByGroupGFmt, $pn);
+      if ($pgroup != @$lgroup) { $out .= $pgroup; $lgroup = $pgroup; }
+      $out .= FmtPageName($FPLByGroupIFmt, $pn);
+    }
+    return FmtPageName($FPLByGroupStartFmt, $pagename) . $out .
+           FmtPageName($FPLByGroupEndFmt, $pagename);
+  }
+}
+
+## Transitions from 2.0.beta44
+
+if (@$Transition['version'] < 1999944) 
+  SDVA($Transition, array('mainrc' => 1, 'mainapprovedurls' => 1,
+    'pageeditfmt' => 1, 'mainpages' => 1));
+
+## mainrc:
+##   2.0.beta44 switched Main.AllRecentChanges to be 
+##   $SiteGroup.AllRecentChanges.  This setting keeps Main.AllRecentChanges
+##   if it exists.
+if (@$Transition['mainrc'] && PageExists('Main.AllRecentChanges')) {
+  SDV($RecentChangesFmt['Main.AllRecentChanges'],
+    '* [[$Group.$Name]]  . . . $CurrentTime $[by] $AuthorLink');
+}
+
+## siteapprovedurls:
+##   2.0.beta44 switched Main.ApprovedUrls to be $SiteGroup.ApprovedUrls .
+##   This setting keeps using Main.ApprovedUrls if it exists.
+if (@$Transition['mainapprovedurls'] && PageExists('Main.ApprovedUrls')) {
+  $ApprovedUrlPagesFmt = (array)$ApprovedUrlPagesFmt;
+  if (PageExists(FmtPageName($ApprovedUrlPagesFmt[0], $pagename))) 
+    $ApprovedUrlPagesFmt[] = 'Main.ApprovedUrls';
+  else array_unshift($ApprovedUrlPagesFmt, 'Main.ApprovedUrls');
+}
+
+## pageeditfmt:
+##   2.0.beta44 switched to using wiki markup forms for page editing.
+##   However, some sites and skins have customized values of $PageEdit.
+##   This setting restores the default values.
+if (@$Transition['pageeditfmt']) {
+  SDV($PageEditFmt, "<div id='wikiedit'>
+    <a id='top' name='top'></a>
+    <h1 class='wikiaction'>$[Editing \$FullName]</h1>
+    <form method='post' action='\$PageUrl?action=edit'>
+    <input type='hidden' name='action' value='edit' />
+    <input type='hidden' name='n' value='\$FullName' />
+    <input type='hidden' name='basetime' value='\$EditBaseTime' />
+    \$EditMessageFmt
+    <textarea id='text' name='text' rows='25' cols='60'
+      onkeydown='if (event.keyCode==27) event.returnValue=false;'
+      >\$EditText</textarea><br />
+    $[Author]: <input type='text' name='author' value='\$Author' />
+    <input type='checkbox' name='diffclass' value='minor' \$DiffClassMinor />
+      $[This is a minor edit]<br />
+    <input type='submit' name='post' value=' $[Save] ' />
+    <input type='submit' name='preview' value=' $[Preview] ' />
+    <input type='reset' value=' $[Reset] ' /></form></div>");
+  if (@$_POST['preview']) 
+    SDV($PagePreviewFmt, "<div id='wikipreview'>
+      <h2 class='wikiaction'>$[Preview \$FullName]</h2>
+      <p><b>$[Page is unsaved]</b></p>
+      \$PreviewText
+      <hr /><p><b>$[End of preview -- remember to save]</b><br />
+      <a href='#top'>$[Top]</a></p></div>");
+  SDV($HandleEditFmt, array(&$PageStartFmt,
+    &$PageEditFmt, 'wiki:$[PmWiki.EditQuickReference]', &$PagePreviewFmt,
+    &$PageEndFmt));
+  $EditMessageFmt = implode('', $MessagesFmt) . $EditMessageFmt;
+  if ($action=='edit' && IsEnabled($EnableGUIButtons, 0)) 
+    array_push($EditFunctions, 'GUIEdit');
+} else $MessagesFmt[] = @$EditMessageFmt;
+
+    
+function GUIEdit($pagename, &$page, &$new) {
+  global $EditMessageFmt;
+  $EditMessageFmt .= GUIButtonCode($pagename);
+}
+
+## mainpages:
+##   In 2.0.beta44 several utility pages change location to the new Site
+##   group.  These settings cause some skins (that use translations)
+##   to know to link to the new locations.
+if ($Transition['mainpages']) {
+  XLSDV('en', array(
+    'Main/SearchWiki' => XL('Site/Search'),
+    'PmWiki.EditQuickReference' => XL('Site/EditQuickReference'),
+    'PmWiki.UploadQuickReference' => XL('Site/UploadQuickReference'),
+    ));
+}
+

Added: trunk/oggdsf/website/scripts/upgrades.php
===================================================================
--- trunk/oggdsf/website/scripts/upgrades.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/upgrades.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,98 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+*/
+
+$HandleActions['upgrade'] = 'HandleUpgrade';
+$HandleAuth['upgrade'] = 'read';
+
+function HandleUpgrade($pagename, $auth = 'ALWAYS') {
+  global $SiteGroup, $SiteAdminGroup, $StatusPageName, $ScriptUrl,
+    $AuthUserPageFmt, $VersionNum, $Version;
+  StopWatch('HandleUpgrade: begin');
+
+  $message = '';
+  $done = '';
+  ##  check for Site.* --> SiteAdmin.*
+  foreach(array('AuthUser', 'NotifyList', 'Blocklist', 'ApprovedUrls') as $n) {
+    $n0 = "$SiteGroup.$n"; $n1 = "$SiteAdminGroup.$n";
+    StopWatch("HandleUpgrade: checking $n0 -> $n1");
+    ## checking AuthUser is special, because Site.AuthUser comes with the
+    ## distribution.
+    if ($n == 'AuthUser') {
+      ##  if we already have a user-modified SiteAdmin.AuthUser, we can skip
+      SDV($AuthUserPageFmt, '$SiteAdminGroup.AuthUser');
+      $n1 = FmtPageName($AuthUserPageFmt, $pagename);
+      $page = ReadPage($n1, READPAGE_CURRENT);
+      if (@$page['time'] > 1000000000) continue;
+      ##  if there's not a user-modified Site.AuthUser, we can skip
+      $page = ReadPage($n0, READPAGE_CURRENT);
+      if (@$page['time'] == 1000000000) continue;
+    } else if (!PageExists($n0) || PageExists($n1)) continue;
+
+    if (@$_REQUEST['migrate'] == 'yes') {
+      ##  if the admin wants PmWiki to migrate, do it.
+      $page = RetrieveAuthPage($n0, 'admin', true);
+      StopWatch("HandleUpgrade: copying $n0 -> $n1");
+      if ($page) { 
+        WritePage($n1, $page); 
+        $done .= "<li>Copied $n0 to $n1</li>";
+        continue; 
+      }
+    }
+    $message .= "<li>$n0 -&gt; $n1</li>";
+  }
+
+  if ($message) {
+    $migrateurl = "$ScriptUrl?action=upgrade&amp;migrate=yes";
+    $infourl = 'http://www.pmwiki.org/wiki/PmWiki/UpgradeToSiteAdmin';
+    $message = 
+      "<h2>Upgrade notice -- SiteAdmin group</h2>
+      <p>This version of PmWiki expects several administrative pages 
+      from the <em>Site</em> group to be found in a new <em>SiteAdmin</em> group.  
+      On this site, the following pages appear to need to be relocated:</p>
+      <ul>$message</ul>
+
+      <p>For more information about this change, including the various
+      options for proceeding, see</p>
+      <blockquote><a target='_blank' href='$infourl'>$infourl</a></blockquote>
+
+      <form action='$ScriptUrl' method='post'>
+      <p>If you would like PmWiki to attempt to automatically copy 
+      these pages into their new <br /> locations for you, try 
+        <input type='hidden' name='action' value='upgrade' />
+        <input type='hidden' name='migrate' value='yes' />
+        <input type='submit' value='Relocate pages listed above' /> 
+        (admin password required) </p>
+      </form>
+
+      <p>If you want to configure PmWiki so that it continues to
+      look for the above pages in <em>$SiteGroup</em>, add the
+      following line near the top of <em>local/config.php</em>:</p>
+
+      <blockquote><pre>\$SiteAdminGroup = \$SiteGroup;</pre></blockquote>
+
+      $Version
+      ";
+    print $message;
+    exit;
+  }
+
+  StopWatch("UpgradeCheck: writing $StatusPageName");
+  Lock(2);
+  SDV($StatusPageName, "$SiteAdminGroup.Status");
+  $page = ReadPage($StatusPageName);
+  $page['updatedto'] = $VersionNum;
+  WritePage($StatusPageName, $page);
+
+  if ($done) {
+    $done .= "<li>Updated $StatusPageName</li>";
+    echo "<h2>Upgrade to $Version ... ok</h2><ul>$done</ul>";
+    $GLOBALS['EnableRedirect'] = 0;
+  }
+  Redirect($pagename);
+}

Added: trunk/oggdsf/website/scripts/upload.php
===================================================================
--- trunk/oggdsf/website/scripts/upload.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/upload.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,311 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script adds upload capabilities to PmWiki.  Uploads can be
+    enabled by setting
+        $EnableUpload = 1;
+    in config.php.  In addition, an upload password must be set, as
+    the default is to lock uploads.  In some configurations it may also
+    be necessary to set values for $UploadDir and $UploadUrlFmt,
+    especially if any form of URL rewriting is being performed.
+    See the PmWiki.UploadsAdmin page for more information.
+*/
+
+## $EnableUploadOverwrite determines if we allow previously uploaded
+## files to be overwritten.
+SDV($EnableUploadOverwrite,1);
+
+## $UploadExts contains the list of file extensions we're willing to
+## accept, along with the Content-Type: value appropriate for each.
+SDVA($UploadExts,array(
+  'gif' => 'image/gif', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg',
+  'png' => 'image/png', 'bmp' => 'image/bmp', 'ico' => 'image/x-icon',
+  'wbmp' => 'image/vnd.wap.wbmp',
+  'mp3' => 'audio/mpeg', 'au' => 'audio/basic', 'wav' => 'audio/x-wav',
+  'mpg' => 'video/mpeg', 'mpeg' => 'video/mpeg',
+  'mov' => 'video/quicktime', 'qt' => 'video/quicktime',
+  'wmf' => 'text/plain', 'avi' => 'video/x-msvideo',
+  'zip' => 'application/zip', 
+  'gz' => 'application/x-gzip', 'tgz' => 'application/x-gzip',
+  'rpm' => 'application/x-rpm', 
+  'hqx' => 'application/mac-binhex40', 'sit' => 'application/x-stuffit',
+  'doc' => 'application/msword', 'ppt' => 'application/vnd.ms-powerpoint',
+  'xls' => 'application/vnd.ms-excel', 'mdb' => 'text/plain',
+  'exe' => 'application/octet-stream',
+  'pdf' => 'application/pdf', 'psd' => 'text/plain', 
+  'ps' => 'application/postscript', 'ai' => 'application/postscript',
+  'eps' => 'application/postscript',
+  'htm' => 'text/html', 'html' => 'text/html', 'css' => 'text/css', 
+  'fla' => 'application/x-shockwave-flash', 
+  'swf' => 'application/x-shockwave-flash',
+  'txt' => 'text/plain', 'rtf' => 'application/rtf', 
+  'tex' => 'application/x-tex', 'dvi' => 'application/x-dvi',
+  'odt' => 'application/vnd.oasis.opendocument.text',
+  'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
+  'odp' => 'application/vnd.oasis.opendocument.presentation',
+  'kml' => 'application/vnd.google-earth.kml+xml',
+  'kmz' => 'application/vnd.google-earth.kmz',
+  '' => 'text/plain'));
+
+SDV($UploadMaxSize,1500000);
+SDV($UploadPrefixQuota,0);
+SDV($UploadDirQuota,0);
+foreach($UploadExts as $k=>$v) 
+  if (!isset($UploadExtSize[$k])) $UploadExtSize[$k]=$UploadMaxSize;
+
+SDV($UploadDir,'uploads');
+SDV($UploadPrefixFmt,'/$Group');
+SDV($UploadFileFmt,"$UploadDir$UploadPrefixFmt");
+$v = preg_replace('#^/(.*/)#', '', $UploadDir);
+SDV($UploadUrlFmt,preg_replace('#/[^/]*$#', "/$v", $PubDirUrl, 1));
+SDV($LinkUploadCreateFmt, "<a rel='nofollow' class='createlinktext' href='\$LinkUpload'>\$LinkText</a><a rel='nofollow' class='createlink' href='\$LinkUpload'>&nbsp;&Delta;</a>");
+
+SDV($PageUploadFmt,array("
+  <div id='wikiupload'>
+  <h2 class='wikiaction'>$[Attachments for] {\$FullName}</h2>
+  <h3>\$UploadResult</h3>
+  <form enctype='multipart/form-data' action='{\$PageUrl}' method='post'>
+  <input type='hidden' name='n' value='{\$FullName}' />
+  <input type='hidden' name='action' value='postupload' />
+  <table border='0'>
+    <tr><td align='right'>$[File to upload:]</td><td><input
+      name='uploadfile' type='file' /></td></tr>
+    <tr><td align='right'>$[Name attachment as:]</td>
+      <td><input type='text' name='upname' value='\$UploadName' /><input 
+        type='submit' value=' $[Upload] ' /><br />
+        </td></tr></table></form></div>",
+  'wiki:$[{$SiteGroup}/UploadQuickReference]'));
+XLSDV('en',array(
+  'ULsuccess' => 'successfully uploaded',
+  'ULbadname' => 'invalid attachment name',
+  'ULbadtype' => '\'$upext\' is not an allowed file extension',
+  'ULtoobig' => 'file is larger than maximum allowed by webserver',
+  'ULtoobigext' => 'file is larger than allowed maximum of $upmax
+     bytes for \'$upext\' files',
+  'ULpartial' => 'incomplete file received',
+  'ULnofile' => 'no file uploaded',
+  'ULexists' => 'file with that name already exists',
+  'ULpquota' => 'group quota exceeded',
+  'ULtquota' => 'upload quota exceeded'));
+SDV($PageAttributes['passwdupload'],'$[Set new upload password:]');
+SDV($DefaultPasswords['upload'],'*');
+SDV($AuthCascade['upload'], 'read');
+SDV($FmtPV['$PasswdUpload'], 'PasswdVar($pn, "upload")');
+
+Markup('attachlist', 'directives', 
+  '/\\(:attachlist\\s*(.*?):\\)/ei',
+  "Keep('<ul>'.FmtUploadList('$pagename',PSS('$1')).'</ul>')");
+SDV($GUIButtons['attach'], array(220, 'Attach:', '', '$[file.ext]',
+  '$GUIButtonDirUrlFmt/attach.gif"$[Attach file]"'));
+SDV($LinkFunctions['Attach:'], 'LinkUpload');
+SDV($IMap['Attach:'], '$1');
+SDVA($HandleActions, array('upload' => 'HandleUpload',
+  'postupload' => 'HandlePostUpload',
+  'download' => 'HandleDownload'));
+SDVA($HandleAuth, array('upload' => 'upload',
+  'download' => 'read'));
+SDV($HandleAuth['postupload'], $HandleAuth['upload']);
+SDV($UploadVerifyFunction, 'UploadVerifyBasic');
+
+function MakeUploadName($pagename,$x) {
+  global $UploadNameChars;
+  SDV($UploadNameChars, "-\\w. ");
+  $x = preg_replace("/[^$UploadNameChars]/", '', $x);
+  $x = preg_replace('/\\.[^.]*$/e', "strtolower('$0')", $x);
+  $x = preg_replace('/^[^[:alnum:]_]+/', '', $x);
+  return preg_replace('/[^[:alnum:]_]+$/', '', $x);
+}
+
+function LinkUpload($pagename, $imap, $path, $alt, $txt, $fmt=NULL) {
+  global $FmtV, $UploadFileFmt, $LinkUploadCreateFmt, $UploadUrlFmt,
+    $UploadPrefixFmt, $EnableDirectDownload;
+  if (preg_match('!^(.*)/([^/]+)$!', $path, $match)) {
+    $pagename = MakePageName($pagename, $match[1]);
+    $path = $match[2];
+  }
+  $upname = MakeUploadName($pagename, $path);
+  $filepath = FmtPageName("$UploadFileFmt/$upname", $pagename);
+  $FmtV['$LinkUpload'] = 
+    FmtPageName("\$PageUrl?action=upload&amp;upname=$upname", $pagename);
+  $FmtV['$LinkText'] = $txt;
+  if (!file_exists($filepath)) 
+    return FmtPageName($LinkUploadCreateFmt, $pagename);
+  $path = PUE(FmtPageName(IsEnabled($EnableDirectDownload, 1) 
+                            ? "$UploadUrlFmt$UploadPrefixFmt/$upname"
+                            : "{\$PageUrl}?action=download&amp;upname=$upname",
+                          $pagename));
+  return LinkIMap($pagename, $imap, $path, $alt, $txt, $fmt);
+}
+
+function HandleUpload($pagename, $auth = 'upload') {
+  global $FmtV,$UploadExtMax,
+    $HandleUploadFmt,$PageStartFmt,$PageEndFmt,$PageUploadFmt;
+  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
+  if (!$page) Abort("?cannot upload to $pagename");
+  PCache($pagename,$page);
+  $FmtV['$UploadName'] = MakeUploadName($pagename,@$_REQUEST['upname']);
+  $upresult = htmlspecialchars(@$_REQUEST['upresult']);
+  $uprname = htmlspecialchars(@$_REQUEST['uprname']);
+  $FmtV['$upext'] = htmlspecialchars(@$_REQUEST['upext']);
+  $FmtV['$upmax'] = htmlspecialchars(@$_REQUEST['upmax']);
+  $FmtV['$UploadResult'] = ($upresult) ?
+    FmtPageName("<i>$uprname</i>: $[UL$upresult]",$pagename) : '';
+  SDV($HandleUploadFmt,array(&$PageStartFmt,&$PageUploadFmt,&$PageEndFmt));
+  PrintFmt($pagename,$HandleUploadFmt);
+}
+
+function HandleDownload($pagename, $auth = 'read') {
+  global $UploadFileFmt, $UploadExts, $DownloadDisposition;
+  SDV($DownloadDisposition, "inline");
+  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
+  if (!$page) Abort("?cannot read $pagename");
+  $upname = MakeUploadName($pagename, @$_REQUEST['upname']);
+  $filepath = FmtPageName("$UploadFileFmt/$upname", $pagename);
+  if (!$upname || !file_exists($filepath)) {
+    header("HTTP/1.0 404 Not Found");
+    Abort("?requested file not found");
+    exit();
+  }
+  preg_match('/\\.([^.]+)$/',$filepath,$match); 
+  if ($UploadExts[@$match[1]]) 
+    header("Content-Type: {$UploadExts[@$match[1]]}");
+  header("Content-Length: ".filesize($filepath));
+  header("Content-disposition: $DownloadDisposition; filename=$upname");
+  $fp = fopen($filepath, "r");
+  if ($fp) {
+    while (!feof($fp)) echo fread($fp, 4096);
+    fclose($fp);
+  }
+  exit();
+}  
+ 
+function HandlePostUpload($pagename, $auth = 'upload') {
+  global $UploadVerifyFunction, $UploadFileFmt, $LastModFile, 
+    $EnableUploadVersions, $Now;
+  $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
+  if (!$page) Abort("?cannot upload to $pagename");
+  $uploadfile = $_FILES['uploadfile'];
+  $upname = $_REQUEST['upname'];
+  if ($upname=='') $upname=$uploadfile['name'];
+  $upname = MakeUploadName($pagename,$upname);
+  if (!function_exists($UploadVerifyFunction))
+    Abort('?no UploadVerifyFunction available');
+  $filepath = FmtPageName("$UploadFileFmt/$upname",$pagename);
+  $result = $UploadVerifyFunction($pagename,$uploadfile,$filepath);
+  if ($result=='') {
+    $filedir = preg_replace('#/[^/]*$#','',$filepath);
+    mkdirp($filedir);
+    if (IsEnabled($EnableUploadVersions, 0))
+      @rename($filepath, "$filepath,$Now");
+    if (!move_uploaded_file($uploadfile['tmp_name'],$filepath))
+      { Abort("?cannot move uploaded file to $filepath"); return; }
+    fixperms($filepath,0444);
+    if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); }
+    $result = "upresult=success";
+  }
+  Redirect($pagename,"{\$PageUrl}?action=upload&uprname=$upname&$result");
+}
+
+function UploadVerifyBasic($pagename,$uploadfile,$filepath) {
+  global $EnableUploadOverwrite,$UploadExtSize,$UploadPrefixQuota,
+    $UploadDirQuota,$UploadDir;
+  if (!$EnableUploadOverwrite && file_exists($filepath)) 
+    return 'upresult=exists';
+  preg_match('/\\.([^.\\/]+)$/',$filepath,$match); $ext=@$match[1];
+  $maxsize = $UploadExtSize[$ext];
+  if ($maxsize<=0) return "upresult=badtype&upext=$ext";
+  if ($uploadfile['size']>$maxsize) 
+    return "upresult=toobigext&upext=$ext&upmax=$maxsize";
+  switch (@$uploadfile['error']) {
+    case 1: return 'upresult=toobig';
+    case 2: return 'upresult=toobig';
+    case 3: return 'upresult=partial';
+    case 4: return 'upresult=nofile';
+  }
+  if (!is_uploaded_file($uploadfile['tmp_name'])) return 'upresult=nofile';
+  $filedir = preg_replace('#/[^/]*$#','',$filepath);
+  if ($UploadPrefixQuota && 
+      (dirsize($filedir)- at filesize($filepath)+$uploadfile['size']) >
+        $UploadPrefixQuota) return 'upresult=pquota';
+  if ($UploadDirQuota && 
+      (dirsize($UploadDir)- at filesize($filepath)+$uploadfile['size']) >
+        $UploadDirQuota) return 'upresult=tquota';
+  return '';
+}
+
+function dirsize($dir) {
+  $size = 0;
+  $dirp = @opendir($dir);
+  if (!$dirp) return 0;
+  while (($file=readdir($dirp)) !== false) {
+    if ($file[0]=='.') continue;
+    if (is_dir("$dir/$file")) $size+=dirsize("$dir/$file");
+    else $size+=filesize("$dir/$file");
+  }
+  closedir($dirp);
+  return $size;
+}
+
+function FmtUploadList($pagename, $args) {
+  global $UploadDir, $UploadPrefixFmt, $UploadUrlFmt, $EnableUploadOverwrite,
+    $TimeFmt, $EnableDirectDownload;
+
+  $opt = ParseArgs($args);
+  if (@$opt[''][0]) $pagename = MakePageName($pagename, $opt[''][0]);
+  if (@$opt['ext']) 
+    $matchext = '/\\.(' 
+      . implode('|', preg_split('/\\W+/', $opt['ext'], -1, PREG_SPLIT_NO_EMPTY))
+      . ')$/i';
+
+  $uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt", $pagename);
+  $uploadurl = FmtPageName(IsEnabled($EnableDirectDownload, 1) 
+                          ? "$UploadUrlFmt$UploadPrefixFmt/"
+                          : "\$PageUrl?action=download&amp;upname=",
+                      $pagename);
+
+  $dirp = @opendir($uploaddir);
+  if (!$dirp) return '';
+  $filelist = array();
+  while (($file=readdir($dirp)) !== false) {
+    if ($file{0} == '.') continue;
+    if (@$matchext && !preg_match(@$matchext, $file)) continue;
+    $filelist[$file] = $file;
+  }
+  closedir($dirp);
+  $out = array();
+  natcasesort($filelist);
+  $overwrite = '';
+  foreach($filelist as $file=>$x) {
+    $name = PUE("$uploadurl$file");
+    $stat = stat("$uploaddir/$file");
+    if ($EnableUploadOverwrite) 
+      $overwrite = FmtPageName("<a rel='nofollow' class='createlink'
+        href='\$PageUrl?action=upload&amp;upname=$file'>&nbsp;&Delta;</a>", 
+        $pagename);
+    $out[] = "<li> <a href='$name'>$file</a>$overwrite ... ".
+      number_format($stat['size']) . " bytes ... " . 
+      strftime($TimeFmt, $stat['mtime']) . "</li>";
+  }
+  return implode("\n",$out);
+}
+
+# this adds (:if [!]attachments:) to the markup
+$Conditions['attachments'] = "AttachExist(\$pagename)";
+function AttachExist($pagename) {
+  global $UploadDir, $UploadPrefixFmt;
+  $uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt", $pagename);
+  $count = 0;
+  $dirp = @opendir($uploaddir);
+  if ($dirp) {
+    while (($file = readdir($dirp)) !== false) 
+      if ($file{0} != '.') $count++;
+    closedir($dirp);
+  }
+  return $count;
+}
+
+

Added: trunk/oggdsf/website/scripts/urlapprove.php
===================================================================
--- trunk/oggdsf/website/scripts/urlapprove.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/urlapprove.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,125 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2006 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script provides a URL-approval capability.  To enable this
+    script, add the following line to a configuration file:
+
+        include_once('scripts/urlapprove.php');
+
+    The URL prefixes to be allowed are stored as patterns in 
+    $WhiteUrlPatterns.  This array can be loaded from config.php, or 
+    from the wiki pages given by the $ApprovedUrlPagesFmt[] array.  
+    Any http: or https: URL that isn't in $WhiteUrlPatterns is rendered 
+    using $UnapprovedLinkFmt.
+
+    The script also provides ?action=approveurls and ?action=approvesites, 
+    which scan the current page for any new URLs to be automatically added
+    the first page of $UrlApprovalPagesFmt.
+
+    Finally, the script will block any post containing more than
+    $UnapprovedLinkCountMax unapproved urls in it.  By default this
+    is set to a very large number, leaving the posting of unapproved
+    urls wide open, but by setting $UnapprovedLinkCountMax to a smaller
+    number you can limit the number of unapproved urls that make it into
+    a page.  (Wikispammers seem to like to post long lists of urls, while
+    more "normal" authors tend to only post a few.)
+*/
+
+$LinkFunctions['http:'] = 'LinkHTTP';
+$LinkFunctions['https:'] = 'LinkHTTP';
+SDV($ApprovedUrlPagesFmt, array('$SiteAdminGroup.ApprovedUrls'));
+SDV($UnapprovedLinkFmt,
+  "\$LinkText<a class='apprlink' href='{\$PageUrl}?action=approvesites'>$[(approve sites)]</a>");
+$HTMLStylesFmt['urlapprove'] = '.apprlink { font-size:smaller; }';
+SDV($ApproveUrlPattern,
+  "\\bhttps?:[^\\s$UrlExcludeChars]*[^\\s.,?!$UrlExcludeChars]");
+$WhiteUrlPatterns = (array)$WhiteUrlPatterns;
+SDV($HandleActions['approveurls'], 'HandleApprove');
+SDV($HandleAuth['approveurls'], 'edit');
+SDV($HandleActions['approvesites'], 'HandleApprove');
+SDV($HandleAuth['approvesites'], 'edit');
+SDV($UnapprovedLinkCountMax, 1000000);
+array_splice($EditFunctions, array_search('PostPage', $EditFunctions),
+  0, 'BlockUnapprovedPosts');
+
+function LinkHTTP($pagename,$imap,$path,$alt,$txt,$fmt=NULL) {
+  global $EnableUrlApprovalRequired, $IMap, $WhiteUrlPatterns, $FmtV,
+    $UnapprovedLink, $UnapprovedLinkCount, $UnapprovedLinkFmt;
+  if (!IsEnabled($EnableUrlApprovalRequired,1))
+    return LinkIMap($pagename,$imap,$path,$alt,$txt,$fmt);
+  static $havereadpages;
+  if (!$havereadpages) { ReadApprovedUrls($pagename); $havereadpages=true; }
+  $p = str_replace(' ','%20',$path);
+  $url = str_replace('$1',$p,$IMap[$imap]);
+  if (!isset($UnapprovedLink)) $UnapprovedLink = array();
+  foreach((array)$WhiteUrlPatterns as $pat) {
+    if (preg_match("!^$pat(/|$)!i",$url))
+      return LinkIMap($pagename,$imap,$path,$alt,$txt,$fmt);
+  }
+  $FmtV['$LinkUrl'] = PUE(str_replace('$1',$path,$IMap[$imap]));
+  $FmtV['$LinkText'] = $txt;
+  $FmtV['$LinkAlt'] = str_replace(array('"',"'"),array('&#34;','&#39;'),$alt);
+  $UnapprovedLink[] = $url;
+  @$UnapprovedLinkCount++;
+  return FmtPageName($UnapprovedLinkFmt,$pagename);
+}
+
+function ReadApprovedUrls($pagename) {
+  global $ApprovedUrlPagesFmt,$ApproveUrlPattern,$WhiteUrlPatterns;
+  foreach((array)$ApprovedUrlPagesFmt as $p) {
+    $pn = FmtPageName($p, $pagename);
+    StopWatch("ReadApprovedUrls $pn begin");
+    $apage = ReadPage($pn, READPAGE_CURRENT);
+    preg_match_all("/$ApproveUrlPattern/",@$apage['text'],$match);
+    foreach($match[0] as $a) 
+      $WhiteUrlPatterns[] = preg_quote($a,'!');
+    StopWatch("ReadApprovedUrls $pn end");
+  }
+}
+
+function HandleApprove($pagename, $auth='edit') {
+  global $ApproveUrlPattern,$WhiteUrlPatterns,$ApprovedUrlPagesFmt,$action;
+  Lock(2);
+  $page = ReadPage($pagename);
+  $text = preg_replace('/[()]/','',$page['text']);
+  preg_match_all("/$ApproveUrlPattern/",$text,$match);
+  ReadApprovedUrls($pagename);
+  $addpat = array();
+  foreach($match[0] as $a) {
+    if ($action=='approvesites') 
+      $a=preg_replace("!^([^:]+://[^/]+).*$!",'$1',$a);
+    $addpat[] = $a;
+  }
+  if (count($addpat)>0) {
+    $aname = FmtPageName($ApprovedUrlPagesFmt[0],$pagename);
+    $apage = RetrieveAuthPage($aname, $auth);
+    if (!$apage) Abort("?cannot edit $aname");
+    $new = $apage;
+    if (substr($new['text'],-1,1)!="\n") $new['text'].="\n";
+    foreach($addpat as $a) {
+      foreach((array)$WhiteUrlPatterns as $pat)
+        if (preg_match("!^$pat(/|$)!i",$a)) continue 2;
+      $urlp = preg_quote($a,'!');
+      $WhiteUrlPatterns[] = $urlp;
+      $new['text'].="  $a\n";
+    }
+    $_POST['post'] = 'y';
+    PostPage($aname,$apage,$new);
+  }
+  Redirect($pagename);
+}
+
+function BlockUnapprovedPosts($pagename, &$page, &$new) {
+  global $EnableUrlApprovalRequired, $UnapprovedLinkCount, 
+    $UnapprovedLinkCountMax, $EnablePost, $MessagesFmt, $BlockMessageFmt;
+  if (!IsEnabled($EnableUrlApprovalRequired, 1)) return;
+  if ($UnapprovedLinkCount <= $UnapprovedLinkCountMax) return;
+  if ($page['=auth']['admin']) return;
+  $EnablePost = 0;
+  $MessagesFmt[] = $BlockMessageFmt;
+}
+    

Added: trunk/oggdsf/website/scripts/vardoc.php
===================================================================
--- trunk/oggdsf/website/scripts/vardoc.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/vardoc.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,78 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2002-2005 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script provides special handling for WikiWords that are
+    preceded by a $, treating them as PmWiki variables to be looked up
+    in the variable documentation pages if such documentation exists.
+    The $VarPagesFmt variable contains a list of pages to be searched
+    to build an index of the variable documentation.  This index is 
+    generated only once per browse request, and then only when needed.
+*/
+
+SDV($VarPagesFmt,array('$[PmWiki.Variables]'));
+Markup('varlink','<wikilink',"/\\$($WikiWordPattern)\\b/e",
+  "Keep(VarLink(\$pagename,'$1','$$1'))");
+Markup('vardef','<links',"/^:\\$($WikiWordPattern):/",
+  ':[[#$1]]$$1:');
+Markup('varindex', 'directives',
+  '/\\(:varindex:\\)/ei',
+  "Keep(VarIndexList(\$pagename))");
+
+$HTMLStylesFmt['vardoc'] = "a.varlink { text-decoration:none; }\n";
+
+function VarLink($pagename,$tgt,$txt) {
+  global $VarIndex,$FmtV,$VarLinkMissingFmt,$VarLinkExistsFmt;
+  SDV($VarLinkMissingFmt,'$LinkText');
+  SDV($VarLinkExistsFmt,"<a class='varlink' href='\$LinkUrl'><code class='varlink'>\$LinkText</code></a>");
+  VarIndexLoad($pagename);
+  $FmtV['$LinkText'] = str_replace('$', '&#36;', $txt);
+  $FmtV['$LinkUrl'] = @$VarIndex[$tgt]['url'];
+  if (@!$VarIndex[$tgt]['url'])
+    return FmtPageName($VarLinkMissingFmt,$pagename);
+  return FmtPageName($VarLinkExistsFmt,$pagename);
+}
+
+function VarIndexLoad($pagename) {
+  global $VarPagesFmt,$VarIndex,$WikiWordPattern;
+  static $loaded;
+  $VarIndex = (array)@$VarIndex;
+  if ($loaded) return;
+  foreach($VarPagesFmt as $vf) {
+    $v = FmtPageName($vf, $pagename);
+    if (@$loaded[$v]) continue;
+    $vlist = array($v);
+    $t = ReadTrail($pagename,$v);
+    if ($t) 
+      for($i=0;$i<count($t);$i++) 
+        if (@!$loaded[$t[$i]['pagename']]) $vlist[]=$t[$i]['pagename'];
+    foreach($vlist as $vname) {
+      $vpage = ReadPage($vname); @$loaded[$vname]++;
+      if (!$vpage) continue;
+      if (!preg_match_all("/\n:\\$([[:upper:]]\\w+):/",@$vpage['text'],$match))
+        continue;
+      foreach($match[1] as $n) {
+        $VarIndex[$n]['pagename'] = $vname;
+        $VarIndex[$n]['url'] = FmtPageName("{\$PageUrl}#$n",$vname);
+      }
+    }
+  }
+}
+
+# VarIndexList() generates a table of all indexed variables.
+function VarIndexList($pagename) {
+  global $VarIndex;
+  if (!isset($VarIndex)) VarIndexLoad($pagename);
+  ksort($VarIndex);
+  $out = "<table><tr><th>Variable</th><th>Documented in</th></tr>\n";
+  foreach($VarIndex as $v=>$a) 
+    $out .= FmtPageName("<tr><td><a class='varlink' 
+      href='{$a['url']}'><code>&#036;$v</code></a></td><td><a 
+      href='{\$PageUrl}'>{\$Name}</a></td></tr>\n",$a['pagename']);
+  $out .= "</table>";
+  return $out;
+}
+

Added: trunk/oggdsf/website/scripts/version.php
===================================================================
--- trunk/oggdsf/website/scripts/version.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/version.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1 @@
+<?php $Version="pmwiki-2.2.0-beta65"; $VersionNum=2001965; 
\ No newline at end of file

Added: trunk/oggdsf/website/scripts/wikistyles.php
===================================================================
--- trunk/oggdsf/website/scripts/wikistyles.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/wikistyles.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,185 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+*/
+
+SDV($WikiStylePattern,'%%|%[A-Za-z][-,=:#\\w\\s\'"().]*%');
+
+## %% markup
+Markup('%%','style','%','return ApplyStyles($x);');
+
+## %define=...% markup on a line by itself
+Markup('%define=', '>split',
+  "/^(?=%define=)((?:$WikiStylePattern)\\s*)+$/e",
+  "PZZ(ApplyStyles(PSS('$0')))");
+
+## restore links before applying styles
+Markup('restorelinks','<%%',"/$KeepToken(\\d+L)$KeepToken/e",
+  '$GLOBALS[\'KPV\'][\'$1\']');
+
+# define PmWiki's standard/default wikistyles
+if (IsEnabled($EnableStdWikiStyles,1)) {
+  ## standard colors
+  foreach(array('black','white','red','yellow','blue','gray',
+      'silver','maroon','green','navy','purple') as $c)
+    SDV($WikiStyle[$c]['color'],$c);
+  ## %newwin% style opens links in a new window
+  SDV($WikiStyle['newwin']['target'],'_blank');
+  ## %comment% style turns markup into a comment via display:none css
+  SDV($WikiStyle['comment']['display'],'none');
+  ## display, margin, padding, and border css properties
+  $WikiStyleCSS[] = 
+    'float|display|(margin|padding|border)(-(left|right|top|bottom))?';
+  $WikiStyleCSS[] = 'white-space';
+  ## list-styles
+  $WikiStyleCSS[] = 'list-style';
+  $WikiStyleCSS[] = 'width|height';
+  foreach(array('decimal'=>'decimal', 'roman'=>'lower-roman',
+    'ROMAN'=>'upper-roman', 'alpha'=>'lower-alpha', 'ALPHA'=>'upper-alpha')
+    as $k=>$v) 
+      SDV($WikiStyle[$k],array('apply'=>'list','list-style'=>$v));
+  ## apply ranges
+  SDVA($WikiStyleApply,array(
+    'item' => 'li|dt',
+    'list' => 'ul|ol|dl',
+    'div' => 'div',
+    'pre' => 'pre',
+    'img' => 'img',
+    'block' => 'p(?!\\sclass=)|div|ul|ol|dl|li|dt|pre|h[1-6]',
+    'p' => 'p(?!\\sclass=)'));
+  foreach(array('item', 'list', 'block', 'p', 'div') as $c)
+    SDV($WikiStyle[$c],array('apply'=>$c));
+  ## block justifications
+  foreach(array('left','right','center') as $c)
+    SDV($WikiStyle[$c],array('apply'=>'block','text-align'=>$c));
+  ## frames, floating frames, and floats
+  SDV($HTMLStylesFmt['wikistyles'], " 
+    .frame 
+      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }
+    .lfloat { float:left; margin-right:0.5em; }
+    .rfloat { float:right; margin-left:0.5em; }\n");
+  SDV($WikiStyle['thumb'], array('width' => '100px'));
+  SDV($WikiStyle['frame'], array('class' => 'frame'));
+  SDV($WikiStyle['lframe'], array('class' => 'frame lfloat'));
+  SDV($WikiStyle['rframe'], array('class' => 'frame rfloat'));
+  SDV($WikiStyle['cframe'], array(
+    'class' => 'frame', 'margin-left' => 'auto', 'margin-right' => 'auto',
+    'width' => '200px', 'apply' => 'block', 'text-align' => 'center'));
+  ##  preformatted text sections
+  SDV($WikiStyle['pre'], array('apply' => 'block', 'white-space' => 'pre'));
+  SDV($WikiStyle['sidehead'], array('apply' => 'block', 'class' => 'sidehead'));
+}
+
+SDVA($WikiStyleAttr,array(
+  'vspace' => 'img',
+  'hspace' => 'img',
+  'align' => 'img',
+  'value' => 'li',
+  'target' => 'a',
+  'accesskey' => 'a',
+  'rel' => 'a'));
+
+SDVA($WikiStyleRepl,array(
+  '/^%(.*)%$/' => '$1',
+  '/\\bbgcolor([:=])/' => 'background-color$1',
+  '/\\b(\d+)pct\\b/' => '$1%',
+  ));
+
+$WikiStyleCSS[] = 'color|background-color';
+$WikiStyleCSS[] = 'text-align|text-decoration';
+$WikiStyleCSS[] = 'font-size|font-family|font-weight|font-style';
+
+SDV($imgTag, '(?:img|object|embed)');  SDV($aTag, 'a'); SDV($spanTag, 'span');
+
+function ApplyStyles($x) {
+  global $UrlExcludeChars, $WikiStylePattern, $WikiStyleRepl, $WikiStyle,
+    $WikiStyleAttr, $WikiStyleCSS, $WikiStyleApply, $BlockPattern,
+    $WikiStyleTag, $imgTag, $aTag, $spanTag, $WikiStyleAttrPrefix;
+  $wt = @$WikiStyleTag; $ns = $WikiStyleAttrPrefix; $ws = '';
+  $x = preg_replace("/\\b(href|src)=(['\"]?)[^$UrlExcludeChars]+\\2/e", 
+                    "Keep(PSS('$0'))", $x);
+  $x = preg_replace("/\\bhttps?:[^$UrlExcludeChars]+/e", "Keep('$0')", $x);
+  $parts = preg_split("/($WikiStylePattern)/",$x,-1,PREG_SPLIT_DELIM_CAPTURE);
+  $parts[] = NULL;
+  $out = '';
+  $style = array();
+  $wikicsspat = '/^('.implode('|',(array)$WikiStyleCSS).')$/';
+  while ($parts) {
+    $p = array_shift($parts);
+    if (preg_match("/^$WikiStylePattern\$/",$p)) {
+      $WikiStyle['curr']=$style; $style=array();
+      foreach((array)$WikiStyleRepl as $pat=>$rep) 
+        $p=preg_replace($pat,$rep,$p);
+      preg_match_all(
+        '/\\b([a-zA-Z][-\\w]*)([:=]([-#,\\w.()%]+|([\'"]).*?\\4))?/',
+        $p, $match, PREG_SET_ORDER);
+      while ($match) {
+        $m = array_shift($match);
+        if (@$m[2]) $style[$m[1]]=preg_replace('/^([\'"])(.*)\\1$/','$2',$m[3]);
+        else if (!isset($WikiStyle[$m[1]])) @$style['class'] .= ' ' . $m[1];
+        else {
+          $c = @$style['class'];
+          $style=array_merge($style,(array)$WikiStyle[$m[1]]);
+          if ($c) $style['class'] = $c . ' ' . $style['class'];
+        }
+      }
+      if (@$style['define']) {
+        $d = $style['define']; unset($style['define']);
+        $WikiStyle[$d] = $style;
+      }
+      if (@$WikiStyleApply[$style['apply']]) {
+        $apply[$style['apply']] = 
+          array_merge((array)@$apply[$style['apply']],$style);
+        $style=array();
+      }
+      continue;
+    }
+    if (is_null($p)) 
+      { $alist=@$apply; unset($alist['']); $p=$out; $out=''; }
+    elseif ($p=='') continue;
+    else { $alist=array(''=>$style); }
+    foreach((array)$alist as $a=>$s) {
+      $spanattr = ''; $stylev = array(); $id = '';
+      foreach((array)$s as $k=>$v) {
+        $v = trim($v);
+        if ($wt) $ws = str_replace('$1', "$ns$k='$v'", $wt);
+        if ($k == 'class' && $v) $spanattr = "{$ns}class='$v'";
+        elseif ($k=='id') $id = preg_replace('/[^-A-Za-z0-9:_.]+/', '_', $v);
+        elseif (($k=='width' || $k=='height') && !@$WikiStyleApply[$a]
+            && preg_match("/\\s*<$imgTag\\b/", $p)) 
+          $p = preg_replace("/<($imgTag)\\b(?![^>]*\\s$k=)/", 
+                 "$ws<$1 $ns$k='$v'", $p);
+        elseif (@$WikiStyleAttr[$k]) 
+          $p = preg_replace(
+                 "/<({$WikiStyleAttr[$k]}(?![^>]*\\s(?:$ns)?$k=))([^>]*)>/s",
+                 "$ws<$1 $ns$k='$v' $2>", $p);
+        elseif (preg_match($wikicsspat,$k)) $stylev[]="$k: $v;";
+      }
+      if ($stylev) $spanattr .= " {$ns}style='".implode(' ',$stylev)."'";
+      if ($id) $spanattr .= " {$ns}id='$id'";
+      if ($spanattr) {
+        if ($wt) $ws = str_replace('$1', $spanattr, $wt);
+        if (!@$WikiStyleApply[$a]) {
+          $p = preg_replace("!^(.*?)($|</?($BlockPattern))!s", 
+                            "$ws<$spanTag $spanattr>$1</$spanTag>$2", $p, 1);
+}
+        elseif (!preg_match('/^(\\s*<[^>]+>)*$/s',$p) ||
+                preg_match("/<$imgTag\\b/", $p)) {
+          $p = preg_replace("/<({$WikiStyleApply[$a]})\\b/",
+                 "$ws<$1 $spanattr", $p);
+        }
+      }
+      if (@$s['color']) {
+        $colorattr = "{$ns}style='color: {$s['color']}'";
+        if ($wt) $ws = str_replace('$1', $colorattr, $wt);
+        $p = preg_replace("/<$aTag\\b/", "$ws<$aTag $colorattr", $p);
+      }
+    }
+    $out .= $p;
+  }
+  return $out;
+}
+

Added: trunk/oggdsf/website/scripts/wikiwords.php
===================================================================
--- trunk/oggdsf/website/scripts/wikiwords.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/wikiwords.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,69 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2001-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script adds WikiWord (CamelCase) processing to PmWiki.
+    Originally WikiWords were part of the default configuration,
+    but their usage has died out over time and so it's now optional.
+
+    To enable WikiWord links, simply add the following to
+    a local customization file:
+
+        $EnableWikiWords = 1;
+
+    To have PmWiki recognize and process WikiWords but not link
+    them (i.e., the default behavior in PmWiki 2.1), also add
+
+        $LinkWikiWords = 0;
+
+    If you want only the first occurrence of a WikiWord to be converted
+    to a link, set $WikiWordCountMax=1.
+
+        $WikiWordCountMax = 1;         # converts only first WikiWord
+        $WikiWordCountMax = 0;         # another way to disable WikiWord links
+
+    The $WikiWordCount array can be used to control the number of times
+    a WikiWord is converted to a link.  This is useful for disabling
+    or limiting specific WikiWords.
+
+        $WikiWordCount['PhD'] = 0;         # disables 'PhD'
+        $WikiWordCount['PmWiki'] = 1;      # convert only first 'PmWiki'
+        $WikiWordCount['WikiWord'] = -1;   # ignore $SpaceWikiWord setting
+
+    By default, PmWiki is configured such that only the first occurrence
+    of 'PmWiki' in a page is treated as a WikiWord.  If you want to
+    restore 'PmWiki' to be treated like other WikiWords, uncomment the
+    line below.
+        unset($WikiWordCount['PmWiki']);
+
+    If you want to disable WikiWords matching a pattern, you can use
+    something like the following.  Note that the first argument has to
+    be different for each call to Markup().  The example below disables
+    WikiWord links like COM1, COM2, COM1234, etc.
+        Markup('COM\d+', '<wikilink', '/\\bCOM\\d+/', "Keep('$0')");
+*/
+
+SDV($LinkWikiWords, 1);
+
+## bare wikilinks
+Markup('wikilink', '>urllink',
+  "/\\b(?<![#&])($GroupPattern([\\/.]))?($WikiWordPattern)/e",
+  "Keep('<span class=\\'wikiword\\'>'.WikiLink(\$pagename,'$0').'</span>',
+        'L')");
+
+function WikiLink($pagename, $word) {
+  global $LinkWikiWords, $WikiWordCount, $SpaceWikiWords, $AsSpacedFunction,
+    $MarkupFrame, $WikiWordCountMax;
+  if (!$LinkWikiWords || ($WikiWordCount[$word] < 0)) return $word;
+  $text = ($SpaceWikiWords) ? $AsSpacedFunction($word) : $word;
+  $text = preg_replace('!.*/!', '', $text);
+  if (!isset($MarkupFrame[0]['wwcount'][$word]))
+    $MarkupFrame[0]['wwcount'][$word] = $WikiWordCountMax;
+  if ($MarkupFrame[0]['wwcount'][$word]-- < 1) return $text;
+  return MakeLink($pagename, $word, $text);
+}
+
+

Added: trunk/oggdsf/website/scripts/xlpage-utf-8.php
===================================================================
--- trunk/oggdsf/website/scripts/xlpage-utf-8.php	                        (rev 0)
+++ trunk/oggdsf/website/scripts/xlpage-utf-8.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,601 @@
+<?php if (!defined('PmWiki')) exit();
+/*  Copyright 2004-2007 Patrick R. Michaud (pmichaud at pobox.com)
+    This file is part of PmWiki; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.  See pmwiki.php for full details.
+
+    This script configures PmWiki to use utf-8 in page content and
+    pagenames.  There are some unfortunate side effects about PHP's
+    utf-8 implementation, however.  First, since PHP doesn't have a
+    way to do pattern matching on upper/lowercase UTF-8 characters,
+    WikiWords are limited to the ASCII-7 set, and all links to page
+    names with UTF-8 characters have to be in double brackets.
+    Second, we have to assume that all non-ASCII characters are valid
+    in pagenames, since there's no way to determine which UTF-8
+    characters are "letters" and which are punctuation.
+*/
+
+global $HTTPHeaders, $KeepToken, $pagename,
+  $GroupPattern, $NamePattern, $WikiWordPattern, $SuffixPattern,
+  $PageNameChars, $MakePageNamePatterns, $CaseConversions, $Charset;
+
+$Charset = 'UTF-8';
+$HTTPHeaders['utf-8'] = 'Content-type: text/html; charset=UTF-8';
+$HTMLHeaderFmt['utf-8'] = 
+  "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />";
+$pagename = @$_REQUEST['n'];
+if (!$pagename) $pagename = @$_REQUEST['pagename'];
+if (!$pagename &&
+      preg_match('!^'.preg_quote($_SERVER['SCRIPT_NAME'],'!').'/?([^?]*)!',
+          $_SERVER['REQUEST_URI'],$match))
+    $pagename = urldecode($match[1]);
+$pagename = preg_replace('!/+$!','',$pagename);
+$FmtPV['$RequestedPage'] = "'".htmlspecialchars($pagename, ENT_QUOTES)."'";
+
+$GroupPattern = '[\\w\\x80-\\xfe]+(?:-[[\\w\\x80-\\xfe]+)*';
+$NamePattern = '[\\w\\x80-\\xfe]+(?:-[[\\w\\x80-\\xfe]+)*';
+$WikiWordPattern = 
+  '[A-Z][A-Za-z0-9]*(?:[A-Z][a-z0-9]|[a-z0-9][A-Z])[A-Za-z0-9]*';
+$SuffixPattern = '(?:-?[A-Za-z0-9\\x80-\\xd6]+)*';
+
+SDV($PageNameChars, '-[:alnum:]\\x80-\\xfe');
+SDV($MakePageNamePatterns, array(
+    '/[?#].*$/' => '',                     # strip everything after ? or #
+    "/'/" => '',                           # strip single-quotes
+    "/[^$PageNameChars]+/" => ' ',         # convert everything else to space
+    '/(?<=^| )([a-z])/e' => "strtoupper('$1')", 
+    '/(?<=^| )([\\xc0-\\xdf].)/e' => "utf8toupper('$1')", 
+    '/ /' => ''));
+SDV($StrFoldFunction, 'utf8fold');
+
+$AsSpacedFunction = 'AsSpacedUTF8';
+
+function utf8toupper($x) {
+  global $CaseConversions;
+  if (strlen($x) <= 2 && @$CaseConversions[$x])
+    return $CaseConversions[$x];
+  static $lower, $upper;
+  if (!@$lower) { 
+    $lower = array_keys($CaseConversions); 
+    $upper = array_values($CaseConversions);
+  }
+  return str_replace($lower, $upper, $x);
+}
+
+
+function utf8fold($x) {
+  global $StringFolding;
+  static $source, $target;
+  if (!@$source) {
+    $source = array_keys($StringFolding);
+    $target = array_values($StringFolding);
+  }
+  return str_replace($source, $target, $x);
+}
+
+
+function AsSpacedUTF8($text) {
+  global $CaseConversions;
+  static $lower, $upper;
+  if (!@$CaseConversions) return AsSpaced($text);
+  if (!@$lower) {
+    $lower = implode('|', array_keys($CaseConversions));
+    $upper = implode('|', array_values($CaseConversions));
+  }
+  $text = preg_replace("/($lower|\\d)($upper)/", '$1 $2', $text);
+  $text = preg_replace('/([^-\\d])(\\d[-\\d]*( |$))/', '$1 $2', $text);
+  return preg_replace("/($upper)(($upper)($lower|\\d))/", '$1 $2', $text);
+}
+
+
+##   Conversion tables.  
+##   $CaseConversion maps lowercase utf8 sequences to 
+##   their uppercase equivalents.  The table was derived from [1].
+##   $StringFolding normalizes strings so that "equivalent"
+##   forms will match using a binary comparison (derived from [2]).
+##     [1] http://unicode.org/Public/UNIDATA/UnicodeData.txt
+##     [2] http://unicode.org/Public/UNIDATA/CaseFolding.txt
+
+SDV($CaseConversions, array(
+    ##   U+0060
+    "a" => "A", "b" => "B", "c" => "C", "d" => "D", "e" => "E", "f" => "F",
+    "g" => "G", "h" => "H", "i" => "I", "j" => "J", "k" => "K", "l" => "L",
+    "m" => "M", "n" => "N", "o" => "O", "p" => "P", "q" => "Q", "r" => "R",
+    "s" => "S", "t" => "T", "u" => "U", "v" => "V", "w" => "W", "x" => "X",
+    "y" => "Y", "z" => "Z",
+    ##   U+00b5
+    "\xc2\xb5" => "\xce\x9c",
+    ##   U+00E0 to U+00FF
+    "\xc3\xa0" => "\xc3\x80",  "\xc3\xa1" => "\xc3\x81",
+    "\xc3\xa2" => "\xc3\x82",  "\xc3\xa3" => "\xc3\x83",
+    "\xc3\xa4" => "\xc3\x84",  "\xc3\xa5" => "\xc3\x85",
+    "\xc3\xa6" => "\xc3\x86",  "\xc3\xa7" => "\xc3\x87",
+    "\xc3\xa8" => "\xc3\x88",  "\xc3\xa9" => "\xc3\x89",
+    "\xc3\xaa" => "\xc3\x8a",  "\xc3\xab" => "\xc3\x8b",
+    "\xc3\xac" => "\xc3\x8c",  "\xc3\xad" => "\xc3\x8d",
+    "\xc3\xae" => "\xc3\x8e",  "\xc3\xaf" => "\xc3\x8f",
+    "\xc3\xb0" => "\xc3\x90",  "\xc3\xb1" => "\xc3\x91",
+    "\xc3\xb2" => "\xc3\x92",  "\xc3\xb3" => "\xc3\x93",
+    "\xc3\xb4" => "\xc3\x94",  "\xc3\xb5" => "\xc3\x95",
+    "\xc3\xb6" => "\xc3\x96",  "\xc3\xb8" => "\xc3\x98",
+    "\xc3\xb9" => "\xc3\x99",  "\xc3\xba" => "\xc3\x9a",
+    "\xc3\xbb" => "\xc3\x9b",  "\xc3\xbc" => "\xc3\x9c",
+    "\xc3\xbd" => "\xc3\x9d",  "\xc3\xbe" => "\xc3\x9e",
+    "\xc3\xbf" => "\xc5\xb8",  
+    ##   U+0100
+    "\xc4\x81" => "\xc4\x80",  "\xc4\x83" => "\xc4\x82",
+    "\xc4\x85" => "\xc4\x84",  "\xc4\x87" => "\xc4\x86",
+    "\xc4\x89" => "\xc4\x88",  "\xc4\x8b" => "\xc4\x8a",
+    "\xc4\x8d" => "\xc4\x8c",  "\xc4\x8f" => "\xc4\x8e",
+    "\xc4\x91" => "\xc4\x90",  "\xc4\x93" => "\xc4\x92",
+    "\xc4\x95" => "\xc4\x94",  "\xc4\x97" => "\xc4\x96",
+    "\xc4\x99" => "\xc4\x98",  "\xc4\x9b" => "\xc4\x9a",
+    "\xc4\x9d" => "\xc4\x9c",  "\xc4\x9f" => "\xc4\x9e",
+    "\xc4\xa1" => "\xc4\xa0",  "\xc4\xa3" => "\xc4\xa2",
+    "\xc4\xa5" => "\xc4\xa4",  "\xc4\xa7" => "\xc4\xa6",
+    "\xc4\xa9" => "\xc4\xa8",  "\xc4\xab" => "\xc4\xaa",
+    "\xc4\xad" => "\xc4\xac",  "\xc4\xaf" => "\xc4\xae",
+    "\xc4\xb1" => "I",  "\xc4\xb3" => "\xc4\xb2",
+    "\xc4\xb5" => "\xc4\xb4",  "\xc4\xb7" => "\xc4\xb6",
+    "\xc4\xba" => "\xc4\xb9",  "\xc4\xbc" => "\xc4\xbb",
+    "\xc4\xbe" => "\xc4\xbd",  
+    ##   U+0140
+    "\xc5\x80" => "\xc4\xbf",  "\xc5\x82" => "\xc5\x81", 
+    "\xc5\x84" => "\xc5\x83",  "\xc5\x86" => "\xc5\x85", 
+    "\xc5\x88" => "\xc5\x87",  "\xc5\x8b" => "\xc5\x8a",
+    "\xc5\x8d" => "\xc5\x8c",  "\xc5\x8f" => "\xc5\x8e",
+    "\xc5\x91" => "\xc5\x90",  "\xc5\x93" => "\xc5\x92",
+    "\xc5\x95" => "\xc5\x94",  "\xc5\x97" => "\xc5\x96",
+    "\xc5\x99" => "\xc5\x98",  "\xc5\x9b" => "\xc5\x9a",
+    "\xc5\x9d" => "\xc5\x9c",  "\xc5\x9f" => "\xc5\x9e",
+    "\xc5\xa1" => "\xc5\xa0",  "\xc5\xa3" => "\xc5\xa2",
+    "\xc5\xa5" => "\xc5\xa4",  "\xc5\xa7" => "\xc5\xa6",
+    "\xc5\xa9" => "\xc5\xa8",  "\xc5\xab" => "\xc5\xaa",
+    "\xc5\xad" => "\xc5\xac",  "\xc5\xaf" => "\xc5\xae",
+    "\xc5\xb1" => "\xc5\xb0",  "\xc5\xb3" => "\xc5\xb2",
+    "\xc5\xb5" => "\xc5\xb4",  "\xc5\xb7" => "\xc5\xb6",
+    "\xc5\xba" => "\xc5\xb9",  "\xc5\xbc" => "\xc5\xbb",
+    "\xc5\xbe" => "\xc5\xbd",  "\xc5\xbf" => "S",
+    ##   U+0180
+    "\xc6\x80" => "\xc9\x83",  "\xc6\x83" => "\xc6\x82",
+    "\xc6\x85" => "\xc6\x84",  "\xc6\x88" => "\xc6\x87",
+    "\xc6\x8c" => "\xc6\x8b",  "\xc6\x92" => "\xc6\x91",
+    "\xc6\x95" => "\xc7\xb6",  "\xc6\x99" => "\xc6\x98",
+    "\xc6\x9a" => "\xc8\xbd",  "\xc6\x9e" => "\xc8\xa0",
+    "\xc6\xa1" => "\xc6\xa0",  "\xc6\xa3" => "\xc6\xa2",
+    "\xc6\xa5" => "\xc6\xa4",  "\xc6\xa8" => "\xc6\xa7",
+    "\xc6\xad" => "\xc6\xac",  "\xc6\xb0" => "\xc6\xaf",
+    "\xc6\xb4" => "\xc6\xb3",  "\xc6\xb6" => "\xc6\xb5",
+    "\xc6\xb9" => "\xc6\xb8",  "\xc6\xbd" => "\xc6\xbc",
+    "\xc6\xbf" => "\xc7\xb7",  
+    ##   U+01c0
+    "\xc7\x85" => "\xc7\x84",  "\xc7\x86" => "\xc7\x84", 
+    "\xc7\x88" => "\xc7\x87",  "\xc7\x89" => "\xc7\x87",
+    "\xc7\x8b" => "\xc7\x8a",  "\xc7\x8c" => "\xc7\x8a",
+    "\xc7\x8e" => "\xc7\x8d",  "\xc7\x90" => "\xc7\x8f",
+    "\xc7\x92" => "\xc7\x91",  "\xc7\x94" => "\xc7\x93",
+    "\xc7\x96" => "\xc7\x95",  "\xc7\x98" => "\xc7\x97",
+    "\xc7\x9a" => "\xc7\x99",  "\xc7\x9c" => "\xc7\x9b",
+    "\xc7\x9d" => "\xc6\x8e",  "\xc7\x9f" => "\xc7\x9e",
+    "\xc7\xa1" => "\xc7\xa0",  "\xc7\xa3" => "\xc7\xa2",
+    "\xc7\xa5" => "\xc7\xa4",  "\xc7\xa7" => "\xc7\xa6",
+    "\xc7\xa9" => "\xc7\xa8",  "\xc7\xab" => "\xc7\xaa",
+    "\xc7\xad" => "\xc7\xac",  "\xc7\xaf" => "\xc7\xae",
+    "\xc7\xb2" => "\xc7\xb1",  "\xc7\xb3" => "\xc7\xb1",
+    "\xc7\xb5" => "\xc7\xb4",  "\xc7\xb9" => "\xc7\xb8",
+    "\xc7\xbb" => "\xc7\xba",  "\xc7\xbd" => "\xc7\xbc",
+    "\xc7\xbf" => "\xc7\xbe",
+    ##   U+0200
+    "\xc8\x81" => "\xc8\x80",  "\xc8\x83" => "\xc8\x82",
+    "\xc8\x85" => "\xc8\x84",  "\xc8\x87" => "\xc8\x86",
+    "\xc8\x89" => "\xc8\x88",  "\xc8\x8b" => "\xc8\x8a",
+    "\xc8\x8d" => "\xc8\x8c",  "\xc8\x8f" => "\xc8\x8e",
+    "\xc8\x91" => "\xc8\x90",  "\xc8\x93" => "\xc8\x92",
+    "\xc8\x95" => "\xc8\x94",  "\xc8\x97" => "\xc8\x96",
+    "\xc8\x99" => "\xc8\x98",  "\xc8\x9b" => "\xc8\x9a",
+    "\xc8\x9d" => "\xc8\x9c",  "\xc8\x9f" => "\xc8\x9e",
+    "\xc8\xa3" => "\xc8\xa2",  "\xc8\xa5" => "\xc8\xa4",
+    "\xc8\xa7" => "\xc8\xa6",  "\xc8\xa9" => "\xc8\xa8",
+    "\xc8\xab" => "\xc8\xaa",  "\xc8\xad" => "\xc8\xac",
+    "\xc8\xaf" => "\xc8\xae",  "\xc8\xb1" => "\xc8\xb0",
+    "\xc8\xb3" => "\xc8\xb2",  "\xc8\xbc" => "\xc8\xbb",
+    ##   U+0240
+    "\xc9\x82" => "\xc9\x81",  "\xc9\x87" => "\xc9\x86",
+    "\xc9\x89" => "\xc9\x88",  "\xc9\x8b" => "\xc9\x8a",
+    "\xc9\x8d" => "\xc9\x8c",  "\xc9\x8f" => "\xc9\x8e",
+    "\xc9\x93" => "\xc6\x81",  "\xc9\x94" => "\xc6\x86",
+    "\xc9\x96" => "\xc6\x89",  "\xc9\x97" => "\xc6\x8a",
+    "\xc9\x99" => "\xc6\x8f",  "\xc9\x9b" => "\xc6\x90",
+    "\xc9\xa0" => "\xc6\x93",  "\xc9\xa3" => "\xc6\x94",
+    "\xc9\xa8" => "\xc6\x97",  "\xc9\xa9" => "\xc6\x96",
+    "\xc9\xab" => "\xe2\xb1\xa2",  "\xc9\xaf" => "\xc6\x9c",  
+    "\xc9\xb2" => "\xc6\x9d",  "\xc9\xb5" => "\xc6\x9f",  
+    "\xc9\xbd" => "\xe2\xb1\xa4",
+    ##   U+0280
+    "\xca\x80" => "\xc6\xa6",  "\xca\x83" => "\xc6\xa9",
+    "\xca\x88" => "\xc6\xae",  "\xca\x89" => "\xc9\x84",
+    "\xca\x8a" => "\xc6\xb1",  "\xca\x8b" => "\xc6\xb2",
+    "\xca\x8c" => "\xc9\x85",  "\xca\x92" => "\xc6\xb7",
+    ##   U+0340
+    "\xcd\x85" => "\xce\x99",  "\xcd\xbb" => "\xcf\xbd",
+    "\xcd\xbc" => "\xcf\xbe",  "\xcd\xbd" => "\xcf\xbf",
+    ##   U+0380
+    "\xce\xac" => "\xce\x86",  "\xce\xad" => "\xce\x88",
+    "\xce\xae" => "\xce\x89",  "\xce\xaf" => "\xce\x8a",
+    "\xce\xb1" => "\xce\x91",  "\xce\xb2" => "\xce\x92",
+    "\xce\xb3" => "\xce\x93",  "\xce\xb4" => "\xce\x94",
+    "\xce\xb5" => "\xce\x95",  "\xce\xb6" => "\xce\x96",
+    "\xce\xb7" => "\xce\x97",  "\xce\xb8" => "\xce\x98",
+    "\xce\xb9" => "\xce\x99",  "\xce\xba" => "\xce\x9a",
+    "\xce\xbb" => "\xce\x9b",  "\xce\xbc" => "\xce\x9c",
+    "\xce\xbd" => "\xce\x9d",  "\xce\xbe" => "\xce\x9e",
+    "\xce\xbf" => "\xce\x9f",  
+    ##   U+03c0
+    "\xcf\x80" => "\xce\xa0",  "\xcf\x81" => "\xce\xa1",
+    "\xcf\x82" => "\xce\xa3",  "\xcf\x83" => "\xce\xa3",
+    "\xcf\x84" => "\xce\xa4",  "\xcf\x85" => "\xce\xa5",
+    "\xcf\x86" => "\xce\xa6",  "\xcf\x87" => "\xce\xa7",
+    "\xcf\x88" => "\xce\xa8",  "\xcf\x89" => "\xce\xa9",
+    "\xcf\x8a" => "\xce\xaa",  "\xcf\x8b" => "\xce\xab",
+    "\xcf\x8c" => "\xce\x8c",  "\xcf\x8d" => "\xce\x8e",
+    "\xcf\x8e" => "\xce\x8f",  "\xcf\x90" => "\xce\x92",
+    "\xcf\x91" => "\xce\x98",  "\xcf\x95" => "\xce\xa6",
+    "\xcf\x96" => "\xce\xa0",  "\xcf\x99" => "\xcf\x98",
+    "\xcf\x9b" => "\xcf\x9a",  "\xcf\x9d" => "\xcf\x9c",
+    "\xcf\x9f" => "\xcf\x9e",  "\xcf\xa1" => "\xcf\xa0",
+    "\xcf\xa3" => "\xcf\xa2",  "\xcf\xa5" => "\xcf\xa4",
+    "\xcf\xa7" => "\xcf\xa6",  "\xcf\xa9" => "\xcf\xa8",
+    "\xcf\xab" => "\xcf\xaa",  "\xcf\xad" => "\xcf\xac",
+    "\xcf\xaf" => "\xcf\xae",  "\xcf\xb0" => "\xce\x9a",
+    "\xcf\xb1" => "\xce\xa1",  "\xcf\xb2" => "\xcf\xb9",
+    "\xcf\xb5" => "\xce\x95",  "\xcf\xb8" => "\xcf\xb7",
+    "\xcf\xbb" => "\xcf\xba",
+    ##   U+0400
+    "\xd0\xb0" => "\xd0\x90",  "\xd0\xb1" => "\xd0\x91",
+    "\xd0\xb2" => "\xd0\x92",  "\xd0\xb3" => "\xd0\x93",
+    "\xd0\xb4" => "\xd0\x94",  "\xd0\xb5" => "\xd0\x95",
+    "\xd0\xb6" => "\xd0\x96",  "\xd0\xb7" => "\xd0\x97",
+    "\xd0\xb8" => "\xd0\x98",  "\xd0\xb9" => "\xd0\x99",
+    "\xd0\xba" => "\xd0\x9a",  "\xd0\xbb" => "\xd0\x9b",
+    "\xd0\xbc" => "\xd0\x9c",  "\xd0\xbd" => "\xd0\x9d",
+    "\xd0\xbe" => "\xd0\x9e",  "\xd0\xbf" => "\xd0\x9f",
+    ##   U+0440
+    "\xd1\x80" => "\xd0\xa0",  "\xd1\x81" => "\xd0\xa1",
+    "\xd1\x82" => "\xd0\xa2",  "\xd1\x83" => "\xd0\xa3",
+    "\xd1\x84" => "\xd0\xa4",  "\xd1\x85" => "\xd0\xa5",
+    "\xd1\x86" => "\xd0\xa6",  "\xd1\x87" => "\xd0\xa7",
+    "\xd1\x88" => "\xd0\xa8",  "\xd1\x89" => "\xd0\xa9",
+    "\xd1\x8a" => "\xd0\xaa",  "\xd1\x8b" => "\xd0\xab",
+    "\xd1\x8c" => "\xd0\xac",  "\xd1\x8d" => "\xd0\xad",
+    "\xd1\x8e" => "\xd0\xae",  "\xd1\x8f" => "\xd0\xaf",
+    "\xd1\x90" => "\xd0\x80",  "\xd1\x91" => "\xd0\x81",
+    "\xd1\x92" => "\xd0\x82",  "\xd1\x93" => "\xd0\x83",
+    "\xd1\x94" => "\xd0\x84",  "\xd1\x95" => "\xd0\x85",
+    "\xd1\x96" => "\xd0\x86",  "\xd1\x97" => "\xd0\x87",
+    "\xd1\x98" => "\xd0\x88",  "\xd1\x99" => "\xd0\x89",
+    "\xd1\x9a" => "\xd0\x8a",  "\xd1\x9b" => "\xd0\x8b",
+    "\xd1\x9c" => "\xd0\x8c",  "\xd1\x9d" => "\xd0\x8d",
+    "\xd1\x9e" => "\xd0\x8e",  "\xd1\x9f" => "\xd0\x8f",
+    "\xd1\xa1" => "\xd1\xa0",  "\xd1\xa3" => "\xd1\xa2",
+    "\xd1\xa5" => "\xd1\xa4",  "\xd1\xa7" => "\xd1\xa6",
+    "\xd1\xa9" => "\xd1\xa8",  "\xd1\xab" => "\xd1\xaa",
+    "\xd1\xad" => "\xd1\xac",  "\xd1\xaf" => "\xd1\xae",
+    "\xd1\xb1" => "\xd1\xb0",  "\xd1\xb3" => "\xd1\xb2",
+    "\xd1\xb5" => "\xd1\xb4",  "\xd1\xb7" => "\xd1\xb6",
+    "\xd1\xb9" => "\xd1\xb8",  "\xd1\xbb" => "\xd1\xba",
+    "\xd1\xbd" => "\xd1\xbc",  "\xd1\xbf" => "\xd1\xbe",
+    ##   U+0480
+    "\xd2\x81" => "\xd2\x80",  "\xd2\x8b" => "\xd2\x8a",
+    "\xd2\x8d" => "\xd2\x8c",  "\xd2\x8f" => "\xd2\x8e",
+    "\xd2\x91" => "\xd2\x90",  "\xd2\x93" => "\xd2\x92",
+    "\xd2\x95" => "\xd2\x94",  "\xd2\x97" => "\xd2\x96",
+    "\xd2\x99" => "\xd2\x98",  "\xd2\x9b" => "\xd2\x9a",
+    "\xd2\x9d" => "\xd2\x9c",  "\xd2\x9f" => "\xd2\x9e",
+    "\xd2\xa1" => "\xd2\xa0",  "\xd2\xa3" => "\xd2\xa2",
+    "\xd2\xa5" => "\xd2\xa4",  "\xd2\xa7" => "\xd2\xa6",
+    "\xd2\xa9" => "\xd2\xa8",  "\xd2\xab" => "\xd2\xaa",
+    "\xd2\xad" => "\xd2\xac",  "\xd2\xaf" => "\xd2\xae",
+    "\xd2\xb1" => "\xd2\xb0",  "\xd2\xb3" => "\xd2\xb2",
+    "\xd2\xb5" => "\xd2\xb4",  "\xd2\xb7" => "\xd2\xb6",
+    "\xd2\xb9" => "\xd2\xb8",  "\xd2\xbb" => "\xd2\xba",
+    "\xd2\xbd" => "\xd2\xbc",  "\xd2\xbf" => "\xd2\xbe",
+    ##   U+04c0
+    "\xd3\x82" => "\xd3\x81",  "\xd3\x84" => "\xd3\x83",
+    "\xd3\x86" => "\xd3\x85",  "\xd3\x88" => "\xd3\x87",
+    "\xd3\x8a" => "\xd3\x89",  "\xd3\x8c" => "\xd3\x8b",
+    "\xd3\x8e" => "\xd3\x8d",  "\xd3\x8f" => "\xd3\x80",
+    "\xd3\x91" => "\xd3\x90",  "\xd3\x93" => "\xd3\x92",
+    "\xd3\x95" => "\xd3\x94",  "\xd3\x97" => "\xd3\x96",
+    "\xd3\x99" => "\xd3\x98",  "\xd3\x9b" => "\xd3\x9a",
+    "\xd3\x9d" => "\xd3\x9c",  "\xd3\x9f" => "\xd3\x9e",
+    "\xd3\xa1" => "\xd3\xa0",  "\xd3\xa3" => "\xd3\xa2",
+    "\xd3\xa5" => "\xd3\xa4",  "\xd3\xa7" => "\xd3\xa6",
+    "\xd3\xa9" => "\xd3\xa8",  "\xd3\xab" => "\xd3\xaa",
+    "\xd3\xad" => "\xd3\xac",  "\xd3\xaf" => "\xd3\xae",
+    "\xd3\xb1" => "\xd3\xb0",  "\xd3\xb3" => "\xd3\xb2",
+    "\xd3\xb5" => "\xd3\xb4",  "\xd3\xb7" => "\xd3\xb6",
+    "\xd3\xb9" => "\xd3\xb8",  "\xd3\xbb" => "\xd3\xba",
+    "\xd3\xbd" => "\xd3\xbc",  "\xd3\xbf" => "\xd3\xbe",
+    ##   U+0500
+    "\xd4\x81" => "\xd4\x80",  "\xd4\x83" => "\xd4\x82",
+    "\xd4\x85" => "\xd4\x84",  "\xd4\x87" => "\xd4\x86",
+    "\xd4\x89" => "\xd4\x88",  "\xd4\x8b" => "\xd4\x8a",
+    "\xd4\x8d" => "\xd4\x8c",  "\xd4\x8f" => "\xd4\x8e",
+    "\xd4\x91" => "\xd4\x90",  "\xd4\x93" => "\xd4\x92",
+    ##   U+0560
+    "\xd5\xa1" => "\xd4\xb1",  "\xd5\xa2" => "\xd4\xb2",
+    "\xd5\xa3" => "\xd4\xb3",  "\xd5\xa4" => "\xd4\xb4",
+    "\xd5\xa5" => "\xd4\xb5",  "\xd5\xa6" => "\xd4\xb6",
+    "\xd5\xa7" => "\xd4\xb7",  "\xd5\xa8" => "\xd4\xb8",
+    "\xd5\xa9" => "\xd4\xb9",  "\xd5\xaa" => "\xd4\xba",
+    "\xd5\xab" => "\xd4\xbb",  "\xd5\xac" => "\xd4\xbc",
+    "\xd5\xad" => "\xd4\xbd",  "\xd5\xae" => "\xd4\xbe",
+    "\xd5\xaf" => "\xd4\xbf",  "\xd5\xb0" => "\xd5\x80",
+    "\xd5\xb1" => "\xd5\x81",  "\xd5\xb2" => "\xd5\x82",
+    "\xd5\xb3" => "\xd5\x83",  "\xd5\xb4" => "\xd5\x84",
+    "\xd5\xb5" => "\xd5\x85",  "\xd5\xb6" => "\xd5\x86",
+    "\xd5\xb7" => "\xd5\x87",  "\xd5\xb8" => "\xd5\x88",
+    "\xd5\xb9" => "\xd5\x89",  "\xd5\xba" => "\xd5\x8a",
+    "\xd5\xbb" => "\xd5\x8b",  "\xd5\xbc" => "\xd5\x8c",
+    "\xd5\xbd" => "\xd5\x8d",  "\xd5\xbe" => "\xd5\x8e",
+    "\xd5\xbf" => "\xd5\x8f",
+    ##   U+0580
+    "\xd6\x80" => "\xd5\x90",  "\xd6\x81" => "\xd5\x91",
+    "\xd6\x82" => "\xd5\x92",  "\xd6\x83" => "\xd5\x93",
+    "\xd6\x84" => "\xd5\x94",  "\xd6\x85" => "\xd5\x95",
+    "\xd6\x86" => "\xd5\x96"
+  ));
+
+SDV($StringFolding, array(
+    ##   U+0040
+    "A" => "a", "B" => "b", "C" => "c", "D" => "d", "E" => "e", "F" => "f",
+    "G" => "g", "H" => "h", "I" => "i", "J" => "j", "K" => "k", "L" => "l",
+    "M" => "m", "N" => "n", "O" => "o", "P" => "p", "Q" => "q", "R" => "r",
+    "S" => "s", "T" => "t", "U" => "u", "V" => "v", "W" => "w", "X" => "x",
+    "Y" => "y", "Z" => "z",
+    ##   U+00B5
+    "\xc2\xb5" => "\xce\xbc",
+    ##   U+00C0
+    "\xc3\x80" => "\xc3\xa0",  "\xc3\x81" => "\xc3\xa1",
+    "\xc3\x82" => "\xc3\xa2",  "\xc3\x83" => "\xc3\xa3",
+    "\xc3\x84" => "\xc3\xa4",  "\xc3\x85" => "\xc3\xa5",
+    "\xc3\x86" => "\xc3\xa6",  "\xc3\x87" => "\xc3\xa7",
+    "\xc3\x88" => "\xc3\xa8",  "\xc3\x89" => "\xc3\xa9",
+    "\xc3\x8a" => "\xc3\xaa",  "\xc3\x8b" => "\xc3\xab",
+    "\xc3\x8c" => "\xc3\xac",  "\xc3\x8d" => "\xc3\xad",
+    "\xc3\x8e" => "\xc3\xae",  "\xc3\x8f" => "\xc3\xaf",
+    "\xc3\x90" => "\xc3\xb0",  "\xc3\x91" => "\xc3\xb1",
+    "\xc3\x92" => "\xc3\xb2",  "\xc3\x93" => "\xc3\xb3",
+    "\xc3\x94" => "\xc3\xb4",  "\xc3\x95" => "\xc3\xb5",
+    "\xc3\x96" => "\xc3\xb6",  "\xc3\x98" => "\xc3\xb8",
+    "\xc3\x99" => "\xc3\xb9",  "\xc3\x9a" => "\xc3\xba",
+    "\xc3\x9b" => "\xc3\xbb",  "\xc3\x9c" => "\xc3\xbc",
+    "\xc3\x9d" => "\xc3\xbd",  "\xc3\x9e" => "\xc3\xbe",
+    "\xc3\x9f" => "ss",
+    ##   U+0100
+    "\xc4\x80" => "\xc4\x81",  "\xc4\x82" => "\xc4\x83",
+    "\xc4\x84" => "\xc4\x85",  "\xc4\x86" => "\xc4\x87",
+    "\xc4\x88" => "\xc4\x89",  "\xc4\x8a" => "\xc4\x8b",
+    "\xc4\x8c" => "\xc4\x8d",  "\xc4\x8e" => "\xc4\x8f",
+    "\xc4\x90" => "\xc4\x91",  "\xc4\x92" => "\xc4\x93",
+    "\xc4\x94" => "\xc4\x95",  "\xc4\x96" => "\xc4\x97",
+    "\xc4\x98" => "\xc4\x99",  "\xc4\x9a" => "\xc4\x9b",
+    "\xc4\x9c" => "\xc4\x9d",  "\xc4\x9e" => "\xc4\x9f",
+    "\xc4\xa0" => "\xc4\xa1",  "\xc4\xa2" => "\xc4\xa3",
+    "\xc4\xa4" => "\xc4\xa5",  "\xc4\xa6" => "\xc4\xa7",
+    "\xc4\xa8" => "\xc4\xa9",  "\xc4\xaa" => "\xc4\xab",
+    "\xc4\xac" => "\xc4\xad",  "\xc4\xae" => "\xc4\xaf",
+    "\xc4\xb0" => "i\xcc\x87",  "\xc4\xb2" => "\xc4\xb3",
+    "\xc4\xb4" => "\xc4\xb5",  "\xc4\xb6" => "\xc4\xb7",
+    "\xc4\xb9" => "\xc4\xba",  "\xc4\xbb" => "\xc4\xbc",
+    "\xc4\xbd" => "\xc4\xbe",  "\xc4\xbf" => "\xc5\x80",
+    ##   U+0140
+    "\xc5\x81" => "\xc5\x82",  "\xc5\x83" => "\xc5\x84",
+    "\xc5\x85" => "\xc5\x86",  "\xc5\x87" => "\xc5\x88",
+    "\xc5\x89" => "\xca\xbcn",  "\xc5\x8a" => "\xc5\x8b",
+    "\xc5\x8c" => "\xc5\x8d",  "\xc5\x8e" => "\xc5\x8f",
+    "\xc5\x90" => "\xc5\x91",  "\xc5\x92" => "\xc5\x93",
+    "\xc5\x94" => "\xc5\x95",  "\xc5\x96" => "\xc5\x97",
+    "\xc5\x98" => "\xc5\x99",  "\xc5\x9a" => "\xc5\x9b",
+    "\xc5\x9c" => "\xc5\x9d",  "\xc5\x9e" => "\xc5\x9f",
+    "\xc5\xa0" => "\xc5\xa1",  "\xc5\xa2" => "\xc5\xa3",
+    "\xc5\xa4" => "\xc5\xa5",  "\xc5\xa6" => "\xc5\xa7",
+    "\xc5\xa8" => "\xc5\xa9",  "\xc5\xaa" => "\xc5\xab",
+    "\xc5\xac" => "\xc5\xad",  "\xc5\xae" => "\xc5\xaf",
+    "\xc5\xb0" => "\xc5\xb1",  "\xc5\xb2" => "\xc5\xb3",
+    "\xc5\xb4" => "\xc5\xb5",  "\xc5\xb6" => "\xc5\xb7",
+    "\xc5\xb8" => "\xc3\xbf",  "\xc5\xb9" => "\xc5\xba",
+    "\xc5\xbb" => "\xc5\xbc",  "\xc5\xbd" => "\xc5\xbe",
+    "\xc5\xbf" => "s",
+    ##   U+0180
+    "\xc6\x81" => "\xc9\x93",  "\xc6\x82" => "\xc6\x83",
+    "\xc6\x84" => "\xc6\x85",  "\xc6\x86" => "\xc9\x94",
+    "\xc6\x87" => "\xc6\x88",  "\xc6\x89" => "\xc9\x96",
+    "\xc6\x8a" => "\xc9\x97",  "\xc6\x8b" => "\xc6\x8c",
+    "\xc6\x8e" => "\xc7\x9d",  "\xc6\x8f" => "\xc9\x99",
+    "\xc6\x90" => "\xc9\x9b",  "\xc6\x91" => "\xc6\x92",
+    "\xc6\x93" => "\xc9\xa0",  "\xc6\x94" => "\xc9\xa3",
+    "\xc6\x96" => "\xc9\xa9",  "\xc6\x97" => "\xc9\xa8",
+    "\xc6\x98" => "\xc6\x99",  "\xc6\x9c" => "\xc9\xaf",
+    "\xc6\x9d" => "\xc9\xb2",  "\xc6\x9f" => "\xc9\xb5",
+    "\xc6\xa0" => "\xc6\xa1",  "\xc6\xa2" => "\xc6\xa3",
+    "\xc6\xa4" => "\xc6\xa5",  "\xc6\xa6" => "\xca\x80",
+    "\xc6\xa7" => "\xc6\xa8",  "\xc6\xa9" => "\xca\x83",
+    "\xc6\xac" => "\xc6\xad",  "\xc6\xae" => "\xca\x88",
+    "\xc6\xaf" => "\xc6\xb0",  "\xc6\xb1" => "\xca\x8a",
+    "\xc6\xb2" => "\xca\x8b",  "\xc6\xb3" => "\xc6\xb4",
+    "\xc6\xb5" => "\xc6\xb6",  "\xc6\xb7" => "\xca\x92",
+    "\xc6\xb8" => "\xc6\xb9",  "\xc6\xbc" => "\xc6\xbd",
+    ##   U+01c0
+    "\xc7\x84" => "\xc7\x86",  "\xc7\x85" => "\xc7\x86",
+    "\xc7\x87" => "\xc7\x89",  "\xc7\x88" => "\xc7\x89",
+    "\xc7\x8a" => "\xc7\x8c",  "\xc7\x8b" => "\xc7\x8c",
+    "\xc7\x8d" => "\xc7\x8e",  "\xc7\x8f" => "\xc7\x90",
+    "\xc7\x91" => "\xc7\x92",  "\xc7\x93" => "\xc7\x94",
+    "\xc7\x95" => "\xc7\x96",  "\xc7\x97" => "\xc7\x98",
+    "\xc7\x99" => "\xc7\x9a",  "\xc7\x9b" => "\xc7\x9c",
+    "\xc7\x9e" => "\xc7\x9f",  "\xc7\xa0" => "\xc7\xa1",
+    "\xc7\xa2" => "\xc7\xa3",  "\xc7\xa4" => "\xc7\xa5",
+    "\xc7\xa6" => "\xc7\xa7",  "\xc7\xa8" => "\xc7\xa9",
+    "\xc7\xaa" => "\xc7\xab",  "\xc7\xac" => "\xc7\xad",
+    "\xc7\xae" => "\xc7\xaf",  "\xc7\xb0" => "j\xcc\x8c",
+    "\xc7\xb1" => "\xc7\xb3",  "\xc7\xb2" => "\xc7\xb3",
+    "\xc7\xb4" => "\xc7\xb5",  "\xc7\xb6" => "\xc6\x95",
+    "\xc7\xb7" => "\xc6\xbf",  "\xc7\xb8" => "\xc7\xb9",
+    "\xc7\xba" => "\xc7\xbb",  "\xc7\xbc" => "\xc7\xbd",
+    "\xc7\xbe" => "\xc7\xbf",
+    ##   U+0200
+    "\xc8\x80" => "\xc8\x81",  "\xc8\x82" => "\xc8\x83",
+    "\xc8\x84" => "\xc8\x85",  "\xc8\x86" => "\xc8\x87",
+    "\xc8\x88" => "\xc8\x89",  "\xc8\x8a" => "\xc8\x8b",
+    "\xc8\x8c" => "\xc8\x8d",  "\xc8\x8e" => "\xc8\x8f",
+    "\xc8\x90" => "\xc8\x91",  "\xc8\x92" => "\xc8\x93",
+    "\xc8\x94" => "\xc8\x95",  "\xc8\x96" => "\xc8\x97",
+    "\xc8\x98" => "\xc8\x99",  "\xc8\x9a" => "\xc8\x9b",
+    "\xc8\x9c" => "\xc8\x9d",  "\xc8\x9e" => "\xc8\x9f",
+    "\xc8\xa0" => "\xc6\x9e",  "\xc8\xa2" => "\xc8\xa3",
+    "\xc8\xa4" => "\xc8\xa5",  "\xc8\xa6" => "\xc8\xa7",
+    "\xc8\xa8" => "\xc8\xa9",  "\xc8\xaa" => "\xc8\xab",
+    "\xc8\xac" => "\xc8\xad",  "\xc8\xae" => "\xc8\xaf",
+    "\xc8\xb0" => "\xc8\xb1",  "\xc8\xb2" => "\xc8\xb3",
+    "\xc8\xba" => "\xe2\xb1\xa5",  "\xc8\xbb" => "\xc8\xbc",
+    "\xc8\xbd" => "\xc6\x9a",  "\xc8\xbe" => "\xe2\xb1\xa6",
+    ##   U+0240
+    "\xc9\x81" => "\xc9\x82",  "\xc9\x83" => "\xc6\x80",
+    "\xc9\x84" => "\xca\x89",  "\xc9\x85" => "\xca\x8c",
+    "\xc9\x86" => "\xc9\x87",  "\xc9\x88" => "\xc9\x89",
+    "\xc9\x8a" => "\xc9\x8b",  "\xc9\x8c" => "\xc9\x8d",
+    "\xc9\x8e" => "\xc9\x8f",
+    ##   U+0345
+    "\xcd\x85" => "\xce\xb9",
+    ##   U+0380
+    "\xce\x86" => "\xce\xac",  "\xce\x88" => "\xce\xad",
+    "\xce\x89" => "\xce\xae",  "\xce\x8a" => "\xce\xaf",
+    "\xce\x8c" => "\xcf\x8c",  "\xce\x8e" => "\xcf\x8d",
+    "\xce\x8f" => "\xcf\x8e",  "\xce\x90" => "\xce\xb9\xcc\x88\xcc\x81",
+    "\xce\x91" => "\xce\xb1",  "\xce\x92" => "\xce\xb2",
+    "\xce\x93" => "\xce\xb3",  "\xce\x94" => "\xce\xb4",
+    "\xce\x95" => "\xce\xb5",  "\xce\x96" => "\xce\xb6",
+    "\xce\x97" => "\xce\xb7",  "\xce\x98" => "\xce\xb8",
+    "\xce\x99" => "\xce\xb9",  "\xce\x9a" => "\xce\xba",
+    "\xce\x9b" => "\xce\xbb",  "\xce\x9c" => "\xce\xbc",
+    "\xce\x9d" => "\xce\xbd",  "\xce\x9e" => "\xce\xbe",
+    "\xce\x9f" => "\xce\xbf",  "\xce\xa0" => "\xcf\x80",
+    "\xce\xa1" => "\xcf\x81",  "\xce\xa3" => "\xcf\x83",
+    "\xce\xa4" => "\xcf\x84",  "\xce\xa5" => "\xcf\x85",
+    "\xce\xa6" => "\xcf\x86",  "\xce\xa7" => "\xcf\x87",
+    "\xce\xa8" => "\xcf\x88",  "\xce\xa9" => "\xcf\x89",
+    "\xce\xaa" => "\xcf\x8a",  "\xce\xab" => "\xcf\x8b",
+    "\xce\xb0" => "\xcf\x85\xcc\x88\xcc\x81",
+    ##   U+03c0
+    "\xcf\x82" => "\xcf\x83",  "\xcf\x90" => "\xce\xb2",
+    "\xcf\x91" => "\xce\xb8",  "\xcf\x95" => "\xcf\x86",
+    "\xcf\x96" => "\xcf\x80",  "\xcf\x98" => "\xcf\x99",
+    "\xcf\x9a" => "\xcf\x9b",  "\xcf\x9c" => "\xcf\x9d",
+    "\xcf\x9e" => "\xcf\x9f",  "\xcf\xa0" => "\xcf\xa1",
+    "\xcf\xa2" => "\xcf\xa3",  "\xcf\xa4" => "\xcf\xa5",
+    "\xcf\xa6" => "\xcf\xa7",  "\xcf\xa8" => "\xcf\xa9",
+    "\xcf\xaa" => "\xcf\xab",  "\xcf\xac" => "\xcf\xad",
+    "\xcf\xae" => "\xcf\xaf",  "\xcf\xb0" => "\xce\xba",
+    "\xcf\xb1" => "\xcf\x81",  "\xcf\xb4" => "\xce\xb8",
+    "\xcf\xb5" => "\xce\xb5",  "\xcf\xb7" => "\xcf\xb8",
+    "\xcf\xb9" => "\xcf\xb2",  "\xcf\xba" => "\xcf\xbb",
+    "\xcf\xbd" => "\xcd\xbb",  "\xcf\xbe" => "\xcd\xbc",
+    "\xcf\xbf" => "\xcd\xbd",
+    ##   U+0400
+    "\xd0\x80" => "\xd1\x90",  "\xd0\x81" => "\xd1\x91",
+    "\xd0\x82" => "\xd1\x92",  "\xd0\x83" => "\xd1\x93",
+    "\xd0\x84" => "\xd1\x94",  "\xd0\x85" => "\xd1\x95",
+    "\xd0\x86" => "\xd1\x96",  "\xd0\x87" => "\xd1\x97",
+    "\xd0\x88" => "\xd1\x98",  "\xd0\x89" => "\xd1\x99",
+    "\xd0\x8a" => "\xd1\x9a",  "\xd0\x8b" => "\xd1\x9b",
+    "\xd0\x8c" => "\xd1\x9c",  "\xd0\x8d" => "\xd1\x9d",
+    "\xd0\x8e" => "\xd1\x9e",  "\xd0\x8f" => "\xd1\x9f",
+    "\xd0\x90" => "\xd0\xb0",  "\xd0\x91" => "\xd0\xb1",
+    "\xd0\x92" => "\xd0\xb2",  "\xd0\x93" => "\xd0\xb3",
+    "\xd0\x94" => "\xd0\xb4",  "\xd0\x95" => "\xd0\xb5",
+    "\xd0\x96" => "\xd0\xb6",  "\xd0\x97" => "\xd0\xb7",
+    "\xd0\x98" => "\xd0\xb8",  "\xd0\x99" => "\xd0\xb9",
+    "\xd0\x9a" => "\xd0\xba",  "\xd0\x9b" => "\xd0\xbb",
+    "\xd0\x9c" => "\xd0\xbc",  "\xd0\x9d" => "\xd0\xbd",
+    "\xd0\x9e" => "\xd0\xbe",  "\xd0\x9f" => "\xd0\xbf",
+    "\xd0\xa0" => "\xd1\x80",  "\xd0\xa1" => "\xd1\x81",
+    "\xd0\xa2" => "\xd1\x82",  "\xd0\xa3" => "\xd1\x83",
+    "\xd0\xa4" => "\xd1\x84",  "\xd0\xa5" => "\xd1\x85",
+    "\xd0\xa6" => "\xd1\x86",  "\xd0\xa7" => "\xd1\x87",
+    "\xd0\xa8" => "\xd1\x88",  "\xd0\xa9" => "\xd1\x89",
+    "\xd0\xaa" => "\xd1\x8a",  "\xd0\xab" => "\xd1\x8b",
+    "\xd0\xac" => "\xd1\x8c",  "\xd0\xad" => "\xd1\x8d",
+    "\xd0\xae" => "\xd1\x8e",  "\xd0\xaf" => "\xd1\x8f",
+    ##   U+0460
+    "\xd1\xa0" => "\xd1\xa1",  "\xd1\xa2" => "\xd1\xa3",
+    "\xd1\xa4" => "\xd1\xa5",  "\xd1\xa6" => "\xd1\xa7",
+    "\xd1\xa8" => "\xd1\xa9",  "\xd1\xaa" => "\xd1\xab",
+    "\xd1\xac" => "\xd1\xad",  "\xd1\xae" => "\xd1\xaf",
+    "\xd1\xb0" => "\xd1\xb1",  "\xd1\xb2" => "\xd1\xb3",
+    "\xd1\xb4" => "\xd1\xb5",  "\xd1\xb6" => "\xd1\xb7",
+    "\xd1\xb8" => "\xd1\xb9",  "\xd1\xba" => "\xd1\xbb",
+    "\xd1\xbc" => "\xd1\xbd",  "\xd1\xbe" => "\xd1\xbf",
+    ##   U+0480
+    "\xd2\x80" => "\xd2\x81",  "\xd2\x8a" => "\xd2\x8b",
+    "\xd2\x8c" => "\xd2\x8d",  "\xd2\x8e" => "\xd2\x8f",
+    "\xd2\x90" => "\xd2\x91",  "\xd2\x92" => "\xd2\x93",
+    "\xd2\x94" => "\xd2\x95",  "\xd2\x96" => "\xd2\x97",
+    "\xd2\x98" => "\xd2\x99",  "\xd2\x9a" => "\xd2\x9b",
+    "\xd2\x9c" => "\xd2\x9d",  "\xd2\x9e" => "\xd2\x9f",
+    "\xd2\xa0" => "\xd2\xa1",  "\xd2\xa2" => "\xd2\xa3",
+    "\xd2\xa4" => "\xd2\xa5",  "\xd2\xa6" => "\xd2\xa7",
+    "\xd2\xa8" => "\xd2\xa9",  "\xd2\xaa" => "\xd2\xab",
+    "\xd2\xac" => "\xd2\xad",  "\xd2\xae" => "\xd2\xaf",
+    "\xd2\xb0" => "\xd2\xb1",  "\xd2\xb2" => "\xd2\xb3",
+    "\xd2\xb4" => "\xd2\xb5",  "\xd2\xb6" => "\xd2\xb7",
+    "\xd2\xb8" => "\xd2\xb9",  "\xd2\xba" => "\xd2\xbb",
+    "\xd2\xbc" => "\xd2\xbd",  "\xd2\xbe" => "\xd2\xbf",
+    ##   U+04c0
+    "\xd3\x80" => "\xd3\x8f",  "\xd3\x81" => "\xd3\x82",
+    "\xd3\x83" => "\xd3\x84",  "\xd3\x85" => "\xd3\x86",
+    "\xd3\x87" => "\xd3\x88",  "\xd3\x89" => "\xd3\x8a",
+    "\xd3\x8b" => "\xd3\x8c",  "\xd3\x8d" => "\xd3\x8e",
+    "\xd3\x90" => "\xd3\x91",  "\xd3\x92" => "\xd3\x93",
+    "\xd3\x94" => "\xd3\x95",  "\xd3\x96" => "\xd3\x97",
+    "\xd3\x98" => "\xd3\x99",  "\xd3\x9a" => "\xd3\x9b",
+    "\xd3\x9c" => "\xd3\x9d",  "\xd3\x9e" => "\xd3\x9f",
+    "\xd3\xa0" => "\xd3\xa1",  "\xd3\xa2" => "\xd3\xa3",
+    "\xd3\xa4" => "\xd3\xa5",  "\xd3\xa6" => "\xd3\xa7",
+    "\xd3\xa8" => "\xd3\xa9",  "\xd3\xaa" => "\xd3\xab",
+    "\xd3\xac" => "\xd3\xad",  "\xd3\xae" => "\xd3\xaf",
+    "\xd3\xb0" => "\xd3\xb1",  "\xd3\xb2" => "\xd3\xb3",
+    "\xd3\xb4" => "\xd3\xb5",  "\xd3\xb6" => "\xd3\xb7",
+    "\xd3\xb8" => "\xd3\xb9",  "\xd3\xba" => "\xd3\xbb",
+    "\xd3\xbc" => "\xd3\xbd",  "\xd3\xbe" => "\xd3\xbf",
+    ##   U+0500
+    "\xd4\x80" => "\xd4\x81",  "\xd4\x82" => "\xd4\x83",
+    "\xd4\x84" => "\xd4\x85",  "\xd4\x86" => "\xd4\x87",
+    "\xd4\x88" => "\xd4\x89",  "\xd4\x8a" => "\xd4\x8b",
+    "\xd4\x8c" => "\xd4\x8d",  "\xd4\x8e" => "\xd4\x8f",
+    "\xd4\x90" => "\xd4\x91",  "\xd4\x92" => "\xd4\x93",
+    "\xd4\xb1" => "\xd5\xa1",  "\xd4\xb2" => "\xd5\xa2",
+    "\xd4\xb3" => "\xd5\xa3",  "\xd4\xb4" => "\xd5\xa4",
+    "\xd4\xb5" => "\xd5\xa5",  "\xd4\xb6" => "\xd5\xa6",
+    "\xd4\xb7" => "\xd5\xa7",  "\xd4\xb8" => "\xd5\xa8",
+    "\xd4\xb9" => "\xd5\xa9",  "\xd4\xba" => "\xd5\xaa",
+    "\xd4\xbb" => "\xd5\xab",  "\xd4\xbc" => "\xd5\xac",
+    "\xd4\xbd" => "\xd5\xad",  "\xd4\xbe" => "\xd5\xae",
+    "\xd4\xbf" => "\xd5\xaf",
+    ##   U+0540
+    "\xd5\x80" => "\xd5\xb0",  "\xd5\x81" => "\xd5\xb1",
+    "\xd5\x82" => "\xd5\xb2",  "\xd5\x83" => "\xd5\xb3",
+    "\xd5\x84" => "\xd5\xb4",  "\xd5\x85" => "\xd5\xb5",
+    "\xd5\x86" => "\xd5\xb6",  "\xd5\x87" => "\xd5\xb7",
+    "\xd5\x88" => "\xd5\xb8",  "\xd5\x89" => "\xd5\xb9",
+    "\xd5\x8a" => "\xd5\xba",  "\xd5\x8b" => "\xd5\xbb",
+    "\xd5\x8c" => "\xd5\xbc",  "\xd5\x8d" => "\xd5\xbd",
+    "\xd5\x8e" => "\xd5\xbe",  "\xd5\x8f" => "\xd5\xbf",
+    "\xd5\x90" => "\xd6\x80",  "\xd5\x91" => "\xd6\x81",
+    "\xd5\x92" => "\xd6\x82",  "\xd5\x93" => "\xd6\x83",
+    "\xd5\x94" => "\xd6\x84",  "\xd5\x95" => "\xd6\x85",
+    "\xd5\x96" => "\xd6\x86",  "\xd6\x87" => "\xd5\xa5\xd6\x82"
+  ));  
+
+

Deleted: trunk/oggdsf/website/sse_builds.html
===================================================================
--- trunk/oggdsf/website/sse_builds.html	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/sse_builds.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,76 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>illiminable Ogg Directshow Filters for Speex, Vorbis, Theora and FLAC</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and encoders.">
-  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
-</head>
-<a href="http://www.illiminable.com/ogg">Main Page</a><br>
-<br>
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#FF00FF" alink="#FF0000">
-<b><u><font size="+2">SSE/SSE2 Experimental Builds of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC</font></u></b><br>
-<br>
-These are experimental builds only... if you have any doubt about whether your processor supports these, download the official release from the <a href="http://www.illiminable.com/ogg">main page</a><br>
-<br>
-These builds are specific to SSE and SSE2 compatable processors. If you run these on the wrong processor they will crash the program and maybe even your system. If in doubt don't use them !<br>
-<br>
-SSE2 instructions are for Pentium 4's. SSE instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the SSE2 builds at all. If you use these and they work, I'd appreciate if you let me know. 
-I have found about a 15% improvement in encode speed using the SSE builds on my machine. If you do some testing on your machine let me know. Uninstall the normal/previous version before installing these.<br>
-<br>
-<br>
-<b><u>Current Version 0.68.8333 - 06/12/2004</u></b><br>
-See the <a href="http://www.illiminable.com/ogg">Main Page</a> for the release notes and issues for this version.<br><br>
-<FONT size=2 color="#000000" face="Arial">
-<DIV><TABLE width=100% bgcolor="#FFFFFF" border=1 cellpadding=2 cellspacing=2>
-<TR valign=top>
-
-	<TD width=40%><FONT size=2 color="#000000" face="Arial">
-		<DIV>Ogg Codecs for windows</DIV>
-		</FONT>
-	</TD>
-	<TD width=20%><FONT size=2 color="#000000" face="Arial">
-		<DIV>SSE Enabled Processors <b>ONLY</b></DIV>
-		</FONT>
-	</TD>
-
-
-	<TD width=20%><FONT size=2 color="#000000" face="Arial">
-		<DIV><div align="right">992,504 bytes</div></DIV></FONT>
-	</TD>
-
-	<TD width=20%><FONT size=2 color="#000000" face="Arial">
-		<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_SSE_0.68.8333.zip">Download Now</a></div></DIV></FONT>
-	</TD>
-
-</TR>
-
-<TR valign=top>
-
-	<TD width=40%><FONT size=2 color="#000000" face="Arial">
-		<DIV>Ogg Codecs for windows</DIV>
-		</FONT>
-	</TD>
-	<TD width=20%><FONT size=2 color="#000000" face="Arial">
-		<DIV>SSE2 Enabled Processors <b>ONLY</b></DIV>
-		</FONT>
-	</TD>
-
-
-	<TD width=20%><FONT size=2 color="#000000" face="Arial">
-		<DIV><div align="right">985,275 bytes</div></DIV></FONT>
-	</TD>
-
-	<TD width=20%><FONT size=2 color="#000000" face="Arial">
-		<DIV><div align="right"><a href="http://www.illiminable.com/ogg/oggcodecs_SSE2_0.68.8333.zip">Download Now</a></div></DIV></FONT>
-	</TD>
-
-</TR>
-
-</TABLE>
-</DIV>
-</FONT>
-<br>
-<a href="http://www.illiminable.com/ogg">Main Page</a><br>
-</body>
-</html>
-

Added: trunk/oggdsf/website/uploads/Main/oggcodecs_0.69.8924.exe
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/Main/oggcodecs_0.69.8924.exe
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/Main/oggcodecs_0.70.0827.exe
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/Main/oggcodecs_0.70.0827.exe
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/Main/oggcodecs_0.71.0946.exe
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/Main/oggcodecs_0.71.0946.exe
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/Main/oggcodecs_0.72.1838.exe
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/Main/oggcodecs_0.72.1838.exe
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/Main/oggcodecs_0.73.1936.exe
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/Main/oggcodecs_0.73.1936.exe
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/Main/oggcodecs_SSE2_0.68.8333.zip
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/Main/oggcodecs_SSE2_0.68.8333.zip
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/Main/oggcodecs_SSE_0.68.8333.zip
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/Main/oggcodecs_SSE_0.68.8333.zip
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/Main/oggcodecs_src_0.70.0827.zip
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/Main/oggcodecs_src_0.70.0827.zip
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/docs/index.html
===================================================================
--- trunk/oggdsf/website/uploads/docs/index.html	                        (rev 0)
+++ trunk/oggdsf/website/uploads/docs/index.html	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1 @@
+This is where the API documentation should go.

Added: trunk/oggdsf/website/uploads/images/connect_encoders.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/connect_encoders.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/divx+vorbis_decode.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/divx+vorbis_decode.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/encoders_added.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/encoders_added.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/ensure_YV12.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/ensure_YV12.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/filter_properties.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/filter_properties.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/find_encoders.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/find_encoders.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/fully_connected.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/fully_connected.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/mixmux.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/mixmux.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/mp3_to_speex_graphedit.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/mp3_to_speex_graphedit.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/mp3_to_vorbis_graphedit.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/mp3_to_vorbis_graphedit.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/ogg_split_graphedit.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/ogg_split_graphedit.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/pin_properties.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/pin_properties.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/press_play.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/press_play.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/remove_renderers.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/remove_renderers.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/select_encoders.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/select_encoders.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/select_muxer.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/select_muxer.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/select_output_file.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/select_output_file.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/select_render_file.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/select_render_file.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/show_rendered_graph.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/show_rendered_graph.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/theora_properties.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/theora_properties.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/vorbis_to_mp3_graphedit.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/vorbis_to_mp3_graphedit.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/wave_to_vorbis_graphedit.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/wave_to_vorbis_graphedit.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/oggdsf/website/uploads/images/wma_to_vorbis_graphedit.JPG
===================================================================
(Binary files differ)


Property changes on: trunk/oggdsf/website/uploads/images/wma_to_vorbis_graphedit.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Deleted: trunk/oggdsf/website/version_check.php
===================================================================
--- trunk/oggdsf/website/version_check.php	2008-04-26 10:03:23 UTC (rev 14802)
+++ trunk/oggdsf/website/version_check.php	2008-04-28 00:13:04 UTC (rev 14803)
@@ -1,28 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-  <title>oggcodecs Version Check</title>
-  <meta name="description" content="Directshow Ogg demuxer/muxer with vorbis, speex, FLAC and theora decoders and encoders.">
-  <meta name="keywords" content="directshow, theora, vorbis, speex, ogg, media player, flac, codec, windows, audio, video, wmp, directX, plugin, plug-in, decoder, encoder, demux, mux, demuxer">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#DD0000" alink="#FF0000">
-<?php
-   $x=$_GET['version'];
-   $v='0.71.0946';
-
-   if (strcmp($x, '') == 0) {
-	echo 'Invalid request';
-   } else {
-    
-     if (strcmp($v, $x) > 0) {
-	  echo 'New version ', $v, ' is available';
-     } else {
-          echo 'No new version available. Current version is ', $v;
-     }
-   }
-?>
-	
-
-</body>
-</html>
\ No newline at end of file

Added: trunk/oggdsf/website/wiki.d/.flock
===================================================================

Added: trunk/oggdsf/website/wiki.d/.htaccess
===================================================================
--- trunk/oggdsf/website/wiki.d/.htaccess	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/.htaccess	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,2 @@
+Order Deny,Allow
+Deny from all

Added: trunk/oggdsf/website/wiki.d/.lastmod
===================================================================

Added: trunk/oggdsf/website/wiki.d/.pageindex
===================================================================
--- trunk/oggdsf/website/wiki.d/.pageindex	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/.pageindex	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,43 @@
+Main.History:1209340846: Main.Downloads Main.History Main.About : implementation encapsulation possibilities documentation programmitic programmatic applications architecture consistency maintenance limitations oggcodecs_0 opportunity integrating interesting sourceforge intelligent multimedia experience directshow technology continuous management subversion repository particular maintained frequently extensible especially interface footprint knowledge hopefully downloads keyframes artefacts localhost associate australia seektable available installer filenames releasing otherwise libraries streaming solutions correctly community encourage extension bitstream versions kavanagh original improved releases properly problems previous approach encoders physical progress encoding standard included possible decoders pfeiffer sparking internet renaming increase contract cristian exciting complete consider specific handling continue accurate thankyou presents requests default dynamic p
 rovide scratch decided several removed between uploads modules windows project support rewrite setting reduces utilise quality annodex demuxer attempt another generic trouble writing chained without seeking filters changes players initial unicode feature putting through working soonish written updated history started rectify messing servers bufixes notable icecast because handles streams forever waiting oggdsf vorbis attach silvia builds easier little longer really static sample parker memory conrad fairly should buffer always coming theora sizing single search second expand within better slight richer design gained handed muxing binary create format needed making rather whilst basing there began andre still which again under group audio about being order csiro works first found leaks based email major trunk these along fixed bytes older added sorry range alive april while files click aware 250mb tools thing large great taken avoid wrote might whole perth speex check were th
 is page back just that docs much hack will http does open want 2008 what have adam most from disk over keep bugs more uses your 0827 8924 even lots 2005 xiph been come wmp6 2006 2004 then only pang fold case some aims year less many ogm www sdk new off zen two may has got but 1st was why wow can yes exe one get 816 782 581 824 non try svn 10 69 02 15 70 my 95
+Main.WikiSandbox:1209340622:  : wikisandbox formatting experiment pmwiki bottom click rules link page main free just edit feel text this with use the of
+PmWiki.BasicVariables:1209340622: PmWiki.Variables PmWiki.WikiGroup Site.Search Site.EditForm Site.PageNotFound PmWiki.WikiWord PmWiki.PerGroupCustomizations PmWiki.LocalCustomizations PmWiki.AuthUser PmWiki.MarkupExpressions PmWiki.WikiFarms : pergroupcustomizations authoringphilosophy localcustomizations enablelocalconfig logoutredirectfmt markupexpressions asspacedfunction nospacewikiwords limitwikigroups nolinkwikiwords enablewikiwords wikiwordpattern enableredirect specifications basicvariables configuration automatically logoutcookies authorization grouppattern pagenotfound cookieprefix enablepgcust redirections defaultgroup alphanumeric applications preformatted representing enablewspre defaultpage namepattern authorgroup underscores defaultname potentially versionnum myasspaced processing characters farmconfig components directives discussion identifies indicates isolating following beginning treatment according describes september uppercase different prepended remai
 ning sequences conflicts sitegroup redirects performed specified sometimes debugging wikifarms strftime ftimefmt editform affected releases defaults normally override allowing disables authuser cookbook followed homepage profiles __file__ sections separate required multiple leading regular strings message instead results recipes summary treated setting spacing pmwiki_ 2001040 greater browser startup actions current mygroup configs usually minimum produce hyphens prevent convert invoked enables 2001902 2002000 visitor similar removed utility 2001918 storing 2001000 enabled 2001027 scripts 2001901 without 2001001 number padded target loaded zeroes letter digits authid causes unique tracks reader domain before search substr useful beta18 should spaces linked called allows dates value pages occur pause doesn which based beta2 using sites users login gives issue minor first field three store wikis lines major other array names links after avoid named being valid 2005 same that wh
 en then used than text last such this note also bare from rule turn each into have http next will but can any php md5 and you see off net who etc url 900 999 tmp by 09 57 08
+PmWiki.DebugVariables:1209340622: PmWiki.Variables : availableactions enableimscaching enablestopwatch debugvariables begenablediag endenablediag administrator recognizes generated displayed activates permanent reloading debugging customize template disabled internal refcount function browsers multiple separate modified composes timings scripts subpage needing windows default without locally include sidebar header allows adding pmwiki normal render layout coming cached values useful which total pages clock equal valid takes usage shows since will wall html each only also have long that this when from help such work the its for set won get and are see can cpu php as by 1 0 2
+PmWiki.EditVariables:1209340622: PmWiki.Variables : enablepostauthorrequired defaultpagetextfmt postrecentchanges edittemplatesfmt enableguibuttons deletekeypattern handlebrowsefmt editredirectfmt newpagetemplate saveattributes replaceonsave handleeditfmt editfunctions customization editvariables enabledrafts pagenotfound diffkeepdays pageeditform ispageposted pageeditfmt rospatterns previewpage restorepage draftsuffix subsequent additional customized selections revisions graphical displayed sitegroup determine otherwise specified specifies something homepage browsing pagename versions existent postpage contents possible pressing defaults actually cookbook fullname examples handlers sequence requires specific existing contains attempts standard handling optional enables elapsed removed process visible smaller created history current minimum authors setting provide specify initial changed include without deleted editing posting another action format entire output edited shoul
 d spaces single update called causes pmwiki little saving length cancel exists array names saved still value empty those older which pages newly edits sends years after built turns saves where least until first part when tell main this used sets time from html next such just than that will have need they give 3650 only thus file word less like note sent true kept are you has see any isn non be by of 30 1 4 2
+PmWiki.FilePermissions:1209340622: PmWiki.PmWiki : filepermissions subdirectories administrator installations configuration temporarily appropriate environment public_html responsible encountered webservers drwxrwxrwx distribute ownerships accessible definitive configured everything referenced directory prompting situation safe_mode questions somewhere available generally hierarchy typically different pubdirurl beginning depending describes alternate according cookbook whatever granting pmichaud creation attempts settings outlined writable complain creating absolute drwxrwsr function manually specific anything browsers directly normally detailed identity solution account section creates uploads created someone mimetex execute details shouldn without groupid scripts running because briefly however depends systems example calling letting ensures applies pmwiki holder having setgid apache cannot around itself parent virtue within change belong action needed select things people
  placed simply frobot cached markup images mkdirp recipe answer modify userid manner matter solves loaded owned which since below files doesn write those needs again chmod users world other allow there wants 54272 would still rules apply doing issue httpd works order pages means about above exact basic first their based also this 1024 them have that then will take care just same disk such like used uses upon thus case when runs math make look owns only site each okay into from save home most they unix must host else lots read why and css pwd 777 feb for php two ask now www isn via has way was get bit don jan 755 who by of go 95 58 11 23 51 15 29 12
+PmWiki.FmtPageName:1209340622: PmWiki.Functions PmWiki.Variables PmWiki.Internationalizations : internationalizations internationalisation internationalized lastmodifiedhost asspacedfunction lastmodifiedby enablepathinfo substitutions automatically corresponding unsafeglobals preg_replace substituting array_values replacements grouppattern alphabetical fmtpagename translation centralizes str_replace substitions corresponds groupspaced namepattern titlespaced performing converting array_keys referenced formatting frequently myvariable rebuilding generating substitute preg_match attributes assumption incomplete subroutine namespaced different regarding scripturl variables currently sequences expensive modifying typically instances displayed something path_info extremely arbitrary functions available is_object basically describes performed probably readpage continue specific audience normally intended is_array cookbook repeated in_array multiple defining argument relative stand
 ard internal contents performs fullname advanced explains whatever anything version handles dynamic produce returns variety related strings finally follows process however caching browser limited happens reverse phrases instead applies because pageurl through special somehow foreach trusted pcache loaded strpos pmwiki gcount change source cached become cannot obtain viewed moment simple beta55 xyzfmt needed things tables output engine exists krsort better called arrays static syntax admins under other taken below sites while often based needs false avoid these wrote items order along reset using being isset doing those aware since calls going given heart means fmtv done that with this like weak must they note hold have very uris over only than also just list next same will been work aren here urls from code goes else ways used when pvar such into pue etc pss was get see php why may its has isn xl 1 0 2
+PmWiki.GroupHeader:1209340622:  : concatenated groupheader definitions linebreaks configured important audience multiple bgcolor padding enabled comment smaller single define rfloat please italic ffffcc appear output border pmwiki thanks trail block leave style class green black frame solid font when note with size 5px the 1px eee do is
+PmWiki.OtherVariables:1209340622: PmWiki.Variables PmWiki.FmtPageName PmWiki.PageVariables : pageattributes othervariables substitutions corresponding pagevariables passwdsource fmtpagename interpreted frequently definition beginning evaluated replaced avoiding intended changing password instance current example rebuild pattern defined varname element action handle string markup passed pmwiki values depend fmtpv array store which cache this that used each with fmtv will call also near have thus see for can key new set of by
+PmWiki.PagelistVariables:1209340622: PmWiki.Variables : enablepagelistprotect fpltemplatepagefmt pagelisttemplates pagelistvariables enablepageindex searchpatterns pagesearchform localtemplates authorization pageindexfile searchresults recentchanges significantly considerably exclamation permissions customized categories backlinks delimited protected directive specified searching parameter sitegroup otherwise currently searches location defaults required cookbook searched included maintain excluded listing because browser workdir setting checked exists pmwiki appear format points unless causes action speeds array match means which first order found from that read does look when well have this case used zero need name must word also all and but xyz not any has see of by 1
+PmWiki.PathVariables:1209340622: PmWiki.Variables PmWiki.LocalCustomizations PmWiki.PerGroupCustomization PmWiki.WikiFarms PmWiki.LayoutVariables PmWiki.LinkVariables PmWiki.EditVariables PmWiki.UploadVariables : pergroupcustomization localcustomizations uploadvariables layoutvariables subdirectories configurations pagecsslistfmt editvariables farmpubdirurl corresponding administrator manipulations pathvariables linkvariables automatically coresponding distribution subdirectory modification associative sharedpages mod_rewrite wikilibdirs attachments distinguish instructed farmconfig containing filesystem determined explicitly connecting associated skindirurl regardless accessible difference statements sometimes pagestore scripturl something typically reference webserver cleanurls mailposts currently temporary wikifarms recognize prominent available described accessing fullname cookbook features simplify defaults consists generate guessing directly whenever building browsers 
 localdir advanced location contains requires possible keeping confuse provide graphic entries workdir version variety caching scripts wikidir holding backend bizarre exclude running uploads editing usually include example setting located objects options execute getting display control another certain bundled working because changed between correct dealing specify pmwiki either reason engine inside create things merged people beta26 images string always fairly action within having search refers entire places merely simple stored exists tested array needs field gives farmd skins these lines about value mysql where below pairs while which links paths occur edits track named cache types makes used last note want good site that this also such them both base more tmpl look copy wish http data disk turn keys from they uses same your find runs each into must html most thus tell for any and dbm how see php www com one has via can may add own etc of by do 1
+PmWiki.PatrickMichaud:1209340622:  : patrickmichaud information pmichaud pmwiki author found about more http com the him can www is be of
+PmWiki.PmWiki:1209340622: PmWiki.WikiWikiWeb Main.WikiSandbox PmWiki.BasicEditing PmWiki.Skins PmWiki.PmWikiPhilosophy PmWiki.Installation : pmwikiphilosophy administrators customization collaborative basicediting architecture installation applications wikiwikiweb conjunction wikisandbox distributed appropriate maintenance attachments extensions registered restricted completely protection individual appearance available customize templates different functions databases contained principle essential trademark websites creation features controls existing password hundreds maintain cookbook copyleft pmichaud designed htaccess patrick license quickly already applied authors servers written recipes general version running include variety groups entire create modify easily public newwin simple markup plugin engine system called upload action normal change except skins based pages under using mysql small rules makes link ldap such easy that with only html into from know need http o
 pen work core your they look home also like this find feel made have self org are for www gnu gpl not php net add any can key one who own css use of by be do
+PmWiki.Security:1209340622: PmWiki.Passwords PmWiki.PasswordsAdmin PmWiki.UrlApprovals : webserversecurity register_globals passwordsadmin administrator configuration installations vulnerability siteanalyzer urlapprovals farmsecurity mtblacklist distributed auditimages vulnerable blocklist2 analyzing determine upgrading advantage cookbook postings htaccess eprotect versions uploaded advisory settings addition storyid address require running exploit options movable turning content general pmwiki botnet taking closed secure making pages about sites links diary based index later there check prior that 1672 test used with your have type been more spam what hide mail also http tool sans for and bug see can php may are org isc faq off if 21 ip by 4 3 5
+PmWiki.SitePreferences:1209340622: Site.Preferences PmWiki.AccessKeys Site.EditForm : custompreferences sitepreferences customisable customising accesskeys customised somegroup sitegroup following shortcuts different editform textarea contains setprefs settings comments keyboard parsing through browser choosen actions include certain history config xlpage height enable pmwiki making cookie local added which being notes about order width point needs these under that well like name used than copy will this line php and can new as of by
+PmWiki.UploadVariables:1209340622: PmWiki.Variables PmWiki.UploadsAdmin Profiles.Jb : enabledirectdownload enableuploadversions linkuploadcreatefmt uploadprefixquota uploadnamechars uploadprefixfmt uploadvariables createlinktext uploaddirquota 1000000000000 uploadmaxsize alphanumerics configuration automatically uploadurlfmt uploadsadmin exclamations imaplinkfmt attachments underscores overwritten permissions everything characters organized directory uploading displayed webserver timestamp increases stdconfig location defaults question stripped requests uploaded fullname sitewide obtained directly password profiles included writable already protect present setting bittner maximum overall process instead allowed hyphens renamed pmwiki stored octets equals script spaces values causes groups bypass action allows before exists format above being bytes style delta limit where links still class units users other 50000 given local names occur using which means must when also need p
 age from unix plus true dots used will else what this note that same john href sets nbsp come 100k than can and but are php any 1mb may one via 1tb 1gb see old jb if
+PmWiki.WikiGroups:1209340622:  : wikigroups redirect pmwiki
+PmWiki.WikiSandbox:1209340622:  : wikisandbox redirect pmwiki main
+PmWiki.WikiWords:1209340622:  : wikiwords redirect pmwiki
+Site.AuthForm:1209340622:  : enableauthuser invalidlogin recognized auth_form password required authform messages enabled authid authpw submit input value site name text not end if ok
+Site.AuthUser:1209340622:  : siteadmin authuser redirect
+Site.EditForm:1209340622:  : editquickreference e_savedraftbutton e_saveeditbutton e_previewbutton e_minorcheckbox e_changesummary e_cancelbutton e_savebutton e_guibuttons e_textarea wikiaction sitegroup editform messages e_author fullname wikiedit remember editing include unsaved e_form divend input block class page this top if of id
+Site.GroupAttributes:1209340622:  : groupattributes site
+Site.PageActions:1209340622: Site.PageActions : pageactions ak_history ak_attach accesskey fullname nofollow ak_print ak_edit ak_view upload browse class item site diff auth rel
+Site.PageListTemplates:1209340622: Site.LocalTemplates PmWiki.PageLists PmWiki.PageVariables PmWiki.PageTextVariables PmWiki.ConditionalMarkup : pagelisttemplatesamples simplenamespacedend pagetextvariables conditionalmarkup localtemplates descriptionend titlespacedend includefaqend simplenameend pagevariables conditionals concatenate explanation includeend especially bygroupend defaultend specified pagelists expensive beginning structure simpleend operation directive fullname defaults contains includes titleend sections previous cookbook created between current outputs without display pmwiki bullet exists anchor groups spaces append syntax words equal pages order first brief store site from self just used also have that this item each next last note when fmt and can the see for isn are don of 0
+Site.PageNotFound:1209340622: Site.PageNotFound : nolinkwikiwords administrators requestedpage pagenotfound displayed sitegroup fullname nofollow category contains message change locate italic unable create pmwiki action green doesn exist style auth edit this when text font rel can the if be
+Site.Preferences:1209340622: PmWiki.AccessKeys Site.Preferences : insert_your_name_here userconfigurations ak_recentchanges corresponding preferences ak_saveedit containing ak_preview components emphasized preferably ak_history accesskeys including somewhere customise preferred customize ak_strong indicated textarea settings setprefs cookbook personal profiles fullname location editform keyboard control trigger default various browser ak_edit editing windows columns created revert pmwiki cookie select e_cols e_rows italic action define these unset green newly ak_em sizes which about tells page this sets site also then hold find copy make keep like bold with that alt mac and tap see how if 20 70
+Site.Search:1209340622: PmWiki.PageLists : searchresults punctuation cellpadding cellspacing containing characters parameters pagelists quotation including beginning searchbox omitting enclosed advanced together followed examples searches special entered phrase border string pmwiki double single groups quotes equals colon apple words marks limit tasty those pages slash count trail width some will both find than food that also name main with need sign site link more your text for pie all fmt and use one can 100 of by
+Site.Site:1209340622: PmWiki.PasswordsAdmin Site.SideBar Site.EditForm Site.PageActions Site.PageNotFound Site.PageListTemplates Site.Preferences Site.AuthForm PmWiki.Passwords Site.AuthUser Site.InterMap PmWiki.InterMap Site.EditQuickReference Site.UploadQuickReference : uploadquickreference editquickreference pagelisttemplates configurations passwordsadmin administration administrators authorization pagenotfound pageactions preferences protection individual attributes requesting displayed uploading configure necessary sitewide contains changing contents editform intermap authform authuser identity username history sidebar editing default certain pmwiki browse create placed except output access locked layout change pages title group links skins other wikis apply based shown order local your need this only note here some with find when then menu like top may one add any etc set can all new key see and are php if by of be
+Site.UploadQuickReference:1209340622: PmWiki.Uploads Site.UploadQuickReference : uploadquickreference attachment attachlist extension wikigroup different uploading existing uploaded filename computer correct uploads bgcolor padding family browse scroll prefer action source 000000 f9f9f9 border within cccccc pmwiki simply newwin button enter after press class above solid files local field arial serif this page view down that have site been edit text sure find your once same disk make sans font size 12px the can for has 1px use its of 3 4 5
+SiteAdmin.AuthList:1209340622: SiteAdmin.AuthList : groupattributes administrative passwdupload cellspacing permissions cellpadding authlistend passwdread passwdattr passwdedit displayed siteadmin pagecount protected pagelist template defaults password fullname settings displays request indent exists fields action pages equal order login first false class need this view nbsp that have last mean with each them say for you all may fmt if to 0 1
+SiteAdmin.AuthUser:1209340622: PmWiki.AuthUser PmWiki.LocalCustomizations PmWiki.Passwords : sj593ercmttjm3fk26hcv1 localcustomizations defaultpasswords nolinkwikiwords enableauthuser htdeaxyyyo8hc9 authorizations configuration include_once instructions appropriate wonderland filesystem extensions encrypted something authorize specified siteadmin obtaining localhost uncomment belonging examples username accounts 0gcdan1a wsp2r80i external htpasswd specific identity editors writers enabled present xv30yz1 leading builder appears specify sources scripts pmwiki action groups logged either result people define admins alice carol login farmd mysql table based saved pages doesn note that with ldap sign path line attr dave then this them form will from like look when have mean your php see aka uid sub bob out add are any db
+SiteAdmin.GroupAttributes:1209340622:  : groupattributes siteadmin
+SiteAdmin.Status:1209340622:  : versionnum siteadmin running comment status edits local lost this page any may to be
+Site.RecentChanges:1209340622:  : recentchanges sidebar silvia april site 2008 by 12 28 at 13 am
+Main.HomePage:1209340608: Main.Downloads Main.Graphedit Main.EncTheoraGraphedit Main.History Main.SseBuilds : enctheoragraphedit 840e737bedd5c63b oggcodecs_src_0 documentation demultiplexer feb68d00f298 acceleration 588fec1aded9 applications experimental particularly installation displaylang multiplexed complaining development dangerously sourceforge oggcodecs_0 framerates accurately package_id directshow developers apparently corevorbis identical liisachan microsoft downloads character showfiles installer ssebuilds important reference uninstall installed condition sometimes something radicaled artefacts localhost priority cddca2d5 register features 8d2fd10b integral properly registry unstable group_id handling bugfixes hardware remnants rounding unzipped response 9216652f japanese familyid encoding versions directx9 projects programs problems bsplayer accident slashdot previous conflict extended starting homepage classic seeking appears windows current updated changes looki
 ng details release subtype getting another enforce weekend history missing already streams chained encoded locales dragged similar certain monitor playing demuxer testing without uploads gabests filters example working ffdshow disable inbuilt double issues thanks detect should attach browse caused oggdsf option cannot handle branch having latest expect graphs remove follow closed native though design either recent tobias likely fairly silvia audio names tries there which crash media known could least speex fixed these clean 82303 video using under 84799 about stuff masks after split doing those codes their major found basic seems bytes users below where trunk while would steps most wait this will http also they from find main that docs when 4f98 more 6d75 guid 2006 0946 5841 4a6b race live 8905 flac 1838 then aspx b7b5 51e0 402e high soon make into sure bond want just sets sync 0827 37mb xiph sse2 you may due wmp who ogm any www way net add non svn sdk one 3xx web cda mpc ol
 d rip don too 824 901 api new php if 70 71 97 72 go
+Main.SseBuilds:1209340433: Main.HomePage : oggcodecs_sse2_0 oggcodecs_sse_0 instructions experimental performance improvement compatible processors appreciate installing directshow ssebuilds uninstall supports bugfixes download homepage specific previous official playback windows changes pentium network program athlons version machine testing current enabled instant seeking filters release whether drives before theora mainly tested attach almost system encode vorbis normal really bytes about found crash these doubt wrong audio would where fixed close maybe speex haven speed using they your flac 8333 some only know 2004 note this from them stop will even also none 992 504 985 zip 275 end use are and old any don run let 15 68 06 my 12
+Main.EncTheoraGraphedit:1209339628: Main.HomePage : show_rendered_graph enctheoragraphedit select_render_file filter_properties theora_properties remove_renderers connect_encoders select_encoders fully_connected pin_properties encoders_added comprehensive find_encoders select_muxer association transcoding ensure_yv12 directshow favourites previously connecting proeprties parameters successful transcoded depending localhost overwrite different something important whichever selecting available processor following indicates inacurate versions property settings homepage clicking together tutorial finished progress explains encoding external removing slightly directx9 dragging directly playback options uploads depends proceed replace decoder filters include spawned encoded focuses however loading install source normal before oggdsf should vorbis images mainly format button silvia output please bottom border insert delete really always appear inputs branch modify future stream cho
 ose browse either there empty again right ready first apply means valid setup press after check usage close green under media using brief looks these steps types video files exact data from menu also what http when goes your will then this yuy2 next that want item pins more wait like open have with note each blue need come icon tree site time them been make left they much one was jpg now top has bar see and new may can don sdk raw box key yet did by 5a of my 5b 2b 10 2a 1b 1a 7 3 8 6 4
+Main.Graphedit:1209313443:  : wave_to_vorbis_graphedit mp3_to_vorbis_graphedit vorbis_to_mp3_graphedit wma_to_vorbis_graphedit mp3_to_speex_graphedit ogg_split_graphedit transcoding polycrystal directshow localhost splitting component waixwave encoding uploads theora images silvia graphs oggdsf movies sample parts index visit http file main some lego html jpg man www org php
+Main.About:1209311639: Main.DeveloperInfo : implementation developerinfo distribution applications development information suggestions illiminable commercial validating directshow attachment meaningful committing developers expecting platforms debugging australia libraries questions hopefully oggcodecs available basically currently afternoon something increases freenode february subjects projects anything familiar ignoring pipeline decoders probably complete holidays includes multiple solution friendly remember contains released feedback encoders formats annodex instant windows mailing provide amongst apache2 planned contact reports shorter section respond solidly seeking usually license besides filters servers evening either likely stable module please vorbis people things author theora months really within answer though source player chance useful marked email could cycle first found about goals state build stats class media using which early under there might years these 
 lists files being tools again tell more xiph want have much last will didn busy main send time user make your then case that they once spam spot easy such gone navi nick from also find lost http 2006 used both open well this next over many only soon rest most and are spy can aim don get net org try svn gmt web irc www bsd not lot few got via was cx of if my by 8 7 1
+Main.DeveloperInfo:1209310040:  : libdirectshowabstracts libvorbiscommentdotnet libtemporaluridotnet libcmmlparsedotnet libcmmltagsdotnet libdsplaydotnet implementation oooggvalidate encapsulation underpinnings functionality specification developerinfo manipulating structurally liboooggseek applications performance mod_oggchef recomposing development independant dynamically liboggchef seektables debugging available resources packetise validates oggcodecs libraries generates fragments efficient documents paginator container functions oooggdump exception grabbing provides pfeiffer elements creating routines problems parsing showing library filters version several objects balance annodex playing seeking strings classes control streams windows packets caching similar latency volume player format offers common simple server module images apache parses easily offset called useful helper exists allows breaks header files still based below early media tools which pause video draft t
 hese build sizes query those found dumps rapid pages occur this with work that main will also http side html done unix core port stop data high even away from such uses most time well and sdk www mac osx you xml via can hex any 02 by v2 01
+Main.Downloads:1209309544:  : automatically optimisations compatability additionally particularly dramatically compatablity acceleration integration dangerously oggcodecs_0 necessarily maintaining unreleased optionally priorities thoroughly accurately dependancy supporting interfaces increases extremely installer libtheora associate currently operating graphedit sometimes condition reference different emulating artefacts downloads available explorer decoding handling improved playlist unstable bugfixes repeated updating encoding previous property releases checking bleeding viewable subtitle possibly slashdot slightly interest properly features recently response decoders encoders obsolete prompted versions revision graphics hardware offering without unicode seeking changes tagging windows detects another classic updated weekend package average details unicows correct working bugixes updates project include whether systems appears exposes options dragged monitor playing testin
 g silence channel perfect willing missing regular integer forward between bufixes mobile latest aspect caused moving attach fairly allows better portal vorbis tested source please visual thanks switch player faster double 2beta1 partly mainly output should ported studio delays custom remove pretty offers effort future larger report builds likely refuse major where fixed pages track codes would crash moved there paths bytes which error files speed start needs media still while order after speex minor again means small could about added shell those seems video using these point vista quite stage being their click frame chars usual doing right daily 2006 plan flac that hasn this very when edge just fish icon been menu 2005 more 1936 made have xiph 1838 does keep from full also bugs what 0946 tell long yuy2 size sure 900k take user docs find they know only many masm http trim done fail race live 864 426 wmp but new yet lot was old you exe 901 824 crt mmx 3xx had ols two who 800 
 may bit ogm 448 vs 30 25 9x 32 21 02 70 71 72 17 73 10
+Site.SideBar:1209305607: Main.HomePage Main.Downloads Main.DeveloperInfo Main.History Main.About Site.SideBar : developerinfo documentation sourceforge downloads homepage sidehead sidebar history annodex theora vorbis action speex right about edit flac main site http docs xiph www com net

Added: trunk/oggdsf/website/wiki.d/Main.About
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.About	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.About	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,19 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=
+ctime=1209311585
+host=::1
+name=Main.About
+rev=2
+targets=Main.DeveloperInfo
+text=!! Goals%0a%0aThe aim of this project is to provide the most complete implementation of the [[http://www.xiph.org/ | xiph.org]] codecs for Windows and Directshow. This includes decoders and encoders for all the xiph.org formats as well as [[http://www.annodex.net | annodex]]. It is released under a BSD license, so they can be used by both open-source and commercial applications.%0a%0a!! Current State%0a%0aBesides the directshow filters which many people are familiar with. The source distribution also contains many useful tools, for debugging and validating ogg files, which build on multiple platforms. There is also a .NET media player class which can basically provide an "instant" media player in any .NET application, as well as an early implementation of an apache2 module which can provide server side seeking (currently only of annodex files, but soon also ogg files).%0a%0aMore information about the libraries and tools that are available in the source distribution can 
 be found in the [[Main/DeveloperInfo | developers section]].%0a%0a!! In the pipeline%0a%0aMany things are planned, I'm not committing solidly to anything! Though as at February 2006, you can expect to see a lot more development over the next few months, and hopefully for the rest of this year. We might get to 1.0 one of these years, with the goal being for the most complete, stable and user friendly solution for Xiph codecs on Windows.%0a%0aI was really busy last year and didn't get to do much, hopefully 2006 will see a much shorter release cycle.%0a%0a!! Contact me%0a%0aIf you have questions, bug reports, feedback, suggestions, or want to tell me about your projects using oggcodecs you can contact me via email at ogg at illiminable.com . I try to answer all email, if you email me and I don't respond within 7 days I am not ignoring you, your email probably got lost amongst all the spam, or I've gone on holidays! In either case, if I don't respond, email me again. Please make yo
 ur subjects meaningful, so they are easy to spot amongst the spam. Don't attach files to your first email to me, that increases the chance it will be marked as spam. If you have something you want to send me, tell me in your first email, and then once I respond I will tell you how to get the file to me, or I'll be expecting an attachment from you.%0a%0aYou can also usually find me on IRC on Freenode servers (www.freenode.net) in #vorbis, #theora or #annodex. Remember I'm in Australia (GMT+8) so I'm more likely to respond in the afternoon/evening my time. My nick is illi.%0a%0aYou could also try the xiph.org mailing lists, such as vorbis-dev.%0a%0aOr if you want to see the svn commit information on the web, you can spy on me here with [[http://cia.navi.cx/stats/author/illiminable | CIA]].
+time=1209311639
+author:1209311639=silvia
+diff:1209311639:1209311585:minor=9,10c9,10%0a%3c More information about the libraries and tools that are available in the source distribution can be found in the [[Main/DeveloperInfo | developers section]].%0a%3c %0a---%0a> More information about the libraries and tools that are available in the source distribution can be found in the [[Main/Developers | developers section]].%0a> %0a25c25%0a%3c Or if you want to see the svn commit information on the web, you can spy on me here with [[http://cia.navi.cx/stats/author/illiminable | CIA]].%0a\ No newline at end of file%0a---%0a> Or if you want to see the svn commit information on the web, you can spy on me here with [[http://cia.navi.cx/stats/author/illiminable | CIA]]%0a\ No newline at end of file%0a
+host:1209311639=::1
+author:1209311585=silvia
+csum:1209311585=added Zen's original text
+diff:1209311585:1209311585:=1,25d0%0a%3c !! Goals%0a%3c %0a%3c The aim of this project is to provide the most complete implementation of the [[http://www.xiph.org/ | xiph.org]] codecs for Windows and Directshow. This includes decoders and encoders for all the xiph.org formats as well as [[http://www.annodex.net | annodex]]. It is released under a BSD license, so they can be used by both open-source and commercial applications.%0a%3c %0a%3c !! Current State%0a%3c %0a%3c Besides the directshow filters which many people are familiar with. The source distribution also contains many useful tools, for debugging and validating ogg files, which build on multiple platforms. There is also a .NET media player class which can basically provide an "instant" media player in any .NET application, as well as an early implementation of an apache2 module which can provide server side seeking (currently only of annodex files, but soon also ogg files).%0a%3c %0a%3c More information about the li
 braries and tools that are available in the source distribution can be found in the [[Main/Developers | developers section]].%0a%3c %0a%3c !! In the pipeline%0a%3c %0a%3c Many things are planned, I'm not committing solidly to anything! Though as at February 2006, you can expect to see a lot more development over the next few months, and hopefully for the rest of this year. We might get to 1.0 one of these years, with the goal being for the most complete, stable and user friendly solution for Xiph codecs on Windows.%0a%3c %0a%3c I was really busy last year and didn't get to do much, hopefully 2006 will see a much shorter release cycle.%0a%3c %0a%3c !! Contact me%0a%3c %0a%3c If you have questions, bug reports, feedback, suggestions, or want to tell me about your projects using oggcodecs you can contact me via email at ogg at illiminable.com . I try to answer all email, if you email me and I don't respond within 7 days I am not ignoring you, your email probably got lost amongst a
 ll the spam, or I've gone on holidays! In either case, if I don't respond, email me again. Please make your subjects meaningful, so they are easy to spot amongst the spam. Don't attach files to your first email to me, that increases the chance it will be marked as spam. If you have something you want to send me, tell me in your first email, and then once I respond I will tell you how to get the file to me, or I'll be expecting an attachment from you.%0a%3c %0a%3c You can also usually find me on IRC on Freenode servers (www.freenode.net) in #vorbis, #theora or #annodex. Remember I'm in Australia (GMT+8) so I'm more likely to respond in the afternoon/evening my time. My nick is illi.%0a%3c %0a%3c You could also try the xiph.org mailing lists, such as vorbis-dev.%0a%3c %0a%3c Or if you want to see the svn commit information on the web, you can spy on me here with [[http://cia.navi.cx/stats/author/illiminable | CIA]]%0a\ No newline at end of file%0a
+host:1209311585=::1

Added: trunk/oggdsf/website/wiki.d/Main.DeveloperInfo
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.DeveloperInfo	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.DeveloperInfo	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,16 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=original Zen's page
+ctime=1209310040
+host=::1
+name=Main.DeveloperInfo
+rev=1
+targets=
+text=!! Useful libraries in the SDK%0a%0aWith the exception of the .NET libraries, all those below will build on Windows, Mac OSX and Unix.%0a%0a!!! libOOOgg%0alibOOOgg is an independant implementation of the ogg encapsulation format. It provides a C++/OO set of classes for manipulating ogg pages and packets, and to paginator and packetise ogg files or streams. It provides similar functionality to libogg.%0a%0a!!! libOOOggSeek%0alibOOOggSeek provides seektable based routines for seeking in ogg or annodex files, for rapid and efficient seeking as well as caching seektables for high performance low latency uses.%0a%0a!!! libTemporalURI%0alibTemporalURI provides parsing functions for the [[[http://www.annodex.net/TR/draft-pfeiffer-temporal-fragments-02.html | temporal URI specification]] which allows you to query media resources from a server by time offset in a URI. Also a .NET port of this library exists as libTemporalURIDotNET.%0a%0a!!! libDSPlayDotNET%0alibDSPlay is a libra
 ry which provides media player functionality to .NET applications. It abstracts away all the directshow underpinnings and offers a simple API to control the media, which can be easily called from any .NET application. It provides all the most common media player functionality such as play, pause, stop, seek, volume, balance and even grabbing images from a playing video.%0a%0a!!! libOggChef%0alibOggChef is a helper library for dynamically recomposing ogg and annodex files. It is still in early development. This is the core of the work done by the apache module (see below).%0a%0a!!! mod_oggchef%0amod_oggchef is an apache 2 module, which provides server side seeking via temporal URI's for ogg and annodex files. It is still in early development.%0a%0a!!! libCMMLTags%0alibCMMLTags is a container class library for manipulating [[http://www.annodex.net/TR/draft-pfeiffer-cmml-01.html | CMML V2.0]] documents and elements. It is also available in a .NET library as libCMMLTagsDotNET.%0
 a%0a!!! libCMMLParse%0alibCMMLParse is a parsing library for CMML V2.0 It parses xml and generates the objects found in libCMMLTags. This is also available in a .NET version as libCMMLParseDotNET.%0a%0a!!! libDirectshowAbstracts%0alibDirectshowAbstracts provides several useful classes for creating directshow filters. All the directshow filters in oggcodecs use these.%0a%0a!!! libVorbisComment%0alibVorbisComment is a parsing library for parsing and manipulating vorbis comment strings. It is also available as a .NET library as libVorbisCommentDotNet.%0a%0a%0a!! Useful tools in the SDK%0a%0a[=OOOggDump=] provides hex dumps of ogg files showing header data and packet sizes and breaks. It is useful for debugging problems that can occur in ogg files.%0a%0a!!! [=OOOggValidate=]%0a[=OOOggValidate=] validates an ogg file structurally.%0a
+time=1209310040
+author:1209310040=silvia
+csum:1209310040=original Zen's page
+diff:1209310040:1209310040:=1,41d0%0a%3c !! Useful libraries in the SDK%0a%3c %0a%3c With the exception of the .NET libraries, all those below will build on Windows, Mac OSX and Unix.%0a%3c %0a%3c !!! libOOOgg%0a%3c libOOOgg is an independant implementation of the ogg encapsulation format. It provides a C++/OO set of classes for manipulating ogg pages and packets, and to paginator and packetise ogg files or streams. It provides similar functionality to libogg.%0a%3c %0a%3c !!! libOOOggSeek%0a%3c libOOOggSeek provides seektable based routines for seeking in ogg or annodex files, for rapid and efficient seeking as well as caching seektables for high performance low latency uses.%0a%3c %0a%3c !!! libTemporalURI%0a%3c libTemporalURI provides parsing functions for the [[[http://www.annodex.net/TR/draft-pfeiffer-temporal-fragments-02.html | temporal URI specification]] which allows you to query media resources from a server by time offset in a URI. Also a .NET port of this library
  exists as libTemporalURIDotNET.%0a%3c %0a%3c !!! libDSPlayDotNET%0a%3c libDSPlay is a library which provides media player functionality to .NET applications. It abstracts away all the directshow underpinnings and offers a simple API to control the media, which can be easily called from any .NET application. It provides all the most common media player functionality such as play, pause, stop, seek, volume, balance and even grabbing images from a playing video.%0a%3c %0a%3c !!! libOggChef%0a%3c libOggChef is a helper library for dynamically recomposing ogg and annodex files. It is still in early development. This is the core of the work done by the apache module (see below).%0a%3c %0a%3c !!! mod_oggchef%0a%3c mod_oggchef is an apache 2 module, which provides server side seeking via temporal URI's for ogg and annodex files. It is still in early development.%0a%3c %0a%3c !!! libCMMLTags%0a%3c libCMMLTags is a container class library for manipulating [[http://www.annodex.net/TR/
 draft-pfeiffer-cmml-01.html | CMML V2.0]] documents and elements. It is also available in a .NET library as libCMMLTagsDotNET.%0a%3c %0a%3c !!! libCMMLParse%0a%3c libCMMLParse is a parsing library for CMML V2.0 It parses xml and generates the objects found in libCMMLTags. This is also available in a .NET version as libCMMLParseDotNET.%0a%3c %0a%3c !!! libDirectshowAbstracts%0a%3c libDirectshowAbstracts provides several useful classes for creating directshow filters. All the directshow filters in oggcodecs use these.%0a%3c %0a%3c !!! libVorbisComment%0a%3c libVorbisComment is a parsing library for parsing and manipulating vorbis comment strings. It is also available as a .NET library as libVorbisCommentDotNet.%0a%3c %0a%3c %0a%3c !! Useful tools in the SDK%0a%3c %0a%3c [=OOOggDump=] provides hex dumps of ogg files showing header data and packet sizes and breaks. It is useful for debugging problems that can occur in ogg files.%0a%3c %0a%3c !!! [=OOOggValidate=]%0a%3c [=OOOggVa
 lidate=] validates an ogg file structurally.%0a
+host:1209310040=::1

Added: trunk/oggdsf/website/wiki.d/Main.Downloads
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.Downloads	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.Downloads	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,22 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=
+ctime=1209309332
+host=::1
+name=Main.Downloads
+rev=3
+targets=
+text=!! About the downloads%0a%0aFrom now on, there will be unstable releases made available. This allows me to keep one stable version for the average user and another version for those who like to keep up with that latest features, and are willing to live dangerously. This seems better than what recently has been long delays between releases. This is partly prompted by version 0.72.1838 which has a lot of new code and bufixes but which hasn't been thoroughly tested yet. At this stage I plan to keep a more regular unstable release, and possibly in the future a daily or very regular bleeding edge release.%0a%0aUnstable does not necessarily mean that it will crash more. It just means it hasn't been tested, so it may or may not be as stable as a proper release.%0a%0aAdditionally some major changes to add some new features and in particular to maintain 9X support while moving forward to full unicode support have caused the package size to increase quite dramatically from the 80
 0-900k of the previous builds. At some point in the future, I will take some effort to trim this down again, and will also likely start offering two different releases. One with only the decoders which will be pretty small, and one with all the encoders and decoders and to ols which will be slightly larger.%0a%0aAs usual, please report bugs you find to me, being sure to tell me which version you are using.%0a%0aCurrent priorities - Better encoding support, vista support, tagging, shell integration, Windows Mobile 5 support.%0a%0a%0a!! Current Stable Version (0.71.0946) - 24/02/2006%0a%0aMore bugfixes, particularly to theora. See 0.70 release for more details about recent changes. Docs and source package will be updated on the weekend, there's no major changes there from 0.70. This version is fairly stable now it seems.%0a%0a!!![[(Attach:)oggcodecs_0.71.0946.exe | Download Now (824,901 bytes)]]%0a%0a%0a!!! Changes this version%0a%0a* Fixed the theora seeking bug, should accur
 ately seek to any frame without artefacts.%0a* Fixed bug not handling WMP doing hardware video acceleration, caused crash on some files (Thanks slashdot!)%0a* Fixed handling of missing 3xx http response codes%0a* Fixed bug where player would crash if you dragged it from one monitor to another while playing%0a* Fixed COM reference double-release bug%0a* Fixed race condition which could crash or hang sometimes after a seek.%0a%0a%0a!! Current UNSTABLE Version (0.73.1936) - 21/10/2006%0a%0aThis version mainly exposes encoding options for all the codecs as COM interfaces, and as property pages (viewable in graphedit). Still needs more testing and error checking. Fixed a bug with flac that caused silence when a track automatically repeated. The aspect ratio handling in theora is now correct, the channel order in vorbis is now correct. And now explorer has the "Add to WMP playlist" option, which other media files have in their right-click menu. %0a%0a%0a!!![[(Attach:)oggcodecs_0.7
 3.1936.exe | Download Now (1,448,800 bytes)]]%0a%0a%0a!!! Changes this version%0a%0a* Encode options for theora, vorbis, speex and flac and property pages in graphedit%0a* Improved OGM decoding%0a* Improved subtitle support%0a* Vorbis channel order fixed%0a* 24/32 bit >2 channel decode support improved for vorbis and flac%0a* Fix end of file/repeat bug in flac%0a* Correct handling of aspect ratio in theora%0a* "Add to playlist" option for WMP appears in explorer right-click menu%0a%0a%0a!! Previous UNSTABLE Version (0.72.1838) - 17/9/2006%0a%0aMajor changes in this version include, updating all the code to Visual Studio 2005. There is now a "working" port for Windows Mobile 5.0 as at this revision, this is not yet released. Many minor bugixes and compatability fixes, dependancy updates, speed increases, unicode support, improved installer. Some major work was done to maintain Windows 9X/ME support while properly supporting unicode. If you use or have an interest in the maint
 aining of support for these obsolete operating systems, please let me know whether they are working for you.%0a%0a%0a!!![[(Attach:)oggcodecs_0.72.1838.exe | Download Now (1,426,864 bytes)]]%0a%0a%0a!!! Changes this version%0a%0a* Fixed bug that would refuse to play extremely small files%0a* Added [=YUY2=] output support to better support old graphics hardware%0a* Updated speex to 1.2beta1%0a* Updated project to VS 2005%0a* Using theora-exp for theora decoding ~30%25 speed up%0a* Improved 24/32 bit support for FLAC (still may not be perfect)%0a* All code moved to unicode. Fixed bug which would fail if paths had unicode chars%0a* Custom unicode emulating(unicows) CRT's to maintain Windows 9X support%0a* Compatablity fixes for Media Portal and Media Player Classic%0a* Installer detects and offers to remove previous versions%0a* Installer offers to optionally associate WMP to .ogg%0a* MMX optimisations for libtheora ported to MASM, encoding ~25-30%25 faster%0a* Xiph fish icon in
  explorer%0a* Code ported to Windows Mobile 5.0 (currently unreleased build)%0a* Switch to integer decoding version of speex%0a
+time=1209309544
+author:1209309544=silvia
+diff:1209309544:1209309504:minor=62c62%0a%3c * Added [=YUY2=] output support to better support old graphics hardware%0a---%0a> * Added YUY2 output support to better support old graphics hardware%0a
+host:1209309544=::1
+author:1209309504=silvia
+diff:1209309504:1209309332:minor=20d19%0a%3c %0a38d36%0a%3c %0a57d54%0a%3c %0a
+host:1209309504=::1
+author:1209309332=silvia
+csum:1209309332=added Zen's original text
+diff:1209309332:1209309332:=1,72d0%0a%3c !! About the downloads%0a%3c %0a%3c From now on, there will be unstable releases made available. This allows me to keep one stable version for the average user and another version for those who like to keep up with that latest features, and are willing to live dangerously. This seems better than what recently has been long delays between releases. This is partly prompted by version 0.72.1838 which has a lot of new code and bufixes but which hasn't been thoroughly tested yet. At this stage I plan to keep a more regular unstable release, and possibly in the future a daily or very regular bleeding edge release.%0a%3c %0a%3c Unstable does not necessarily mean that it will crash more. It just means it hasn't been tested, so it may or may not be as stable as a proper release.%0a%3c %0a%3c Additionally some major changes to add some new features and in particular to maintain 9X support while moving forward to full unicode support have caused
  the package size to increase quite dramatically from the 800-900k of the previous builds. At some point in the future, I will take some effort to trim this down again, and will also likely start offering two different releases. One with only the decoders which will be pretty small, and one with all the encoders and decoders and to ols which will be slightly larger.%0a%3c %0a%3c As usual, please report bugs you find to me, being sure to tell me which version you are using.%0a%3c %0a%3c Current priorities - Better encoding support, vista support, tagging, shell integration, Windows Mobile 5 support.%0a%3c %0a%3c %0a%3c !! Current Stable Version (0.71.0946) - 24/02/2006%0a%3c %0a%3c More bugfixes, particularly to theora. See 0.70 release for more details about recent changes. Docs and source package will be updated on the weekend, there's no major changes there from 0.70. This version is fairly stable now it seems.%0a%3c %0a%3c !!![[(Attach:)oggcodecs_0.71.0946.exe | Download 
 Now (824,901 bytes)]]%0a%3c %0a%3c !!! Changes this version%0a%3c %0a%3c * Fixed the theora seeking bug, should accurately seek to any frame without artefacts.%0a%3c * Fixed bug not handling WMP doing hardware video acceleration, caused crash on some files (Thanks slashdot!)%0a%3c * Fixed handling of missing 3xx http response codes%0a%3c * Fixed bug where player would crash if you dragged it from one monitor to another while playing%0a%3c * Fixed COM reference double-release bug%0a%3c * Fixed race condition which could crash or hang sometimes after a seek.%0a%3c %0a%3c %0a%3c !! Current UNSTABLE Version (0.73.1936) - 21/10/2006%0a%3c %0a%3c This version mainly exposes encoding options for all the codecs as COM interfaces, and as property pages (viewable in graphedit). Still needs more testing and error checking. Fixed a bug with flac that caused silence when a track automatically repeated. The aspect ratio handling in theora is now correct, the channel order in vorbis is now
  correct. And now explorer has the "Add to WMP playlist" option, which other media files have in their right-click menu. %0a%3c %0a%3c %0a%3c !!![[(Attach:)oggcodecs_0.73.1936.exe | Download Now (1,448,800 bytes)]]%0a%3c %0a%3c !!! Changes this version%0a%3c %0a%3c * Encode options for theora, vorbis, speex and flac and property pages in graphedit%0a%3c * Improved OGM decoding%0a%3c * Improved subtitle support%0a%3c * Vorbis channel order fixed%0a%3c * 24/32 bit >2 channel decode support improved for vorbis and flac%0a%3c * Fix end of file/repeat bug in flac%0a%3c * Correct handling of aspect ratio in theora%0a%3c * "Add to playlist" option for WMP appears in explorer right-click menu%0a%3c %0a%3c %0a%3c !! Previous UNSTABLE Version (0.72.1838) - 17/9/2006%0a%3c %0a%3c Major changes in this version include, updating all the code to Visual Studio 2005. There is now a "working" port for Windows Mobile 5.0 as at this revision, this is not yet released. Many minor bugixes and co
 mpatability fixes, dependancy updates, speed increases, unicode support, improved installer. Some major work was done to maintain Windows 9X/ME support while properly supporting unicode. If you use or have an interest in the maintaining of support for these obsolete operating systems, please let me know whether they are working for you.%0a%3c %0a%3c %0a%3c !!![[(Attach:)oggcodecs_0.72.1838.exe | Download Now (1,426,864 bytes)]]%0a%3c %0a%3c !!! Changes this version%0a%3c %0a%3c * Fixed bug that would refuse to play extremely small files%0a%3c * Added YUY2 output support to better support old graphics hardware%0a%3c * Updated speex to 1.2beta1%0a%3c * Updated project to VS 2005%0a%3c * Using theora-exp for theora decoding ~30%25 speed up%0a%3c * Improved 24/32 bit support for FLAC (still may not be perfect)%0a%3c * All code moved to unicode. Fixed bug which would fail if paths had unicode chars%0a%3c * Custom unicode emulating(unicows) CRT's to maintain Windows 9X support%0a%
 3c * Compatablity fixes for Media Portal and Media Player Classic%0a%3c * Installer detects and offers to remove previous versions%0a%3c * Installer offers to optionally associate WMP to .ogg%0a%3c * MMX optimisations for libtheora ported to MASM, encoding ~25-30%25 faster%0a%3c * Xiph fish icon in explorer%0a%3c * Code ported to Windows Mobile 5.0 (currently unreleased build)%0a%3c * Switch to integer decoding version of speex%0a
+host:1209309332=::1

Added: trunk/oggdsf/website/wiki.d/Main.EncTheoraGraphedit
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.EncTheoraGraphedit	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.EncTheoraGraphedit	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,34 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=
+ctime=1209313683
+host=::1
+name=Main.EncTheoraGraphedit
+rev=6
+targets=Main.HomePage
+text=!! How to encode theora files with directshow%0a%0aIf you have come to this page from an external site, please note before following these steps you need to install the [[Main/HomePage | directshow filters]] on my main page.%0a%0aThis brief tutorial explains how to use the directshow filter in association with graphedit to encode or transcode ogg theora. It focuses mainly on transcoding, but by using different source filters you can also encode raw data.%0a%0aGraphedit is available in the [=DirectX9=] SDK.%0a%0a%0a'''Step 1a - Load File'''%0a%0aAfter loading up graphedit, from the file menu choose "Render Media File..." and browse to select the file you want to transcode.%0ahttp://localhost/~silvia/oggdsf/uploads/images/select_render_file.JPG"Select render file from the menu"%0a%0a%0a'''Step 1b - Rendered Graph'''%0a%0aIf it was successful, you should now have a fully rendered graph, that looks something like this. The exact filters will depends on your source file.%0ah
 ttp://localhost/~silvia/oggdsf/uploads/images/show_rendered_graph.JPG"This is the rendered graph"%0a%0a%0a'''Step 2a - Check media types'''%0a%0aRight click on the pin that inputs to the video renderer, and choose pin properties.%0ahttp://localhost/~silvia/oggdsf/uploads/images/pin_properties.JPG"Select pin proeprties"%0a%0a%0a'''Step 2b - Ensure [=YV12=] or [=YUY2=]'''%0a%0aOn the pin properties page check the media type is either [=YV12=] or [=YUY2=], if it is not, this file can not yet be transcoded directly. If it is then proceed.%0ahttp://localhost/~silvia/oggdsf/uploads/images/ensure_YV12.JPG"Select pin properties"%0a%0a%0a'''Step 3 - Remove renderers'''%0a%0aThis has rendered a graph for playback, what we want to do is remove the renderers from the graph, and replace them with our encoders and muxer. To remove the renderers click on them, they will get a blue border, then press the delete key. After removing the renderers, the graph should look something like this.%0a
 http://localhost/~silvia/oggdsf/uploads/images/remove_renderers.JPG"This is the rendered graph"%0a%0a%0a'''Step 4 - Find encoders'''%0a%0aThe first time you will need to find the encoders, by clicking the add filter icon, then selecting the directshow branch of the tree.%0ahttp://localhost/~silvia/oggdsf/uploads/images/find_encoders.JPG"Find the encoders"%0a%0a%0a'''Step 5a - Select encoders'''%0a%0aFind the vorbis encode filter and the theora encode filter, select each one and check the favourite filter box so next time the filter will be under favourites in the menu, click insert filter.%0ahttp://localhost/~silvia/oggdsf/uploads/images/select_encoders.JPG"Select the encoders"%0a%0a%0a'''Step 5b - Encoders Added to graph'''%0a%0aAfter the encoders have been added to the graph, it should look something like this.%0ahttp://localhost/~silvia/oggdsf/uploads/images/encoders_added.JPG"Graph after encoders added."%0a%0a%0a'''Step 6 - Connect the encoders'''%0a%0aBy dragging the ou
 tput pin of the decoder to the input of the encoder connect the filters together.%0ahttp://localhost/~silvia/oggdsf/uploads/images/connect_encoders.JPG"Connecting encoder pins."%0a%0a%0a'''Step 7 - Open the Theora Encoder Properties'''%0a%0aImportant: *BEFORE* connecting to the muxer, right click the filter and select it's property page.%0ahttp://localhost/~silvia/oggdsf/uploads/images/filter_properties.JPG"Selecting filter proeprties menu item."%0a%0a%0a'''Step 8 - Setup the encoder properties'''%0a%0aModify the settings and click apply or ok. Future versions will include more comprehensive options.%0ahttp://localhost/~silvia/oggdsf/uploads/images/theora_properties.JPG"Select encoding parameters."%0a%0a%0a'''Step 9 - Select Mux Filter'''%0a%0aSelect the Ogg Mux filter as you previously did for the encoders and connect the encoders to it. As you connect a pin a new one will be spawned.%0a%0aImportant: Whichever encoder is connected at *the bottom* is one that will appear *fi
 rst* in the encoded file. '''This means to make a valid theora file, the vorbis stream is added first to the top pin, then the theora stream to the next pin.%0ahttp://localhost/~silvia/oggdsf/uploads/images/select_muxer.JPG"Select Muxer."%0a%0a%0a'''Step 10 - Fully connected graph to play'''%0a%0aThe graph is now ready to go, and should look something like this. Press the play button and wait for the encoding to finish. It is finished when the play button goes green again. Close graphedit... don't press play again or it will overwrite the file. Depending on the source format it may show encoding progress in the progress bar, this is however slightly inacurate... the bar will appear to finish before the encoding has really finished. The progress bar indicates how much data has left the source. Look at the play button or check your processor to usage to see if it has finished.There will always be one empty pin at the bottom of the muxer, this is normal.%0ahttp://localhost/~sil
 via/oggdsf/uploads/images/fully_connected.JPG"Fully Connected graph"%0a
+time=1209339628
+author:1209339628=silvia
+diff:1209339628:1209339576:minor=28c28%0a%3c '''Step 2b - Ensure [=YV12=] or [=YUY2=]'''%0a---%0a> '''Step 2b - Ensure YV12 or YUY2'''%0a
+host:1209339628=::1
+author:1209339576=silvia
+csum:1209339576=formatting fixes
+diff:1209339576:1209339464:=7,9c7,9%0a%3c Graphedit is available in the [=DirectX9=] SDK.%0a%3c %0a%3c %0a---%0a> Graphedit is available in the DirectX9 SDK.%0a> %0a> %0a11d10%0a%3c %0a17d15%0a%3c %0a23d20%0a%3c %0a29,30c26%0a%3c %0a%3c On the pin properties page check the media type is either [=YV12=] or [=YUY2=], if it is not, this file can not yet be transcoded directly. If it is then proceed.%0a---%0a> On the pin properties page check the media type is either YV12 or YUY2, if it is not, this file can not yet be transcoded directly. If it is then proceed.%0a35d30%0a%3c %0a41d35%0a%3c %0a47d40%0a%3c %0a53d45%0a%3c %0a59d50%0a%3c %0a65d55%0a%3c %0a71d60%0a%3c %0a77d65%0a%3c %0a85d72%0a%3c %0a
+host:1209339576=::1
+author:1209339464=silvia
+csum:1209339464=formatting fixes
+diff:1209339464:1209338935:=12,14c12,14%0a%3c http://localhost/~silvia/oggdsf/uploads/images/select_render_file.JPG"Select render file from the menu"%0a%3c %0a%3c %0a---%0a> http://localhost/~silvia/oggdsf/uploads/images/select_render_file.JPG%0a> %0a> %0a16,74c16,114%0a%3c If it was successful, you should now have a fully rendered graph, that looks something like this. The exact filters will depends on your source file.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/show_rendered_graph.JPG"This is the rendered graph"%0a%3c %0a%3c %0a%3c '''Step 2a - Check media types'''%0a%3c Right click on the pin that inputs to the video renderer, and choose pin properties.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/pin_properties.JPG"Select pin proeprties"%0a%3c %0a%3c %0a%3c '''Step 2b - Ensure YV12 or YUY2'''%0a%3c On the pin properties page check the media type is either YV12 or YUY2, if it is not, this file can not yet be transcoded directly. If it is then proceed.%0a
 %3c http://localhost/~silvia/oggdsf/uploads/images/ensure_YV12.JPG"Select pin properties"%0a%3c %0a%3c %0a%3c '''Step 3 - Remove renderers'''%0a%3c This has rendered a graph for playback, what we want to do is remove the renderers from the graph, and replace them with our encoders and muxer. To remove the renderers click on them, they will get a blue border, then press the delete key. After removing the renderers, the graph should look something like this.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/remove_renderers.JPG"This is the rendered graph"%0a%3c %0a%3c %0a%3c '''Step 4 - Find encoders'''%0a%3c The first time you will need to find the encoders, by clicking the add filter icon, then selecting the directshow branch of the tree.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/find_encoders.JPG"Find the encoders"%0a%3c %0a%3c %0a%3c '''Step 5a - Select encoders'''%0a%3c Find the vorbis encode filter and the theora encode filter, select each one and check the
  favourite filter box so next time the filter will be under favourites in the menu, click insert filter.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/select_encoders.JPG"Select the encoders"%0a%3c %0a%3c %0a%3c '''Step 5b - Encoders Added to graph'''%0a%3c After the encoders have been added to the graph, it should look something like this.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/encoders_added.JPG"Graph after encoders added."%0a%3c %0a%3c %0a%3c '''Step 6 - Connect the encoders'''%0a%3c By dragging the output pin of the decoder to the input of the encoder connect the filters together.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/connect_encoders.JPG"Connecting encoder pins."%0a%3c %0a%3c %0a%3c '''Step 7 - Open the Theora Encoder Properties'''%0a%3c Important: *BEFORE* connecting to the muxer, right click the filter and select it's property page.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/filter_properties.JPG"Selecting filter proeprtie
 s menu item."%0a%3c %0a%3c %0a%3c '''Step 8 - Setup the encoder properties'''%0a%3c Modify the settings and click apply or ok. Future versions will include more comprehensive options.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/theora_properties.JPG"Select encoding parameters."%0a%3c %0a%3c %0a%3c '''Step 9 - Select Mux Filter'''%0a%3c Select the Ogg Mux filter as you previously did for the encoders and connect the encoders to it. As you connect a pin a new one will be spawned.%0a%3c %0a%3c Important: Whichever encoder is connected at *the bottom* is one that will appear *first* in the encoded file. '''This means to make a valid theora file, the vorbis stream is added first to the top pin, then the theora stream to the next pin.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/select_muxer.JPG"Select Muxer."%0a%3c %0a%3c %0a%3c '''Step 10 - Fully connected graph to play'''%0a%3c The graph is now ready to go, and should look something like this. Press the play bu
 tton and wait for the encoding to finish. It is finished when the play button goes green again. Close graphedit... don't press play again or it will overwrite the file. Depending on the source format it may show encoding progress in the progress bar, this is however slightly inacurate... the bar will appear to finish before the encoding has really finished. The progress bar indicates how much data has left the source. Look at the play button or check your processor to usage to see if it has finished.There will always be one empty pin at the bottom of the muxer, this is normal.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/fully_connected.JPG"Fully Connected graph"%0a---%0a> If it was successful, you should now have a fully rendered graph, that looks something like thi%0a> s. The exact filters will depends on your source file.%0a> http://localhost/~silvia/oggdsf/uploads/images/show_rendered_graph.JPG"This is the r%0a> endered graph"%0a> %0a> %0a> %3cu>%3cb>Step 2a - Ch
 eck media types%3c/b>%3c/u>%3cbr>%0a> Right click on the pin that inputs to the video renderer, and choose pin properties.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/pin_properties.JPG" alt="Select pin proeprt%0a> ies">%0a> %3cbr>%0a> %3cbr>%0a> %0a> %0a> %3cu>%3cb>Step 2b - Ensure YV12 or YUY2%3c/b>%3c/u>%3cbr>%0a> On the pin properties page check the media type is either YV12 or YUY2, if it is not, this file%0a>  can not yet be transcoded directly. If it is then proceed.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/ensure_YV12.JPG" alt="Select pin properties%0a> ">%0a> %0a> %3cu>%3cb>Step 3 - Remove renderers%3c/b>%3c/u>%3cbr>%0a> This has rendered a graph for playback, what we want to do is remove the renderers from the gra%0a> ph, and replace them with our encoders and muxer. To remove the renderers click on them, they w%0a> ill get a blue border, then press the delete key. After removing the renderers, the graph shoul%0a> d lo
 ok something like this.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/remove_renderers.JPG" alt="This is the rend%0a> ered graph">%0a> %3cbr>%0a> %3cbr>%0a> %0a> %0a> %3cu>%3cb>Step 4 - Find encoders%3c/b>%3c/u>%3cbr>%0a> The first time you will need to find the encoders, by clicking the add filter icon, then select%0a> ing the directshow branch of the tree.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/find_encoders.JPG" alt="Find the encoders">%0a> %3cbr>%0a> %3cbr>%0a> %0a> %3cu>%3cb>Step 5a - Select encoders%3c/b>%3c/u>%3cbr>%0a> Find the vorbis encode filter and the theora encode filter, select each one and check the favou%0a> rite filter box so next time the filter will be under favourites in the menu, click insert filt%0a> er.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/select_encoders.JPG" alt="Select the encode%0a> rs">%0a> %3cbr>%0a> %3cbr>%0a> %0a> %3cu>%3cb>Step 5b - Encoders Added to graph%3c/b>%3c/u>
 %3cbr>%0a> After the encoders have been added to the graph, it should look something like this.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/encoders_added.JPG" alt="Graph after encode%0a> rs added.">%0a> %3cbr>%0a> %3cbr>%0a> %0a> %3cu>%3cb>Step 6 - Connect the encoders%3c/b>%3c/u>%3cbr>%0a> By dragging the ouput pin of the decoder to the input of the encoder connect the filters togeth%0a> er.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/connect_encoders.JPG" alt="Connecting encod%0a> er pins.">%0a> %0a> %0a> %3cu>%3cb>Step 7 - Open the Theora Encoder Properties%3c/b>%3c/u>%3cbr>%0a> Important: *BEFORE* connecting to the muxer, right click the filter and select it's proeprty pa%0a> ge.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/filter_properties.JPG" alt="Selecting filte%0a> r proeprties menu item.">%0a> %3cbr>%0a> %3cbr>%0a> %0a> %3cu>%3cb>Step 8 - Setup the encoder properties%3c/b>%3c/u>%3cbr>%0a> Modify the
  settings and click apply or ok. Future versions will include more comprehensive opti%0a> ons%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/theora_properties.JPG" alt="Select encoding%0a>  parameters.">%0a> %3cbr>%0a> %3cbr>%0a> %0a> %3cu>%3cb>Step 9 - Select Mux Filter%3c/b>%3c/u>%3cbr>%0a> Select the Ogg Mux filter as you previously did for the encoders and connect the encoders to it%0a> . As you connect a pin a new one will be spawned.%3cbr>%0a> Important: Whichever encoder is connected at *the bottom* is one that will appear *first* in th%0a> e encoded file. %3cb>This means to make a valid theora file, the vorbis stream is added first to %0a> the top pin, then the theora stream to the next pin.%3c/b>%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/select_muxer.JPG" alt="Select Muxer.">%0a> %3cbr>%0a> %3cbr>%0a> %0a> %3cu>%3cb>Step 10 - Fully connected graph to play%3c/b>%3c/u>%3cbr>%0a> The graph is now ready to go, and should look s
 omething like this. Press the play button and wa%0a> it for the encoding to finish. It is finished when the play button goes green again. Close grap%0a> hedit... don't press play again or it will overwrite the file. Depending on the source format i%0a> t may show encoding progress in the progress bar, this is however slightly innacurate... the ba%0a> r will appear to finish before the encoding has really finished. The progress bar indicates how%0a>  much data has left the source. Look at the play button or check your processor to usage to see%0a>  if it has finished.There will always be one empty pin at the bottom of the muxer, this is norm%0a> al.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/fully_connected.JPG" alt="Fully Connected g%0a> raph">%0a> %3cbr>%0a\ No newline at end of file%0a
+host:1209339464=::1
+author:1209338935=silvia
+csum:1209338935=fixed step 1b
+diff:1209338935:1209313799:=14,15c14,16%0a%3c %0a%3c '''Step 1b - Rendered Graph'''%0a---%0a> xxx%0a> %0a> %3cu>%3cb>Step 1b - Rendered Graph%3c/b>%3c/u>%3cbr>%0a17,20c18,22%0a%3c s. The exact filters will depends on your source file.%0a%3c http://localhost/~silvia/oggdsf/uploads/images/show_rendered_graph.JPG"This is the r%0a%3c endered graph"%0a%3c %0a---%0a> s. The exact filters will depends on your source file.%3cbr>%0a> %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/show_rendered_graph.JPG" alt="This is the r%0a> endered graph">%0a> %3cbr>%0a> %3cbr>%0a
+host:1209338935=::1
+author:1209313799=silvia
+diff:1209313799:1209313683:minor=12c12%0a%3c http://localhost/~silvia/oggdsf/uploads/images/select_render_file.JPG%0a---%0a> http://localhost/~silvia/oggdsf/images/select_render_file.JPG%0a
+host:1209313799=::1
+author:1209313683=silvia
+csum:1209313683=started page - got tired - fix some other time
+diff:1209313683:1209313683:=1,116d0%0a%3c !! How to encode theora files with directshow%0a%3c %0a%3c If you have come to this page from an external site, please note before following these steps you need to install the [[Main/HomePage | directshow filters]] on my main page.%0a%3c %0a%3c This brief tutorial explains how to use the directshow filter in association with graphedit to encode or transcode ogg theora. It focuses mainly on transcoding, but by using different source filters you can also encode raw data.%0a%3c %0a%3c Graphedit is available in the DirectX9 SDK.%0a%3c %0a%3c %0a%3c '''Step 1a - Load File'''%0a%3c After loading up graphedit, from the file menu choose "Render Media File..." and browse to select the file you want to transcode.%0a%3c http://localhost/~silvia/oggdsf/images/select_render_file.JPG%0a%3c %0a%3c xxx%0a%3c %0a%3c %3cu>%3cb>Step 1b - Rendered Graph%3c/b>%3c/u>%3cbr>%0a%3c If it was successful, you should now have a fully rendered graph, that looks
  something like thi%0a%3c s. The exact filters will depends on your source file.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/show_rendered_graph.JPG" alt="This is the r%0a%3c endered graph">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %3cu>%3cb>Step 2a - Check media types%3c/b>%3c/u>%3cbr>%0a%3c Right click on the pin that inputs to the video renderer, and choose pin properties.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/pin_properties.JPG" alt="Select pin proeprt%0a%3c ies">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %0a%3c %3cu>%3cb>Step 2b - Ensure YV12 or YUY2%3c/b>%3c/u>%3cbr>%0a%3c On the pin properties page check the media type is either YV12 or YUY2, if it is not, this file%0a%3c  can not yet be transcoded directly. If it is then proceed.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/ensure_YV12.JPG" alt="Select pin properties%0a%3c ">%0a%3c %0a%3c %3cu>%3cb>Step 3 - Remove renderers%3c/b>%3c/u>%3cbr>%0a%3
 c This has rendered a graph for playback, what we want to do is remove the renderers from the gra%0a%3c ph, and replace them with our encoders and muxer. To remove the renderers click on them, they w%0a%3c ill get a blue border, then press the delete key. After removing the renderers, the graph shoul%0a%3c d look something like this.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/remove_renderers.JPG" alt="This is the rend%0a%3c ered graph">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %0a%3c %3cu>%3cb>Step 4 - Find encoders%3c/b>%3c/u>%3cbr>%0a%3c The first time you will need to find the encoders, by clicking the add filter icon, then select%0a%3c ing the directshow branch of the tree.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/find_encoders.JPG" alt="Find the encoders">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %3cu>%3cb>Step 5a - Select encoders%3c/b>%3c/u>%3cbr>%0a%3c Find the vorbis encode filter and the theora encode filter, select 
 each one and check the favou%0a%3c rite filter box so next time the filter will be under favourites in the menu, click insert filt%0a%3c er.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/select_encoders.JPG" alt="Select the encode%0a%3c rs">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %3cu>%3cb>Step 5b - Encoders Added to graph%3c/b>%3c/u>%3cbr>%0a%3c After the encoders have been added to the graph, it should look something like this.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/encoders_added.JPG" alt="Graph after encode%0a%3c rs added.">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %3cu>%3cb>Step 6 - Connect the encoders%3c/b>%3c/u>%3cbr>%0a%3c By dragging the ouput pin of the decoder to the input of the encoder connect the filters togeth%0a%3c er.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/connect_encoders.JPG" alt="Connecting encod%0a%3c er pins.">%0a%3c %0a%3c %0a%3c %3cu>%3cb>Step 7 - Open the Theora Encoder Pr
 operties%3c/b>%3c/u>%3cbr>%0a%3c Important: *BEFORE* connecting to the muxer, right click the filter and select it's proeprty pa%0a%3c ge.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/filter_properties.JPG" alt="Selecting filte%0a%3c r proeprties menu item.">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %3cu>%3cb>Step 8 - Setup the encoder properties%3c/b>%3c/u>%3cbr>%0a%3c Modify the settings and click apply or ok. Future versions will include more comprehensive opti%0a%3c ons%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/theora_properties.JPG" alt="Select encoding%0a%3c  parameters.">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %3cu>%3cb>Step 9 - Select Mux Filter%3c/b>%3c/u>%3cbr>%0a%3c Select the Ogg Mux filter as you previously did for the encoders and connect the encoders to it%0a%3c . As you connect a pin a new one will be spawned.%3cbr>%0a%3c Important: Whichever encoder is connected at *the bottom* is one that will appear *first* in
  th%0a%3c e encoded file. %3cb>This means to make a valid theora file, the vorbis stream is added first to %0a%3c the top pin, then the theora stream to the next pin.%3c/b>%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/select_muxer.JPG" alt="Select Muxer.">%0a%3c %3cbr>%0a%3c %3cbr>%0a%3c %0a%3c %3cu>%3cb>Step 10 - Fully connected graph to play%3c/b>%3c/u>%3cbr>%0a%3c The graph is now ready to go, and should look something like this. Press the play button and wa%0a%3c it for the encoding to finish. It is finished when the play button goes green again. Close grap%0a%3c hedit... don't press play again or it will overwrite the file. Depending on the source format i%0a%3c t may show encoding progress in the progress bar, this is however slightly innacurate... the ba%0a%3c r will appear to finish before the encoding has really finished. The progress bar indicates how%0a%3c  much data has left the source. Look at the play button or check your processor to usa
 ge to see%0a%3c  if it has finished.There will always be one empty pin at the bottom of the muxer, this is norm%0a%3c al.%3cbr>%0a%3c %3cbr>%3cimg src="http://www.illiminable.com/ogg/images/fully_connected.JPG" alt="Fully Connected g%0a%3c raph">%0a%3c %3cbr>%0a\ No newline at end of file%0a
+host:1209313683=::1

Added: trunk/oggdsf/website/wiki.d/Main.Graphedit
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.Graphedit	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.Graphedit	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,16 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=added Zen's original text
+ctime=1209313443
+host=::1
+name=Main.Graphedit
+rev=1
+targets=
+text=!! Some sample encoding directshow graphs in graphedit%0a%0ahttp://localhost/~silvia/oggdsf/uploads/images/wave_to_vorbis_graphedit.JPG"Vorbis Encoding" | Wave to vorbis encoding. (Visit [[http://www.waixwave.com/index.php | WaixWave]])%0a%0a%0ahttp://localhost/~silvia/oggdsf/uploads/images/mp3_to_vorbis_graphedit.JPG"Vorbis Graphedit" | [=MP3=] to vorbis transcoding.%0a%0a%0ahttp://localhost/~silvia/oggdsf/uploads/images/ogg_split_graphedit.JPG"Split Graphedit" | Splitting a theora+vorbis file to component parts. (File : [[http://www.polycrystal.org/lego/movies.html | Lego Man Movies]])%0a%0a%0ahttp://localhost/~silvia/oggdsf/uploads/images/wma_to_vorbis_graphedit.JPG"Wma to vorbis" | WMA to vorbis transcoding.%0a%0a%0a%0ahttp://localhost/~silvia/oggdsf/uploads/images/mp3_to_speex_graphedit.JPG"[=MP3=] to Speex" | [=MP3=] to speex transcoding.%0a%0a%0a%0ahttp://localhost/~silvia/oggdsf/uploads/images/vorbis_to_mp3_graphedit.JPG"Vorbis to [=MP3=]" | Vorbis to [=MP3=] tr
 anscoding.
+time=1209313443
+author:1209313443=silvia
+csum:1209313443=added Zen's original text
+diff:1209313443:1209313443:=1,20d0%0a%3c !! Some sample encoding directshow graphs in graphedit%0a%3c %0a%3c http://localhost/~silvia/oggdsf/uploads/images/wave_to_vorbis_graphedit.JPG"Vorbis Encoding" | Wave to vorbis encoding. (Visit [[http://www.waixwave.com/index.php | WaixWave]])%0a%3c %0a%3c %0a%3c http://localhost/~silvia/oggdsf/uploads/images/mp3_to_vorbis_graphedit.JPG"Vorbis Graphedit" | [=MP3=] to vorbis transcoding.%0a%3c %0a%3c %0a%3c http://localhost/~silvia/oggdsf/uploads/images/ogg_split_graphedit.JPG"Split Graphedit" | Splitting a theora+vorbis file to component parts. (File : [[http://www.polycrystal.org/lego/movies.html | Lego Man Movies]])%0a%3c %0a%3c %0a%3c http://localhost/~silvia/oggdsf/uploads/images/wma_to_vorbis_graphedit.JPG"Wma to vorbis" | WMA to vorbis transcoding.%0a%3c %0a%3c %0a%3c %0a%3c http://localhost/~silvia/oggdsf/uploads/images/mp3_to_speex_graphedit.JPG"[=MP3=] to Speex" | [=MP3=] to speex transcoding.%0a%3c %0a%3c %0a%3c %0a%3c http
 ://localhost/~silvia/oggdsf/uploads/images/vorbis_to_mp3_graphedit.JPG"Vorbis to [=MP3=]" | Vorbis to [=MP3=] transcoding.%0a\ No newline at end of file%0a
+host:1209313443=::1

Added: trunk/oggdsf/website/wiki.d/Main.History
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.History	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.History	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,32 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=
+ctime=1209311124
+host=::1
+name=Main.History
+rev=6
+targets=Main.Downloads,Main.History,Main.About
+text=!! How it started...%0a%0aThe Ogg Directshow Filters were written by Zen Kavanagh from Perth, Australia. Zen handed over maintenance of the filters to Cristian Adam in April 2008.%0a%0aHere is what Zen wrote about the history of the Directshow Filters:%0a%0aI first began working on ogg media directshow filters whilst under contract to CSIRO's [[http://www.annodex.net | annodex.net]] project group. Much of the knowledge I needed to write these filters was gained through my work with this project. My initial implementation was for a specific annodex (which uses the ogg encapsulation format) demuxer. Part of my aim of this project was to use the knowledge gained to create a set of filters that works with generic ogg physical streams rather than just a particular physical bitstream format and to release these back to the open source community. There were several limitations to the approach taken to the original annodex filters which is why I decided to start from scratch to
  design the filter architecture over again with the experience of the first attempt.%0a%0aAnother of my aims of this project is to rewrite the annodex demuxer to use this new design in order for it to be more extensible and easier to work with. This time writing the generic ogg case first and then basing the annodex demuxer on this new design it will increase the consistency of the code between the two modules and provide less trouble integrating new codecs, with the aim of making annodex technology available in the standard applications that come default with windows.%0a%0aI encourage you all to go and check out the [[http://www.annodex.net | annodex project]] and to consider coding some applications to utilise this new technology. There are many interesting possibilities this new technology presents to continuous media and search technology which will expand the internet to be a richer more dynamic multimedia experience.%0a%0aThankyou to CSIRO's annodex.net project group (
 Silvia Pfeiffer, Conrad Parker and Andre Pang) for the opportunity to work on this exciting new technology and sparking my interest in directshow and the [[http://xiph.org | xiph.org]] range of codecs.%0a%0aOn the 1st of May 2004, this project began to be maintained in the [[http://www.xiph.org | xiph.org]] subversion repository. It can be found at [[http://svn.xiph.org/trunk/oggdsf/ | svn.xiph.org/trunk/oggdsf/]]%0a%0a%0a%0a!! Previous Versions%0a%0aOnly download these if you have problems with the [[Main/Downloads | new version]]. Versions older than 2005 have been removed.%0a%0a%0a!! Previous Version (0.70.0827) - 16/02/2006%0a%0aWow... has it been a whole year :) Yes, this project is still alive! There's a fair bit of new code, so if you have problems you might want to try the [[Main/History | history]] page and get version 0.69. One notable thing that this new version does not do correctly, is it no longer handles chained icecast streams, but it handles streaming static
  files on a server much better. The previous solution for icecast was a real hack which is no longer possible, it will be fixed properly fairly soon.%0a%0aI'm releasing now, because otherwise you'll be waiting forever! Releases should be coming much more frequently hopefully. As always, email me your bugs and feature requests. The unicode filenames will be fixed as soon as I can, sorry, I keep putting that one off.%0a%0a!!![[(Attach:)oggcodecs_0.70.0827.exe | Download Now (824,581 bytes)]]%0a%0a%0a!!! Changes this version%0a%0a* Theora can seek without artefacts to any frame, even non-keyframes.(95%25 of the time, there's still a slight bug)%0a* All seeking in all codecs is accurate to within a single audio sample (ie. sub-second)%0a* Complete rewrite of demux, it's much easier for me to continue now.%0a* OGM support is improved a bit, still not great. It does not associate with the .ogm extension to avoid messing with other solutions for .ogm you might have. But renaming th
 e .ogm file to .ogg it will attempt to play it.%0a* Improved handling of static files on servers (still not seeking over http)%0a* Be aware that it builds a seektable for all on-disk files. For really large files (>250MB) it may take a little while for the file to load.%0a* Updated most libraries, vorbis is still at 1.1.1, speex still 1.1.10. Another release soonish may rectify this. I just want to release what I've got now, or it will keep being put off.%0a%0a%0a%0a!! Previous Version (0.69.8924) - 15/02/2005%0a%0aLots of bufixes, especially memory leaks and memory management. Along with a new installer based on [[http://nsis.sourceforge.net/ | NSIS]], which is just click-and-run.%0a%0a%0a!!![[(Attach:)oggcodecs_0.69.8924.exe | Download Now (816,782 bytes)]]%0a%0a%0a!!! Changes this version%0a%0a* Removed several major memory leaks in encoders and decoders%0a* More intelligent buffer sizing, reduces memory footprint about 5-10 fold%0a* Much more [[http://localhost/~silvia/o
 ggdsf/uploads/docs/ | documentation]]%0a* Vorbis encoder has programmatic interface for setting quality%0a* Annodex Muxing support%0a* Programmitic interface for encoding progress%0a* Can seek in [=WMP6.4=]%0a* Several other tools (not included in this binary) for server side seeking, and .NET media players added to [[Main/About | SDK]]%0a%0a
+time=1209340846
+author:1209340846=silvia
+diff:1209340846:1209340794:minor=47c47,48%0a%3c Lots of bufixes, especially memory leaks and memory management. Along with a new installer based on [[http://nsis.sourceforge.net/ | NSIS]], which is just click-and-run.%0a---%0a> Lots of bufixes, especially memory leaks and memory management. Along with a new installer base%0a> d on [[http://nsis.sourceforge.net/ | NSIS]], which is just click-and-run.%0a
+host:1209340846=::1
+author:1209340794=silvia
+diff:1209340794:1209340693:minor=62,63c62,63%0a%3c * Can seek in [=WMP6.4=]%0a%3c * Several other tools (not included in this binary) for server side seeking, and .NET media players added to [[Main/About | SDK]]%0a---%0a> * Can seek in WMP6.4%0a> * Several other tools (not included in this binary) for server side seeking, and .NET media players added to [[Main/AboutSDK | SDK]]%0a
+host:1209340794=::1
+author:1209340693=silvia
+csum:1209340693=added documentation link
+diff:1209340693:1209312157:=58c58%0a%3c * Much more [[http://localhost/~silvia/oggdsf/uploads/docs/ | documentation]]%0a---%0a> * Much more [[Main/Doc | documentation]]%0a
+host:1209340693=::1
+author:1209312157=silvia
+diff:1209312157:1209311193:minor=57c57%0a%3c * More intelligent buffer sizing, reduces memory footprint about 5-10 fold%0a---%0a> * More intelligent buffer sizing, reduces memory footprint about about 5-10 fold%0a
+host:1209312157=::1
+author:1209311193=silvia
+diff:1209311193:1209311124:minor=24,25c24,25%0a%3c !! Previous Version (0.70.0827) - 16/02/2006%0a%3c %0a---%0a> !!! Previous Version (0.70.0827) - 16/02/2006%0a> %0a45c45%0a%3c !! Previous Version (0.69.8924) - 15/02/2005%0a---%0a> !!! Previous Version (0.69.8924) - 15/02/2005%0a
+host:1209311193=::1
+author:1209311124=silvia
+csum:1209311124=started page
+diff:1209311124:1209311124:=1,64d0%0a%3c !! How it started...%0a%3c %0a%3c The Ogg Directshow Filters were written by Zen Kavanagh from Perth, Australia. Zen handed over maintenance of the filters to Cristian Adam in April 2008.%0a%3c %0a%3c Here is what Zen wrote about the history of the Directshow Filters:%0a%3c %0a%3c I first began working on ogg media directshow filters whilst under contract to CSIRO's [[http://www.annodex.net | annodex.net]] project group. Much of the knowledge I needed to write these filters was gained through my work with this project. My initial implementation was for a specific annodex (which uses the ogg encapsulation format) demuxer. Part of my aim of this project was to use the knowledge gained to create a set of filters that works with generic ogg physical streams rather than just a particular physical bitstream format and to release these back to the open source community. There were several limitations to the approach taken to the original ann
 odex filters which is why I decided to start from scratch to design the filter architecture over again with the experience of the first attempt.%0a%3c %0a%3c Another of my aims of this project is to rewrite the annodex demuxer to use this new design in order for it to be more extensible and easier to work with. This time writing the generic ogg case first and then basing the annodex demuxer on this new design it will increase the consistency of the code between the two modules and provide less trouble integrating new codecs, with the aim of making annodex technology available in the standard applications that come default with windows.%0a%3c %0a%3c I encourage you all to go and check out the [[http://www.annodex.net | annodex project]] and to consider coding some applications to utilise this new technology. There are many interesting possibilities this new technology presents to continuous media and search technology which will expand the internet to be a richer more dynamic
  multimedia experience.%0a%3c %0a%3c Thankyou to CSIRO's annodex.net project group (Silvia Pfeiffer, Conrad Parker and Andre Pang) for the opportunity to work on this exciting new technology and sparking my interest in directshow and the [[http://xiph.org | xiph.org]] range of codecs.%0a%3c %0a%3c On the 1st of May 2004, this project began to be maintained in the [[http://www.xiph.org | xiph.org]] subversion repository. It can be found at [[http://svn.xiph.org/trunk/oggdsf/ | svn.xiph.org/trunk/oggdsf/]]%0a%3c %0a%3c %0a%3c %0a%3c !! Previous Versions%0a%3c %0a%3c Only download these if you have problems with the [[Main/Downloads | new version]]. Versions older than 2005 have been removed.%0a%3c %0a%3c %0a%3c !!! Previous Version (0.70.0827) - 16/02/2006%0a%3c %0a%3c Wow... has it been a whole year :) Yes, this project is still alive! There's a fair bit of new code, so if you have problems you might want to try the [[Main/History | history]] page and get version 0.69. One no
 table thing that this new version does not do correctly, is it no longer handles chained icecast streams, but it handles streaming static files on a server much better. The previous solution for icecast was a real hack which is no longer possible, it will be fixed properly fairly soon.%0a%3c %0a%3c I'm releasing now, because otherwise you'll be waiting forever! Releases should be coming much more frequently hopefully. As always, email me your bugs and feature requests. The unicode filenames will be fixed as soon as I can, sorry, I keep putting that one off.%0a%3c %0a%3c !!![[(Attach:)oggcodecs_0.70.0827.exe | Download Now (824,581 bytes)]]%0a%3c %0a%3c %0a%3c !!! Changes this version%0a%3c %0a%3c * Theora can seek without artefacts to any frame, even non-keyframes.(95%25 of the time, there's still a slight bug)%0a%3c * All seeking in all codecs is accurate to within a single audio sample (ie. sub-second)%0a%3c * Complete rewrite of demux, it's much easier for me to continue 
 now.%0a%3c * OGM support is improved a bit, still not great. It does not associate with the .ogm extension to avoid messing with other solutions for .ogm you might have. But renaming the .ogm file to .ogg it will attempt to play it.%0a%3c * Improved handling of static files on servers (still not seeking over http)%0a%3c * Be aware that it builds a seektable for all on-disk files. For really large files (>250MB) it may take a little while for the file to load.%0a%3c * Updated most libraries, vorbis is still at 1.1.1, speex still 1.1.10. Another release soonish may rectify this. I just want to release what I've got now, or it will keep being put off.%0a%3c %0a%3c %0a%3c %0a%3c !!! Previous Version (0.69.8924) - 15/02/2005%0a%3c %0a%3c Lots of bufixes, especially memory leaks and memory management. Along with a new installer base%0a%3c d on [[http://nsis.sourceforge.net/ | NSIS]], which is just click-and-run.%0a%3c %0a%3c %0a%3c !!![[(Attach:)oggcodecs_0.69.8924.exe | Download 
 Now (816,782 bytes)]]%0a%3c %0a%3c %0a%3c !!! Changes this version%0a%3c %0a%3c * Removed several major memory leaks in encoders and decoders%0a%3c * More intelligent buffer sizing, reduces memory footprint about about 5-10 fold%0a%3c * Much more [[Main/Doc | documentation]]%0a%3c * Vorbis encoder has programmatic interface for setting quality%0a%3c * Annodex Muxing support%0a%3c * Programmitic interface for encoding progress%0a%3c * Can seek in WMP6.4%0a%3c * Several other tools (not included in this binary) for server side seeking, and .NET media players added to [[Main/AboutSDK | SDK]]%0a%3c %0a
+host:1209311124=::1

Added: trunk/oggdsf/website/wiki.d/Main.HomePage
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.HomePage	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.HomePage	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,40 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=added API documentation link
+host=::1
+name=Main.HomePage
+rev=208
+targets=Main.Downloads,Main.Graphedit,Main.EncTheoraGraphedit,Main.History,Main.SseBuilds
+text=!! Installation%0a%0aFollow these steps:%0a%0a# Uninstall any previous version of these filters. ('''This is important!''') Go to add remove programs, remove oggcodecs.%0a# Make sure media player or any directshow applications are closed.%0a# Run the installer.%0a%0aThen Windows Media Player or any other directshow application (eg. [=BSPlayer=]) will be able to play Ogg Vorbis, Ogg Speex, Ogg Theora, Ogg FLAC and native FLAC.%0a%0aStarting with version 0.72.1838, development will now be split into a stable and unstable branch. That way, those who just want to play their files can get the stable version, and those who want to live dangerously can get the latest new features without having to wait for me to do proper testing. You can find the '''unstable builds''' on the [[Main/Downloads | download page]].%0a%0aMost users should download the stable version below.%0a%0a%0a!! Current Stable Version (0.71.0946) - 24/02/2006%0a%0aMore bugfixes, particularly to theora. See 0.7
 0 release for more details about recent changes. Docs and source package will be updated on the weekend, there's no major changes there from 0.70. This version is fairly stable now it seems.%0a%0aOgg Codecs for all versions of Windows:%0a%0a!!![[(Attach:)oggcodecs_0.71.0946.exe | Download Now (824,901 bytes)]]%0a%0a%0a!!! Changes this version%0a%0a* Fixed the theora seeking bug, should accurately seek to any frame without artefacts.%0a* Fixed bug not handling WMP doing hardware video acceleration, caused crash on some files (Thanks slashdot!)%0a* Fixed handling of missing 3xx http response codes%0a* Fixed bug where player would crash if you dragged it from one monitor to another while playing%0a* Fixed COM reference double-release bug%0a* Fixed race condition which could crash or hang sometimes after a seek.%0a%0a%0a!!! Known issues%0a%0a* Can't play file with names that use extended character sets (ie Japanese) under certain locales of windows (Thanks Liisachan)%0a* AVI Vid
 eo files encoded with non-integral framerates (ie 29.97) may lose sync, due to rounding bug (Thanks [=RadicalEd=])%0a* Make the installer properly detect if it's already installed. If you don't uninstall the old version you will get multiple identical file masks in WMP%0a* If you are getting codec problems, there appears to be a conflict with something in Media Player Classic... it tries to enforce the use of another ogg demultiplexer, either by design or accident.If you see in MPC it complaining about a media subtype with a GUID {[=CDDCA2D5-6D75-4F98-840E737BEDD5C63B=]}. This is the guid of the old tobias vorbis filter, and this one {[=8D2FD10B-5841-4a6b-8905-588FEC1ADED9=]} is [=CoreVorbis=]. This is most likely due to the fact that these filters don't clean up the registry when they uninstall. I am working on something to "clean up" all these remnants from the registry (don't expect it too soon though... it's not that high priority). You can also apparently an option to d
 isable the inbuilt demuxer (Thanks Bond)%0a* Cannot handle any chained multiplexed files or streams.%0a%0a%0a!! Other stuff%0a%0a* Also you can encode vorbis, speex, FLAC and theora files using graphedit ([[http://www.microsoft.com/downloads/details.aspx?FamilyID=9216652f-51e0-402e-b7b5-feb68d00f298&displaylang=en | DirectX9 SDK]]) or other similar program.%0a* [[Main/Graphedit | See audio encoding example filter graphs]]%0a* [[Main/EncTheoraGraphedit | Theora encoding how-to]]%0a* If you install [[http://sourceforge.net/projects/ffdshow | ffdshow ]], you will be able to play ogm files (sometimes at least!)%0a* Also, if you download, install and register [[http://sourceforge.net/project/showfiles.php?group_id=82303&package_id=84799 | Gabests .cda directshow source]] you can rip CD's using graphedit%0a* Looking for [[Main/History | old versions]] ?%0a* Want the [[(Attach:)oggcodecs_src_0.70.0827.zip | zipped source code]] (10.5 MB zipped, 37MB unzipped) ?%0a* Want to [[http:/
 /svn.xiph.org/trunk/oggdsf/ | browse the source on the web]]%0a* [[Main/SseBuilds | Experimental SSE/SSE2 builds can be found here]]%0a* Some basic [[http://localhost/~silvia/oggdsf/uploads/docs/ | API documentation]] for developers%0a
+time=1209340608
+author:1209340608=silvia
+csum:1209340608=added API documentation link
+diff:1209340608:1209308041:=55c55%0a%3c * Some basic [[http://localhost/~silvia/oggdsf/uploads/docs/ | API documentation]] for developers%0a---%0a> * Some basic [[Main/Docs | API documentation]] for developers%0a
+host:1209340608=::1
+author:1209308041=silvia
+diff:1209308041:1209308003:minor=5c5%0a%3c # Uninstall any previous version of these filters. ('''This is important!''') Go to add remove programs, remove oggcodecs.%0a---%0a> # Uninstall any previous version of these filters. ('''This is important!''') Go to add remove programs, remove oggcodecs%0a
+host:1209308041=::1
+author:1209308003=silvia
+diff:1209308003:1209307961:minor=3c3%0a%3c Follow these steps:%0a---%0a> Follow the following steps:%0a
+host:1209308003=::1
+author:1209307961=silvia
+diff:1209307961:1209307923:minor=22c22%0a%3c !!![[(Attach:)oggcodecs_0.71.0946.exe | Download Now (824,901 bytes)]]%0a---%0a> [[(Attach:)oggcodecs_0.71.0946.exe | Download Now (824,901 bytes)]]%0a
+host:1209307961=::1
+author:1209307923=silvia
+csum:1209307923=changes to some more links
+diff:1209307923:1209307688:=47,48c47,48%0a%3c * [[Main/Graphedit | See audio encoding example filter graphs]]%0a%3c * [[Main/EncTheoraGraphedit | Theora encoding how-to]]%0a---%0a> * [[http://www.illiminable.com/ogg/graphedit.html | See audio encoding example filter graphs]]%0a> * [[http://www.illiminable.com/ogg/enc_theora_graphedit.html | Theora encoding how-to]]%0a51,52c51,52%0a%3c * Looking for [[Main/History | old versions]] ?%0a%3c * Want the [[(Attach:)oggcodecs_src_0.70.0827.zip | zipped source code]] (10.5 MB zipped, 37MB unzipped) ?%0a---%0a> * Looking for [[http://www.illiminable.com/ogg/history.html | old versions]] ?%0a> * Want the [[http://www.illiminable.com/ogg/oggcodecs_src_0.70.0827.zip | zipped source code]] (10.5 MB zipped, 37MB unzipped) ?%0a54,55c54,55%0a%3c * [[Main/SseBuilds | Experimental SSE/SSE2 builds can be found here]]%0a%3c * Some basic [[Main/Docs | API documentation]] for developers%0a---%0a> * [[http://www.illiminable.com/ogg/sse_builds.html
  | Experimental SSE/SSE2 builds can be found here]]%0a> * Some basic [[http://www.illiminable.com/ogg/docs/index.html | API documentation]] for developers%0a
+host:1209307923=::1
+author:1209307688=silvia
+csum:1209307688=fixed links
+diff:1209307688:1209307351:=38c38%0a%3c * AVI Video files encoded with non-integral framerates (ie 29.97) may lose sync, due to rounding bug (Thanks [=RadicalEd=])%0a---%0a> * AVI Video files encoded with non-integral framerates (ie 29.97) may lose sync, due to rounding bug (Thanks RadicalEd)%0a40c40%0a%3c * If you are getting codec problems, there appears to be a conflict with something in Media Player Classic... it tries to enforce the use of another ogg demultiplexer, either by design or accident.If you see in MPC it complaining about a media subtype with a GUID {[=CDDCA2D5-6D75-4F98-840E737BEDD5C63B=]}. This is the guid of the old tobias vorbis filter, and this one {[=8D2FD10B-5841-4a6b-8905-588FEC1ADED9=]} is [=CoreVorbis=]. This is most likely due to the fact that these filters don't clean up the registry when they uninstall. I am working on something to "clean up" all these remnants from the registry (don't expect it too soon though... it's not that high priority). Yo
 u can also apparently an option to disable the inbuilt demuxer (Thanks Bond)%0a---%0a> * If you are getting codec problems, there appears to be a conflict with something in Media Player Classic... it tries to enforce the use of another ogg demultiplexer, either by design or accident.If you see in MPC it complaining about a media subtype with a GUID {CDDCA2D5-6D75-4F98-840E-737BEDD5C63B}. This is the guid of the old tobias vorbis filter, and this one {8D2FD10B-5841-4a6b-8905-588FEC1ADED9} is CoreVorbis. This is most likely due to the fact that these filters don't clean up the registry when they uninstall. I am working on something to "clean up" all these remnants from the registry (don't expect it too soon though... it's not that high priority). You can also apparently an option to disable the inbuilt demuxer (Thanks Bond)%0a46,55c46,56%0a%3c * Also you can encode vorbis, speex, FLAC and theora files using graphedit ([[http://www.microsoft.com/downloads/details.aspx?FamilyID=
 9216652f-51e0-402e-b7b5-feb68d00f298&displaylang=en | DirectX9 SDK]]) or other similar program.%0a%3c * [[http://www.illiminable.com/ogg/graphedit.html | See audio encoding example filter graphs]]%0a%3c * [[http://www.illiminable.com/ogg/enc_theora_graphedit.html | Theora encoding how-to]]%0a%3c * If you install [[http://sourceforge.net/projects/ffdshow | ffdshow ]], you will be able to play ogm files (sometimes at least!)%0a%3c * Also, if you download, install and register [[http://sourceforge.net/project/showfiles.php?group_id=82303&package_id=84799 | Gabests .cda directshow source]] you can rip CD's using graphedit%0a%3c * Looking for [[http://www.illiminable.com/ogg/history.html | old versions]] ?%0a%3c * Want the [[http://www.illiminable.com/ogg/oggcodecs_src_0.70.0827.zip | zipped source code]] (10.5 MB zipped, 37MB unzipped) ?%0a%3c * Want to [[http://svn.xiph.org/trunk/oggdsf/ | browse the source on the web]]%0a%3c * [[http://www.illiminable.com/ogg/sse_builds.html |
  Experimental SSE/SSE2 builds can be found here]]%0a%3c * Some basic [[http://www.illiminable.com/ogg/docs/index.html | API documentation]] for developers%0a---%0a> * Also you can encode vorbis, speex, FLAC and theora files using graphedit(%3ca href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9216652f-51e0-402e-b7b5-feb68d00f298&displaylang=en">DirectX9 SDK%3c/a>) or other similar program.%0a> * %3ca href="http://www.illiminable.com/ogg/graphedit.html">See audio encoding example filter g%0a> raphs%3c/a>%0a> * %3ca href="http://www.illiminable.com/ogg/enc_theora_graphedit.html">Theora encoding how-to%3c/a>%0a> * If you install %3ca href="http://sourceforge.net/projects/ffdshow">ffdshow%3c/a>, you will be able to play ogm files (sometimes at least!)%0a> * Also, if you download, install and register %3ca href="http://sourceforge.net/project/showfiles.php?group_id=82303&package_id=84799">Gabests .cda directshow source%3c/a> you can rip CD's using graphedit%0a> * Lo
 oking for %3ca href="http://www.illiminable.com/ogg/history.html">old versions%3c/a> ?%0a> * Want the %3ca href="http://www.illiminable.com/ogg/oggcodecs_src_0.70.0827.zip">zipped source code%3c/a> (10.5 MB zipped, 37MB unzipped) ?%0a> * Want to %3ca href="http://svn.xiph.org/trunk/oggdsf/">browse the source on the web%3c/a>%0a> * %3ca href="http://www.illiminable.com/ogg/sse_builds.html">Experimental SSE/SSE2 builds can be found here%3c/a>%0a> * Some basic %3ca href="http://www.illiminable.com/ogg/docs/index.html">API documentation%3c/a> for developers%0a
+host:1209307688=::1
+author:1209307351=silvia
+csum:1209307351=numbering instead of list
+diff:1209307351:1209307040:=3,9c3,7%0a%3c Follow the following steps:%0a%3c %0a%3c # Uninstall any previous version of these filters. ('''This is important!''') Go to add remove programs, remove oggcodecs%0a%3c # Make sure media player or any directshow applications are closed.%0a%3c # Run the installer.%0a%3c %0a%3c Then Windows Media Player or any other directshow application (eg. [=BSPlayer=]) will be able to play Ogg Vorbis, Ogg Speex, Ogg Theora, Ogg FLAC and native FLAC.%0a---%0a> * Uninstall any previous version of these filters.('''This is important!''') Go to add remove programs, remove oggcodecs%0a> * Make sure media player or any directshow applications are closed.%0a> * Run the installer.%0a> %0a> Then Windows Media Player or any other directshow application (eg. BSPlayer) will be able to play Ogg Vorbis, Ogg Speex, Ogg Theora, Ogg FLAC and native FLAC.%0a
+host:1209307351=::1
+author:1209307040=silvia
+csum:1209307040=added Zen's original text
+diff:1209307040:1142203034:=1,54c1,12%0a%3c !! Installation%0a%3c %0a%3c * Uninstall any previous version of these filters.('''This is important!''') Go to add remove programs, remove oggcodecs%0a%3c * Make sure media player or any directshow applications are closed.%0a%3c * Run the installer.%0a%3c %0a%3c Then Windows Media Player or any other directshow application (eg. BSPlayer) will be able to play Ogg Vorbis, Ogg Speex, Ogg Theora, Ogg FLAC and native FLAC.%0a%3c %0a%3c Starting with version 0.72.1838, development will now be split into a stable and unstable branch. That way, those who just want to play their files can get the stable version, and those who want to live dangerously can get the latest new features without having to wait for me to do proper testing. You can find the '''unstable builds''' on the [[Main/Downloads | download page]].%0a%3c %0a%3c Most users should download the stable version below.%0a%3c %0a%3c %0a%3c !! Current Stable Version (0.71.0946) - 24
 /02/2006%0a%3c %0a%3c More bugfixes, particularly to theora. See 0.70 release for more details about recent changes. Docs and source package will be updated on the weekend, there's no major changes there from 0.70. This version is fairly stable now it seems.%0a%3c %0a%3c Ogg Codecs for all versions of Windows:%0a%3c %0a%3c [[(Attach:)oggcodecs_0.71.0946.exe | Download Now (824,901 bytes)]]%0a%3c %0a%3c %0a%3c !!! Changes this version%0a%3c %0a%3c * Fixed the theora seeking bug, should accurately seek to any frame without artefacts.%0a%3c * Fixed bug not handling WMP doing hardware video acceleration, caused crash on some files (Thanks slashdot!)%0a%3c * Fixed handling of missing 3xx http response codes%0a%3c * Fixed bug where player would crash if you dragged it from one monitor to another while playing%0a%3c * Fixed COM reference double-release bug%0a%3c * Fixed race condition which could crash or hang sometimes after a seek.%0a%3c %0a%3c %0a%3c !!! Known issues%0a%3c %0a%3
 c * Can't play file with names that use extended character sets (ie Japanese) under certain locales of windows (Thanks Liisachan)%0a%3c * AVI Video files encoded with non-integral framerates (ie 29.97) may lose sync, due to rounding bug (Thanks RadicalEd)%0a%3c * Make the installer properly detect if it's already installed. If you don't uninstall the old version you will get multiple identical file masks in WMP%0a%3c * If you are getting codec problems, there appears to be a conflict with something in Media Player Classic... it tries to enforce the use of another ogg demultiplexer, either by design or accident.If you see in MPC it complaining about a media subtype with a GUID {CDDCA2D5-6D75-4F98-840E-737BEDD5C63B}. This is the guid of the old tobias vorbis filter, and this one {8D2FD10B-5841-4a6b-8905-588FEC1ADED9} is CoreVorbis. This is most likely due to the fact that these filters don't clean up the registry when they uninstall. I am working on something to "clean up" all
  these remnants from the registry (don't expect it too soon though... it's not that high priority). You can also apparently an option to disable the inbuilt demuxer (Thanks Bond)%0a%3c * Cannot handle any chained multiplexed files or streams.%0a%3c %0a%3c %0a%3c !! Other stuff%0a%3c %0a%3c * Also you can encode vorbis, speex, FLAC and theora files using graphedit(%3ca href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9216652f-51e0-402e-b7b5-feb68d00f298&displaylang=en">DirectX9 SDK%3c/a>) or other similar program.%0a%3c * %3ca href="http://www.illiminable.com/ogg/graphedit.html">See audio encoding example filter g%0a%3c raphs%3c/a>%0a%3c * %3ca href="http://www.illiminable.com/ogg/enc_theora_graphedit.html">Theora encoding how-to%3c/a>%0a%3c * If you install %3ca href="http://sourceforge.net/projects/ffdshow">ffdshow%3c/a>, you will be able to play ogm files (sometimes at least!)%0a%3c * Also, if you download, install and register %3ca href="http://sourceforge.n
 et/project/showfiles.php?group_id=82303&package_id=84799">Gabests .cda directshow source%3c/a> you can rip CD's using graphedit%0a%3c * Looking for %3ca href="http://www.illiminable.com/ogg/history.html">old versions%3c/a> ?%0a%3c * Want the %3ca href="http://www.illiminable.com/ogg/oggcodecs_src_0.70.0827.zip">zipped source code%3c/a> (10.5 MB zipped, 37MB unzipped) ?%0a%3c * Want to %3ca href="http://svn.xiph.org/trunk/oggdsf/">browse the source on the web%3c/a>%0a%3c * %3ca href="http://www.illiminable.com/ogg/sse_builds.html">Experimental SSE/SSE2 builds can be found here%3c/a>%0a%3c * Some basic %3ca href="http://www.illiminable.com/ogg/docs/index.html">API documentation%3c/a> for developers%0a---%0a> Welcome to PmWiki!%0a> %0a> A local copy of PmWiki's%0a> documentation has been installed along with the software,%0a> and is available via the [[PmWiki/documentation index]].  %0a> %0a> To continue setting up PmWiki, see [[PmWiki/initial setup tasks]].%0a> %0a> The [[PmWi
 ki/basic editing]] page describes how to create pages%0a> in PmWiki.  You can practice editing in the [[wiki sandbox]].%0a> %0a> More information about PmWiki is available from http://www.pmwiki.org .%0a
+host:1209307040=::1

Added: trunk/oggdsf/website/wiki.d/Main.RecentChanges
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.RecentChanges	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.RecentChanges	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,8 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+ctime=1209307040
+host=::1
+name=Main.RecentChanges
+rev=31
+text=* [[Main/History]]  . . . April 28, 2008, at 10:00 AM by [[~silvia]]: [==]%0a* [[Main/HomePage]]  . . . April 28, 2008, at 09:56 AM by [[~silvia]]: [=added API documentation link=]%0a* [[Main/SseBuilds]]  . . . April 28, 2008, at 09:53 AM by [[~silvia]]: [==]%0a* [[Main/EncTheoraGraphedit]]  . . . April 28, 2008, at 09:40 AM by [[~silvia]]: [==]%0a* [[Main/Graphedit]]  . . . April 28, 2008, at 02:24 AM by [[~silvia]]: [=added Zen's original text=]%0a* [[Main/About]]  . . . April 28, 2008, at 01:53 AM by [[~silvia]]: [==]%0a* [[Main/DeveloperInfo]]  . . . April 28, 2008, at 01:27 AM by [[~silvia]]: [=original Zen's page=]%0a* [[Main/Downloads]]  . . . April 28, 2008, at 01:19 AM by [[~silvia]]: [==]%0a
+time=1209340846

Added: trunk/oggdsf/website/wiki.d/Main.SseBuilds
===================================================================
--- trunk/oggdsf/website/wiki.d/Main.SseBuilds	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Main.SseBuilds	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,25 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=
+ctime=1209340206
+host=::1
+name=Main.SseBuilds
+rev=4
+targets=Main.HomePage
+text=!! [=SSE/SSE2=] Experimental Builds of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC%0a%0aThese are experimental builds only... if you have any doubt about whether your processor supports these, download the official release from the [[Main/HomePage | main page]].%0a%0aThese builds are specific to [=SSE=] and [=SSE2=] compatible processors. If you run these on the wrong processor they will crash the program and maybe even your system. If in doubt don't use them !%0a%0a[=SSE2=] instructions are for Pentium 4's. [=SSE=] instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the [=SSE2=] builds at all. If you use these and they work, I'd appreciate if you let me know. I have found about a 15%25 improvement in encode speed using the [=SSE=] builds on my machine. If you do some testing on your machine let me know. Uninstall the normal/previous version before installing these
 .%0a%0a%0a%0a!! Current Version  0.68.8333 - 06/12/2004%0a%0aMainly bugfixes.%0a%0a!!![[(Attach:)oggcodecs_SSE_0.68.8333.zip | Download Now (992,504 bytes) - SSE enabled processors only]]%0a%0a%0a!!![[(Attach:)oggcodecs_SSE2_0.68.8333.zip | Download Now (985,275 bytes) - SSE2 enabled processors only]]%0a%0a%0a!!! Changes this version%0a%0a* Fixed playback from windows network drives.%0a* Fixed bug where audio would stop if you seek really close to the end.%0a* Seeking performance back to almost instant%0a
+time=1209340433
+author:1209340433=silvia
+diff:1209340433:1209340416:minor=7c7%0a%3c [=SSE2=] instructions are for Pentium 4's. [=SSE=] instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the [=SSE2=] builds at all. If you use these and they work, I'd appreciate if you let me know. I have found about a 15%25 improvement in encode speed using the [=SSE=] builds on my machine. If you do some testing on your machine let me know. Uninstall the normal/previous version before installing these.%0a---%0a> [=SSE2=] instructions are for Pentium 4's. [=SSE=] instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the SSE2 builds at all. If you use these and they work, I'd appreciate if you let me know. I have found about a 15%25 improvement in encode speed using the [=SSE=] builds on my machine. If you do some testing on your machine let me know. U
 ninstall the normal/previous version before installing these.%0a
+host:1209340433=::1
+author:1209340416=silvia
+diff:1209340416:1209340385:minor=7c7%0a%3c [=SSE2=] instructions are for Pentium 4's. [=SSE=] instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the SSE2 builds at all. If you use these and they work, I'd appreciate if you let me know. I have found about a 15%25 improvement in encode speed using the [=SSE=] builds on my machine. If you do some testing on your machine let me know. Uninstall the normal/previous version before installing these.%0a---%0a> SSE2 instructions are for Pentium 4's. [=SSE=] instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the SSE2 builds at all. If you use these and they work, I'd appreciate if you let me know. I have found about a 15%25 improvement in encode speed using the SSE builds on my machine. If you do some testing on your machine let me know. Uninstall the
  normal/previous version before installing these.%0a
+host:1209340416=::1
+author:1209340385=silvia
+diff:1209340385:1209340206:minor=1,2c1,2%0a%3c !! [=SSE/SSE2=] Experimental Builds of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC%0a%3c %0a---%0a> !! SSE/SSE2 Experimental Builds of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC%0a> %0a5,10c5,10%0a%3c These builds are specific to [=SSE=] and [=SSE2=] compatible processors. If you run these on the wrong processor they will crash the program and maybe even your system. If in doubt don't use them !%0a%3c %0a%3c SSE2 instructions are for Pentium 4's. [=SSE=] instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the SSE2 builds at all. If you use these and they work, I'd appreciate if you let me know. I have found about a 15%25 improvement in encode speed using the SSE builds on my machine. If you do some testing on your machine let me know. Uninstall the normal/previous version before installing these.%0a%3c %0a%3c
  %0a%3c %0a---%0a> These builds are specific to SSE and SSE2 compatible processors. If you run these on the wrong processor they will crash the program and maybe even your system. If in doubt don't use them !%0a> %0a> SSE2 instructions are for Pentium 4's. SSE instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the SSE2 builds at all. If you use these and they work, I'd appreciate if you let me know. I have found about a 15%25 improvement in encode speed using the SSE builds on my machine. If you do some testing on your machine let me know. Uninstall the normal/previous version before installing these.%0a> %0a> %0a> %0a15,18c15,18%0a%3c !!![[(Attach:)oggcodecs_SSE_0.68.8333.zip | Download Now (992,504 bytes) - SSE enabled processors only]]%0a%3c %0a%3c %0a%3c !!![[(Attach:)oggcodecs_SSE2_0.68.8333.zip | Download Now (985,275 bytes) - SSE2 enabled processors only]]%0a---%0a> !!![[(Att
 ach:)/oggcodecs_SSE_0.68.8333.zip | Download Now (992,504 bytes) - SSE enabled processors only]]%0a> %0a> %0a> !!![[(Attach:)/oggcodecs_SSE2_0.68.8333.zip | Download Now (985,275 bytes) - SSE2 enabled processors only]]%0a
+host:1209340385=::1
+author:1209340206=silvia
+csum:1209340206=added Zen's original text
+diff:1209340206:1209340206:=1,25d0%0a%3c !! SSE/SSE2 Experimental Builds of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC%0a%3c %0a%3c These are experimental builds only... if you have any doubt about whether your processor supports these, download the official release from the [[Main/HomePage | main page]].%0a%3c %0a%3c These builds are specific to SSE and SSE2 compatible processors. If you run these on the wrong processor they will crash the program and maybe even your system. If in doubt don't use them !%0a%3c %0a%3c SSE2 instructions are for Pentium 4's. SSE instructions are for some Pentium 3's and Athlon XP's. None of the old athlons support them. Also note, I only have Athlons, so I haven't tested the SSE2 builds at all. If you use these and they work, I'd appreciate if you let me know. I have found about a 15%25 improvement in encode speed using the SSE builds on my machine. If you do some testing on your machine let me know. Uninstall the normal/previous
  version before installing these.%0a%3c %0a%3c %0a%3c %0a%3c !! Current Version  0.68.8333 - 06/12/2004%0a%3c %0a%3c Mainly bugfixes.%0a%3c %0a%3c !!![[(Attach:)/oggcodecs_SSE_0.68.8333.zip | Download Now (992,504 bytes) - SSE enabled processors only]]%0a%3c %0a%3c %0a%3c !!![[(Attach:)/oggcodecs_SSE2_0.68.8333.zip | Download Now (985,275 bytes) - SSE2 enabled processors only]]%0a%3c %0a%3c %0a%3c !!! Changes this version%0a%3c %0a%3c * Fixed playback from windows network drives.%0a%3c * Fixed bug where audio would stop if you seek really close to the end.%0a%3c * Seeking performance back to almost instant%0a
+host:1209340206=::1

Added: trunk/oggdsf/website/wiki.d/Site.AllRecentChanges
===================================================================
--- trunk/oggdsf/website/wiki.d/Site.AllRecentChanges	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Site.AllRecentChanges	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,8 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+ctime=1209305000
+host=::1
+name=Site.AllRecentChanges
+rev=36
+text=* [[Main.History]]  . . . April 28, 2008, at 10:00 AM by [[~silvia]]: [==]%0a* [[Main.HomePage]]  . . . April 28, 2008, at 09:56 AM by [[~silvia]]: [=added API documentation link=]%0a* [[Main.SseBuilds]]  . . . April 28, 2008, at 09:53 AM by [[~silvia]]: [==]%0a* [[Main.EncTheoraGraphedit]]  . . . April 28, 2008, at 09:40 AM by [[~silvia]]: [==]%0a* [[Main.Graphedit]]  . . . April 28, 2008, at 02:24 AM by [[~silvia]]: [=added Zen's original text=]%0a* [[Main.About]]  . . . April 28, 2008, at 01:53 AM by [[~silvia]]: [==]%0a* [[Main.DeveloperInfo]]  . . . April 28, 2008, at 01:27 AM by [[~silvia]]: [=original Zen's page=]%0a* [[Main.Downloads]]  . . . April 28, 2008, at 01:19 AM by [[~silvia]]: [==]%0a* [[Site.SideBar]]  . . . April 28, 2008, at 12:13 AM by [[~silvia]]: [==]%0a
+time=1209340846

Added: trunk/oggdsf/website/wiki.d/Site.RecentChanges
===================================================================
--- trunk/oggdsf/website/wiki.d/Site.RecentChanges	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Site.RecentChanges	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,8 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+ctime=1209305000
+host=::1
+name=Site.RecentChanges
+rev=5
+text=* [[Site/SideBar]]  . . . April 28, 2008, at 12:13 AM by [[~silvia]]: [==]%0a
+time=1209305607

Added: trunk/oggdsf/website/wiki.d/Site.SideBar
===================================================================
--- trunk/oggdsf/website/wiki.d/Site.SideBar	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/Site.SideBar	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,29 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+author=silvia
+charset=ISO-8859-1
+csum=
+host=::1
+name=Site.SideBar
+passwdedit=@_site_edit
+rev=5
+targets=Main.HomePage,Main.Downloads,Main.DeveloperInfo,Main.History,Main.About,Site.SideBar
+text=* [[Main/HomePage | Home]]%0a* [[Main/Downloads]]%0a* [[Main/DeveloperInfo | Developer Info]]%0a* [[Main/History]]%0a* [[/docs | Documentation]]%0a* [[Main/About]]%0a%0a%25sidehead%25 [[http://www.xiph.org/ | Xiph.org ]]%0a* [[http://www.vorbis.com/ | Vorbis ]]%0a* [[http://www.speex.org/ | Speex ]]%0a* [[http://www.theora.org/ | Theora ]]%0a* [[http://flac.sourceforge.net/ | FLAC]]%0a* [[http://www.annodex.net/ | Annodex ]]%0a%0a%25right%25 [-[[Site.SideBar?action=edit | edit SideBar]]-]%0a
+time=1209305607
+author:1209305607=silvia
+diff:1209305607:1209305510:minor=1c1%0a%3c * [[Main/HomePage | Home]]%0a---%0a> * [[Main/HomePage]]%0a
+host:1209305607=::1
+author:1209305510=silvia
+diff:1209305510:1209305491:minor=8c8%0a%3c %25sidehead%25 [[http://www.xiph.org/ | Xiph.org ]]%0a---%0a> %25sidehead%25 [[http://www.xiph.org | Xiph.org ]]%0a
+host:1209305510=::1
+author:1209305491=silvia
+csum:1209305491=added xiph section
+diff:1209305491:1209305086:=8,13c8,12%0a%3c %25sidehead%25 [[http://www.xiph.org | Xiph.org ]]%0a%3c * [[http://www.vorbis.com/ | Vorbis ]]%0a%3c * [[http://www.speex.org/ | Speex ]]%0a%3c * [[http://www.theora.org/ | Theora ]]%0a%3c * [[http://flac.sourceforge.net/ | FLAC]]%0a%3c * [[http://www.annodex.net/ | Annodex ]]%0a---%0a> %25sidehead%25 [[http://www.pmwiki.org | pmwiki.org ]]%0a> * [[Cookbook:CookbookBasics | Cookbook (addons) ]]%0a> * [[Cookbook:Skins | Skins (themes) ]]%0a> * [[PITS:PITS | PITS (issue tracking) ]]%0a> * [[PmWiki/Mailing Lists]]%0a
+host:1209305491=::1
+author:1209305086=silvia
+diff:1209305086:1209305000:minor=5c5%0a%3c * [[/docs | Documentation]]%0a---%0a> * [[/docs | Documentation]%0a14a15,16%0a> %0a> * [[PmWiki/Basic Editing]]%0a
+host:1209305086=::1
+author:1209305000=silvia
+csum:1209305000=editing sidebar and fixing stylesheet
+diff:1209305000:1125550800:=2,7c2,12%0a%3c * [[Main/Downloads]]%0a%3c * [[Main/DeveloperInfo | Developer Info]]%0a%3c * [[Main/History]]%0a%3c * [[/docs | Documentation]%0a%3c * [[Main/About]]%0a%3c %0a---%0a> * [[Main/WikiSandbox]]%0a> %0a> %25sidehead%25 [[PmWiki/PmWiki]]%0a> * [[PmWiki/Initial Setup Tasks]]  %0a> * [[PmWiki/Basic Editing]]%0a> * [[PmWiki/Documentation Index]]%0a> * [[PmWiki/FAQ | PmWiki FAQ ]]%0a> * [[PmWiki/PmWikiPhilosophy]]%0a> * [[PmWiki/Release Notes]]%0a> * [[PmWiki/ChangeLog]]%0a> %0a14,16c19%0a%3c %25right%25 [-[[Site.SideBar?action=edit | edit SideBar]]-]%0a%3c %0a%3c * [[PmWiki/Basic Editing]]%0a---%0a> %25right%25 [-[[Site.SideBar?action=edit | edit SideBar]]-]%0a\ No newline at end of file%0a
+host:1209305000=::1

Added: trunk/oggdsf/website/wiki.d/SiteAdmin.Status
===================================================================
--- trunk/oggdsf/website/wiki.d/SiteAdmin.Status	                        (rev 0)
+++ trunk/oggdsf/website/wiki.d/SiteAdmin.Status	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,8 @@
+version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
+host=::1
+name=SiteAdmin.Status
+rev=1
+text=(:comment Any local edits to this page may be lost!:)%0a%0aThis site is running {$Version} (VersionNum={$VersionNum}).%0a
+time=1209302024
+updatedto=2001965

Added: trunk/oggdsf/website/wikilib.d/Main.HomePage
===================================================================
--- trunk/oggdsf/website/wikilib.d/Main.HomePage	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Main.HomePage	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.0 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.7.12) Gecko/20050915
+author=HaganFox
+csum=Bold "first time installers:" wasn't necessary.
+host=216.161.175.221
+name=Main.HomePage
+rev=200
+targets=PmWiki.DocumentationIndex,PmWiki.InitialSetupTasks,PmWiki.BasicEditing,Main.WikiSandbox
+text=Welcome to PmWiki!%0a%0aA local copy of PmWiki's%0adocumentation has been installed along with the software,%0aand is available via the [[PmWiki/documentation index]].  %0a%0aTo continue setting up PmWiki, see [[PmWiki/initial setup tasks]].%0a%0aThe [[PmWiki/basic editing]] page describes how to create pages%0ain PmWiki.  You can practice editing in the [[wiki sandbox]].%0a%0aMore information about PmWiki is available from http://www.pmwiki.org .%0a
+time=1142203034

Added: trunk/oggdsf/website/wikilib.d/Main.WikiSandbox
===================================================================
--- trunk/oggdsf/website/wikilib.d/Main.WikiSandbox	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Main.WikiSandbox	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,9 @@
+version=pmwiki-2.0.devel1
+newline=²
+version=pmwiki-2.0.devel1
+text=Feel free to use this page to experiment with the [[PmWiki/Text Formatting Rules]].  Just click the "Edit Page" link at the bottom of the page.²----²
+time=1093548433
+name=Main.WikiSandbox
+host=24.1.26.221
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7) Gecko/20040707 Firefox/0.8
+rev=3

Added: trunk/oggdsf/website/wikilib.d/PmWiki.AccessKeys
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.AccessKeys	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.AccessKeys	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta51 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=doc cleanup
+ctime=1137027716
+host=76.183.97.54
+name=PmWiki.AccessKeys
+rev=79
+targets=PmWiki.Internationalizations,Site.Preferences,Site.PageActions,PmWiki.DocumentationIndex,PmWiki.AccessKeys
+text=(:Summary:Access keys are keyboard shortcuts for tasks that would otherwise require a mouse:)%0a%25audience%25 visitors (intermediate)%0aAccess keys are keyboard shortcuts for tasks that would otherwise require a mouse.   They are part of markup that may exist on any webpage, but on PmWiki steps have been taken to make it easier to use access keys throughout a site, and to make it possible to adjust key assignments to accommodate different languages and preferences.%0a%0a!!Using access keys in different operating systems and browsers%0aIn most cases, access keys require users to hold down one key -- Alt, on Windows, and Ctrl, on Macintosh -- and then press a second key (the "access key").  Exceptions exist for specific browsers, and specific versions.  For example, Internet Explorer requires that the Enter key be pressed at the end of the sequence for versions 5 and up under Windows, but not under Macintosh (where access keys were not supported until after version 4.5).
   Firefox versions 1.5 and earlier simply use Alt, while Firefox version 2.0 uses Shift+Alt.  For Opera, which makes extensive use of keyboard shortcuts for its own operation, access keys are invoked by pressing Shift and Escape before the selected access key character (without the Alt key).  Note, in cases of conflicts between the keyboard shortcuts assigned by browsers and access keys assigned by links and other markup on webpages, many browsers, including Mozilla, Netscape and Internet Explorer, allow access keys to override the browser defaults and require a different sequence to continue using overridden browser assignments (typically, by pressing and releasing the Alt key, instead of holding it down).   %0a%0aTo simplify the description below, these basic keyboard combinations, and exceptions, are referred to generally as "Akey+" on this page.  If you are using a Mac, just think Ctrl+, and if you are using a PC, think Alt+ or Alt+Shift+, unless you are using a browser 
 that requires something else.%0a%0a!!List of access key assignments in default PmWiki installation%0aThe following is a list of the access keys that are used by PmWiki in default English language installations.  Each of the letters identified below must be used together with the AKey+ combination for your operating system and browser.%0a||width=%0a||! Key ||!Function ||%0a||  e   ||edit||%0a||  h   ||history||%0a||  c   ||recent changes||%0a||  s   ||save page||%0a||  u   ||save and keep editing||%0a||  p   ||preview page||%0a||  i   ||emphasized text (''italic'')||%0a||  b   ||strong text ('''bold''')||%0a||  ,   ||jump to edit textarea (when in edit modes)||  %0a%0a!!Customizing access keys%0a%0aThe default access key values can be changed by site administrators using the string mapping methods to customize a site for other languages by modifying the config.php file.  See [[Internationalizations]].  Individuals who want to customize the keys used by their browser can use a
  similar string mapping approach by posting a special query parameter that sets a cookie on their browser.  See [[Site.Preferences]].%0a%0aNote that at least some skins (e.g., Lean) also specify access keys within their own template files (*.tmpl), using the accesskey attribute with the Edit, History, etc. links on the page.  In order to change the access keys when using these skins, it seems one must edit the template file itself.%0a%0a%25audience%25 admins (intermediate)%0a!!Access key string mapping variables%0aPmWiki uses the same "phrase translation" tables for access key mappings as it does for [[internationalization(s)]].  This makes it possible for administrators, skins, language translators, and visitors to all influence the way that specific keys are mapped to actions.  By convention, the translation phrases for all of the access key actions start with the characters "ak_", so that the page variable "[@$[ak_edit]@]" is replaced by the access key for editing as defi
 ned by the current preferences, language, skin default, or site default.  %0a%0aHere is a listing of the access key translation phrases defined by PmWiki 2.1 (and their current translation values).  Note that some actions do not have a corresponding access key by default.%0a%0a||width=%0a||!Phrase     ||!Key ||%0a||ak_view     ||$[ak_view]||%0a||ak_edit     ||$[ak_edit]||%0a||ak_history  ||$[ak_history]||%0a||ak_print    ||$[ak_print]||%0a||ak_recentchanges||$[ak_recentchanges]||%0a||ak_save     ||$[ak_save]||%0a||ak_saveedit ||$[ak_saveedit]||%0a||ak_preview  ||$[ak_preview]||%0a||ak_savedraft||$[ak_savedraft]||%0a||ak_em       ||$[ak_em]||%0a||ak_strong   ||$[ak_strong]||%0a%0a!!Implementation of access keys%0aAccess keys are implemented in html as optional parameters that can be added to links and many other types of markup.%0a%0a'''Example:'''  [@%3ca href="http://example.com" accesskey="x">Example%3c/a>@] would create a link to example.com that could be triggered by cli
 cking on the linked word "example" or using the access key Akey+x.  That same action key link could be created in PmWiki markup by typing [@%25item accesskey="x"%25[[http://example.com|Example]]@], like this: %25item accesskey="x"%25[[http://example.com|Example]].  Try it and see if it works.   Note that this AKey+x access key only works this way on this page, because it is simply a shortcut for accessing the link that exists only on this page.%0a%0aThe list of access key assignments in default PmWiki installations generally work throughout a site because links have been created in PmWiki skins and editing screens that incorporate access key parameters using the access key translation phrases.  One location where those links can be viewed is [[Site.PageActions]].  That page contains the links that the default PmWiki skin, and many other skins, use to generate links such as "View" "Edit" and "History" that appear on most pages (other than editing screens).  Each of the links 
 in that page also has an [@%25accesskey=$[ak_xxx]%25@] declaration in front of it, which enables a specific access key for that link.%0a%0a%25trail%25 %3c%3c|[[Documentation index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How can I change the keyboard shortcuts for editing and saving a page?%0a%0aA: See [[PmWiki.AccessKeys]].%0a
+time=1180139650

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Audiences
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Audiences	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Audiences	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta51 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=
+host=76.183.97.54
+name=PmWiki.Audiences
+rev=23
+targets=PmWiki.WikiAdministrator,PmWiki.PmWikiPhilosophy,PmWiki.LocalCustomizations,PmWiki.DocumentationIndex
+text=(:Summary:Patrick Michaud's comments regarding the "audiences" for which PmWiki was designed:)%0aThis page contains Patrick Michaud's comments regarding the "audiences" for which PmWiki was designed. As such, many people are reluctant to modify the page, because it is a statement of his opinions and describes some of the thought that went into creating PmWiki. (And we all thank him for that!) %0a%0a%0a!!Patrick's comments%0aI think of PmWiki in terms of two audiences: ''Authors'' are the people who generate web content using PmWiki, and [[wiki administrator]]s are the folks who install, configure, and maintain a PmWiki installation on a web server. In some senses it could be claimed that as the primary developer of PmWiki I should only have wiki administrators as my target audience, and that authors are the target audience for the administrators.  But what really makes PmWiki useful to wiki administrators is that I've put a lot of consideration into creating a tool that
  is usable by authors, so I have to keep the needs of both audiences in mind as I'm designing and adding new features to PmWiki. %0a%0aWithin the authoring audience I see that there are "naive authors" and "experienced authors". "Naive authors" are the folks who use wiki to generate content but may know next-to-nothing about HTML, much less style sheets or PHP or the like. Naive authors are easily discouraged from generating web content if they have to wade through markup text that has lots of funny and cryptic symbols in them. So, if we want a site with lots of contributors, we have to be very careful not to do things that will cause this group to exclude themselves from participating.%0a%0a"Experienced authors" are the folks who know a lot about HTML and could write their content as HTML, but have chosen to use wiki because of its other useful features (ease of linking, collaboration, ease of updates, revision histories, etc.) or because they want to collaborate with naive
  authors. Experienced authors usually don't have any problem with documents with lots of ugly markup in them; after all, they already know HTML.  Experienced authors are sometimes frustrated with wiki because it doesn't have markup that would let them do something they know they can do in HTML (e.g., tables, stylesheets, colored text, etc.). And, they sometimes have difficulty understanding why naive authors would turn away from documents that have lots of markup sequences in them.  %0a%0aFor the wiki administrator audience--the folks who install and may want to customize PmWiki--their backgrounds and goals are often quite diverse. PmWiki is designed so that it can be installed and be useful with minimal HTML/PHP knowledge, but it doesn't restrict people who know HTML/PHP from doing some fairly complex things. For one, PmWiki allows a site administrator to build-in markup sequences and features customized to his/her needs (and the needs of his/her audiences). %0a%0aThe separ
 ate needs of these audiences are behind most of the [[PmWikiPhilosoph(y)]]ies.  The people who develop PmWiki software must continually keep naive authors in mind as new features are requested and proposed by expert authors and Wiki Administrators.  Sometimes it may seem to these latter groups that it's okay to implement the complex features because "naive authors don't have to use them", but the truth is that if complex/ugly markup sequences are available then they will eventually be used by someone, and once used they become a barrier to the naive authors. So, if I see that a feature could become a barrier to a naive author I don't include it in the base implementation of PmWiki, but instead find ways to let Wiki Administrators include it as a [[local customization(s)]]. %0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>
+time=1180139702

Added: trunk/oggdsf/website/wikilib.d/PmWiki.AuthUser
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.AuthUser	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.AuthUser	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta57 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20061023 SUSE/2.0.0.4-1.1 Firefox/2.0.0.4
+author=Pm
+charset=ISO-8859-1
+csum=update for 2.2.0b58
+host=76.183.97.54
+name=PmWiki.AuthUser
+rev=82
+targets=PmWiki.Passwords,PmWiki.AdminTask,SiteAdmin.AuthUser,PmWiki.PasswordsAdmin,PmWiki.DocumentationIndex,PmWiki.AuthUser,Profiles.Lordmundi
+text=(:Summary:Authorization system that uses usernames and passwords:)%0a%25audience%25 administrators (intermediate)%0a%0aAuthUser is PmWiki's identity-based authorization system that allows access to pages to be controlled through the use of usernames and passwords.  AuthUser can be used in addition to the [[Passwords | password-based]] scheme that is PmWiki's default configuration.%0a%0aAuthUser is a very flexible system for managing access control on pages, but flexibility can also bring complexity and increased maintenance overhead to the wiki administrator.  This is why PmWiki defaults to the simpler password-based system.  For some thoughts about the relative merits of the two approaches, see [[PmWiki:ThoughtsOnAccessControl]].%0a%0aSee also:  [[Cookbook:Quick Start for AuthUser]]%0a%0a!! Activating AuthUser%0a%0a%0aTo activate PmWiki's identity-based system, add the following line%0ato ''local/config.php'':%0a%0a    include_once("$FarmD/scripts/authuser.php");%0a%0a
 Ensure that you have [[PmWiki/AdminTask#setSWPWE | set a site wide admin password]], otherwise you will not be able to edit [[SiteAdmin.AuthUser]].%0a%0a->%25note%25 Note: Older versions of PmWiki (before 2.2.0-beta58) use ''Site.AuthUser''.%0a%0a!! Creating user accounts%0a%0aMost of AuthUser's configuration is performed via the [[SiteAdmin.AuthUser]] page.  To change the AuthUser configuration, simply edit this page like any other wiki page (you'll typically need to use the site's admin password for this).%0a%0aTo create a login account, simply add lines to SiteAdmin.AuthUser that look like:%0a%0a    username: [=(:=]encrypt ''password'':)%0a%0aFor example, to create a login account for "alice" with a password of "wonderland", enter:%0a%0a    alice: [=(:=]encrypt wonderland:)%0a%0aWhen the page is saved, the "@@[=(:=]encrypt wonderland:)@@" part of the text will be replaced by an encrypted form of the password "wonderland".  This encryption is done so that someone looking a
 t the SiteAdmin.AuthUser page cannot easily determine the passwords stored in the page.  %0a%0aTo change or reset an account's password, simply replace the encrypted string with another @@[=(:=]encrypt:)@@ directive.%0a%0a%0a!! Controlling access to pages by login%0a%0aPages and groups can be protected based on login account by using "passwords" of the form [@id:username@] in the password fields of [@?action=attr@] (see [[PmWiki.Passwords]]).  For example, to restrict a page to being edited by Alice, one would set the password to "[@id:alice@]".%0a%0aIt's possible to use multiple "id:" declarations and passwords in the [@?action=attr@] form, thus the following setting would allow access to Alice, Carol, and anyone who knows the password "quick":%0a%0a    quick id:alice,carol%0a%0aTo allow access to anyone who has successfully logged in, use "[@id:*@]".%0a%0aOne can also perform site-wide restrictions based on identity in the $DefaultPasswords array: e.g.%0a%0a    # require v
 alid login before viewing pages%0a    $DefaultPasswords['read'] = 'id:*';%0a    # Alice and carol may edit%0a    $DefaultPasswords['edit'] = 'id:alice,carol';%0a    # All admins and Fred may edit%0a    $DefaultPasswords['edit'] = array('@admins', 'id:Fred');%0a%0aYou can change the $DefaultPasswords array in local customization files such as:%0a* local/config.php (for entire wiki)%0a* farmconfig.php (for entire wikifarm)%0a%0a%0a!! [[#auth_groups]] Organizing accounts into groups%0a%0aAuthUser also makes it possible to group login accounts together into authorization groups, indicated by a leading "@" sign.  As with login accounts, group memberships are maintained by editing the SiteAdmin.AuthUser page.  Group memberships can be specified by either listing the groups for a login account (person belongs to groups) or the login accounts for a group (group includes people).  You can repeat or mix-and-match the two kinds as desired:%0a%0a    @writers: alice, bob%0a    carol: @wr
 iters, @editors%0a    @admins: alice, dave%0a    %0aThen, to restrict page access to a particular group, simply use "[@@group@]" as the "password" in [@?action=attr@] or the $DefaultPasswords array, similar to the way that "[@id:username@]" is used to restrict access to specific login accounts.%0a%0a!!! Excluding individuals from password groups%0a%0aGroup password memberships are maintained by editing the SiteAdmin.AuthUser page. To specify a password group that allows access to anyone who is authenticated, you can specify:%0a%0a    @wholeoffice: *%0a%0aIf you need to keep "Fred" out of this password group, you might try:%0a%0a    @wholeoffice: *, -Fred%0a%0a... but this does %25red%25'''not'''%25%25 work. You can, however, get the desired result by using the first setting (@wholeoffice: *) on the SiteAdmin.AuthUser page and then setting the password for the page or group you wish to protect in [@?action=attr@] or the $DefaultPasswords array to "[@id:*, -Fred@]".%0a%0a%0a!!
  Getting account names and passwords from external sources%0a%0aThe AuthUser script has the capability of obtaining username/password pairs from places other than the SiteAdmin.AuthUser page, such as passwd-formatted files (usually called '.htpasswd' on Apache servers), [[#LDAP|LDAP]] servers, or even the ''local/config.php'' file.%0a%0a%0a!!! Passwd-formatted files (.htpasswd/.htgroup)%0a%0aPasswd-formatted files, commonly called ''.htpasswd'' files in Apache, are text files where each line contains a username and an encrypted password separated by a colon.  A typical ''.htpasswd'' file might look like:%0a%0a    alice:vK99sgDV1an6I%0a    carol:Q1kSeNcTfwqjs%0a%0aTo get AuthUser to obtain usernames and passwords from a ''.htaccess'' file, add the following line to SiteAdmin.AuthUser, replacing "/path/to/.htpasswd" with the filesystem path of the ''.htpasswd'' file:%0a%0a    htpasswd: /path/to/.htpasswd%0a%0aCreation and maintenance of the ''.htpasswd'' file can be performed 
 using a text editor, or any number of other third-party tools available for maintaining ''.htpasswd'' files.  The Apache web server typically includes an ''htpasswd'' command for creating accounts in .htpasswd:%0a%0a    $ htpasswd /path/to/.htpasswd alice%0a    New password:%0a    Re-type new password:%0a    Adding password for user alice%0a    $%0a%0aSimilarly, one can use ''.htgroup'' formatted files to specify group memberships.  Each line has the name of a group (without the "@"), followed by a colon, followed by a space separated list of usernames in the group.%0a%0a    writers: carol%0a    editors: alice carol bob%0a    admins: alice dave%0a%0aNote that the groups are still "@writers", "@editors", and "@admins" in PmWiki even though the file doesn't specify the @ signs.  To get AuthUser to load these groups, use a line in SiteAdmin.AuthUser like:%0a%0a    htgroup: /path/to/.htgroup%0a%0a    %0a!!! Configuration via ''local/config.php''%0a%0aAuthUser configuration setti
 ngs can also be made from the ''local/config.php'' file in addition to the SiteAdmin.AuthUser page.  Such settings are placed in the $AuthUser array, and ''must be set prior to including the ''authuser.php'' script''. Some examples:%0a%0a    # set a password for alice%0a    $AuthUser['alice'] = crypt('wonderland');%0a    # set a password for carol%0a    $AuthUser['carol'] = '$1$CknC8zAs$dC8z2vu3UvnIXMfOcGDON0';%0a    # define the @editors group%0a    $AuthUser['@editors'] = array('alice', 'carol', 'bob');%0a    # Use local/.htpasswd for usernames/passwords%0a    $AuthUser['htpasswd'] = 'local/.htpasswd';%0a    # Use local/.htgroup for group memberships%0a    $AuthUser['htgroup'] = 'local/.htgroup';%0a%0a[[#LDAP]]%0a!!! Configuration via LDAP%0a%0aAuthentication can be performed via an external LDAP server -- simply set an entry for "ldap" in either SiteAdmin.AuthUser or the ''local/config.php'' file.%0a%0a    # use ldap.airius.com for authentication%0a    $AuthUser['ldap'] =
  'ldap://ldap.airius.com/ou=People,o=Airius?cn?sub';%0a%0aLDAP authentication in AuthUser closely follows the model used by Apache 2.0's [[http://httpd.apache.org/docs/2.0/mod/mod_auth_ldap.html|mod_auth_ldap]] module; see especially the documentation for  [[http://httpd.apache.org/docs/2.0/mod/mod_auth_ldap.html#authldapurl|AuthLDAPUrl]] for a description of the url format.%0a%0aFor servers that don't allow anonymous binds, AuthUser provides $AuthLDAPBindDN and $AuthLDAPBindPassword variables to specify the binding to be used for searching.%0a%0a!! Setting the Author Name%0aBy default, PmWiki will use a login name in the Author field of the edit form, but allows the author to change this value prior to saving.  To force the login name to always be used as the author name, use the following sequence to activate AuthUser:%0a%0a    include_once("$FarmD/scripts/authuser.php");%0a    $Author = $AuthId;%0a%0aTo allow more flexibility, but still enable changes to be linked to the 
 authorized user, one can give the author name a prefix of the $AuthId instead:%0a[@%0a    include_once("$FarmD/scripts/author.php");%0a    include_once("$FarmD/scripts/authuser.php");%0a    if ($Author) {%0a	if (strstr($Author, '-') != false) {%0a	    $Author = "$AuthId-" . preg_replace('/^[^-]*-/', '', $Author);%0a	} else if ($Author != $AuthId) {%0a	    $Author = $AuthId . '-' . $Author;%0a	} else {%0a	    $Author = $AuthId;%0a	}%0a    } else {%0a	$Author = $AuthId;%0a    }%0a    $AuthorLink = "[[~$Author]]";%0a@]%0aThe above will allow the user to put in the author name of their choice, but that will always be replaced by that name prefixed with "$AuthId-".%0aThe reason why $AuthorLink needs to be set is that, if it isn't, the RecentChanges page will have the wrong link in it.%0a%0a!! Authorization, Sessions, and WikiFarms [[#sessions]]%0a%0aPmWiki uses PHP sessions to keep track of any user authorization information.  By default PHP is configured so that all interactions
  with the same server (as identified by the server's domain name) are treated as part of the same session.%0a%0aWhat this means for PmWiki is that if there are multiple wikis running within the same domain name, PHP will treat a login to one wiki as being valid for all wikis in the same domain.  The easiest fix is to tell each wiki to have use a different "session cookie".  Near the top of a wiki's ''local/config.php'' file, before calling authuser or other recipes, add a line like:%0a%0a-->[@session_name('XYZSESSID');@]%0a%0aThe XYZSESSID can be any unique name (letters only is safest).%0a%0a!! See Also%0a%0a* [[PmWiki.Passwords]]%0a* [[PmWiki.PasswordsAdmin]]%0a* [[Cookbook:AuthUser]] for tips and tricks%0a* [[SiteAdmin.AuthUser]]%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ:  I get http error 500 "Internal Server Error" when I try to log in. What's wrong?%0a%0aA:  This can happen if the encrypted passwords are not created on the web s
 erver that hosts the PmWiki.%0aThe crypt function changed during the PHP development, e.g. a password encrypted with PHP 5.2 can not be decrypted in PHP 5.1, but PHP 5.2 can decrypt passwords created by PHP 5.1.%0aThis situation normally happens if you prepare everything on your local machine with the latest PHP version and you upload the passwords to a webserver which is running an older version.%0aThe same error occurs when you add encrypted passwords to local/config.php.%0a%0aSolution: Create the passwords on the system with the oldest PHP version and use them on all other systems.%0a%0aQ:  Can I specify authorization group memberships from with ''local/config.php''?%0a%0aA:  Yes -- put the group definition into the $AuthUser array:%0a%0a        $AuthUser['@editors'] = array('alice', 'carol', 'bob');%0a%0aQ:  I'm running multiple wikis under the same domain name, and logins from one wiki are appearing on other wikis.  Shouldn't they be independent?%0a%0aA:  This is caused
  by the way that PHP treats sessions.  See [[PmWiki.AuthUser#sessions]] for more details.%0a%0aQ:  How can I access the authorization groups that the current user belongs to in order to test using that as a condition of an if statement?%0a%0aQ: Is there any way to have groups inherit other groups (e.g. @fruits: @apples, @oranges, jack)?%0a%0aQ: Is it possible to list more than one .htpasswd and .htgroup file to be used?  e.g. if I am running a wikifarm and some users are common across various fields, it would be nice if they only needed to update their password once.  Sure I could merge all the passwd & group files, but then I wouldn't be able to support identical user or group names on each independent wikifield..%0a%0aQ: Is there any way to record the time of the last login for each user when using AuthUser?  I need a way to look for stale accounts.%0a%0aA: I wrote a recipe to do something like this.  It records the last action for each user (not necessarily just login act
 ions).  See [[Cookbook:UserLastAction]] for more info. --[[~Lordmundi]] March 23, 2007%0a%0aQ:  I want to allow anyone to edit my wiki, but don't want anyone else to use my name as the author.  Is there a way to "reserve" and password protect certain usernames?  Or basically just require a password when attempting to edit a page with a registered user's name in the author field?
+time=1184707927

Added: trunk/oggdsf/website/wikilib.d/PmWiki.AvailableActions
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.AvailableActions	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.AvailableActions	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.2.0-beta17 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.8) Gecko/20060911 SUSE/1.5.0.8-0.2 Firefox/1.5.0.8
+author=Pm
+csum=
+host=76.183.97.54
+name=PmWiki.AvailableActions
+rev=43
+targets=PmWiki.DocumentationIndex,PmWiki.Passwords,PmWiki.WebFeeds,PmWiki.RefCount,PmWiki.SitePreferences,PmWiki.CustomMarkup,PmWiki.UrlApprovals,Cookbook.Cookbook,Cookbook.BackupPages,Cookbook.ROEPatterns,Cookbook.DeleteAction,Cookbook.GeneratePDF,Cookbook.PmWiki2PDF,Cookbook.ASCIIMath,Cookbook.RenamePage,Cookbook.SharedPages,Cookbook.WebAdmin
+text=%25trail%25 %3c%3c|[[DocumentationIndex]]|>>%0a%0a!! Default Actions%0a%0a:?action='''browse''': display the specified page (default action if no [@?action=@] is present)%0a%0a:?action='''edit''': edit the specified page%0a%0a:?action='''diff''': show a change history of the specified page%0a%0a:?action='''attr''': displays dialog for setting/changing password of the specified page, see [[PmWiki/Passwords]]%0a%0a:?action='''upload''': display a form to upload an attachment for the current group%0a%0a:?action='''download'''&upname=''file.ext'': retrieve the page's attachment named ''file.ext''%0a%0a:?action='''crypt''': displays a form for generating hashed passwords out of clear text for usage in your config.php%0a%0a:?action='''print''': display the specified page using the skin specified by $ActionSkin['print']%0a%0a:?action='''search''': displays searchbox on current page%0a%0a:?action='''search'''&q=''searchterm'': performs search with ''searchterm'' and displays re
 sults on current page%0a%0a:?action='''source''': show page source%0a%0a:?action='''login''': prompt visitor for username/password%0a%0a:?action='''logout''': remove author, password, and login information%0a%0a:?action='''rss''':%0a:?action='''atom''':%0a:?action='''rdf''':%0a:?action='''dc''': If [[web feeds]] are enabled, returns a syndication feed based on the contents of the page or other options provided by the url.%0a%0a:?action='''refcount''': bring up the reference count form, which allows the user to generate a list of links (all, missing, existing or orphaned) in or from specified groups.  See [[RefCount]].  Part of the core distribution but must be enabled by the administrator.%0a%0a:?'''setprefs'''=SomeGroup.CustomPreferences: sets cookie to custom preferences page. See [[SitePreferences]]%0a%0a!! Actions enabled by $EnableDiag:%0a[[#BEGENABLEDIAG]]the following actions are available only if you set [@$EnableDiag = 1@] in your configuration file. They can be use
 d for debugging and should not be set in a production environment.%0a%0a:?action='''ruleset''': displays a list of all markups in 3 columns:%0a** column 1 = markup-name (1. parameter of markup() )%0a** column 2 = when will rule apply (2. parameter of markup() )%0a** column 3 = PmWiki's internal sort key (derived from #2)%0a->(see [[Custom Markup]]).%0a->To see more than what [@?action=ruleset@] gives you, apply the [[Cookbook:MarkupRulesetDebugging]] recipe: it can also show the pattern and the replacement strings.%0a%0a:?action='''phpinfo''': displays the output of phpinfo() and exits. no page will be processed%0a%0a:?action='''diag''': displays a dump of all global vars and exits. no page will be processed%0a[[#ENDENABLEDIAG]]%0a%0a[[#Analyse]]%0a!! Actions enabled by PmWiki Scripts%0a:?action='''analyze''': see [[PmWiki:SiteAnalyzer]] and [[PmWiki:AnalyzeResults]]%0a%0a:?action='''approvesites''': see [[PmWiki/Url approvals]]%0a%0a[[#endanalyse]]%0a%0a[[#cookbook]]%0a!! A
 ctions enabled by [[Cookbook]] recipes%0a:?action='''backup''': see [[Cookbook.Backup pages]]%0a%0a:?action='''convert''': see [[Cookbook.ROE patterns]]%0a%0a:?action='''delete''': see [[Cookbook.Delete action]]%0a%0a:?action='''pdf''': see [[Cookbook.Generate PDF]] or [[Cookbook.PmWiki2PDF]]%0a%0a:?action='''purgeqns''': see [[Cookbook.ASCII math]]%0a%0a:?action='''rename''':%0a:?action='''links''': see [[Cookbook.Rename page]]%0a%0a:?action='''share''':%0a:?action=''unshare''': see [[Cookbook.Shared pages]]%0a%0a:?action='''webadmin''': see [[Cookbook.Web admin]]%0a%0a[[#endcookbook]]%0a%0a%25trail%25%3c%3c|[[PmWiki.Documentation Index]]|>>
+time=1166199272

Added: trunk/oggdsf/website/wikilib.d/PmWiki.BackupAndRestore
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.BackupAndRestore	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.BackupAndRestore	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta42 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
+author=Anno
+charset=ISO-8859-1
+csum=summary
+ctime=1134693395
+host=85.125.178.31
+name=PmWiki.BackupAndRestore
+rev=8
+targets=PmWiki.DocumentationIndex
+text=(:Summary:background information and some basic backup and restore procedures:)%0a%0aThis page has some background information on making backups and explains some basic *nix backup and restore procedures.%0a%0a!! Introduction%0a%0aYour wiki installation contains some unique data in the following directories:%0a%0a    local/         Local configuration scripts%0a    cookbook/      Recipes obtained from the [[(Cookbook:)Cookbook]]%0a    pub/           Publicly accessible files%0a    wiki.d/        Wiki pages%0a    uploads/       Uploaded files (attachments)%0a%0aA good backup plan will include periodically archiving these directories &mdash; or at bare minimum [@local/@] and [@wiki.d/@].  Good practice dictates keeping your backup archives on a separate machine.%0a%0a!! Simple Backup and Restore (*nix)%0a%0aWhen it comes to backup, simpler is better.  Since the pmwiki distribution is very small (about 1/4 megabyte), it's simplest to just archive the distribution files alo
 ng with the data.%0a%0a!!! Making a Backup Archive%0a%0aThe following *nix command, executed from the parent directory of your wiki's directory, will put a complete backup archive of your site in your home directory.%0a%0a-> [@%0atar -zcvf  ~/wiki-backup-`date +%25Y%25m`.tar.gz  wiki/%0a@]%0a%0a!!! Restoring the Backup Archive%0a%0a!!!! Simple Method%0a%0aYour site can be restored and running in under 30 seconds with%0a%0a-> [@%0atar -zxvf ~/wiki-backup-200512.tar.gz%0afind wiki/uploads/ -type d |xargs chmod 777%0afind wiki/wiki.d/ -type d |xargs chmod 777%0a@]%0a%0a!!!! A Slightly-More-Secure Method%0a%0aThe simple restore commands above will give you world-writable files and directories.  You can avoid world-writable permissions by letting PmWiki create directories with the proper attributes (ownership and permissions) for you.%0a%0aStart with%0a%0a-> [@%0atar -zxvf ~/wiki-backup-200512.tar.gz%0arm -rf wiki/wiki.d%0arm -rf uploads%0achmod 2777 wiki/%0a@]%0a%0aNow upload a 
 file in each group that had uploads.  If your site doesn't have uploads, just visit your site once so the wiki.d/ directory will be created.%0a%0aFinish your installation with%0a%0a-> [@%0achmod 755 wiki/%0atar -zxvf ~/wiki-backup-200512.tar.gz%0a@]%0a%0a%0a!!! Details%0a%0aThe commands on this page assume your site is in a directory called "wiki/".  The test backup was made in December, 2005 so it's named accordingly.%0a%0aYour site will only have an uploads/ directory if uploads are enabled.%0a%0aThe backup command uses a date stamp (YYYYMM) in the filename.  If you automate the command via cron you'll wind up with monthly snapshots of your site.  You can get a daily snapshot by appending %25d to the date command ([@`date +%25Y%25m%25d`@] will get you YYYYMMDD).  Be wary of space limitations if you have a large uploads/ directory.%0a%0a%0a!! See Also%0a%0a* A [[http://thread.gmane.org/gmane.comp.web.wiki.pmwiki.user/20317| thread]] [gmane.org] on the pmwiki-users mailing l
 ist.%0a* A [[(Cookbook:)BackupPages]] recipe in the cookbook.%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>
+time=1176388852

Added: trunk/oggdsf/website/wikilib.d/PmWiki.BasicEditing
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.BasicEditing	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.BasicEditing	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta52 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=fix case
+host=76.183.97.54
+name=PmWiki.BasicEditing
+rev=269
+targets=PmWiki.ListStyles,PmWiki.WikiSandbox,Main.WikiSandbox,PmWiki.TableDirectives,PmWiki.Tables,PmWiki.BasicEditing,PmWiki.WikiStyles,PmWiki.WikiWikiWeb,PmWiki.Passwords,PmWiki.TextFormattingRules,PmWiki.MarkupMasterIndex,PmWiki.Links,PmWiki.InterMap,PmWiki.Images,PmWiki.DocumentationIndex,PmWiki.WikiTrails,PmWiki.SpecialCharacters,PmWiki.PmWikiPhilosophy
+text=(:Summary: PmWiki's basic edit syntax:)%0a(:Title Basic PmWiki editing rules:)%0a%0a%25audience%25 authors (basic)%0a%0aThe pages on this site are [[WikiWikiWeb]] pages, which means that pages can be created and edited by multiple authors. To edit a page, click the '''Edit''' link that exists '''somewhere''' on the page, usually in the header or footer. Some pages may be [[password(s)]]-protected, depending on the system's security policies, but many systems allow open editing of pages.%0a%0aWhen editing a page, you see the ''markup text'' that describes the content of the page.  The basic rules for page markup are simple:%0a# Put a blank line between paragraphs.%0a# To make a list, start each line with # for numbered (ordered) lists or * for bulleted (unordered) lists.%0a# To make a heading, start a line with two or more ! marks; !! is a subheading, and !!! is a sub-subheading.%0a# To emphasize text, enclose it in 2 or 3 ''single quotes''; [@''text''@] for italics or [
 @'''text'''@] for bold.%0a# To make a link to another page, enclose the page's name in double brackets; for example [@[[basic editing]]@] links to this page. Links to nonexistent pages are displayed specially, to invite others to create the page.%0a# To make a link to another site, type its address, such as http://www.example.com/ .%0a%0a'''If you want to experiment with editing a page, try it on the [[Main/WikiSandbox]].''' You can [[Main/WikiSandbox?action=edit | edit the WikiSandbox]] without affecting anything important on this site. If you do edit other pages, it's courteous to '''sign''' your contribution; using [=~~=]~ effectively 'signs' the name that you provide in the Author field on the Page Edit form.%0a%0a!! Example%0a%0aThe table below demonstrates many of the common markups used to format pages.  The right column shows the effect of the markup, the left column shows what to write to achieve the effect.  More details are available from the [[text formatting rul
 es]] and other documentation pages. An '''exhaustive list''' of default markup is available as the [[markup master index]]%0a%0a!!! General Usage%0a%0a(:table class='markup horiz' align='center':)%0a(:cellnr  class='markup1':)%0a[-'''What to type'''-]%0a(:cell  class='markup2':)%0a[-'''What it looks like'''-]%0a(:tableend:)%0a%0a(:markup class=horiz:)%0aAn empty line%0a%0astarts a new paragraph.%0a(:markupend:)%0a%0a(:markup class=horiz:)%0aA single newline%0ausually doesn't affect the layout.  %0aUse two backslashes\\%0ato break a line.%0a[[%3c%3c]]%0aUse three backslashes\\\%0afor two line breaks.%0a(:markupend:)%0a%0a(:markup class=horiz:)%0aA single backslash \%0ajoins the next line \%0ato the previous one.%0a(:markupend:)%0a%0a!!![[#lists]] Lists %0a(:markup class=horiz:)%0a* lists are created by using asterisks%0a** more asterisks produce deeper lists%0a*** the list is terminated%0aby the first line that is not a list%0a(:markupend:)%0a%0a(:markup class=horiz:)%0a# Num
 bered lists%0a# are also possible%0a## more hashes produced deeper lists%0a*** and lists can nest%0a-> use [[list styles]] to maintain numbering%0a## Text between list items can cause numbering to restart%0a## %25item value=3%25 this can be dealt with%0a(:markupend:)%0a%0a(:markup class=horiz:)%0a-> An arrow (->) indents content.%0a%0a   Line up text to continue the indent.%0a%0a-->Longer arrows (-->) indent further.%0a%0a-%3cA reverse arrow (-%3c) creates a hanging indent, the first line is outdented and remaining lines are indented.%0a--%3cLonger reverse arrows (--%3c) indent further.%0a(:markupend:)%0a%0a(:markup class=horiz:)%0a: Definition list : list of definitions%0a: item : the item's definition%0a: another item : that item's definition%0a:: indentation : more leading colons produce deeper lists%0a(:markupend:)%0a%0a(:markup class=horiz:)%0a Lines that begin with%0a a space are formatted exactly%0a as typed, in a fixed-width font.%0a%0aNote that very long lines of pr
 eformatted text%0acan cause the whole page to be wide.%0a(:markupend:)%0a%0a(:markup class=horiz:)%0a%25rfloat%25 This text floats to the right%0a%0a%25rframe%25 This text floats to the right with a frame%0a%0a%25center%25 This text is centered.%0a%0a%25right%25 This text is right justified.%0a(:markupend:)%0a%0a(:markup class=horiz:)%0aFour or more dashes%0aat the beginning of a line%0a----%0aproduce a horizontal line.%0a(:markupend:)%0a%0a!!! [[#links]] [[Links]]%0a%0a(:table class='markup horiz'  align='center':)%0a(:cellnr  class='markup1':)%0a[-'''What to type'''-]%0a(:cell  class='markup2':)%0a[-'''What it looks like'''-]%0a(:tableend:)%0a%0a(:markup class=horiz:)%0a* Text in double brackets become links to other pages.%0a* Words are automatically capitalized in page titles.%0aPractice editing%0ain the [[wiki sandbox]].%0a(:markupend:)%0a%0a* When linking to a page in a different wikigroup, provide the group name, followed by a separator, and then the page name.%0a* If
  the separator you use is a slash, only the page name will appear.%0a* If the separator you use is a dot, the full string (group name and page name) will appear.%0a(:markup class=horiz:)%0aPractice editing%0ain the [[Main/WikiSandbox]].%0a%0aWhich one?%0aOh, in the [[Main.WikiSandbox]].%0a(:markupend:)%0a%0a* Text after a pipe (|) is used as the link text, or use the alternate (and perhaps more understandable) arrow (text -> link) notation.%0a* PmWiki adds capitalisation to links%0a(:markup class=horiz:)%0aPractice editing in the%0a[[WikiSandbox | practice area]].%0a%0aPractice editing in the%0a[[Main.WikiSandbox | practice area]].%0a%0aPractice editing in the%0a[[practice area -> Wiki sandbox]].%0a%0aAdvanced tables are described in [[table directives]].%0a(:markupend:)%0a%0a* Endings become part of the link text.%0a* Parentheses hide parts of the link name.%0a(:markup class=horiz:)%0aPractice editing in the%0a[[wiki sandbox]]es.%0a%0aPractice editing in the%0a[[(wiki) sand
 box]].%0a# as reference: [[Tables |#]]%0a# to a page title [[Basic editing|+]]%0a(:markupend:)%0a%0a* PmWiki can use [[InterMap| InterMap prefixes]] that have specific meanings.%0a* Parentheses can hide those too.%0a(:markup class=horiz:)%0aWhat's an [[(Wikipedia:)aardvark]], anyway?%0a(:markupend:)%0a%0a(:markup class=horiz:)%0aLinks to external sources can be entered%0a# bare url:  http://google.com%0a# link text: [[http://google.com | Google]]%0a# as reference: [[http://google.com |#]]%0a(:markupend:)%0a%0a(:markup class=horiz:)%0aLinks can open in another window,%0aas in %25newwin%25 http://www.pmwiki.org.%0a(:markupend:)%0a%0a!!! Character formatting%0a%0a(:table class='markup horiz'  align='center':)%0a(:cellnr  class='markup1':)%0a[-'''What to type'''-]%0a(:cell  class='markup2':)%0a[-'''What it looks like'''-]%0a(:tableend:)%0a%0a* These are all apostrophes (single-quote marks), not double-quotes.%0a(:markup class=horiz:)%0a''Emphasize'', '''strongly''', %0a'''''very
  strongly'''''.%0a(:markupend:)%0a%0a(:markup class=horiz:)%0a@@Monospaced text@@%0a%0a[@This is a%0a  preformatted%0a    text block@]%0a(:markupend:)%0a%0a(:markup class=horiz:)%0a* Text with '^superscripts^'%0a* Text with '_subscripts_'%0a* deleted {-strikethrough-} text%0a* inserted {+underline+} text%0a* [+big+], [++bigger++] text%0a* [-small-], [--smaller--] text%0a(:markupend:)%0a%0a!!! [[Wiki styles]]%0a%0a(:markup class=horiz:)%0a[[WikiStyles]] allow %25red%25 text%0a%25blue%25 to %25green%25 be in %0a%25color=#ff7f00%25 different %25%25colors.%0a(:markupend:)%0a%0a[[#headings]]%0a!!! Headings and blocks%0a%0a(:table class='markup horiz'  align='center':)%0a(:cellnr  class='markup1':)%0a[-'''What to type'''-]%0a(:cell  class='markup2':)%0a[-'''What it looks like'''-]%0a(:tableend:)%0a%0a* Headings are useful for creating a "well-structured" page.%0a  They're not just for making big text.%0a(:markup class=horiz:)%0a!! Major Subheading%0a!! [-Major Subheading With Smal
 ler Text-]%0a!!! Minor Subheading%0a!!!! And More%0a!!!!! Subheadings%0a(:markupend:)%0a%0a[[#pagetitles]]%0a!!! Page titles%0a%0a* The [@(:title:)@] directive sets the page's title to something other than its page name.%0a(:markup class=horiz:)%0a(:title Basic Editing:)%0aThe title of this page is {$Title}, spaced as {$Titlespaced}.%0a(:markupend:)%0a%0a[[#blockstyles]]%0a!!! Block styles%0a%0a* blocks allow styles to be applied across a number of lines and paragraphs of text and [[PmWiki/images]].%0a(:markup class=horiz:)%0a>>purple%3c%3c%0aAll of the text in this block%0ais purple.%0a* Purple cows and purple flowers%0a* Purple people eater%0a>>red%3c%3c%0a* Now this list is red%0a>>center%3c%3c%0a* and this text is centered%0a>>right green%3c%3c%0a* and this text is green and right justified%0a>>%3c%3c%0a* And this is normal%0a(:markupend:)%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a[[#beginning]]%0aQ: I'm new to PmWiki, where can I fin
 d some basic help for getting started?%0aA: The [[Basic Editing]] page is a good start.  From there, you can just follow the navigational links at the bottom of the page (they are called [[WikiTrails]]) to the next pages, or to the [[Documentation Index]] page, which provides an outline style index of essential documentation pages, organized from basic to advanced.%0a%0aQ: How do I include special characters on my wiki pages?%0aA: Use character codes to insert [[special characters]], such as Copyright (&#169;) and Trademark (&#174; or &#8482;) symbols, that don't appear on your keyboard.%0a%0aQ: Why are separate lines of text in the markup combined into a single line on output?%0aA: PmWiki normally treats consecutive lines of text as being a paragraph, and merges and wraps lines together on output.  This is consistent with most other wiki packages.  However, an author can use the [@(:linebreaks:)@] directive to cause separate lines of markup text to be kept as separate lines
  in the output.%0a%0aQ: Can I just enter HTML directly?%0aA: By default (and by design), PmWiki does not support the use of HTML elements in the editable markup for wiki pages. There are a number of reasons for this described in the [[PmWikiPhilosophy]] and [[PmWiki:Audiences]]. Basically, Pm feels that enabling HTML markup within wiki pages in a collaborative environment has the effect of excluding some potential authors from being able to edit pages, as well as posing a number of display and security issues.  However, a site administrator can use the [[Cookbook:EnableHTML]] recipe to enable the use of HTML markup directly in pages.%0a%0a
+time=1180212303
+title=Basic PmWiki editing rules

Added: trunk/oggdsf/website/wikilib.d/PmWiki.BasicVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.BasicVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.BasicVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta45 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
+author=Simon
+charset=ISO-8859-1
+csum=as in
+host=202.37.32.2
+name=PmWiki.BasicVariables
+rev=59
+targets=PmWiki.Variables,PmWiki.WikiGroup,Site.Search,Site.EditForm,Site.PageNotFound,PmWiki.WikiWord,PmWiki.PerGroupCustomizations,PmWiki.LocalCustomizations,PmWiki.AuthUser,PmWiki.MarkupExpressions,PmWiki.WikiFarms
+text=(:Summary: core variables:)%0a%3c%3c|[[PmWiki.Variables]]|>>%0a%0a:$DefaultGroup:[[WikiGroup]] used by default (on startup) when no group is specified in the URL, as in "{$DefaultGroup}".  %0a%0a:$DefaultName:Name of the default HomePage of each WikiGroup.  Used when the group doesn't have a page with the same name as the group, as in "{$DefaultName}".%0a%0a:$DefaultPage:Startup page when PmWiki is called without a specified page, normally ''$DefaultGroup.$DefaultName''.%0a%0a:$SiteGroup:Default group for storing configuration and utility pages such as [[Site.Search]], [[Site.EditForm]], [[Site.PageNotFound]], etc, as in "{$SiteGroup}".%0a%0a:$EnableWSPre:Enables a markup rule that causes lines with leading spaces to be treated as sections of preformatted text.  If set to a value greater than 1, indicates the minimum number of leading spaces required for this treatment.%0a:      :[@$EnableWSPre = 1;             # leading spaces are preformatted text@]%0a:      :[@$Enabl
 eWSPre = 0;             # leading spaces are normal lines of text@]%0a:      :[@$EnableWSPre = 4;             # 4+ spaces are preformatted text@]%0a%0a:$EnableWikiWords:Enable [[WikiWord]] processing.%0a%0a:$LinkWikiWords:If set, then bare WikiWords in a page are automatically linked to pages of the same name.  Note that this value can also be affected by the [@(:linkwikiwords:)@] and [@(:nolinkwikiwords:)@] directives.%0a:      :[@$LinkWikiWords = 1;           # turn on WikiWord links@]%0a:      :[@$LinkWikiWords = 0;           # disable WikiWord links@]%0a%0a:$SpaceWikiWords:If set, then WikiWords in pages are automatically spaced according to $AsSpacedFunction.  Note that this value can also be affected by the [@(:spacewikiwords:)@] and [@(:nospacewikiwords:)@] directives.%0a:      :[@$SpaceWikiWords = 1;          # turn on WikiWord spacing@]%0a:      :[@$SpaceWikiWords = 0;          # turn off WikiWord spacing@]%0a%0a:$AsSpacedFunction:The name of the function used to co
 nvert WikiWords into normal, spaced strings.  Defaults to '`AsSpaced'.%0a:      :[@$AsSpacedFunction = '`MyAsSpaced';@]%0a%0a:$EnablePGCust:Allows/disables per-page and [[PerGroupCustomizations | per-group customizations]].  Can be set to zero in any [[local customization(s)]] file to prevent remaining page/group customizations from being loaded.%0a:      :[@$EnablePGCust=0;              # turn off per-page/group configs@]%0a%0a:$EnableLocalConfig:Allows/disables local/config.php customizations (usually for a farm's wikis).  Can be set to zero in local/farmconfig.php to prevent the farm's wikis' local/config.php from being loaded.%0a:      :[@$EnableLocalConfig = 0;    # disable PmWiki's local/config@]%0a%0a:$GroupPattern: The regular expression pattern used for valid [[WikiGroup]] name specifications.  Defaults to allowing any group name beginning with an uppercase letter, but can be set to limit the valid group names (see Cookbook:LimitWikiGroups).%0a:      :[@# limit grou
 ps to Site, PmWiki, and `MyGroup@]%0a:      :[@$GroupPattern = '(?:Site|PmWiki|`MyGroup)';@]%0a%0a:$NamePattern: The regular expression pattern used for valid page names.  Defaults to allowing pages beginning with an uppercase letter or digit, followed by sequences of alphanumeric characters, hyphens, and underscores.  %0a%0a:$WikiWordPattern: The pattern that describes a WikiWord.%0a%0a:$Author: Set to the current reader, who is potentially an author ([[PmWiki:AuthoringPhilosophy|see discussion]]), as in "{$Author}".%0a%0a:$AuthorGroup: The WikiGroup for user profiles. Defaults to 'Profiles'.%0a:      :[@$AuthorGroup = 'Users';@]%0a%0a:$AuthId: For sites using [[AuthUser | user-based authorization]], tracks the "reader" or login name.%0a%0a:$TimeFmt: The format to use for dates and times, in [[http://php.net/strftime | strftime()]] format.  The default value is [@'%25B %25d, %25Y at %25I:%25M %25p'@], which gives dates of the form "September 8, 2005 at 10:57 PM".%0a:      :
 [@$TimeFmt = '%25B %25d, %25Y';        # dates as "September 8, 2005"@]%0a:      :[@$TimeFmt = '%25Y-%25m-%25d';         # dates as "2005-09-08"@]%0a%0a:$FTimeFmt:Can be used to override the default date format used by the "ftime" function.  The default $FTimeFmt is $TimeFmt.  (See [[Markup Expressions]])%0a%0a:$LogoutRedirectFmt: Identifies the page to which the visitor should be sent after an [@?action=logout@].  Defaults to the current page.%0a:      :[@$LogoutRedirectFmt = 'Site.Logout';    # ?action=logout target@]%0a%0a:$LogoutCookies: An array of cookie names to be removed when [@?action=logout@] is invoked.%0a%0a:$CookiePrefix: A string prefix to be prepended to cookies set from PmWiki scripts.  It defaults to '', but can be set to a different value to avoid conflicts with similar-named cookies from other applications, or to allow multiple wikis from the same domain to store separate cookies.%0a:      :[@$CookiePrefix = 'pmwiki_';@]     # set cookie prefix to 'pmwiki
 _'%0a::If you have a [[WikiFarm(s)]], use the following in each field's ''config.php'' to get a unique prefix for each field in the farm, thus isolating each field's cookies.:%0a:      :[@$CookiePrefix = substr($tmp = md5(__FILE__), 0, 5).'_';@]%0a%0a:$Version: A string representing the release version of PmWiki, as in "{$Version}".%0a%0a:$VersionNum: A number representing the release version of PmWiki,%0a with the major and minor release components padded with zeroes to%0a produce three digits.  Thus, release "pmwiki-2.1.40" will have%0a $VersionNum set to 2001040, as in "{$VersionNum}".%0a%0a The first digit is a 2, the next three digits are the major%0a release number, and the last three digits are the minor release%0a number. Beta releases use 900-999 for the minor release number.%0a Thus:%0a--> [@%0a2.1.0          2001000%0a2.1.1          2001001%0a...%0a2.1.27         2001027%0a2.2.0-beta1    2001901%0a2.2.0-beta2    2001902%0a...%0a2.2.0-beta18   2001918%0a...%0a2.2.0
           2002000%0a@]%0a%0a:$EnableRedirect:When enabled (default), causes page redirects to automatically be performed by the browser.  Setting $EnableRedirect to zero causes PmWiki to pause and issue a "Redirect to ''link''" message instead.  This is sometimes useful when debugging recipes to be able to see the results of actions before page redirections occur.%0a
+time=1178156055

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Blocklist
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Blocklist	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Blocklist	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta57 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20061023 SUSE/2.0.0.4-1.1 Firefox/2.0.0.4
+author=Pm
+charset=ISO-8859-1
+csum=update Site -> SiteAdmin
+ctime=1159592216
+host=76.183.97.54
+name=PmWiki.Blocklist
+rev=36
+targets=PmWiki.Security,Archive.Blocklist,PmWiki.Passwords,PmWiki.PasswordsAdmin,SiteAdmin.Blocklist,PmWiki.PageHistory,PmWiki.WikiAdministrator,PmWiki.Variables,PmWiki.PageVariables,PmWiki.DocumentationIndex
+text=(:Summary:Blocking IP addresses, phrases, and expressions to counteract spam and vandalism.:)%0a%25audience%25 administrators (basic)%0aThe block list is one of a number of [[security]] measures that can be taken to protect your wiki from unwelcome postings.%0a%0a->%25font-size:small%25''the built-in blocklist is only enabled in the beta version; not in the stable release, see [[Archive.Blocklist]]''%0a%0aUnfortunately, the open-editability of many wiki systems often makes them attractive targets for "link spam" or "wikispam", in which links are added to pages in an effort to increase search engine rankings or drive traffic to other sites.  Also, many link spammers have developed automated systems to locate sites that accept visitor input and attempt to flood the site with unwanted links.%0aAlso, and harder to deal with, is just plain [[PmWiki/Security#wikivandalism|wiki vandalism]] where nonsense changes are made, often replacing entire pages.%0a%0aBy far the best coun
 termeasure against wikispam is to restrict editing through the use of passwords (see [[Passwords]] and [[Passwords Admin]]).  Experience has shown that passwords can be effective even if the password is widely known, and even if the password is publicly available on the site itself.  However, there are many cases where passwording may be an impediment, so these will generally want to use some form of blocklist.%0a%0a!! Blocklist basics%0a%0aA ''blocklist'' is a list of IP addresses, phrases, and expressions which are prevented from being added into pages on the website.  PmWiki is distributed with a built-in blocklisting capability; blocklists can be enabled by adding the following line to ''local/config.php'':%0a%0a    $EnableBlocklist = 1;%0a%0aThis tells PmWiki to scan the [[SiteAdmin.Blocklist]] page and the "SiteAdmin.Blocklist-Farm" page (and possibly other pages -- see below) looking for phrases and IP addresses to be excluded from posting to the site.%0a%0a!!! Blocki
 ng by word or phrase%0aThe simplest form of block is simply a line containing "[@block:@]" followed by a word or phrase to be excluded from postings.  For example, a line like %0a%0a-> [@block:spam.com @]%0a%0ain Site.Blocklist will block any posts containing the string "spam.com" (case-insensitive) anywhere in the post.%0a%0a[[#blockbyipaddress]]%0a!!! Blocking by IP address%0aSometimes we wish to restrict posts coming from particular addresses or address ranges that are known as sources of wikispam.  If a blocklist page contains IP addresses of the form "a.b.c.d" or "a.b.c.*", then any posts coming from that address or range will be blocked. %0a%0a-> %25note%25 To find an author's IP address, try hovering the mouse over the author name in the [[page history]] for a page.%0a%0a!!! Blocking by regular expression or pattern%0aBlocking on simple words can sometimes pose difficulties; for example, a simple "[@block:cial@]" entry will also block the word "specialist".  For these
  cases it's often helpful to use a regular expression, as in:%0a%0a->[@block:/\bcial\b/@]%0a%0aThis says to block "cial" only if it doesn't occur in the middle of a larger word.  The leading slash (/) after "block:" tells PmWiki to use a regular expression match instead of a simple string match.  (Blocklist uses PCRE or "Perl Compatible Regular Expressions"; see http://www.php.net/manual/en/ref.pcre.php for more information.)%0a%0a!! Letting authors know why they've been blocked%0a%0aBy default, blocklist only tells an author that a particular edit has been blocked, but doesn't give a specific reason for the blocking (e.g., the offending phrase).  Setting the following in a local customization file will also provide the reasons for the block:%0a%0a    $EnableWhyBlocked = 1;%0a%0a%0a!! Managing multiple blocklists%0a%0aPmWiki allows blocklist entries to come from multiple pages by setting the $BlocklistPages variable.  By default $BlocklistPages is set to "SiteAdmin.Blocklist
 ", as well as any automatically downloaded blocklists as described below.  PmWiki will use all entries in all the blocklists for filtering wikispam. Setting a value of $BlocklistPages changes the default:%0a%0a    $BlocklistPages = array('Main.Blocklist', '{$Group}.Blocklist');%0a%0aThe order of blocklists really doesn't matter -- all of the blocklist%0apages ultimately get used, and the [@unblock:@] entries are processed %0aafter all of the blocklist pages have been loaded.%0a%0a[[#automaticblocklists]]%0a!! Automatically downloaded blocklists%0a%0aMaintaining blocklists is relatively easy to do, but can become tedious over time.  Several groups have formed and maintain "shared blocklists", where a common blocklist is made available to all.  PmWiki's blocklist capability has built-in features for automatically downloading and updating such shared blocklists.%0a%0aIf you're just in a hurry to make use of some standard blocklists, make the following setting in ''local/config.
 php'':%0a%0a    $EnableBlocklist = 10;%0a%0aThis tells PmWiki to not only enable blocklists on the site, but to also configure itself to automatically retrieve and maintain local copies of well-known blocklists such as [[(http://)chongqed.org]] and [[http://moinmaster.wikiwikiweb.de/|MoinMaster]].  These local copies will be saved in SiteAdmin.Blocklist-Chonged and SiteAdmin.Blocklist-MoinMaster and refreshed once per day (as determined by the value of $BlocklistDownloadRefresh).%0a%0aTo automatically retrieve the [[SiteAdmin.Blocklist]] page used at pmwiki.org, add the following setting in ''local/config.php'':%0a%0a-> [@ $BlocklistDownload['SiteAdmin.Blocklist-PmWiki'] = array('format' => 'pmwiki'); @]%0a%0a!! Ignoring specific entries in a blocklist (unblock)%0a%0aWhen using a large master blocklist or blocklists automatically refreshed from external sites, it may be that some entries in the blocklists are inappropriate or overeager and block legitimate content.  In this 
 case a wikiadministrator can use "unblock" in a blocklist page to ignore an entry from the blocklist.  For example, to allow "spam.com" even if another blocklist has a block entry for it:%0a%0a    unblock:spam.com%0a%0aIn order for unblocking to work the phrase or pattern following "unblock:" must be ''exactly'' the same as the original.%0a%0a!! Permissions on blocklist pages%0a%0aIn general, an [[(wiki )administrator]] will want to edit-protect the SiteAdmin.Blocklist and any other blocklist pages to prevent arbitrary changes to the blocklist (see [[Passwords]]).  Since most pages in the SiteAdmin.* group are edit-protected by default anyway, this usually isn't a problem.%0a%0aAdministrators may also wish to read-protect the various blocklist pages so that others do not know the exact phrases and/or IP addresses that are being blocked.  (By their nature blocklists tend to contain phrases or terms that may be offensive or inappropriate to some.)%0a%0aAny pages created via au
 tomatic download (see above) are automatically locked against viewing except by administrators.  %0a%0a%25audience%25 administrators (intermediate)%0a!! Detailed configuration of automatically downloaded blocklists%0a%0aAutomatic downloading of blocklist information is controlled by the $BlocklistDownload array.  An entry for MoinMaster might look like:%0a%0a    $BlocklistDownload['SiteAdmin.Blocklist-MoinMaster'] = array(%0a      'url' => 'http://moinmaster.wikiwikiweb.de/BadContent?action=raw',%0a      'format' => 'regex',%0a      'refresh' => 86400);%0a%0aThis says to download the blocklist data from the given url into the SiteAdmin.Blocklist-MoinMaster page, that the entries in the blocklist are regular expressions, and to refresh the information every 86,400 seconds (one day).%0a%0aIf 'refresh' is omitted, then the page will be refreshed at the time interval given by $BlocklistDownloadRefresh (default one day).  If 'format' is omitted, the page is assumed to have PmWiki
 -formatted entries as described above.  If 'url' is omitted, then the blocklist information is downloaded from a standard location on the pmwiki.org site.%0a%0aTo force a refresh of an automatically downloaded blocklist, simply delete the existing page -- a new version will be installed upon the next blocklist scan.  Blocklist pages are checked for download in response to any ?action=edit request.%0a%0aIf you are specifying your Blocklist-Pages in the config.php you have to specify the automatically updated pages too, else they won't be updated or created even if you use $EnableBlocklist = 10; .%0a%0a!! Farm-wide blocklist%0a%0aA blocklist can be applied farm-wide  (see [[(Cookbook:)SharedPages]]).  %0aAfter these pages are created they can be moved into the farm ''shared.d/'' directory:%0a%0a!! [[#variables]] Blocklist Variables%0a%0a%3c%3c|[[Variables]]|>>%0a%0aThe following variables help control the configuration and operation of blocklists:%0a%0a:$EnableBlocklist:If set
  to a non-zero value, then blocklists are enabled on the site.  If set to a value of ten or higher, then add entries for automatic downloads of standard blocklists.%0a        $EnableBlocklist = 1;              # enable blocklists%0a        $EnableBlocklist = 10;             # auto-configure standard blocklists%0a%0a:$EnableWhyBlocked:By default, authors are not told which particular phrases or IP addresses are causing a particular post to be blocked; setting $EnableWhyBlocked to 1 provides this information.%0a        $EnableWhyBlocked = 1;             # give reasons for blocking%0a%0a:$BlocklistPages:An array of pages to be checked for blocklist entries.  The elements of the array may contain [[page variables]].  Defaults to "Site.Blocklist", plus any other automatically downloaded blocklist pages.%0a%0a:$BlocklistMessageFmt:The message to provide the author whenever a post has been blocked.%0a%0a:$BlockedMessagesFmt:If $EnableWhyBlocked is set, defines the text to use for e
 ach type of block being performed.  Currently only 'ip' and 'text' are recognized.%0a        $BlockedMessagesFmt['ip'] = "$[IP address blocked from posting]: ";%0a        $BlockedMessagesFmt['text'] = "$[Text blocked from posting]: ";%0a%0a:$BlocklistDownload:An array of automatically-downloaded blocklists.  The keys of the array are the pages in which the blocklists should be stored, the values contain the url, format, and refresh interval for the downloaded blocklist.%0a[@        # Download the MoinMaster blocklist every twelve hours%0a        $BlocklistDownload['SiteAdmin.Blocklist-MoinMaster'] = array(%0a          'url' => 'http://moinmaster.wikiwikiweb.de/BadContent?action=raw',%0a          'format' => 'regex',%0a          'refresh' => 43200);%0a        # Download a shared blocklist from pmwiki.org every day%0a        $BlocklistDownload['SiteAdmin.Blocklist-Shared'] = array(%0a          'format' => 'pmwiki');%0a@]%0a%0a:$BlocklistDownloadRefresh:The default refresh inte
 rval for any $BlocklistDownload entries that don't explicitly specify a 'refresh' value.%0a        # perform automatic downloads once per week by default%0a        $BlocklistDownloadRefresh = 86400 * 7;%0a%0a:$BlocklistDownloadFmt:The format to use when saving automatically downloaded blocklists.%0a%0a%0a:$EnableBlocklistImmediate:Some cookbook recipes update pages with author input but don't use the built-in data posting routines.  If $EnableBlocklistImmediate is set (default) and the current action is listed in $BlocklistActions (below), then an immediate blocklist scan is performed on the incoming text.%0a%0a:$BlocklistActions:A list of actions for which immediate blocklist checks should be performed (see $EnableBlocklistImmediate above).%0a        # perform immediate checks for ?action=comment%0a        $BlocklistActions['comment'] = 1;%0a        # perform immediate checks for ?action=postdata%0a        $BlocklistActions['postdata'] = 1;%0a%0a----%0a%0a%25trail%25 %3c%3c
 |[[Documentation Index]]|>>%0a
+time=1184708120

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Categories
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Categories	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Categories	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta52 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=space alignment
+host=76.183.97.54
+keywords=categories, tags
+name=PmWiki.Categories
+rev=44
+targets=Category.GroupFooter,PmWiki.DocumentationIndex
+text=(:Summary:Categories are a way to organize and find related pages:)%0a(:keywords categories, tags:)%0a%25audience%25 authors (intermediate)%0a%0a!!Purpose of categories%0aCategories (also known as "tags") are a way to organize and find related pages.  Categories are implemented by default in PmWiki 2, and in most wikis they don't require any special code or markup, they're just a useful convention.  The idea is that every page that falls into a particular subject area should have a link to a shared page containing links to other pages on that subject.  These pages are created in the ''Category'' group, and thus these subject areas are called "categories".%0a%0a!!Using categories%0aGetting categories to work requires two steps, the first of which is adding links to each category.  A category named Subject is created by adding a link to [=Category.Subject=] on any page.  When you add the link to a page, the page can be described as being ''in'' the category "Subject".  %0
 a%0aThere is a special markup for creating these links which makes categories work more smoothly: [=[[!Subject]]=] will create a link to Category.Subject. So [=[[!Subject]]=] is a kind of shortcut to the page Subject in the category group.%0a%0aIf you click on the category links on a page, initially you'll just be taken to an empty page named ''Category.Subject''.  The second step in setting up categories is to modify the behavior of pages in the category group so that they will display a list of all pages containing links to ''Category.Subject''.  This is relatively simple to do:%0a%0a# Open the page [[Category.GroupFooter]] for editing%0a# Add the line [@(:pagelist link=Category.{*$Name} list=normal:)@]%0a# Save the edits%0a%0aThis will cause the footer on every page in the ''Category'' group to display a list of links to pages that reference that page in the category group.%0a%0aIt is worth noting that rather than adding this to Category.GroupFooter, the pagelist directiv
 e can be added to Category.GroupHeader to similar effect; it just depends on whether you'd prefer to have the list of pages appear before or after any text that you add to the individual category pages (which can be edited just like normal pages).%0a%0aBecause we use the normal [[Cookbook:PagelistExplained|PageList]] @@link=@@ markup, you can use it not only in the category group. If you want to show all pages belonging to the category Subject you can use on any wiki page [@(:pagelist link=Category.Subject list=normal:)@].%0a%0aSimilarly, there's no requirement that a "category page" has to be in the ''Category'' group -- any page can define a "category" of pages that link to it.%0a%0aAn administrator can override the default category group name of "Category" by setting the $CategoryGroup variable in ''config.php'' to another group name.%0a%0a!!!Recap%0aSo, by adding the link [=[[!Subject]]=] to a page, a link to that page will automatically appear on the page ''Category.Sub
 ject'', as long as  ''Category.GroupFooter'' has been tweaked appropriately.  Thus, you can create a page that automatically creates an alphabetized list of all movies discussed on your wiki by creating links to [=[[!Movies]]=] on each film's page; the resulting automatic list would be on the page ''Category.Movies'' .  %0a%0a%25audience%25 authors (advanced)%0a!!Category nesting%0aCategories have the potential for even greater usefulness because [@Category.*@] pages can themselves be placed into categories!  To follow an excellent example from John Rankin, let's suppose we have the following film pages in the categories listed to the right:%0a%0a-> [@%0aFilm.ShaunOfTheDead   [[!Horror]] [[!Comedy]] [[!2003]]%0aFilm.InMyFathersDen   [[!Drama]] [[!2004]]%0aFilm.TheCorporation   [[!Documentary]] [[!2003]]%0a@]%0a%0aNow then, we can create [@Category.Horror@], [@Category.Comedy@], [@Category.Drama@], and [@Category.Documentary@], and in each one of those pages we put [@[[!Genre
 ]]@].  In [@Category.2003@] and [@Category.2004@], we put [@[[!Year]]@].%0a%0aSo, what happens when we display [@Category.Genre@] ?  We see links to "Comedy", "Drama", "Documentary", and "Horror", because they're in the Genre category.  When we click on one of those links, we see all of the films listed in one of those categories.  Similarly, if we click on [@Category.Year@], we see links to "2003" and "2004", each of which in turn displays the list of films for that year.%0a%0aFinally, in [@Category.Genre@] and [@Category.Year@] we can put [@[[!Category]]@], which makes them "top-level" categories reachable from the [@Category.Category@] page.  Voila, we now have an instant "hierarchy":%0a%0a-> [@%0aCategory.Category%0a    Category.Genre%0a        Category.Comedy%0a            Film.ShaunOfTheDead%0a        Category.Drama%0a            Film.InMyFathersDen%0a        Category.Documentary%0a            Film.TheCorporation%0a        Category.Horror%0a            Film.ShaunOfTheD
 ead%0a    Category.Year%0a        Category.2003%0a            Film.ShaunOfTheDead%0a            Film.TheCorporation%0a        Category.2004%0a            Film.InMyFathersDen%0a@]%0a%0aNote however that this isn't a "strict" hierarchy--i.e., any page or category can appear simultaneously in multiple categories.  For example, [@Category.Documentary@] could be a member of both the Genre and top-level category listings.%0a%0aEach category page can have content text before the generated list, e.g., to give a generic description of things in the category. (Or it can be empty, which works fine.) It can also contain associations to related categories ("see also" references). For example, in a tourism wiki, the ''bed and breakfast" category might contain a see-also reference to the "self-catering" category.%0a%0a%25audience%25 administrators (intermediate)%0a!!The guts of the category markup%0aAs mentioned, all of the necessary markup features for Categories are enabled by default in
  current releases of PmWiki 2.0, but here's how they work for those who are interested.  The use of the Category group as the repository for all categories is determined by setting the $CategoryGroup variable, and the special [=[[!Subject]]=] markup is activated by a call to the Markup() function:%0a %0a-> [@SDV($CategoryGroup,'Category');%0aMarkup('[[!','%3clinks','/\[\[!([^\|\]] ?)\]\]/',%0a  "%3cspan class='category'>[[$CategoryGroup/$1]]%3c/span>");%0a@]%0a%0a%0a!!Coming up with good category schemes%0aThe hard part about using categories is choosing a good vocabulary. Site content managers may wish to follow the Guidelines for the establishment and development of monolingual thesauri (ISO 2788-1986) and the Guidelines for the establishment and development of multilingual thesauri (ISO 5964-1985). Questions to think about include:%0a* whether a scheme already exists and can be reused%0a* number of levels in a multilevel scheme (not too shallow, not too deep -- e.g. 3)%0a
 * number of categories per page (not too many, not too few -- e.g. 3)%0a* consistent use of singular ([@[[Mercury]] is a [[!planet]]@]) or plural ([@[[Mercury]] is in the [[!planets]] category@])%0a* disambiguation and use of phrases ([@[[!musical instruments]]@] and [@[[!medical instruments]]@])  or [[Cookbook:Subpage Markup]] ([@[[!Instruments*Musical]]@] and [@[[!Instruments*Medical]]@])%0a%0aOr you can just let people use whatever category terms they find meaningful. A vocabulary (or "folksonomy") will emerge over time.%0a%0a!! Contributors%0aRadu, John Rankin, `SolaRoofGuy, David A Spitzley%0a%0a%0a%25trail%25 %3c%3c|[[DocumentationIndex]]|>>%0a
+time=1180214677

Added: trunk/oggdsf/website/wikilib.d/PmWiki.ChangeLog
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.ChangeLog	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.ChangeLog	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta64 ordered=1 urlencoded=1
+agent=pmwikiedit
+author=Pm
+charset=ISO-8859-1
+csum=
+host=74.200.73.46
+name=PmWiki.ChangeLog
+rev=844
+targets=PmWiki.DocumentationIndex,Cookbook.RecentChanges,PmWiki.MailingLists,PmWiki.WikiFarms,SiteAdmin.SiteAdmin,PmWiki.Version,SiteAdmin.Status,SiteAdmin.AuthList,PmWiki.PageTextVariables,PmWiki.Links,PmWiki.WikiStyles,PmWiki.PageLists,PmWiki.Forms,PmWiki.PageListTemplates,PmWiki.FAQ,Site.AuthList,PmWiki.Passwords,PmWiki.Skins,PmWiki.PageVariables,PmWiki.MarkupExpressions,Site.PageListTemplates,PmWiki.PageDirectives,PmWiki.ConditionalMarkup,PmWiki.AuthUser,PmWiki.PagelistVariables,PmWiki.Uploads,PmWiki.WikiTrails,PmWiki.TableDirectives
+text=(:Summary: Log of changes made to PmWiki by [[Release(Notes)]]:)%0a%25rfloat trail%25%3c%3c|[[Documentation Index]]|>>%25%25%0a%0aSee [[Cookbook/RecentChanges | the cookbook recent changes page]] for additional updates and activity by other developers, or join the [[PmWiki/MailingLists | pmwiki mailing lists]] to discuss feature development with us.%0a%0a!!!Version 2.2.0-beta65 (2007-11-17)%0a* Fix SiteAdmin.AuthList so that it defaults to list=all (reported by Roman).%0a* Fix pmwiki skin to include xmlns= attribute in %3chtml> tag (PITS:00989, reported by Mateusz Czaplinksi and Petko Yotov).%0a%0a!!!Version 2.2.0-beta64 (2007-11-13)%0a* Add times to PmWiki date parsing (e.g., 2007-08-09T12:22:04).%0a* Suppress warning from ini_set in diag.php (suggested by Petko).%0a* Fix handling of -> links in trails (reported by Eemeli Aro).%0a* Add .kml and .kmz as valid attachment types. %0a* Fix handling of [=&amp;=] in markup (PITS:00988, reported by Stirling Westrup).%0a* Fix d
 uplication of language markers in $XLLangs (PITS:00987, reported by Stirling Westrup).%0a* Correct typo in DRange() call in stdmarkup.php (reported by Stirling Westrup).%0a* Turn on error displays when diagnostics are enabled.%0a* Default PHP's pcre.backtrack_limit to at least 1000000.%0a%0a!!!Version 2.2.0-beta63 (2007-07-31)%0a* Added $SkinDirectivesPattern to allow adjustments to available skin directives (requested by Petko).%0a* Fix default permissions on Site.AuthUser and Site.AuthList (reported by Scott Connard).%0a* Add "monospace" to pmwiki.css default (reported by Joshua Timberman, with assistance from H. Fox)%0a* Fix problem with slashes in wildcards to name= and group= parameters (reported by Ian MacGregor).%0a%0a!!! Version 2.2.0-beta62 (2007-07-21)%0a* Fix bug in trails introduced by beta61 (reported by charlequin).%0a%0a!!! Version 2.2.0-beta61 (2007-07-19)%0a* Add ability to grab trails by section.%0a* Add an "ontrail" condition (from suggestions by charlequi
 n).%0a%0a!!!Version 2.2.0-beta59, 2.2.0-beta60 (2007-07-18)%0a* Fix problem with upgrade.php on [[wiki farms]] (reported by Scott Connard).%0a* Fix problem with distributed version of Site.AuthUser (reported by Jon Haupt).%0a%0a!!!Version 2.2.0-beta58 (2007-07-17)%0a* Significant change: Site.AuthUser, Site.Blocklist, Site.ApprovedUrls, and Site.NotifyList now appear in the [[SiteAdmin]] group by default.%0a** Note: if you limit groups by setting $GroupPattern, you now need to include SiteAdmin (see [[Cookbook:LimitWikiGroups]])%0a* Abort if ldap: authentication requested and libraries aren't present.%0a* Added "upgrades.php" script to handle various migration issues.%0a* Current PmWiki [[version]] is now held in [[SiteAdmin.Status]] .%0a* Fix ?action=postupload to follow ?action=upload settings.%0a* Improvements to [[SiteAdmin.AuthList]] page (suggestions and fixes from Ian MacGregor).%0a* Allow leading underscores in attachment names (requested by Christophe David).%0a%0a!
 !!Version 2.2.0-beta57 (2007-06-15)%0a* Fix AsSpacedUTF8() to work like AsSpaced() (reported by Petko).%0a* Qualify page links that contain parentheses (reported by Petko).%0a* Fix bug in [@(:input default $:var ... :)@] (reported by Crisses).%0a%0a!!!Version 2.2.0-beta56 (2007-06-13)%0a* Fix AsSpaced() to not add spaces before leading digit, and treat hyphenated digits as complete numbers.%0a* Fix infinite recursion in self-referencing [[page text variables]] (PITS:00915).%0a* Fix bug introduced in beta55 not handling end [[links|anchors]] correctly (reported by Roman).%0a%0a!!!Version 2.2.0-beta55 (2007-06-11)%0a* Fix attributes to [@(:input e_form:)@] (PITS:00387, re-reported by Crisses).%0a* UpdatePage() now calls StopWatch() to record posting.%0a* Display stopwatch output as part of redirect.%0a* Fix [[wiki styles]] bug when $EnableLinkPageRelative is set (reported by Petko).%0a* Revise TextSection() code to hopefully avoid %25newwin%25[[http://pcre.org/|pcre]] limits (
 reported by Kathryn Andersen, Knut Alboldt).%0a* Add wrap=inline and wrap=none options to [[page list(s#pagelistwrap)]].%0a%0a!!!Version 2.2.0-beta53, 2.2.0-beta54 (2007-06-02)%0a* Improve error message reporting for markup rules (suggestion by Knut Alboldt).%0a* Clean up more E_NOTICE warnings (reported by Ian MacGregor).%0a* Add focus= option to [=(:=][[forms|input]]:) controls.%0a* Added CSS [@.faqtoc@] class, to be able to display only the questions coming from the #includefaq [[page list template(s)]].%0a* Changed [[PmWiki.FAQ]] to use .faqtoc class.%0a* Fix bug in TextSection (PITS:00935, reported by Jean-Fabrice).%0a* Fix bug in [[page list(s#pagelisttrail)]] caching of trails.%0a%0a!!!Version 2.2.0-beta52 (2007-05-26)%0a* Add per-PageStore attributes (from a suggestion by Tobias Thelen).%0a* Add [@{$PasswdRead}@], [@{$PasswdEdit}@], etc. to display page password settings.%0a* Add [[Site.AuthList]] to display all password permissions on a site.%0a* Reorder $PageListFi
 lters slightly.%0a* Add "passwd=" option to [[page list(s#pagelistpasswd)]], to return only those pages that have some sort of [[password(s)]] attribute on them.%0a* Add line numbers to StopWatchHTML output.%0a* Clean up handling of $AuthCascade.%0a%0a!!!Version 2.2.0-beta51 (2007-05-23)%0a* Add fmt=count to [[page list(s#pagelistcount)]] (reminder from Hans).%0a* Ignore hidden files in [[skin(s)]] directories when searching for .tmpl (suggestion by Stephan Becker).%0a* Clean up queuing of pages to be updated in .pageindex .%0a* Reset $LinkTargets() at beginning of each UpdatePage() sequence.%0a%0a!!!Version 2.2.0-beta50 (2007-05-22)%0a* Fix HTML cache when drafts are enabled, or other recipes using CondAuth().%0a* Prevent [[page lists]] with protected pages from HTML cache.%0a%0a!!!Version 2.2.0-beta48, 2.2.0-beta49 (2007-05-21)%0a* Fix spurious value= attribute in %3ctextarea> tag generated by [@(:input textarea ... :)@].%0a* Allow either [@(:input default ...:)@] or [@(:i
 nput defaults ...:)@].%0a* Fix problem with page text variable handling in [@(:input defaults:)@].%0a* Allow either [@(:template default:)@] or [@(:template defaults:)@] in [[page list templates]].%0a* Fix a bug handling dates with suffixes (reported by Crisses).%0a%0a!!!Version 2.2.0-beta47 (2007-05-20)%0a* Fix bug with quote handling in [@(:include:)@] options (reported by Hans).%0a%0a!!!Version 2.2.0-beta46 (2007-05-19)%0a* Moved $PageTextVarPatterns definition from scripts/stdmarkup.php to pmwiki.php.%0a* Ignore Markup() rules that have unresolved $when parameters.%0a* Fix issue in authuser.php when $auth array isn't set (contributed by Ben Stallings).%0a* The [@(:include:)@] directive now performs template argument processing on the included text.%0a* Optimized [@(:pagelist:)@] slightly when sorting on [[page variables]].%0a* Refactored [@(:input ... :)@] markups.%0a* Added HandleDispatch(), which allows action handlers to easily redispatch to other actions (and add mes
 sages).%0a* Added FmtTemplateVars(), to perform various template-substitutions.%0a%0a%0a!!!Version 2.2.0-beta45 (2007-05-02)%0a* Update pmwiki's date parsing to use a common routine, recognizing dates within strings and restricting range to 1900-2039.%0a* Add additional parameter to "date" conditional.%0a* Add if= option to [[page list(s#pagelistif)]] (suggested by Crisses).%0a* Refactor code to use TextSection() and RetrieveAuthSection() functions.%0a* The value= parameter to [@(:input textarea:)@] now works properly (including values loaded from $InputValues).%0a* The [@(:input default:)@] directive now allows loading input control defaults from another page via the [@source=@] parameter.%0a* Remove automatic call to FmtPageName() in $ROSPatterns.  Add $ROEPatterns (from suggestions by JB and others).%0a* Fix minor variable bugs in scripts/crypt.php.%0a* Remove E_NOTICE errors (reported by Hans).%0a* Fix handling of page variables when pagename is empty or not provided.%0a
 * Add $EnableLinkPageRelative configuration option.%0a* Clean up handling of arguments to [@{(ftime ...)}@].%0a* Remove mailposts.php call in stdconfig.php (reported by Christophe David).%0a%0a!!!Version 2.2.0-beta44 (2007-04-16)%0a* Fix case conversion of U+027D and U+026B (reported by Petko).%0a* Add $FTimeFmt to set default formatting for [@{(ftime)}@].%0a* Add %25s conversion to [@{(ftime)}@] for systems that don't have it by default.%0a* Report an error if edit [[form(s)]] cannot be read (suggested by Hans).%0a* Don't report ?cannot acquire lockfile when simply browsing pages.%0a* Add $EnableReadOnly flag to signal when PmWiki is to be run in read-only mode.%0a%0a!!!Version 2.2.0-beta43 (2007-04-15)%0a* Update drafts code to add $EnablePublishAttr and change button labels when drafts are enabled (PITS:00755).%0a* Removed no-longer-needed 'compat1x.php' and 'mailposts.php' from distribution.%0a* Added $DraftRecentChangesFmt.%0a* Added "[[markup expressions]]" [@{(...)}@]
  into the core.%0a* Added charset= attribute to saved pages.%0a* Update pagelist.php and xlpage-utf-8.php to handle case-insensitive searches.%0a* Added some optimizations to phpdiff.php script to produce more useful history information.%0a%0a!!!Version 2.2.0-beta42 (2007-03-27)%0a* Fix a bug with order=title in pagelists (reported by Anno).%0a%0a!!!Version 2.2.0-beta41 (2007-03-26)%0a* Added $EnableWSPre option, which allows easy adjustment of the "leading space -> preformatted text" (or "whitespace") rule.%0a* Added a new "pre" wikistyle, to designate blocks that are to be treated as preformatted text.%0a%0a!!!Version 2.2.0-beta40 (2007-03-24)%0a* Fix bug with order=title in pagelists when using $Titlespaced (PITS:00906, reported by Feral).%0a* Report state of allow_url_fopen when downloads fail in blocklist.php.%0a%0a!!!Version 2.2.0-beta39 (2007-03-23)%0a* Allow page variable filters to appear as options in [@(:template defaults:)@] (reported by SteP).%0a* Updated [[Site
 .PageListTemplates]] to use [@(:template:)@] directives.%0a* Remove '#wikileft h1' and '#wikileft h5' from pmwiki default stylesheet.%0a%0a!!!Version 2.2.0-beta38 (2007-03-22)%0a* Strip control characters from $ChangeSummary.%0a* Fix problem with count=m..n where m..n is outside the range of available pages (reported by SteP).%0a* Allow [@(:template default ...:)@] to specify a class= option.%0a* [[PmWiki/PageDirectives#redirect|Redirect]] pagename can now include an anchor (PITS:00558)%0a%0a!!!Version 2.2.0-beta37 (2007-03-16)%0a* Allow an optional space after comma separators in wildcard patterns (reported by Han Baas).%0a%0a!!!Version 2.2.0-beta36 (2007-03-16)%0a* Allow nested [[page text variables]] to work, remove extraneous ENT_NOQUOTES parameter.%0a* Add new [@(:template ...:)@] directives for pagelist templates.%0a* Modify count= option to pagelists to allow for alternate ranges.%0a%0a!!!Version 2.2.0-beta35 (2007-03-05)%0a* Fix bug in [[conditional markup]] parsing 
 (reported by Christophe David).%0a%0a!!!Version 2.2.0-beta33, 2.2.0-beta34 (2007-03-01)%0a* Refactor wildcard handling into its own GlobToPCRE function.%0a* Allow negated wildcards for page variable filters in pagelists (PITS:00878, reported by Jiri)%0a* Fix wildcards so that spaces no longer separate patterns (use commas).%0a* Fix handling of '&amp;' prior to [@(:input:)@] and other directives (reported by Luigi).%0a* Adjust position of [@%25define=...%25@] [[wiki styles]] to occur after ampersands.%0a* Adjust copyright dates on many files.%0a* Allow spaces around text variable names in [[page text variable(s)]] markups.%0a%0a!!!Version 2.2.0-beta32 (2007-02-28)%0a* Fix erroneous $EnableCreole item in docs/sample-config.php (reported by Sigurd).%0a* Added [@(:elseif:)@] and [@(:else:)@] markups (PITS:00787).%0a* Fix global $Skin variable handling when using SetSkin from within markup.%0a* Make sure directives aren't treated like [[page text variables]] (reported by Petko).%
 0a* Remove call to ResolvePageName() from authuser.php .%0a* Simplify [[PmWiki/AuthUser#LDAP|LDAP]] authentication for Active Directory sites.%0a* Cache lowercase/uppercase patterns in AsSpacedUTF8().%0a%0a!!!Version 2.2.0-beta31 (2007-02-11)%0a* Fix bug with sorting on [[pagelist variables]] (reported by Kathryn Andersen).%0a%0a!!!Version 2.2.0-beta29, 2.2.0-beta30 (2007-02-09)%0a* MakePageName now uses the first matching entry of $PagePathFmt as the home page of groups without a home page.%0a* Add AsSpacedUTF8() to handle title spacing in utf-8 (PITS:00875, contributed by Petko, Celok)%0a* Fix $RequestedPage when running with utf-8.%0a* Add %3cmeta> content-type tag for utf-8.%0a* Add an experimental caching system for pagelists.%0a* Fix $SuffixPattern and link suffixes for utf-8 (PITS:00881, reported by ppip).%0a%0a!!!Version 2.2.0-beta28 (2007-02-03)%0a* Update blocklist.php so that all posted fields are checked for block values (PITS:00850).%0a%0a!!!Version 2.2.0-beta27
  (2007-01-25)%0a* Fix markup processing sequence for [@(:input default:), (:input select:)@], etc. (problem noted by Marc).%0a* Fix default value of [@order=@] parameter to MakePageList().%0a%0a!!!Version 2.2.0-beta26 (2007-01-23)%0a* Fix a bug where pagelist list= option had no effect when reading from trails (from an rss problem noted by Russ Fink).%0a%0a!!!Version 2.2.0-beta24, 2.2.0-beta25 (2007-01-22)%0a* Add a scripts/creole.php module for Creole markup (http://www.wikicreole.org/).%0a* Move WikiWords out of the core defaults -- can be enabled via $EnableWikiWords.%0a* Fix handling of WikiWords following & or #, as in [=&AElig; and #FFFF00=] (reported by Moni Kellermann).%0a* Adjust FormatTableRow() to support Creole-style tables (using single |'s).%0a* Update docs/sample-config.php with new configurations and options.%0a* Added code to allow Abort() to refer to additional information on pmwiki.org.%0a* Added $EnableSkinDiag, which checks templates for required %3c!--H
 TMLHeader--> and %3c!--HTMLFooter--> directives.%0a* Removed deprecated $BasicLayoutVars support from skins.php.%0a%0a!!!Version 2.2.0-beta22, 2.2.0-beta23 (2007-01-17)%0a* Added $EnableActions, to allow pmwiki.php to be included without generating output (from a suggestion by Wouter Groeneveld).%0a* Fix bug in "order=" option to [@(:pagelist:)@] (reported by Mike Bishop).%0a* Change DisplayStopWatch() function to StopWatchHTML().%0a* Allow multiple lines for markup:, wiki:, and page: template directives (reported by Marc)%0a%0a!!!Version 2.2.0-beta21 (2007-01-12)%0a* Fix %3cvspace> bug in searchresults output (PITS:00846, reported by M. Czaplinski, marc, and others).%0a* Fix numerous E_NOTICE warnings and incorrect constants (PITS:00853, contributed by AndrewFyfe).%0a%0a!!!Version 2.2.0-beta20 (2007-01-11)%0a* $FeedPageListOpt needs to be declared global in feeds.php.%0a* Add "404 Not Found" status code to ?invalid page name aborts (PITS:00854, suggested by Athan).%0a* Remo
 ve stale entries from $PageExistsCache when a new PageStore is added (reported by Hans).%0a%0a!!!Version 2.2.0-beta19 (2006-12-29)%0a* Have blocklist check $_POST['text'] only when it is set (from a report by Simon).%0a%0a!!!Version 2.2.0-beta18 (2006-12-28)%0a* Change $pagename parameter in UpdatePage() to be passed by reference (suggestion by J. Meijer).%0a* Fix $EnableRobotsCloakActions so that it works again with page variables.%0a* Add "XML Sitemaps" to $RobotPattern.%0a* Change $MetaRobots to return "nofollow,noindex" for non-existent pages.%0a* Prefer "404 Not Found" to "403 Forbidden" for [[(PmWiki:)robots]] attempting to do invalid actions on non-existent pages.%0a* Add rel='nofollow' to "create attachment" links.%0a* Added class='inputbox' to select boxes (suggested by Hans).%0a* Added .odt, .ods, and .odp file extensions to allowed [[uploads]] (suggested by Algis Kabaila, Robin Sheat, and others).%0a* Clean up some error warnings (PITS:00801, contributed by psvo).
 %0a* Set $ScriptUrl to 'https:' when accessed via SSL link (suggestions from C. Ridderstr&ouml;m, H. Fox, PITS:00410, PITS:00527, PITS:00595).%0a* Fix bug in link= and trail= options to [@(:pagelist:)@] (reported by C. Ridderstr&ouml;m).%0a%0a!!!Version 2.2.0-beta17 (2006-12-13)%0a* Fix spurious hidden field in [@(:searchbox:)@] output (reported by Hans).%0a* Fix $CaseConversions array for \xc4\xb1 and \xc5\xbf (reported by Petko Yotov).%0a* Refactor [@(:input:)@] markup handling.%0a* Add [@(:input select ...:)@] markup (PITS:00567).%0a* Add [@(:input default ...:)@] markup -- may change before 2.2.0 release.%0a* Add ability to set defaults for radio/checkbox/select controls.%0a%0a%0a!!!Version 2.2.0-beta16 (2006-11-10)%0a* Fix problem with [@(:e_preview:)@] directive when viewing an edit form (reported by Dominique Faure).%0a* Fix out-of-memory problem in scripts/compat1x.php when dealing with large pages to be converted (contributed by Donald Gordon).%0a* Fix problem of Va
 riable: lines immediately followed by newline (reported by Hans).%0a* Fix uninitialized variable errors in FormatTableRow() (reported by Bob Sanders).%0a* Fix second argument of MakeBaseName() (provided by Stirling Westrup).%0a%0a!!!Version 2.2.0-beta15 (2006-10-16)%0a* Fix bug with displaying multi-line [@(:var:value:)@] [[page text variables]] (reported by Pico).%0a* Improve PageStore ls() method slightly, to restrict pagename searches to directories of a given depth (based on an issue reported by Chris Cox).%0a* Added $IsBlocked status variable to scripts/blocklist.php.%0a* Added $UnapprovedLink array to report unapproved links.%0a* Added $TimeISOFmt, $TimeISOZFmt, and $CurrentTimeISO variables.%0a* Switched scripts/feeds.php to use $TimeISOZFmt instead of $ISOTimeFmt.%0a* Added [@request=@] option to [@(:pagelist:)@], switched pagelist to default to not use url/form parameters.%0a* Fixed bug with array [@{$$options}@] in pagelist.%0a%0a!!!Version 2.2.0-beta14 (2006-10-06
 )%0a* Fix problem with extra parameter to mail when $NotifyParameters is empty (reported by Tom Lederer).%0a* Improve configurability of $SearchPatterns (from suggestions by Stirling Westrup).%0a* Add ability for $WikiWordCount to disable wikiword spacing (PITS:00327).%0a%0a!!!Version 2.2.0-beta13 (2006-10-04)%0a* Fix handling of angle brackets (and potential XSS) in pagelists combined with page text variables (noted by Pico).%0a%0a!!!Version 2.2.0-beta12 (2006-10-03)%0a* Added the UpdatePage() function into the core.  %0a%0a!!!Version 2.2.0-beta11 (2006-10-03)%0a* Added ability to automatically create targets.%0a* Added sample code to docs/sample-config.php for automatic generation of Category.* pages.%0a* Fixed character escapes in pagelist [@{$$option}@] variables.%0a%0a!!!Version 2.2.0-beta10 (2006-10-02)%0a* Added [@{$$option}@] variables to get option values from [@(:pagelist:)@] (based on a recipe from Martin Fick).%0a* Changed [@{$PageCount}, {$GroupPageCount}, and {
 $GroupCount}@] to be [@{$$PageCount}, {$$GroupPageCount}, and {$$GroupCount}@].%0a* Added [@{$BaseName}@] page variable and $BaseNamePatterns.%0a%0a!!!Version 2.2.0-beta9 (2006-10-01)%0a* Fix bug with $EnablePageListProtect (reported by Brent Zupp).%0a* Added ability to select based on page variables in [@(:pagelist:)@].%0a%0a!!!Version 2.2.0-beta8 (2006-09-30)%0a* Update scripts/blocklist.php to check only $_POST['text'] instead of entire markup text.%0a* Fix bug in pagelist.php that wouldn't return correctly formatted array in certain circumstances (noted by Florian Fischer and JDem).%0a%0a!!!Version 2.2.0-beta7 (2006-09-30)%0a* Added scripts/blocklist.php to core.%0a* Updated handling of $PageTextVarPatterns.%0a* Eliminated need for extra flush() steps in notify.php, pagelist.php.%0a%0a!!!Version 2.2.0-beta6 (2006-09-27)%0a* Fix bug with initialization of $FeedPageListOpt in scripts/feeds.php (reported by Roman).%0a* Fix bug with over-eager [@(:textvar:value:)@] markup (f
 rom a bug reported by Chris Cox).%0a%0a!!!Version 2.2.0-beta4, 2.2.0-beta5 (2006-09-27)%0a* Fix bug with name= option in pagelist (reported by Ben Wilson).%0a* Fix bug with array_merge under PHP 5 (reported by Kathryn Andersen).%0a%0a!!!Version 2.2.0-beta3 (2006-09-26)%0a* Remove extra %3c!----> comment at end of table directives (noted by Ben Stallings).%0a* Fix directive form of page text variables (reported by Kathryn Andersen).%0a* Add first version of new modular pagelist code.%0a%0a!!!Version 2.2.0-beta2 (2006-09-25)%0a* Add support for [@{$:var}@] page text variables, and [@(:var:...:)@] markup.%0a* Fix default setting of $EnableRelativePageVars in docs/sample-config.php .%0a%0a!!!Version 2.2.0-beta1 (2006-09-25)%0a* Added [@{*$var}@] page variables (always the currently browsed page).%0a* Convert link and page variable handling in [=(:include:)=] to be relative to the included page.%0a* Added $EnableRelativePageVars and $EnableRelativePageLinks variables, as well as 
 transition options.%0a* Added basepage= option to [=(:include:)=].%0a* Updated $GroupHeaderFmt and $GroupFooterFmt to use basepage= option.%0a* Adjusted $MakePageNamePatterns to automatically strip any #... or ?... from the end of a pagename input string (solution to a problem reported by J. Meijer).%0a%0a!!!Version 2.1.27 (2006-12-11)%0a* Backport in bug fix for TableRowFormat (from 2.2.0-beta16).%0a* Add support for [@{*$Variable}@] syntax (from 2.2.0 page variables).%0a%0a!!!Version 2.1.26 (2006-09-11)%0a* Fix a bug with variable referencing that caused feeds.php to get a confused PCache (reported by Helge Larsen).%0a%0a!!!Version 2.1.25 (2006-09-08)%0a* Fixed a bug in authuser.php that would fail if $AuthUser isn't defined (reported by Hans Huijgen).%0a* Added %3c!--XMLHeader--> and %3c!--XMLFooter--> aliases to %3c!--HTMLHeader--> and %3c!--HTMLFooter--> directives in skin templates (suggested by John Rankin).%0a* Added $PageExistsCache (suggested by John Rankin).%0a%0a
 !!!Version 2.1.24 (2006-09-06)%0a* Fixed a bug in authuser.php that had trouble dealing with non-array entries in $AuthUser (reported by Udo).%0a* Can now specify authorization groups using $AuthUser['@group'] entries.%0a* Can now specify an Apache .htgroup-formatted file for authorization groups via $AuthUser['htgroup'].%0a%0a!!!Versions 2.1.21, 2.1.22, 2.1.23 (2006-09-05, 2006-09-06)%0a* Close a potential security hole with $FarmD when register_globals is set "On".%0a* Correct a syntax error in feeds.php (noted by Ben Wilson).%0a* Fix a bug that prevented PmWiki from reading page files generated by versions prior to 0.5.6 (discovered by Milan Avramovic).%0a%0a!!!Version 2.1.20 (2006-09-04)%0a* Fixed a bug in [[PageDirectives#attachlist| [@(:attachlist:)@] ]] when passed a wikiword argument (reported by Kathryn Andersen).%0a* Changed $HTMLStylesFmt['markup'] to honor config.php setting (reported by Hans).%0a%0a!!!Version 2.1.19 (2006-08-30)%0a* Corrected a bug in the pagein
 dex code that was causing the .pageindex to not update as quickly as it should.%0a* Slightly changed the handling of 'width' and 'height' in wikistyles.php, so that they can be be applied as attributes to %3cobject> and %3cembed> tags.%0a* Updated the Keep() function to recognize closing block tags as being in the 'B' block pool.%0a* Fixed a bug with wikistyles and form tags.%0a%0a!!!Version 2.1.18 (2006-08-28)%0a* Closed a potential cross-site scripting vulnerability in table markups (reported by JB).%0a* Added [@(:input image:)@] markup (requested by JB).%0a* Fixed problem with ?action=print failing to set [@{$Action}@] (reported by Bart).%0a%0a!!!Version 2.1.17 (2006-08-26)%0a* Added some improvements to IMS caching to better handle logout and authorization actions (PITS:00573, reported by floozy and Henrik Bechmann).%0a%0a!!!Version 2.1.16 (2006-08-26)%0a* Added $SkinLibDirs variable, to select filesystem and url locations where skins may be found (resolves PITS:00708, a
 s reported by Hagan Fox, with additional suggestions from Ben Wilson).%0a* Changed [@%3c!--HeaderText-->@] to [@%3c!--HTMLHeader-->@] in skin templates, and added an optional [@%3c!--HTMLFooter-->@] directive (PITS:00767).%0a* Adjusted the pmwiki and print skins to use the new directives.%0a%0a!!!Version 2.1.15 (2006-08-25)%0a* Fixed issue dealing with order of [@@_site_*@] passwords (reported by Jean-Fabrice and others).%0a* Added $LocalDir variable (requested by John Rankin).%0a* Removed an unnecessary setting of $DefaultPage in ''scripts/pgcust.php'' (it's now handled by ResolvePageName() ).%0a* Added some variables and changes in wikistyles.php to better support wikipublisher (contributed by John Rankin).%0a* RetrieveAuthPage (PmWikiAuth) now recognizes a $level of 'ALWAYS' as indicating that access should always be allowed, regardless of current passwords or identities.%0a* Added filter specifier for AuthUser LDAP authentication (contributed by Balu).%0a%0a!!!Version 2.
 1.13, 2.1.14 (2006-08-15, 2006-08-16)%0a* Updated scripts/authuser.php to allow ldaps://... authentications (contributed by Michael Brenner).%0a* Fixed problem with numeric passwords introduced in 2.1.beta20 (reported by Christophe David and Dirk Blaas).%0a%0a!!!Version 2.1.12 (2006-08-07)%0a* Corrected typo in Site.SideBar file (reported by Judith Zacharie).%0a* Suppressed warning message for search on sites without a wikilib.d/ directory.%0a* Added capability for nested divs.%0a* Use $Transition['nodivnest'] to restore previous non-nesting div/table behavior.%0a* Including authuser.php now automatically resolves pagename.%0a* Added [@(:noaction:)@] directive to turn off actions.%0a* Fixed bug in wikistyles prior to image blocks.%0a* Added white-space as allowed wikistyle (suggested by C. Ridderstr&#246;m).%0a* Allow colons, hyphens, and dots in id= tags.%0a%0a!!!Version 2.1.11 (2006-06-09)%0a* Fixed generation of empty paragraphs around [@%25define=...%25@] wikistyles (PIT
 S:00753).%0a%0a!!!Version 2.1.10 (2006-06-04)%0a* Added a %3cspan> around the RecentChanges link in the pmwiki skin (PITS:00750, suggested by Hagan Fox).%0a* Changed the $Action variable to $ActionTitle (PITS:00749, reported by Hagan Fox).%0a* Changed $FPLTemplatePageFmt to be an array of pages to be searched for page templates, enabled searching of current page and Site.LocalTemplates page.%0a* Updated .vspace margin in sidebar for pmwiki skin (PITS:00751, by Hagan Fox).%0a%0a%0a!!!Version 2.1.9 (2006-06-02)%0a* Fixed a bug with [@[[~Author]]@] links (PITS:00530 reported by Klonk, PITS:00611 reported by weijang, PITS:00671 reported by Stirling Westrup, and helpful clues provided by Clayton Curtis).%0a%0a!!!Version 2.1.8 (2006-06-01)%0a* Added ability to specify notification entries from ''local/config.php'' as well as Site.Notify (suggested by Christophe David).%0a* Fixed $Transition['vspace'] from 2.1.7.%0a%0a!!!Version 2.1.7 (2006-05-31)%0a* Adjusted width of edit form fo
 r IE browsers (contributed by Roman and H. Fox).%0a* Suppress authentication failure error from LDAP (PITS:00739).%0a* Fixed problem with invalid page names resulting in redirect loop (PITS:00723, reported by jojoo).%0a* Added "Group." and "Group/" page name syntax, resolving PITS:00736 (from a suggestion by Pico).%0a* Changed handling of "vspace" paragraphs.%0a* Fixed some XSS vulnerabilities in uploads.php and url links (reported by Moritz Naumann, http://moritz-naumann.com).%0a* Added notify.php script, allowing finer control of email notifications.%0a%0a!!!Version 2.1.6 (2006-05-22)%0a* Optimized performance of urlapprove.php.%0a* Added [@(:if auth xyz PageName:)@] syntax.%0a* Corrected XSS bug in trails.php.%0a* Slightly improved performance of free links.%0a* Restore ability to use hyphens in InterMap links (reported by Henrik Bechmann).%0a%0a!!!Version 2.1.4, 2.1.5 (2006-03-29)%0a* Fixed problem with pagelist-based feeds (PITS:00709, reported by Jon Haupt).%0a* Added 
 [@{$Action}@] page variable. (PITS:00696, reported by Sebastian Pipping).%0a* Added stripmagic() around variables submitted to authuser.php.%0a* Fixed problem with multi-term searches containing special characters (PITS:00713, reported by Leo).%0a* Switched [[PageDirectives#attachlist| [@(:attachlist:)@] ]] to use a natural case sort (suggested by H. Fox).%0a%0a!!!Version 2.1.3 (2006-03-17)%0a* Re-fixed problem with PHP 5.1.1 and lines= option to [@(:include:)@] (PITS:00620).%0a* Fixed empty LDAP password issue (reported by Thomas Lederer).%0a%0a!!!Version 2.1.2 (2006-03-16)%0a* Fixed %3ch1>/%3ch2> tag mismatches (PITS:00702, reported by Martin Hason).%0a* Fixed bug with $AllowPassword and "nopass" (reported by M. Weiner and bram brambring).%0a* Improved the speed of RSS and other web feeds when $EnablePageListProtect is not set.%0a%0a!!!Version 2.1.1 (2006-03-13)%0a* Fixed a bug with multiple authorization groups as a password (PITS:00699, reported by Ari Epstein).%0a* Upda
 ted the authorization code to be a bit more liberal with password/group settings.%0a* Updated PmWiki.FAQ page to be able to grab FAQ items from other pages in the documentation.%0a%0a!!Version 2.1.0 (2006-03-12)%0a* Many many documentation updates (special thanks to many authors).%0a* Allow trailing underscores in upload names (requested by Hans).%0a* Fixed 'ak_print' problem causing accesskey='a' for print (noted by Pico).%0a* Added code to make sure each anchor is generated only once per page (for XHTML validity).%0a* Added a $BlockPattern variable to recognize block HTML tags.%0a* Made an adjustment to Keep() so that it places strings with block HTML into the 'B' pool.%0a* Adjusted stdmarkup.php to not produce paragraphs for keep blocks in the 'B' pool.%0a* Corrected a variety of i18n phrases.%0a* Added class='escaped' to distinguish [=@@...@@=] from [=[@...@]=] (from a comment by Hans).%0a* Slightly changed styling of .faq divs.%0a* Made the edit textarea a couple of row
 s smaller to better fit on smaller displays (suggested by H. Fox).%0a%0a%0a!!!Version 2.1.beta38 (2006-03-09)%0a* Fixed auth bug in HandleSearchA (reported by noskule).%0a* Fixed print skin to be XHTML 1 compliant and use updated i18n phrases (PITS:00690, contributed by Athan).%0a* Fixed ?action=search to honor markup escapes when checking current page for ([==]:searchresults:).%0a* Fixed bug in handling blank lines in preformatted text.%0a* Fixed extra newlines appearing after [=[@...@]=] markups (reported by H. Fox).%0a* Added class= and caption= arguments for [@(:markup:)@] markup.%0a* Added apply=pre to wikistyles.%0a%0a!!!Version 2.1.beta37 (2006-03-08)%0a* Converted [@(:redirect:)@] to be a true markup, now honors conditional markup and includes. %0a* Added status= option to redirect.%0a* Allow redirecting to an anchor within a page (PITS:00558).%0a* Added experimental server-side page caching.%0a%0a!!!Version 2.1.beta36 (2006-03-06)%0a* Fixed problem with PmWiki under
  PHP 5.1.2 with lines= option to [@(:include:)@] (PITS:00620, thanks to Eric Wolleson for the fix).%0a* Added [@(:if exists PAGENAME:)@] conditional markup.%0a* Fixed bug with pages using 'nopass' as password (reported by H. Baas and J. Demartini).%0a%0a!!!Version 2.1.beta35 (2006-03-05)%0a* Revised authorization code to be faster/cleaner, and to support "@_site_edit"  authorization.%0a* Adjusted Site.SideBar so that edit permissions default to site's edit permissions.%0a%0a!!!Version 2.1.beta34 (2006-03-04)%0a* Updated the simuledit.php script so that an author won't lose edits when the merge fails (PITS:00391).%0a%0a!!!Version 2.1.beta33 (2006-03-02)%0a* Added transparent button images (PITS:00347, suggested by Klonk).%0a* Added some new button images to pub/guiedit, including a button "blank" for creating new buttons.%0a* Added $EditRedirectFmt option to allow save/cancel in ?action=edit to redirect somewhere other than the current page (PITS:00674, requested by T. Dowlin
 g).%0a* Restored lost scripts/.htaccess and docs/.htaccess files.%0a* Added [@{$Description}@] page variable, changed feeds.php to use this instead of [@$ItemDesc@].%0a* Added conditional expressions, based on cookbook recipe from D. Faure (PITS:00531).%0a%0a!!!Version 2.1.beta32 (2006-02-27)%0a* Fixed minor glitch with call to flush() in pagelist.php causing spurious "headers already sent" warnings (reported by Robin Sheat and others).%0a%0a!!!Version 2.1.beta31 (2006-02-26)%0a* Changed "inputbox" to "inputbutton" in [@(:searchbox:)@] directive (reported by Hans).%0a* Switched setting of $SkinDir to include a leading "./".%0a* Added option to suppress fields in ?action=attr display.%0a%0a!!!Version 2.1.beta30 (2006-02-25)%0a* Fixed bug with custom $SearchBoxFmt (noticed by Hans and Han Baas).%0a%0a!!!Version 2.1.beta29 (2006-02-24)%0a* Restored default setting of $EnablePageListProtect to 1 (was inadvertently switched to zero in beta27).%0a* Fixed "group=" option in [@(:sea
 rchbox:)@], and added ability to pass other options to search results.%0a* Added rule to ignore a blank line immediately following a heading (suggested by J. Durcholz and H. Fox).%0a* Revised pmwiki skin stylesheet (contributed by H. Fox)%0a* Added [@%3c!--PageActionFmt-->@] section to pmwiki skin.%0a* Added [@target=@] option to [@(:searchbox:)@].%0a* Added change to use the current page for ?action=search if it has @@[=(:=]searchresults:)@@ in the page's markup.%0a* $PageSearchForm can now be an array of pages to possibly be used to display the results of ?action=search -- first one found is used (suggested by Hans).%0a* Fixed bug with pageindex not including page's name in list of terms to search.%0a%0a!!!Version 2.1.beta27-28 (2006-02-24)%0a* Removed .linkindex, converted to .pageindex for faster word searches.%0a* Fixed bug with setting of $AuthId after logins.%0a* Added order=group for pagelists (requested by B. Boltwood)%0a* Added appropriate settings for magic_quotes
 _runtime and magic_quotes_sybase PHP settings.%0a* Fixed problem with include lines=... chopping off last line of text when fewer than requested lines in page.%0a* Updated handling of links to non-existent pages and query strings.%0a* Added some useful comments to scripts/feeds.php.%0a%0a%0a!!!Version 2.1.beta26 (2006-02-16)%0a* Changed PmWiki's default pmwiki.css styles to look a little cleaner in various browsers (suggestions from H. Fox).%0a* The [@(:include:)@] directive now supports a self=0|1 parameter to tell the directive if it should include the current page.%0a* $GroupHeaderFmt and $GroupFooterFmt now have "self=0" added to prevent their contents from being displayed twice.%0a* Page links with query arguments are now treated as "existing page" links even if the page does not exist (from suggestions by Jon Haupt).%0a* Modified scripts/author.php so that $Author is automatically set from $AuthId (unless overridden by a local config or by the author).%0a* Added [@orde
 r=random@] option to [@(:pagelist:)@].%0a* Added $Transition['fplbygroup'] to restore FPLByGroup function.%0a* Changed $EnableDefaultWikiStyles to $EnableWikiStyles.%0a* Added $UploadNameChars to allow customization of characters in upload filenames.%0a%0a%0a!!!Version 2.1.beta24-25 (2006-02-08)%0a* Improved interface to transition.php code to allow better granularity.%0a* Changed default of $EnableTransitions to 0.%0a* Fixed problem with [=(:markup:)=] closing divs (reported by H. Fox).%0a* Added $Action value for ?action=search (suggested by H. Fox).%0a* Added class=inputbox and class=inputbutton to various input controls (PITS:00577, suggested by H. Fox, Hans, and others).%0a* Fixed bug with "list=normal" when drafts enabled.%0a%0a!!!Version 2.1.beta23 (2006-02-07)%0a* Fixed bug with PageExists("") returning true (reported by Sebastian Siedentopf and others).%0a* Fixed $InterMapFiles to allow fmt substitutions.%0a* Removed unused $DiffAuthorPageExistsFmt and $DiffAuthorPa
 geMissingFmt from pagerev.php.%0a* Resolved some issues of "double-posts" and simultaneous edits.%0a* Added [@{$LastModifiedSummary}@] page variable.%0a* Allow spaces around '#' in [@[[target | # ]]@] links (suggested by Ryan Varick).%0a* Added docs/UPGRADE.txt (thanks to Hagan Fox).%0a* Added draft capabilities with $EnableDrafts = 1 .%0a* Changed default setting of $UploadUrlFmt to be based on $PubDirUrl (excellent suggestion by Hagan Fox).%0a* Removed problem of simultaneous edits interfering with reading of simple text files in wiki.d/ .%0a* Pressing "Save" with no text changes now actually performs a save.%0a%0a!!!Version 2.1.beta22 (2006-01-28)%0a* Fixed a bug in feeds.php with ?action=dc.%0a* Added code to be able to capture remainder of trail lines in trail index pages.%0a%0a!!!Version 2.1.beta21 (2006-01-27)%0a* Updated page variable code to better handle null values of $pagename.%0a* Improved guard against register_globals poisoning (courtesy of Francesco 'ascii' O
 ngaro).%0a* Added a %3cpubDate> tag to RSS feeds (from suggestions by Jean Demartini).%0a* Added wildcard capabilities for pagelists and conditional markups.%0a* Improved page-not-found handling, changed Site.PageNotFound (PITS:00556).%0a* Fixed bug in whitespace handling (reported by Christian Ridderstrom).%0a* Fixed handling of query strings and anchors in trail index pages.%0a* Null targets in links now produce null output.%0a%0a!!!Version 2.1.beta20 (2006-01-12)%0a* Redesigned/improved handling of session authorization variables.%0a* Suppressed warning from fileowner/filegroup in fixperms (courtesy Dominique Faure)%0a* Restored Last-Modified headers to algorithm used in 2.1.beta17, but the code now detects changes in configuration files and recipes.%0a* Added @@[=(=]:encrypt %3cphrase>:)@@ markup, to simplify generation of encrypted passwords in Site.AuthUser.%0a%0a!!!Version 2.1.beta18-19 (2006-01-10)%0a* Added 'class=' option to [@(:pagelist:)@] (based on suggestions f
 rom H. Bass).%0a* Changed `Site.InterMap to [@{$SiteGroup}.InterMap@].%0a* Fixed E_NOTICE errors.%0a* Corrected bug in $SaveAttrPatterns in scripts/stdmarkup.php.%0a* Removed $text global variable (use $_POST, $_GET, or $_REQUEST['text']).%0a* Removed saving of 'excerpt' attribute -- this is being reworked.%0a* Fixed bug with PageVar's handling of pagenames containing slashes (reported by Hans).%0a* Page action links in PmWiki skin no longer display with "non-existent page" decorations.%0a* Added more [[(PmWiki:)robots]] to $RobotPattern.%0a* Adjusted script to generate Last-Modified headers whenever $LastModFile is set.%0a* Added docs/ directory, several documentation files, and README.txt (courtesy H. Fox).%0a* Moved sample-config.php and COPYING to docs/ directory.%0a%0a!!!Version 2.1.beta16-17 (2005-12-29)%0a* Fixed bug with titled links (reported by blues).%0a* Restored $FPLFunctions variable.%0a* Restored [@(:if enabled:)@] conditional (PITS:00630).%0a* Fixed bug with 
 PCache.%0a* Added rel='nofollow' to various links where [[(PmWiki:)robots]] should not be going (suggestion by H. Fox).%0a%0a!!!Version 2.1.beta15 (2005-12-28)%0a* Removed Main.GroupAttributes and PmWiki.GroupAttributes from the distribution.%0a* Switched to using _crypt() for AuthUserConfig (requested by D. Faure).%0a* Fixed bug in httpauth.php with double-prompting for passwords (noted by M. Weiner).%0a* Added new page variables code, adding PageVar() function and redesigning FmtPageName().%0a* Added [[PmWiki.PageVariables]], removed PmWiki.MarkupVariables.%0a* Added [@(:if equal ...:)@].%0a* Optimized processing of includes and conditional markup.%0a* Optimized PCache().%0a* Removed deprecated $NewlineXXX variable.%0a* Added 'ctime' page attribute.%0a* Redesigned pagelist.php to use pagelist templates.%0a* Changed $EnablePageListProtect to default to 1.%0a* Added Site.PageListTemplates.%0a* Removed FPLByGroup, FPLSimple, and FPLGroup.%0a* Added more conversions to scripts
 /compat1x.php (suggested by C. Ridderstr&#246;m).%0a%0a!!!Version 2.1.beta13-14 (2005-12-10)%0a* Added scripts/feeds.php, which replaces scripts/rss.php (now removed from the distribution).%0a* Trail links are no longer saved as part of targets=.%0a* Keywords and description markup are saved as meta values in page files, along with an initial portion (excerpt) of the rendered HTML for a page.%0a%0a!!!Version 2.1.beta12 (2005-12-07)%0a* Fixed bug with storing group authorizations via ?action=attr (discovered by Dan Weber).%0a%0a!!!Version 2.1.beta11 (2005-12-06)%0a* Fixed problem with ?action=login for admin password (PITS:00612, reported by Klonk).%0a* Updated xlpage-utf-8.php for sites that have pcre installations that don't understand /u (reported by Andres Kulikauskas).%0a%0a!!!Version 2.1.beta10 (2005-12-05)%0a* Class attributes in wikistyles are now additive.%0a* Added capability for shared pages in farms (PITS:00459).%0a* Fixed XHTML validation problem for empty pageli
 sts (PITS:00601, reported by Mickael Nilsson).%0a%0a!!!Version 2.1.beta9 (2005-11-30)%0a* Added ?action=login.%0a%0a!!!Version 2.1.beta8 (2005-11-30)%0a* Fixed a problem with paragraphs after lists (reported by Bronwyn Boltwood).%0a* Added [[(PmWiki:)robot(s)]] controls to scripts/robots.php (PITS:00563).%0a%0a!!!Version 2.1.beta7 (2005-11-29)%0a* Added capability to load InterMap entries from Site.InterMap page (PITS:00522).%0a* Fixed bug with AuthList code (reported by Ilana Kingsley and others).%0a%0a!!!Version 2.1.beta6 (2005-11-29)%0a* Revised authuser.php to obtain configuration from Site.AuthUser page.%0a* Included capability for authorization groups.%0a%0a!!!Version 2.1.beta5 (2005-11-25)%0a* Fixed bug with read-protected Site.AuthForm (reported by Matt Strauser)%0a%0a!!!Version 2.1.beta4 (2005-11-24)%0a* Fixed bug with authentication after unsuccessful attempt (PITS:00551, reported by Uli and Bronwyn).%0a%0a!!!Version 2.1.beta3 (2005-11-23)%0a* Fixed bug with "id:*"
  authorization string (reported by Bronwyn).%0a%0a!!!Version 2.1.beta2 (2005-11-22)%0a* Fixed bug with formatting surrounding [=[@...@]=] code blocks.%0a* Added %3cspan class='wikiword'>...%3c/span> around wikiword links to provide additional wikiword formatting.%0a* Changed authorization prompt to default to Site.AuthForm.%0a* Revised PmWikiAuth function to be able to authorize against groups or multiple authentications.%0a* Fixed session handling in authorization code to create and open session only if needed.%0a* Fixed bug with display of directives in page history (PITS:00592, reported by floozy).%0a* Added [@white-space:nowrap@] to command section of pmwiki skin (PITS:00591, contributed by floozy).%0a* Fixed a possible bug with urls for direct-download attachments (PITS:00588, reported by Henning).%0a%0a!!!Version 2.1.beta1 (2005-11-18)%0a* WikiWords are now disabled by default (PITS:00520).%0a* Whitespace at the beginning of lines can be used for nesting within lists (
 PITS:00562).%0a* Added ability to specify percentages in wikistyles (use "pct" instead of "%25").%0a* Fixed problem with including to end of text (PITS:00560, thanks to Klonk).%0a* Added [@(:if enabled VAR:)@] conditional markup.%0a* Added [@[[target|+]]@] titled markup.%0a* Adjusted %3c/div> markup bug in [@(:markup:)@] (reported by Hans).%0a* Fixed problem of nested apostrophe markups (PITS:00590, reported by floozy).%0a* Added [@(:input file:)@] and $InputValues array (PITS:00566).%0a%0a!!!Version 2.0.13 (2005-11-10)%0a* Fixed PostPreview function to allow page preview even if page is saved.%0a* Fixed downloading code so that large files don't run into memory limits (reported by Daniel Scheibler).%0a* Changed urlapprove.php so that admins can always post.%0a* Fixed XSS bug in pagelist.php (reported by Mauritz Naumann, http://moritz-naumann.com).%0a%0a!!!Version 2.0.12 (19-Oct-2005)%0a* Fixed cast of $ApprovedUrlsFmt in transition.php (reported by Patrick Ogay).%0a* Change
 d PmWiki's exit() call to a return (PITS:00548, requested by Wesley Tanaka).%0a* Fixed bug that was erroneously converting '&amp;' back to '&' in query fragments (from a bug report by Chris Cox).%0a%0a!!!Version 2.0.11 (17-Oct-2005)%0a* Fixed problem with blank passwords in LDAP authentication (PITS:00547, reported by Paul Eden).%0a* Added support for whitespace indent rules.%0a* Fixed problem with losing history on changing passwords (PITS:00555, thanks to floozy).%0a* Added support for [@(:linebreaks:)@] and [@(:nolinebreaks:)@] (PITS:00549).%0a* Added support for `MySQL passwords in authuser.php (suggestions from Ahmed Ibrahim).%0a* Added an [@(:if date:)@] condition to the markup.%0a%0a!!!Version 2.0.10 (29-Sep-2005)\\%0aVersion 2.0.9 (28-Sep-2005)%0a* Fixed oversight in xlpage-utf-8.php that doesn't upcase ASCII letters when mb_strtoupper isn't present.%0a* Updated copyright dates.%0a%0a!!! Version 2.0.8 (27-Sep-2005)%0a* Changed $Name to $Title in print skin (found by 
 Robert Riebisch).%0a* Added capability to use quotes to enter pass phrases in ?action=attr (requested by Simon).%0a%0a!!! Version 2.0.7 (26-Sep-2005)%0a* Updated xlpage-utf-8.php to use a different case conversion algorithm, and completed tables for other character sets.%0a* Fixed $VersionNum variable.%0a* Added ak_textedit and default value of ',' (PITS:00528, offered by Christoph Lange).%0a* Added a time limit to generation of .linkindex files.%0a%0a!!! Version 2.0.6 (16-Sep-2005)%0a* Updated xlpage-utf-8.php so that mb_strtoupper() is no longer required.%0a* UTF-8 module now is able to handle UTF-8 characters in link suffixes (PITS:00432, reported by Schlaefer).%0a* Fixed a bug with vardoc.php when an empty $VarIndex is loaded (PITS:00491, reported by Jean-Dom).%0a* Improved the guiedit buttons for IE browsers -- selections now work more like one would hope they would (PITS:00515, suggested by floozy).%0a* Fixed %3cscript> tags for XHTML validation (PITS:00486, suggested 
 by Jocke).%0a* Improved author cookie handling with UTF-8 (PITS:00450, noted by Schlaefer)%0a* Fixed author special character handling (PITS:00524, from Dave G) %0a* Added $LogoutCookies to tell ?action=logout which cookies to expire.%0a* Added $CookiePrefix a prefix for cookies set by PmWiki scripts and recipes.%0a* Added $VersionNum numeric variable and ([@{$VersionNum}@] markup to make testing for specific versions easier.%0a%0a!!! Version 2.0.5 (9-Sep-2005)%0a* Cleaned up code for internationalization support.%0a* Added ?action=logout.%0a* Deprecated $Newline for good.  Sites that need $Newline set can use $NewlineXXX.%0a%0a!!! Version 2.0.4 (8-Sep-2005)%0a* Eliminated E_NOTICE warning from scripts/prefs.php (reported by Pierre-Marie Carette).%0a* Eliminated other E_NOTICE warnings in various other sections of code.%0a* Adjusted signature patterns (sequences of ~'s) to be more restrictive.%0a* Improved internationalization strings (PITS:00475, noted by Roman).%0a* Added 
 maximum length to change summaries (reported by H. Fox).%0a* Added speed improvements to link= in pagelist, $EnableLinkIndex option.%0a%0a!!! Version 2.0.3 (6-Sep-2005)%0a* Corrected default value settings in scripts/urlapprove.php.%0a* Fixed bug in setting of $sub in authuser.php (PITS:00509, reported by Alexandre B).%0a* Added change summaries into page history display.%0a* Fixed search pages and skin to use $SiteGroup instead of "Site" for search pages.%0a* Added additional attributes to input forms (suggested by Jo Durchholz).%0a%0a!!! Version 2.0.2 (3-Sep-2005)%0a%0a* Fixed bugs in mailposts.php (reported by M. Weiner and D. Scheibler)%0a* Fixed bug in PageStore removing whitespace from end of pages (reported by K. Chan)%0a* Added $EnablePageListProtect option to sample-config.php.%0a%0a!!! Version 2.0.1 (2-Sep-2005)%0a%0a* Temporarily restored setting of $Newline variable for recipes that need it.%0a* Fixed WikiTrail in PmWiki.PageDirectives (submitted by H. Fox).%0a%0
 a!!! [+Version 2.0.0 (1-Sep-2005)+]%0a%0a* Added `PCache() call for ?action=search (recommended by John Rankin).%0a* Added Path: `InterMap entry for relative urls in links.%0a* Set Site.SideBar to default to no password required for editing (suggested by Hans and others).%0a* Deleted pages are now named [=Group.PageName,del-1234567890=].%0a* Deprecated use of $Newline in `PageStore, now uses urlencoded newlines.%0a* Added new default skin -- old skin is at Cookbook:PmWikiV1Skin.%0a* Added default accesskey values in scripts/prefs.php.%0a* Fixed problem with extra spaces appearing around cells of simple tables (PITS:00402, reported by Klonk).%0a* Fixed problem with wikistyles in search strings (PITS:00495, reported by Radu).%0a* Updated print skin (PITS:00490, reported by Jungle).%0a* Fixed problem with url approvals being included multiple times, case sensitivity (PITS:00466 contributed by Simon).%0a* Added cookbook/.htaccess (suggested by H. Fox).%0a%0a!!!Version 2.0.beta55
  (25-Aug-2005)%0a* Added capability to retain previous versions of uploaded files (PITS:00386).%0a* Added LDAP authentication to authuser.php.%0a* Updated Q: and A: markups.%0a* Fixed bug with 'value=' style and numbered lists (reported by Crisses).%0a* Allow dots and parens in wikistyles.%0a* Fixed bug in link= parameter for pagelist markup (reported by W. Mueller).%0a* Changed handling of blank lines in wiki markup.%0a* Changed display characters of page history (suggestions from H. Fox).%0a* Adjusted handling of [=[@...@]=] markup.%0a* Fixed table cells to default to valign='top'.%0a* Fixed >>%3c%3c to generate (:divend:).%0a* Adjusted (:markup:) display.%0a* Added [@%25cframe%25@] wikistyle.%0a* Changed [@(:include:)@] markup to allow selection from multiple pages.%0a* Removed space that is generated as part of \\ joins.%0a%0a!!!Version 2.0.beta54 (1-Aug-2005)%0a* Fixed bug with handling of & in title, description, and keywords directives (reported by Anno).%0a* beta53 w
 as released without several commits; these are now committed.%0a%0a!!!Version 2.0.beta53 (30-Jul-2005)%0a* Added ?action=search, and adjusted search routines to use the new action.%0a%0a!!!Version 2.0.beta52 (29-Jul-2005)%0a* Fixed problem with multiple [@(:nl:)@] directives in sequence (reported by C. Ridderström).%0a* Fixed problem with [@(:markup:)@] appearing at beginning of page.%0a* Fixed problem with escaped-quotes in change summary (reported by J. Durchholz).%0a* Adjusted displayed image syntax%0a* Added float, frame, rfloat, lfloat, rframe, lframe, thumb wikistyles.%0a* Converted [@(:markup:)@] to use tables instead of divs.%0a* Fixed bug with center-aligned images.%0a* Added Content-Style-Type tag to pmwiki.tmpl (suggested by V. Krishn).%0a* Added title= attribute to image tags.%0a%0a!!!Version 2.0.beta51 (22-Jul-2005)%0a* Adjusted posting algorithm, added $EnablePost.%0a* Added default parameter to `HandleDiff (noticed by Robert Riebisch).%0a* Adjusted Site.EditFo
 rm to use a \\ break instead of [=[[%3c%3c]]=].%0a%0a!!!Version 2.0.beta50 (20-Jul-2005)%0a* Added major improvements to authorization code, including PITS:00249. [is this the right link? "Summary: Classic skin missing in pmwiki 2.0", I think the right is PITS:00248 - CG]%0a* Support for cascading authorization levels.%0a* $HandleAuth array allows setting of authorization requirements on a per-action basis.%0a%0a!!!Version 2.0.beta49 (18-Jul-2005)%0a* Remove Keep() around trailing \\ markup results (based on a bug noticed by W. Mueller).%0a* Added Content-Disposition: and $DownloadDisposition to indirect downloads.%0a%0a!!!Version 2.0.beta48 (13-Jul-2005)%0a* Adjusted display of change summary in recent changes%0a* Corrected width of edit form%0a%0a!!!Version 2.0.beta47 (12-Jul-2005)%0a* Fixed incorrect manipulation of `GUIEdit/$EditTemplateFmt (reported by Ian Barton).%0a* Fixed magic quoting on $ChangeSummary (reported by Balu).%0a* Added $ChangeSummary to recent changes f
 iles.%0a%0a!!!Version 2.0.beta46 (11-Jul-2005)%0a* Fixed lossage in change summary and minor edit checkbox (reported by Balu).%0a%0a!!!Version 2.0.beta45 (10-Jul-2005)%0a* Adjusted "show changes to markup" display to avoid long non-wrapping lines %0a* Fixed wrap problem in guiedit button bar (reported by Des and L. Hausman).%0a%0a!!!Version 2.0.beta44 (10-Jul-2005)%0a* Added session_start() to ?action=diag (suggested by Joachim Durchholz).%0a* Added [@$[phrase]@], [@(:noleft:)@], [@(:noright:)@] markups.%0a* The $PageName substitution is no longer available in FmtPageName().%0a* Added %25accesskey=%25 wikistyle for links.%0a* Changed $ImgTagFmt, added border=0 style to all images in a page.%0a* Added ''transition.php'' script to assist with upgrading from previous releases.%0a* Added capability to create input forms.%0a* Added markup-based edit page form (PITS:00308).%0a* Added change summary capability (from cookbook script).%0a* Added "save and continue edit" and "cancel" 
 options to edit forms (PITS:00290 and PITS:00261).%0a* Changed $EditMessageFmt to $MessagesFmt array, added [@(:messages:)@] markup.%0a* Modified GUI buttons to support accesskeys, added [@(:e_guibuttons:)@] markup.%0a* Added $SiteGroup variable.%0a* Moved `Main.AllRecentChanges to Site.AllRecentChanges .%0a* Moved `Main.SearchWiki to Site.Search.%0a* Moved `Main.ApprovedUrls to `Site.ApprovedUrls.%0a* Moved `Main.PageNotFound to `Site.PageNotFound.%0a* Set robots noindex,nofollow for pages in Site group.%0a* Moved `PmWiki.EditQuickReference and `PmWiki.UploadQuickReference to Site group.%0a* Deprecated `PmWiki.WikiHelp.%0a* Deprecated $PagePreviewFmt variable.%0a* Removed $PageNameFmt substitution.%0a* Added initial capability for user/browser preferences in ''scripts/prefs.php''.%0a%0a%0a%0a!!!Version 2.0.beta43 (8-Jul-2005)%0a* This version adds the long awaited [@(:div:)@] markups.%0a* Added [@%25id=...%25@] wikistyle.%0a%0a!!!Version 2.0.beta42 (7-Jul-2005)%0a* Added [@
 (:if attachments:)@] markup (suggested by Leigh Hausman and others).%0a%0a!!!Version 2.0.beta41 (7-Jul-2005)%0a* Added [@%25value%25@] wikistyle to set item value for ordered lists (PITS:00457, requested by Richard Rothwell)%0a* Adjusted the output of [[PageDirectives#attachlist| [@(:attachlist:)@] ]] to include thousands separators in file sizes.%0a* Fixed bug with '.' in $UploadDir (PITS:00439, contributed by Zoyo).%0a* Changed Keep() parameter name to $pool, handles nested Keeps() (suggested by Joachim Durchholz, Christian Ridderström, and others).%0a%0a!!!Version 2.0.beta40 (22-Jun-2005)%0a* Added Apache-compatible `MD5 passwords and SHA encryption to authuser.php (contributed by D. Faure).%0a%0a!!!Version 2.0.beta39 (20-Jun-2005)%0a* Adjusted handling of trailing spaces for simple table rows.%0a* Fixed problem with '%25' in simple tables (PITS:00437, PITS:00452, reported by Maxim, Hans, and others).%0a* Fixed problem with wikistyles spanning simple table cells (PITS:001
 72).%0a* Fixed problem with searches returning errors for open directories (PITS:00455, reported by Henning and Daniel Friedmann).%0a* Added definition lists to wiki trails.%0a* Removed unnecessary call to `LoadTemplate from print template (reported by Winfried Mueller).%0a* Added ''scripts/authuser.php'' -- documentation forthcoming.%0a%0a!!!Version 2.0.beta38 (14-Jun-2005)%0a* Fixed `ListPages() so that it would generate correct page lists when per-group subdirectories are used to store pages (reported by David Sovinski).%0a%0a!!!Version 2.0.beta37 (26-May-2005)%0a* Changed the location in which $SearchIncl, $SearchExcl, and $SearchGroup are set (requested by John Rankin).%0a* Fixed bug in setting of $SearchExcl (reported by H. Fox and others).%0a* Added filesize check after new page is saved but before replacing existing one (suggested by Radu).%0a* Added $LinkUrl and $LinkAlt to urlapprove.php (contributed by Balu).%0a%0a!!!Version 2.0.beta36 (30-Apr-2005)%0a* Fixed bug 
 in search term exclusion (caught/fixed by Nate Cull).%0a* Eliminated trailing spaces problem in simple tables (caught by F. Johnson)%0a%0a!!!Version 2.0.beta35 (24-Apr-2005)%0a* Fixed bugs in [@(:pagelist:)@] (caught by John Coxon).%0a* Adjusted end of sample-config.php, copyright notices.%0a%0a!!!Version 2.0.beta34 (23-Apr-2005)%0a* Fixed group search bug (noted by Hans).%0a* Query string of last search now appears in searchbox.%0a* Removed ?> tags from ends of scripts to help VMS installations.%0a%0a!!!Version 2.0.beta33 (22-Apr-2005)%0a* Fixed performance bug in FmtPageName and `LinkPage.%0a* Redesigned scripts/pagelist to add new directives and features (major change -- see ReleaseNotes).%0a%0a!!!Version 2.0.beta32 (17-Apr-2005)%0a* Added $RCLinesMax, which can be used to limit the total number of lines in RecentChanges files.%0a%0a!!!Version 2.0.beta31 (15-Apr-2005)%0a* Added ability to password-protect uploads, via ?action=download and $EnableDirectDownload (PITS:00109
 ).%0a* Added $EnableFixedUrlRedirect (requested by Monty and Fred Chittenden).%0a%0a!!!Version 2.0.beta30 (14-Apr-2005)%0a* Fixed issues with PHP sessions causing deadlock situations.%0a* Improved PmWiki's locking algorithms.%0a* Added $PageTextStartFmt and $PageTextEndFmt (requested by John Rankin)%0a* Fixed wiki link function so that wikiwords aren't automatically spaced if $LinkWikiWords = 0.%0a%0a!!!Version 2.0.beta29 (11-Apr-2005)%0a* Fixed bizarre bug with font scaling on European locales (PITS:00357, reported by Christian Schneider).%0a* Fixed %3cpre>...%3c/pre> bug with preformatted text (Cookbook:NoSpacePre, noted by Tom Holroyd).%0a* Improved page storage and reading algorithm for greater efficiency.%0a* Changed various actions to avoid reading page history if not needed.%0a* Changed `PageStore class to optimize generation of filenames for standard installations (from a suggestion by Martin Fick).%0a* Added preliminary code for %0a** user-based authorization (PITS:
 00010)%0a** form-based authorization (PITS:00026, PITS:00264)%0a** better display of password settings in attributes form (PITS:00301)%0a** webserver authentication%0a** .htpasswd authentication%0a** LDAP/Active Directory Server authentication%0a* Added conditional markups for authorization privileges and login status%0a%0a!!!Version 2.0.beta28 (27-Mar-2005)%0a* Added ability to link to other pages' attachments.%0a* Added ext= option to [[PageDirectives#attachlist| [@(:attachlist:)@] ]] to limit output to selected extensions (PITS:00389, requested by corqspy).%0a* Added option to [[PageDirectives#attachlist| [@(:attachlist:)@] ]] to request listing of attachments for a page other than the current one.%0a* Fixed incompatibility problem between `PmWiki.UploadQuickReference and markup extensions recipe (PITS:00377, reported by gaoj).%0a* Changed attachments code to force extensions to lowercase (PITS:00315, suggestions from Hagan Fox, Didier Lebrun, Henning, and PRZ).%0a* Added
  comment to pmwiki.php regarding comments in pmwiki.php.%0a%0a!!!Version 2.0.beta27 (26-Mar-2005)%0a* Made directives case-insensitive (requested by John Coxon).%0a* Fixed bug in `VarIndexLoad() (noticed by Dominique Faure).%0a* Added (:markup:) with [=[@...@]=] arguments (requested by Neil Herber).%0a* Added (:markupend:) syntax.%0a* Fixed bug in $MetaRobots (PITS:00393, noticed by Didier Lebrun).%0a* Added missing ?> to various script files (PITS:00403, reported by Schlaefer).%0a* Allow localmap.txt files to contain variable substitutions (requested by C. Ridderstr&#246;m).%0a* Fixed bug in Markup() with rule dependencies.%0a* Added missing [@{$FullName}@] markup.%0a* Fixed bug with preformatted markup eating leading spaces (repeatedly reported by C. Ridderstr&#246;m).%0a%0a%0a!!!Version 2.0.beta26 (5-Mar-2005)%0a* Added edit page templates (PITS:00113, requested by many administrators).%0a* Fixed bug with search box code in pmwiki template (noticed by mistyfire).%0a%0a!!!
 Version 2.0.beta25 (2-Mar-2005)%0a* Heading markups now consume an optional space following the markup chars (suggested by H. Fox).%0a* Added option to `ParseArgs() to allow capture of arguments in the order specified (suggested by C. Ridderström).%0a%0a!!!Version 2.0.beta24 (1-Mar-2005)%0a* Fixed loss of version number in wiki field (PITS:00217, found by Hugo Alrøe).%0a* Fixed bug with handling of '?'s encoded as %253f in incoming urls.  %0a* Fixed mis-handling of "`PageNotFound" requests.%0a* Added $EnablePostAttrClearSession switch to control remembering of session's passwords when posting attributes (requested by Dirk Blaas).%0a* List markups now consume optional space following markup char.%0a* Added `ParseArgs() function for uniform handling of directive argument processing.%0a* Switched pagelist.php to use `ParseArgs().%0a%0a!!!Version 2.0.beta23 (24-Feb-2005)%0a* Fixed post attributes to clear "remembered" passwords so that password enabling and testing is more visib
 le.%0a* Added $EnablePageListProtect -- when set to a true value it causes read-protected pages to not appear in page listings and search results unless the browser has already been authorized to read them (based on suggestions from Nils Knappmeier, Neil Herber, and PITS:00344).%0a%0a!!!Version 2.0.beta22 (23-Feb-2005)%0a* Fixed authorization form so that cursor is automatically placed in password box (contributed by Hans).%0a* Fixed bug with non-ASCII character sets in ?action=source (PITS:00336, noted by Hans B.).%0a* Updated scripts/guiedit.php to allow buttons with arbitrary HTML actions.%0a* Fixed permissions on .lastmod (PITS:00339, reported by Mark S. and others).%0a* Fixed bug in `PCache where variables weren't set correctly for RecentChanges pages.%0a* Made substantial changes to skins.php to ease control of page template sections.%0a%0a!!!Version 2.0.beta21 (13-Feb-2005)%0a* Changed width of edit box in pmwiki skin to be 98%25 for IE (suggested by Hans).%0a* Fixed 
 bug in scripts/pgcust.php with checking wrong flag for loading local/default.php (PITS:00305, discovered by Joe Miller).%0a* Fixed bug with empty table heading (%3cth>) cells not generating [=&nbsp;=] (noticed by V. Krishn).%0a* Fixed bug with table attributes line generating empty %3cp>%3c/p> paragraphs (also noticed by V. Krishn).%0a* Fixed bug with settings of $AuthorPage and $AuthorLink (noticed by M. Weiner and John Rankin PITS:00247).%0a* Fixed a very minor bug in the `PageStore->ls() method.%0a* Added conversion of [@[[page:]]@] and [@[[linebreaks]]@] v1 markups from cookbook recipes (suggested by C. Ridderström and P. Ogay).%0a* Fixed rss.php to display $Title instead of just a page's name (suggested by G.J. De Bruin).%0a* Changed PmWiki's default umask to 002.%0a* Added the `DisableMarkup() function (suggested by C. Ridderström).%0a%0a!!!Version 2.0.beta20 (30-Jan-2005)%0a* Added ability to place comments in localmap.txt files (requested by C. Ridderström).%0a* Remo
 ved extra spacing before "Upload" button in upload form (suggested by H. Fox).%0a* Changed $UrlLinkFmt to have rel='nofollow' attribute in external links.  %0a* Added %3cdiv id='wikidiff'> around page history output.%0a* Fixed global variable oddity in setting of $Skin in scripts/skins.php (discovered by N. Herber).%0a* Added ability to place wiki styles in heading markups.%0a%0a!!!Version 2.0.beta19 (17-Jan-2005)%0a* This version works around a problem with losing edits when a PHP session expires, or when browsers have cookies disabled (reported by C. Freeze).%0a%0a!!!Version 2.0.beta18 (17-Jan-2005)%0a* Fixed bug with incorrect call to setlocale() in pmwiki.php (noticed by Ciaran).%0a* Fixed bug with search results and other block markups being wrapped in %3cp>...%3c/p> tags (PITS:00074, reported by John Rankin).%0a* WikiTrails now allows alternate text in the trail page reference (PITS:00271, requested by Oneida Kincaid).%0a* Added "styles" index to default $HTMLHeaderFmt
 , to allow disabling of inlined styles.%0a* Added $GUIButtonDirUrlFmt variable to guiedit to make it easy to provide alternate guibutton sets.%0a* Added more guibuttons.%0a* Moved "Attach:" guibutton code into upload.php.%0a* Fixed bug with $LastModified timestamp in page history (noted by Neil Herber and others).%0a* Modified guiedit code so that the sample text is highlighted after hitting a button (makes it easy to locate and overwrite existing sample text).%0a%0a%0a!!!Version 2.0.beta17 (12-Jan-2005)%0a* Fixed bug in advanced tables not closing properly.%0a* Fixed wikistyles so that color changes extend to anchor tags (PITS:00282).%0a* Fixed a bug in handling arrayed default passwords.%0a* Added $Titlespaced conversion to compat1x.php.%0a%0a!!!Version 2.0.beta16 (11-Jan-2005)%0a* Fixed missing guiedit.js file in distribution.%0a%0a!!!Version 2.0.beta15 (10-Jan-2005)%0a* Fixed problem with [@{$Title}@] markup (PITS:00177, thanks to Neil Herber).%0a* Added $Titlespaced and
  [@{$Titlespaced}@] (requested by H. Fox).%0a* Fixed another bug in vardoc.php that was preventing some restore links from working.%0a* Fixed bug in compat1x.php that was incorrectly converting reference-style links (noticed by Christian Ridderström).%0a* Re-adjusted wikistyles again to allow styles to appear in link text.%0a* Cleaned up rss encodings of named character entities (PITS:00129 and PITS:00239, reported by Bronwyn, Graham L., and others).%0a* Fixed problem with block styling containing only links (PITS:00258, reported by Hans Bracker).%0a%0a!!!Version 2.0.beta14 (28-Dec-2004)%0a* Removed border= attribute from %3cimg ...> tags, now uses style='border:0px;' instead.  (PITS:00169, reported by Balu).%0a* Removed extraneous $Fragment from print skin (PITS:00241, reported by `BrBrBr).%0a* Fixed ?action=crypt posting (reported by Hans Bracker)%0a* Added id='text' to $PageEditFmt.%0a* Cleaned up 'posteval' code for `MarkupToHTML() function.%0a* Optimized a number of pat
 terns for (hopefully) faster pattern matching.%0a* Fixed urls to better encode non-ASCII characters.%0a* Converted substr() comparisons to more efficient expressions.%0a* Added a cache to `PageExists() function.%0a* Cleaned up `PrintFmt() function for better processing.%0a* Added Lock(0) to `PrintFmt to release locks prior to sending data to browser.%0a* Fixed bug with empty `StopWatch() function (reported by K. Alboldt).%0a* Changed ?action=diff to require 'read' permissions (Note: this will change to be admin configurable in another release).%0a%0a!!!Version 2.0.beta13 (22-Dec-2004)%0a* Fixed a bug introduced in 2.0.beta7 that causes ?action=refcount to produce incorrect links (thanks to Leo for reporting this).%0a%0a!!!Version 2.0.beta12 (21-Dec-2004)%0a* Added %3cdiv id='wikipreview'>, %3cdiv id='wikiupload'>, %3cdiv id='wikiattr'>, and %3cdiv class='wikisearch'> to appropriate forms and documents (suggested by Dominique Faure).%0a* Added the [@(:description:)@] markup f
 or setting %3cmeta name='description' ...> (PITS:00016).%0a* Added $UnapprovedLinkCountMax to limit the number of unapproved external links that can appear in a post.%0a%0a!!!Version 2.0.beta11 (19-Dec-2004)%0a* Fixed bug with trailing punctuation in uris (PITS:00134, thanks to chr).%0a* Added note to sample-config.php about admin passwords (suggested by Hans Bracker)%0a* Cleaned up `StopWatch function, added $EnableStopWatch to control functionality.%0a* Fixed message where upload exceeds PHP maximum.%0a* Modified upload.php so that the "Upload name" field is blank after performing an upload.%0a* Changed upload functionality to use $LinkUpload instead of $LinkUrl (note, this affects $LinkUploadCreateFmt)%0a%0a!!!Version 2.0.beta10 (14-Dec-2004)%0a* Improved mkdirp() function to give more appropriate diagnostics with respect to PHP's safe_mode setting.%0a* Improved handling/permissions/recovery of wiki.d/.flock file.%0a%0a!!!Version 2.0.beta9 (14-Dec-2004)%0a* Fixed bug in [
 @[[target |#]]@] markup.%0a* Fixed bug in vardoc with substitution of old $FmtV into $LinkText.%0a* Fixed bug(?) in uploads.php not submitting urls to correct address.%0a%0a!!!Version 2.0.beta8 (13-Dec-2004)%0a* Changed ?pagename= to ?n= for urls.%0a* Changed PmWiki to default to not using PATH_INFO-style urls.%0a* Fixed bug where ?action=diff would disable external links and images in sidebar (PITS:00227, thanks to `BrBrBr).%0a* Changed (&uArr;) in uploads.php to (&Delta;) (PITS:00127, thanks to jr and Schlaefer).%0a* Fixed Q: and A: markups (PITS:00067).%0a* Added $TableRowAttr and $TableCellAttr, along with $TableRowCount, $TableRowIndex, and $TableCellCount for stylized tables (suggested by Ciaran).%0a* Fixed incorrect [=PmWiki:=] location in intermap.txt.%0a* Fixed likely hyphen bug in author.php that was removing spaces.%0a%0a!!!Version 2.0.beta7 (8-Dec-2004)%0a* Added PUE() function to handle specialized url encoding.%0a* Added code to work around $Newline in posted t
 ext.%0a* Fixed spelling of 'gray' in css (thanks to S. Andreozzi).%0a* Fixed .htaccess files in local/ and wiki.d/.%0a* Fixed bug in sample-config.php (PITS:00216, thanks to noe).%0a* Fixed %3c and > bugs in q= parameter to search.%0a* Fixed default width of edit textarea (PITS:00052).%0a* Restored link citation/reference markup [@[[target|#]]@] (PITS:00049).%0a* Restored [@(:keywords:)@] markup (PITS:00089).%0a* Fixed internationalization of $DefaultPageTextFmt.%0a* Updated/added xlpage-utf-8.php for UTF-8 support (PITS:00168).%0a%0a!!!Version 2.0.beta6 (5-Dec-2004)%0a* Fixed internationalization of `PmWiki.EditQuickReference (PITS:00159, thanks to PRZ and noe).%0a* Fixed bug in `FmtPageName() that was incorrectly converting all slashes to dots (PITS:00201, thanks to C. Bonamigo).%0a* Restored $DiffChangeSum variable in pagerev.php (PITS:00200).%0a* Fixed farmmap.txt (PITS:00207, thanks to Keith Campbell).%0a* Changed $MaxIncludes default value to 50.%0a* Restored $WikiWord
 CountMax and $WikiWordCount functionality (PITS:00007).%0a* Updated sample-config.php.%0a* Fixed some skin README files.%0a%0a!!!Version 2.0.beta5 (1-Dec-2004)%0a* Corrected $EnablePostAuthorRequired (variable was misnamed -- thanks to John Feezell for reporting the bug).%0a%0a!!!Version 2.0.beta4 (1-Dec-2004)%0a* Added conversion to scripts/compat1x.php for `PmWikiDraw -- [@[[Drawing:SomePage]]@] is converted to [@(:drawing SomePage:)@].%0a* Fixed bug in use of $_REQUEST/$_POST in several scripts.%0a* Fixed code handling extra '?var=value' parameters to set values in $_REQUEST as well as $_GET (PITS:00165).%0a* Fixed missing slash in [[PageDirectives#attachlist| [@(:attachlist:)@] ]] links (PITS:00192, thanks to Brent Zupp for reporting this).%0a%0a!!!Version 2.0.beta3 (30-Nov-2004)%0a* Changed references to $_REQUEST to be $_POST for edit sequence.%0a* Suppressed external links in page history output.%0a* Added .GIF, .JPG, .PNG to valid image extensions (PITS:00168, thanks
  to noe).%0a* Fixed locking of Main.GroupAttributes and PmWiki.GroupAttributes (PITS:00183, thanks to Balu).%0a* Fixed `PmWiki.EditQuickReference to work in IE again (PITS:00164, thanks to PRZ).%0a* Fixed documentation in `PmWiki.SimpleTables2 (PITS:00186, thanks to PRZ).%0a* Added an [[PageDirectives#attachlist| [@(:attachlist:)@] ]] markup (PITS:00001).%0a%0a!!!Version 2.0.beta2 (28-Nov-2004)%0a* Fixed bug with `LoadPageTemplate in skins.php. %0a%0a!!!Version 2.0.beta1 (26-Nov-2004)%0a* Fixed index used for setting robots %3cmeta> tag.%0a* Fixed intermap.txt links to point to new pmwiki 2.0 location.%0a* Changed default for urlapprove.php to be ?action=approvesites.%0a* Added more documentation pages.%0a%0a!!!Version 2.0.devel27 (25-Nov-2004)%0a* Fixed bug with setting of $Needle (PITS:00154, thanks to KAL).%0a* Fixed bug with "Group/" not working in searches (PITS:00131, thanks to PRZ for finding the bug and John Rankin for suggesting the fix).%0a* Fixed missing %3ctr> in
  stopwatch output.%0a* Fixed rss to use %3cdc:date> instead of %3cpubDate> (for compatibility with Firefox Live Bookmarks).%0a* Added %3cdc:contributor> element to rss 2.0 output (PITS:00157, suggested by  Steffen Glückselig).%0a* Added $EnableUrlApprovalRequired to scripts/urlapprove.php.%0a* Fixed permissions problem on uploaded files for setuid environments (reported by Steven Leite).%0a* Fixed permissions problems for RSS feeds (noted by Enrique Pardo and others).%0a* Changed skins code (hopefully for the last time!)%0a* Fixed print skin to use new skin format.%0a* Changed default error reporting to suppress E_NOTICE messages.%0a%0a!!!Version 2.0.devel26 (11-Nov-2004)%0a* Fixed leading spaces bug in [@[[ target | text ]]@] links (PITS:00149, thanks to Klonk).%0a* Fixed bug with leading items missing from trail path (PITS:00143, thanks to John Rankin).%0a* Fixed $CurrentTime bug (PITS:00115, thanks to Philip Jägenstedt).%0a* Added scripts/rss.php, updated for PmWiki 2.0 (
 PITS:00128).%0a* Updated scripts/compat1x.php for performing migrations, as well as updated the UpgradingFromPmWiki1 documentation to match (PITS:00151).%0a%0a!!!Version 2.0.devel25 (9-Nov-2004)%0a* Fixed bug in compat1x.php script not converting [@[[{{free link}}#anchor text]]@] correctly (PITS:00148, thanks to Klonk and kt007).%0a%0a!!!Version 2.0.devel24 (9-Nov-2004)%0a* Added password protection of `ApprovedUrls page in urlapprove.php script (PITS:00004).%0a* Added "upload" attribute and default locked upload password (reported by S. Leite).%0a* Fixed name of [@{$fmt}@] and [@{$var}@] markup rules.%0a%0a!!!Version 2.0.devel23 (8-Nov-2004)%0a* Fixed bug in fmt=grouplist (thanks to John Feezell).%0a* Added "redirect" parameter for Redirect (suggested by Ciaran).%0a* Added `GroupAttributes to list of excluded pages in list=normal (PITS:00133, suggested by Val).%0a%0a!!!Version 2.0.devel22 (4-Nov-2004)%0a* Fixed bug in [@[[text -> target]]@] when target is empty (thanks to S
 . Leite).%0a* Fixed missing "file:" directive in `PrintFmt (thanks to Scott Duff).%0a%0a!!!Version 2.0.devel21 (2-Nov-2004)%0a* Fixed bug in [@(:nl:)@] handling (thanks to Balu).%0a* Fixed 'text' E_NOTICE warning (thanks to chr).%0a* Fixed missing group/ if $LinkWikiWords set off (thanks to Steven Leite).%0a%0a!!!Version 2.0.devel20 (29-Oct-2004)%0a* Added [@%25align=left%25@] and [@%25align=right%25@] WikiStyles for images (PITS:00009).%0a* Added category [@[[!Category]]@] markup (proposed by jr).  This is still experimental, and may be changed/removed for 2.0.%0a* Fixed handling of $PageSkinFmt and $PrintSkinFmt.%0a%0a!!!Version 2.0.devel19 (27-Oct-2004)%0a* Fixed bug in `FmtPageName with substituting null strings if an invalid $pagename is encountered (related to PITS:00117, thanks to jr).%0a%0a!!!Version 2.0.devel18 (27-Oct-2004)%0a* Fixed handling of [@(:searchresults:)@] directive with parameters (thanks to Knut Alboldt for finding this).%0a%0a!!!Version 2.0.devel17 (2
 6-Oct-2004)%0a* Restored file: links (PITS:00112, thanks to Chris Untold)%0a* Added scripts/refcount.php.%0a* Fixed bug with %3cpre> formatted text not in a single block (thanks to Steffen Bauch)%0a%0a!!!Version 2.0.devel16 (22-Oct-2004)%0a* Fixed numerous bugs in `PrintAttrForm (thanks to S. Sherebrin).%0a* Fixed bug in calling getrusage() for Windows (PITS:00094, thanks to Adam Bull)%0a* Fixed bug with WikiTrails and spacewikiwords (PITS:00103, thanks to jr)%0a* Modified per-page and per-group customizations so that per-group customizations are loaded even if a per-page customization exists -- see scripts/pgcust.php.%0a* Changed $EnablePerGroupCust to $EnablePGCust.%0a* Modified [@`WikiWord@] markup to protect [@`Group.WikiWord@].%0a* Added code to go ahead and look for ''config.php'' in the current directory if ''local/config.php'' doesn't exist.%0a* Added $EnableLocalConfig to allow farm administrators to control automatic local configuration.%0a* Fixed `LinkIMap to prop
 erly url-encode non-ASCII characters (needed for IE, related to PITS:00053).%0a* Fixed problems with non-ASCII characters in attachment names (PITS:00053, thanks to Henning and Zverik).%0a* PmWiki now sets locale to en_US if default is UTF-8 or C.%0a* Added $PageSkinFmt and $PrintSkinFmt to simplify layout template specs, which also reorganizes the files in the pub/skins directory.%0a%0a!!!Version 2.0.devel15 (21-Oct-2004)%0a* Fixed bugs in [@(:if:)@] markup.%0a* Added 'true', 'group', and 'name' conditions to [[ConditionalMarkup]].%0a* Fixed bug with nested lists appearing inside of non-nesting blocks (PITS:00101, thanks to Mystique for finding this bug).%0a* Fixed date-formatting bug in Last-Modified header (PITS:00099, thanks to PRZ).%0a* Fixed bug with $DiffClassMinor in edit (PITS:00095).%0a* Improved phpdiff algorithm to ignore blank lines as target of shortest-distance search (PITS:00096, thanks to Elias Soong for analysis and suggestion).%0a* Added "clear:both;" to d
 efault print template (PITS:00079, suggested by SV).%0a%0a%0a!!!Version 2.0.devel14 (20-Oct-2004)%0a* Fixed problem with html entities being translated in included text (PITS:00100, thanks to Knut Alboldt)%0a* Added capability to use a [[WikiTrail(s)]] as the scope of a search.%0a* Fixed bug with $SearchPatterns (PITS:00066, thanks to PRZ).%0a* Added list= parameter to searchresults, pagelist, etc. to filter list output (requested by P. Krait and others).%0a* Converted [:directive:] to (:directive:)%0a* Changed $PageName to $FullName.  $PageName still but is deprecated and will be removed in the 2.0 release.%0a* Added $Action and $ActionTitleFmt to create better %3ctitle>s. (PITS:00093, thanks to jr).%0a* Deprecated $HTMLTitleFmt, updated layout templates.%0a%0a%0a!!!Version 2.0.devel13 (11-Oct-2004)%0a* Added code to remove trailing slashes from pagename in urls (suggested by Steven Leite).%0a* Made change to set the default locale using PmWiki 1's algorithm.%0a* Modified h
 ttpauth to keep track of multiple passwords via sessions (if possible).%0a* Added wikiword spacing and title control via `WikiLink function.%0a* Added $AsSpacedFunction and `AsSpaced.%0a* Fixed trails.php to use `MakePageName instead of `MakeLink to build pagenames.%0a* Added `SaveAttributes, which extracts a page's title and link targets into separate page attributes.%0a* Fixed search function to also search for matching targets.%0a* Added $LinkWikiWords to control WikiWord linking.%0a* Changed $PageTitle to $Title.%0a* Added `PCache to provide quick access to subsets of page attributes; this eliminates the `SetPage function.%0a%0a!!!Version 2.0.devel12 (10-Oct-2004)%0a* Fixed [@[:nofooter:]@] (PITS:00080, thanks to PRZ).%0a* Fixed incorrect array cast (PITS:00073, thanks to noe).%0a* Fixed handling of WikiWords with query fragments (PITS:00069, thanks to jr)%0a* Fixed bug with empty double-brackets links (PITS:00083, thanks to PRZ).%0a* Fixed bug with link text in WikiTrai
 ls (PITS:00085, thanks to PRZ).%0a%0a!!!Version 2.0.devel11 (3-Oct-2004)%0a* Added [@' big ', '-small-', '^super^', '_sub_', { ins }, {-del-}@] and [@`WikiWord@] (with credit to John Rankin).%0a* Added [@--%3changing indent@] text (suggested by John Rankin).%0a* Added $DefaultPasswords.%0a* Switched pmwiki to default to session-based passwords.%0a* Added scripts/httpauth.php for administrators who wish to use HTTP Basic authentication.%0a%0a!!!Version 2.0.devel10 (1-Oct-2004)%0a* Fixed $GroupPattern bug in trails.php (PITS:00057, thanks to John Rankin).%0a* Added comments about markups supported by || in stdmarkup.php (PITS:00056, thanks to John Rankin).%0a* Added $HTMLPNewline to specify what to output for newlines in the middle of paragraph text  (PITS:00063).%0a* Fixed [=~~=]~ markup to properly display in page previews (PITS:00059, thanks to Larry Baltz and others).%0a* Added $LinkPageSelfFmt to specify how self-referencing page links should be formatted (kudos to John R
 ankin).%0a* Added a PHP-based diff engine, set it as the default for edits (with great thanks to Nils Knappmeier).%0a* Cleaned up the page history output slightly.%0a%0a!!!Version 2.0.devel9 (30-Sep-2004)%0a* Modified `FmtPageName() so that dynamic substitutions are customizable.%0a* Added `StopWatch features.%0a* Changed $KeepToken so that it wouldn't be treated as part of a WikiWord (at least not in latin-1 charsets).%0a* Cleaned up `ReadPage.%0a* Added "[[TableDirectives|advanced tables]]" markup ([@[:table:]@]).  May still need some testing.%0a* Added scripts/compat1x.php to assist with converting 1.x sites to 2.0.%0a%0a!!!Version 2.0.devel8 (22-Sep-2004)%0a* Added browser caching via If-Modified-Since HTTP headers.  This can be enabled via $EnableIMSCaching=1; in config.php.%0a%0a!!!Version 2.0.devel7 (21-Sep-2004)%0a* Modified `MakeLink() function to strip %3chtml> tags when creating a target link.  This may allow inline markups to be processed before links.%0a* Fixed 
 url pattern used for mailto: links.%0a* Moved inline markups to occur before link processing.  This should enable many inline markups within link text.  It may also cause some problems, so this change is a bit tentative.%0a%0a!!!Version 2.0.devel6 (20-Sep-2004)%0a* Fixed ||!table caption!|| (PITS:00040, thanks to John Rankin)%0a* Added $UrlLinkFmt, $IMapLinkFmt (PITS:00050, thanks to John Rankin)%0a* Removed extraneous spaces from link texts (PITS:00047, thanks to Bronwyn)%0a* Fixed author tracking (PITS:00048, thanks to Larry Baltz)%0a* Added "markup:" parameter for `PrintFmt (addresses PITS:00051)%0a* Added %3c!--markup:...--> template option.%0a%0a!!!Version 2.0.devel5 (13-Sep-2004)%0a%0a* Fixed wikistyle nesting problem (PITS:00032, thanks to Balu for catching this)%0a* Moved body { margin-left:20px; } into pmwiki.css (PITS:00034, thanks to Balu)%0a* Changed calls to ucwords() to use preg_replace() since ucwords doesn't work properly in some languages (PITS:00031, thanks
  to Zverik)%0a* Fixed problems with partial urls (PITS:00013)%0a* Fixed upload.php to use SDVA on $UploadExts (thanks to Larry Baltz)%0a* Fixed problem with [[WikiStyles]] crossing header tags (PITS:00032, thanks to Balu)%0a%0a!!!Version 2.0.devel4 (6-Sep-2004)%0a%0a* Fixed call-time-pass-by-reference in simuledit.php (thanks to CB).%0a* Added ?action=crypt.%0a* Added ?action=print.%0a* Added `XLPage() functions and fixed problems with i18n (PITS:00011)%0a* Fixed bug in trails.php code (PITS:00017)%0a* Documented custom markup functions (PITS:00003)%0a* Improved ?action=ruleset slightly%0a* Added [@[[%3c%3c]]@] markup (thanks to JF)%0a%0a!!!Version 2.0.devel3 (27-Aug-2004)%0a%0a* Fixed missing mode parameter in mkdir (thanks to javajunky on irc).%0a%0a!!!Version 2.0.devel2 (27-Aug-2004)%0a%0a* Added $EnablePathInfo support.%0a* Fixed problem with QUERY_STRING handling of '?'.%0a%0a!!!Version 2.0.devel1 (26-Aug-2004)%0a%0a* Initial release.  For experimental and development u
 se '''only'''.%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a
+time=1195349543

Added: trunk/oggdsf/website/wikilib.d/PmWiki.ConditionalMarkup
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.ConditionalMarkup	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.ConditionalMarkup	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta52 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=
+host=76.183.97.54
+name=PmWiki.ConditionalMarkup
+rev=101
+targets=Site.PageListTemplates,PmWiki.DocumentationIndex
+text=(:Summary:The if directive allows portions of a page to be included or excluded from rendering:)%0a%25define=indent block margin-left=2em%25%0a%25audience%25 authors, admins (advanced)%0a!! Using the [=(:if:)=] Directive%0aThe [@(:if:)@] directive allows portions of a page to be included or %0aexcluded from rendering.  The generic forms of the [@(:if:)@] directive are%0a%0a->[@(:if cond param:) body (:ifend:)@]%0a->[@(:if cond param:) body (:else:) body (:ifend:)@]%0a->[@(:if cond param:) body (:elseif cond param:) body (:ifend:)@]%0a%0awhere "cond" names a condition to be tested (described below), and "param" %0ais a parameter or other argument to the condition.%0aConditions do not nest.%0a%0aThe built-in conditions include:%0a%0a(:table border=0 cellpadding=0 cellspacing=0 valign=top:)%0a(:cellnr rowspan=250:)%0a%25indent%25&nbsp;%0a(:cell:)[@(:if name PAGENAME:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)current page is named "[@PAGENAME@]"%0a(:cellnr:)[@(:if group GROUPNAM
 E:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)current group is named "[@GROUPNAME@]"%0a(:cellnr:)[@(:if auth LEVEL PAGENAME:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)viewer is authorized at "[@LEVEL@]" where [@LEVEL@] can be: [@read@], [@edit@], [@upload@], [@attr@] or [@admin@]; [@PAGENAME@] is optional.%0a(:cellnr:)[@(:if authid:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)current viewer is authenticated%0a(:cellnr:)[@(:if true:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)always include text%0a(:cellnr:)[@(:if false:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)always exclude text (same as a comment)%0a(:cellnr:)[@(:if attachments:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)current page has attachments%0a(:cellnr:)[@(:if date DATE VALUE:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)[@DATE@] may be year-month.  year-month-day is optional.  Evaluates to true if [@VALUE@] is within [@DATE@] ("now" or "today" is assumed for VALUE.  VALUE may be omitted, as in the following examples.)%0a(:cellnr:)[@(:if date DATE..:)@]%0a(
 :cell:)&nbsp;-&nbsp;%0a(:cell:)true if current date is [@DATE@] or later (unlimited)%0a(:cellnr:)[@(:if date DATE1..DATE2:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)true if current date is in range [@DATE1@] to [@DATE2@] (inclusive) %25green%25[-''dates are in %25newwin%25[[http://w3.org/QA/Tips/iso-date|standard]] format yyyy-mm-dd or yyyymmdd''-]%0a(:cellnr:)[@(:if enabled VAR:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)true if PHP VAR is true%0a(:cellnr:)[@(:if enabled AuthPw:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)true if user has entered any password during the current browser session.%0a(:cellnr:)[@(:if equal STRING1 STRING2:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)true if [@STRING1@] equals [@STRING2@], use quotes if the string or string variable contains spaces, eg [@"STRING"@]%0a(:cellnr:)[@(:if match REG_EXPRESSION:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)true if current page name matches the regular expression%0a(:cellnr:)[@(:if exists PAGENAME:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)
 true if the page ''pagename'' exists%0a(:tableend:)%0a%0aNegated forms of conditions also work:%0a%0a(:table border=0 cellpadding=0 cellspacing=0 valign=top:)%0a(:cellnr rowspan=250:)%0a%25indent%25&nbsp;%0a(:cell:)[@(:if !attachments:)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)this page has no attachments%0a(:cellnr colspan=3:)&nbsp;%0a(:cellnr:)[@(:if ! name PAGENAME:)@]%0a(:cell rowspan=3:)%0a(:cell rowspan=3 valign=middle:)current page is NOT named "[@PAGENAME@]"%0a(:cellnr:)[@(:if name -PAGENAME :)@]%0a(:cell:)%0a(:cellnr:)[@(:if name !PAGENAME :)@]%0a(:tableend:)%0a%0aAny [@(:if:)@] automatically terminates the previous one, thus markup can be %0aeasily cased (and are not nested):%0a%0a->[@%0a(:if enabled AuthPw:)* You're logged in%0a(:if auth read:)* You can read%0a(:if auth read Group.Page:)* You can read Group.Page%0a(:if auth edit:)* You can edit%0a(:if auth upload:)* You can upload%0a(:ifend:)@]%0a%0a!!! Using wildcard placeholders(:if false:)%25green%25[-(new for pmwik
 i 2.1.beta21)-]:(:ifend:)%0a%0aThe character [@*@] can be used as a wildcard to represent any character, zero, one or multiple times.\\%0aThe character [@?@] can be used as a wildcard to represent any character exactly one time.\\%0aWildcard characters ([@*@] and [@?@]) can be used with the ''name'' and ''group'' conditional markups, thus:%0a%0a(:table border=0 cellpadding=0 cellspacing=0 valign=top:)%0a(:cellnr rowspan=250:)%0a%25indent%25&nbsp;%0a(:cell:)[@(:if name PmCal.2005* :)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)current page is in group PmCal and begins with 2005%0a(:cellnr:)[@(:if group PmWiki* :)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)current page is in group PmWiki or a group beginning with PmWiki%0a(:cellnr:)[@(:if name Profiles.*,-Profiles.Profiles :)@]%0a(:cell:)&nbsp;-&nbsp;%0a(:cell:)current page is in group [@Profiles@] but not [@Profiles.Profiles@]%0a(:tableend:)%0a%0a%0a!!! Use with [[Site/page list templates]]%0aConditional markup is used extensively with [[Si
 te/page list templates]].%0a%0aUse with page variables:%0a   =   current item%0a   %3c   previous item%0a   >   next item%0a%0aConditionals used to structure pagelist output:%0a   [@(:if equal {%3c$Group}:)@]               At beginning of list%0a   [@(:if equal {>$Group}:)@]               At end of list%0a   [@(:if ! equal {=$Group} {%3c$Group}:)@]   First item in group%0a   [@(:if ! equal {=$Group} {>$Group}:)@]   Last item in group%0a%0a!!! Combining conditions%0aConditions (as previously defined) may be combined into more complex %0aconditional expressions using one of these three equivalent forms:%0a%0a->[@%0a(:if expr EXPRESSION :)%0a(:if [ EXPRESSION ] :)%0a(:if ( EXPRESSION ) :)@]%0a%0aConditions are combined into expressions with boolean operators and %0abrackets. In the next table, A and B are either regular conditions or %0a(round-)bracketed sub-expressions of regular conditions:%0a%0a>>indent%3c%3c%0a|| border=1 cellpadding=2 cellspacing=0%0a||! Expression ||! Ope
 rator ||! Result ||%0a|| [@A and B@] || And ||TRUE if both A and B are TRUE.||%0a|| [@A or B@] || Or ||TRUE if either A or B is TRUE.||%0a|| [@A xor B@] || Xor ||TRUE if either A or B is TRUE, but not both.||%0a|| [@! A@] || Not ||TRUE if A is not TRUE.||%0a|| [@A && B@] || And ||TRUE if both A and B are TRUE.||%0a|| [@A || B@] || Or ||TRUE if either A or B is TRUE.||%0a>>%3c%3c%0a%0aNota:%0a* Spaces around operators and brackets are required.%0a* No specific feedback is given for syntax errors or unbalanced brackets.%0a* Use round brackets (not square) for nested expressions.%0a%0aThus, the following is a valid way of building an expression that shows the following contents only when the user is either the administrator, or is logged in and the time is later than the given date:%0a%0a->[@(:if [ auth admin || ( authid && date 2006-06-01 ) ] :)@]%0a%0aNesting with square brackets will silently fail to work as expected:%0a%0a->[@(:if [ auth admin || [ authid && date 2006-06-01
  ] ] :) @]&nbsp;&nbsp;&nbsp;%25red%25NOTE: Doesn't Work!%0a%0aA common use of these complex tests are for expressions like:%0a%0a->[@(:if expr auth admin || auth attr || auth edit :)@]%0a->[@[[Logout -> {$Name}?action=logout]]@]%0a->[@(:ifend:)@]%0a%0awhich provides a ''logout'' link only when the browser has admin, attr, or edit permissions.%0a%0a%25audience%25 admins (advanced)%0a!! Creating new conditions%0a%0aSee [[Cookbook:ConditionalMarkupSamples]].%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a
+time=1180215859

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Contributors
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Contributors	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Contributors	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta52 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=remove pmwiki.org-specific links from distribution page
+host=76.183.97.54
+name=PmWiki.Contributors
+post= Save
+rev=48
+targets=PmWiki.PmWiki,PmWiki.Uploads,PmWiki.Links,PmWiki.WikiGroup,PmWiki.DocumentationIndex
+text=(:Summary:A list of contributors to PmWiki development and improvement:)%0aHere's a list of contributors to [[PmWiki]] development and improvement.  My apologies if I've forgotten anyone -- feel free to add your name if you've been left out, feel free to remove your name if you don't want to be associated with these people.  :-)%0a%0a* Scott Duff - pmwe, simple-journal.php, all-around Pm sanity checker %0a* Ross Kowalski - [[uploads]] and printable page research%0a* John Rankin - WikiTrails, [[Links]], `EditQuickReference, notify.php, documentation, debugging%0a* Joachim Durchholz - hacking documentation, general pest%0a* Jessica Tishmack - uploads, testing%0a* Jean-Claude Gorichon - voting%0a* Janice Heinold - early PmWiki testing and suggestions, documentation%0a* James Davis - WikiStyles markup, testing%0a* Isabelle Michaud - floating images markup, [[Wiki Group]]s, [[uploads]]/attachments%0a* Glenn Blalock - WikiStyles suggestions, testing, documentation%0a* Dawn Gr
 een - WikiStyles suggestions, [[uploads]], documentation%0a* Christian Ridderström - [[Cookbook:EmacsPmWikiMode |pmwiki-mode for Emacs]] and some other hacks/modifications.%0a* Carlo Strozzi - Internationalization, PmWiki on Boa, HTML redirection%0a* Michael Weiner - Modifications to the ToDo, RssFeedDisplay, MyPmWiki, and CommentBox recipes%0a* Criss Ittermann (aka Crisses/XES) - ye old best seller Blocklist2 that topped the charts for a while and many other recipes%0a* Ian MacGregor - User and tester.%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>
+time=1180215946

Added: trunk/oggdsf/website/wikilib.d/PmWiki.CreatingNewPages
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.CreatingNewPages	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.CreatingNewPages	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta44 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
+author=TeganDowling
+charset=ISO-8859-1
+csum=de-sandbox/de-spam
+host=69.131.21.195
+name=PmWiki.CreatingNewPages
+rev=58
+targets=PmWiki.Links,PmWiki.MyNewPage,PmWiki.WikiWords,Site.SideBar,PmWiki.WikiGroup,PmWiki.DocumentationIndex
+text=(:Summary:How to create a new page:)%0a(:title Creating New Pages:)%0a%25audience%25 authors (basic)%0aTo create a new page, you need to edit an existing page, and on it add a link to the page you want to create.  %0a%0aTo link to your new page, you must choose a name for it.  The best names describe the page's contents well, so that everyone can remember and type the name easily.%0a%0aThere are two main ways to create a link:%0a%0a# '''Double brackets''': Typing [@[[my new page]]@] will create a link to [[my new page]].  There's [[a lot you can do -> Links]] with double bracket links.%0a# '''WikiWords''': On sites that have WikiWords enabled as link-creating syntax, typing [@MyNewPage@] will create a link to [[MyNewPage]].  [[WikiWords]] are CapitalizedWordsSmashedTogether, and, on such sites, don't need double brackets to become links.  Note that some sites have turned off WikiWord links -- including this one!%0a%0aYou can see that the links to [[my new page]] all hav
 e question marks after them.  That's because [[my new page]] hasn't been written yet.  Clicking the link will take you to an edit form where you can write and save the new page.%0a%0a----%0a%0aAnother way to create a page:  in your browser's address bar (where the page URL is), replace the name of the current page with the name of the page you wish to create, and hit Enter or do whatever you would normally do to go to a new location.  PmWiki will then dutifully tell you that the page you entered doesn't exist, but you can click on the "Edit" link in order to create, edit, and save the new page.%0a%0aThe bad thing about this method is that there are no links to your new page, so you're the only person who knows it is there.  It will be an orphan, unread, unlinked, unloved.  That's why adding a link to an existing page or to the [[Site/SideBar]] is a better way to create a page.%0a%0a----%0a%0aYou can also organize related pages into [[wiki group | groups]], and link between p
 ages in different groups.  [[wiki group | Learn more]].%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a
+time=1177856010
+title=Creating New Pages

Added: trunk/oggdsf/website/wikilib.d/PmWiki.CustomInterMap
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.CustomInterMap	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.CustomInterMap	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta52 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=cleanups
+host=76.183.97.54
+name=PmWiki.CustomInterMap
+rev=41
+targets=PmWiki.InterMap,PmWiki.WikiAdministrator,PmWiki.WikiFarms,PmWiki.Upgrades,Site.InterMap,PmWiki.DocumentationIndex
+text=(:Summary:PmWiki's default InterMaplinks, and how to can create additional InterMap links:)%0a(:title Custom InterMap:)%0a%25audience%25 administrator (intermediate)%0aThis page describes PmWiki's default [[InterMap]] links, and how a [[wiki administrator]] can create additional InterMap links.%0a%0aAn intermap entry takes the following format:%0a%0a-> [@%0aMapPrefix:      http://example.com/partial/url/%0a@]%0a%0aPmWiki is distributed with the following InterMap entries in @@scripts/intermap.txt@@:%0a%0a-> [@%0aPmWiki:         http://www.pmwiki.org/wiki/PmWiki/%0aCookbook:       http://www.pmwiki.org/wiki/Cookbook/%0aWiki:           http://www.c2.com/cgi/wiki?%0aUseMod:         http://www.usemod.com/cgi-bin/wiki.pl?%0aMeatball:       http://www.usemod.com/cgi-bin/mb.pl?%0aWikipedia:      http://www.wikipedia.com/wiki/%0aPITS:           http://www.pmwiki.org/PITS/%0aPath:%0a@]%0a%0aYou can create your own InterMap links by doing one or more of the following:%0a%0a* Modi
 fy the page called ''Site.InterMap'' and place entries like the ones above in it.%0a* Create a file called ''local/localmap.txt'' and place entries like the%0a  ones above in it.%0a* In a [[WikiFarm(s)]] installation you can create a file called%0a  ''local/farmmap.txt'' and there place entries like the ones above in it.%0a  These prefixes will be common to all the wikis in the farm.%0a* Ensure that there is a space after the colon%0a%0aDo not edit the file ''scripts/intermap.txt'' directly!  If you do, you'll%0alose your changes when you [[PmWiki/upgrade(s)]] PmWiki.%0a%0a%0a!! Variables and InterMap links%0a%0aIt's possible to use variables within your InterMap entries.  The following%0aentries create [@ThisWiki:@] and [@ThisPage:@] shortcuts:%0a%0a-> [@%0aThisWiki:        $ScriptUrl%0aThisPage:        {$PageUrl}%0a@]%0a%0aYou can also define InterMap entries where the text of the entry is%0asubstituted into the middle of the URL.  Just include '$1' in the URL where%0ayou 
 want the substitution to take place.  For example:%0a%0a->[@Jargon:          http://catb.org/~esr/jargon/html/$1.html@]%0a%0awould cause [@Jargon:F/feature-creep@] to be converted to [@http://catb.org/~esr/jargon/html/F/feature-creep.html@].%0a%0a%0a!! Tips and tricks%0a%0aIt is possible to document your intermap prefixes directly in the page%0a[[Site.InterMap]]. The extra text will not cause a performance penalty, nor%0awill it break the definition of prefixes. However, be aware that anything%0amatching a line starting with a word and a colon (''':''') will be%0aconsidered to define a prefix.%0a%0aThe order in which various sources are checked for definitions of prefixes%0ais controlled by the variable $InterMapFiles. Currently the precedence%0a(highest to lowest is as follows):%0a* ''local/localmap.txt''%0a* ''$SiteGroup.InterMap''%0a* ''$FarmD/local/farmmap.txt''%0a* ''$FarmD/scripts/intermap.txt''%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]
 ]%0a%0aQ: Are InterMap names case sensitive?%0a%0aA: Yes, thus [@eAdmin:@] is a different InterMap link than [@EAdmin:@].%0a%0aQ: How can I achieve a ''localmap.txt'' mapping with the effect of [@Pics: Path:/somepathto/pics/@]?%0a%0aA: Use the following:%0a->[@Pics:     /somepathto/pics/@]%0a%0a
+time=1180216109
+title=Custom InterMap

Added: trunk/oggdsf/website/wikilib.d/PmWiki.CustomMarkup
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.CustomMarkup	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.CustomMarkup	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=
+host=24.1.26.255
+name=PmWiki.CustomMarkup
+rev=83
+targets=PmWiki.CustomMarkup,PmWiki.LocalCustomizations,PmWiki.DocumentationIndex,PmWiki.Skins
+text=%25audience%25 administrators (intermediate)%0a!! Introduction%0a%0aPmWiki's markup translation engine is handled by a set of rules; each rule searches for a specific pattern in the markup text and replaces it with some replacement text.  Internally, this is accomplished by using PHP's "[[(http://www.php.net/)preg_replace]]" function.%0a%0aRules are added to the translation engine via PmWiki's Markup() function, which looks like%0a%0a->[@Markup($name, $when, $pattern, $replace);@]%0a%0awhere [@$name@] is a unique name (a string) given to the rule, [@$when@] says when the rule should be applied relative to other rules, [@$pattern@] is the pattern to be searched for in the markup text, and [@$replace@] is what the pattern should be replaced with.%0a%0aFor example, here's the code that creates the rule for [@''emphasized text''@] (in ''scripts/stdmarkup.php''):%0a%0a->[@Markup("em", "inline", "/''(.*?)''/", "%3cem>$1%3c/em>");@]%0a%0aBasically this statement says to create
  a rule called "em" to be performed with the other "inline" markups, and the rule replaces any text inside two pairs of single quotes with the same text ($1) surrounded by [@%3cem>@] and [@%3c/em>@].%0a%0aThe first two parameters to Markup() are used to specify the sequence in which rules should be applied.  The first parameter provides a name for a rule -- "[@em@]" in the example above.  We could've chosen other names such as "[@''@]", or even "[@twosinglequotes@]".  In general PmWiki uses the markup itself to name the rule (i.e., PmWiki uses "[@''@]" instead of "[@em@]"), but to keep this example easier to read later on we'll use a mnemonic name for now.%0a%0aThe second parameter says that this rule is to be done along with the other "inline" markups.  PmWiki divides the translation process into a number of phases:%0a%0a[@%0a_begin      start of translation%0afulltext    translations to be performed on the full text            %0asplit       conversion of the full markup t
 ext into lines to be processed%0adirectives  directive processing%0ainline      inline markups%0alinks       conversion of [[links]], url-links, and WikiWords     %0ablock       block markups%0astyle       style handling       %0a_end        end of translation%0a@]%0a%0aThus, specifying "inline" for the second parameter says that this rule should be applied when the other "inline" rules are being performed.  If we want a rule to be performed with the directives -- i.e., before inline rules are processed, we would specify "directives" or "%3cinline" for the second parameter.%0a%0aThe third parameter is a Perl-compatible regular expression. Basically, it is a slash, a [[regular expression -> http://www.php.net/manual/en/reference.pcre.pattern.syntax.php]], another slash, and a set of optional [[modifiers -> http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php]].%0a%0aThe example uses the pattern string [@"/''(.*?)''/"@], which uses [@''(.*)''@] as the regular expr
 ession and no options. (The regular expression says "find two single quotes in succession, then as few arbitrary characters as are needed to make the match find something, then two additional single quotes in succession"; the parentheses "capture" a part of the wikitext for later use.)%0a%0aThe fourth parameter is the replacement text that should be inserted instead of the marked-up wikitext. You can use [@$1@], [@$2@], etc. to insert the text from the first, second etc. parenthesised part of the regular expression.%0a%0aIn the example, we have [@"%3cem>$1%3c/em>"@], which is an [@%3cem>@], the text matched by the first parentheses (i.e. by the [@.*?@] section of the pattern), and [@%3c/em>@].%0a%0aHere's a rule for [@@@monospaced@@@] text:%0a%0a->[@Markup("@@", "inline", "/@@(.*?)@@/", "%3ccode>$1%3c/code>");@]%0a%0aand for a [@[:comment ...:]@] directive that is simply removed from the output:%0a%0a->[@Markup("comment", "directives", "/\\[:comment .*?:\\]/", '');@]%0a%0aOk
 ay, now how about the rule for [@'''strong emphasis'''@]?  We have to be a bit careful here, because although this translation should be performed along with other inline markup, we also have to make sure that the rule for [@'''@] is handled ''before'' the rule for [@''@], because [@'''@] also contains [@''@]. The second parameter to Markup() can be used to specify the new rule's relationship to any other rule:%0a%0a->[@Markup("strong", "%3cem", "/'''(.*?)'''/", "%3cstrong>$1%3c/strong>");@]%0a%0aThis creates a rule called "strong", and the second parameter "%3cem" says to be sure that this rule is processed before the "em" rule we defined above.  If we wanted to do something after the "em" rule, we would use ">em" instead.  Thus, it's possible to add rules at any point in PmWiki's markup translation process in an extensible manner.  (In fact, the "inline", "block", "directives", etc., phases above are just placeholder rules used to provide an overall sequence for other rule
 s.  Thus one can use "%3cinline" to specify rules that should be handled before any other inline rules.)             %0a%0aIf you want to disable available markup just call e.g.:%0a%0a->[@DisableMarkup("strong")@]%0a%0aPmWiki's default markup rules are defined in the ''scripts/stdmarkup.php'' file.  To see the entire translation table as the program is running, the scripts/diag.php module adds "[@?action=ruleset@]", which displays the set of defined markup rules in the sequence in which they will be processed.  You can see it at [[CustomMarkup?action=ruleset | CustomMarkup?action=ruleset]].%0a%0a!! Other common examples%0a%0a!!! Define a custom markup to produce a specific HTML or Javascript sequence%0a%0aSuppose an admin wants to have a simple "[@(:example:)@]" markup that will always produce a fixed HTML string in the output, such as for a webring, Google AdSense display, or Javascript.  The Markup() call to do this would be:%0a%0a->[@%0aMarkup('example', 'directives',%0a 
  '/\\(:example:\\)/',%0a  Keep("%3cdiv class='example'>%3cp>Here is a %0a    %3ca target='_blank' href='http://www.example.com'>link%3c/a> to%0a    %3cem>example.com%3c/em>%3c/p>%3c/div>") );%0a@]%0a%0a* The first argument is a unique name for the markup ("example").%0a* The second argument says to perform this markup along with other directives.%0a* The third argument is the pattern to look for "(:example:)".%0a* The fourth argument is the HTML that "(:example:)" is to be replaced with.  We use the Keep() function here to prevent the output from being further processed by PmWiki's markup rule -- in the above example, we don't want the http://www.example.com url to be again converted to a link.%0a%0a%0a!!! Define a markup to call a custom function that returns content%0a%0aAn 'e' option on the [@$pattern@] parameter will cause the [@$replace@] parameter to be treated as a PHP expression to be evaluated instead of replacement text.  Thus, a markup to produce a random number b
 etween 1 and 100 might look like:%0a%0a->[@%0aMarkup('random', 'directives',%0a  '/\\(:random:\\)/e',%0a  "rand(1, 10)");%0a@]%0a%0aThis calls the PHP built-in rand() function and substitutes the directive with the result.  Any function can be called, including functions defined in a [[local customization(s)]] file.%0a%0aArguments can also be passed by using regular expression capturing parentheses, thus%0a%0a->[@%0aMarkup('randomargs', 'directives',%0a  '/\\(:random (\\d+) (\\d+):\\)/e',%0a  "rand('$1', '$2')");%0a@]%0a%0awill cause the markup [@(:random 50 100:)@] to generate a random number between 50 and 100.%0a%0a->%25note%25 Note:  Be very careful with the /e modifier in regular expressions; malicious authors may be able to pass strings that cause arbitrary and undesirable PHP functions to be executed.%0a%0aFor a PmWiki function to help with parsing arbitrary sequences of arguments and key=value pairs, see Cookbook:ParseArgs.%0a%0a%25trail%25%3c%3c|[[Documentation Inde
 x]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How can I embed JavaScript into a page's output?%0a%0aA: There are several ways to do this.  The [[Cookbook:JavaScript]] recipe describes a simple means for embedding static JavaScript into web pages using [[custom markup]].  For editing JavaScript directly in wiki pages (which can pose various security risks), see the [[(Cookbook:)JavaScript-Editable]] recipe.  For JavaScript that is to appear in headers or footers of pages, the [[skin(s)]] template can be modified directly, or %3cscript> statements can be inserted using the $HTMLHeaderFmt array.%0a>>%3c%3c%0a%0a
+time=1156526650

Added: trunk/oggdsf/website/wikilib.d/PmWiki.CustomWikiStyles
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.CustomWikiStyles	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.CustomWikiStyles	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=
+host=24.1.26.255
+name=PmWiki.CustomWikiStyles
+rev=34
+targets=PmWiki.WikiStyles,PmWiki.WikiAdministrator,PmWiki.DocumentationIndex
+text=%25audience%25 administrators (intermediate)%0aThis page describes the predefined [[WikiStyles]] and how a [[Wiki Administrator]] can define additional WikiStyles as a local customization for all pages (in local/config.php) or specific groups (in local/$Group.php).%0a%0aAll predefined WikiStyles are setup in the global array $WikiStyle.%0aTo define your own WikiStyles, add the setting of the correspondent `WikiStyle within the array.%0a%0a[[#predef]]%0a!!Predefined WikiStyles%0a%0aThe following array-values are set by [@scripts/wikistyles.php@] using the [[Cookbook:Functions#SDV |SDV()-function]] (so you can overwrite them by setting them prior in config.php or farmconfig.php):%0a%0a||width=70%25 border=1 cellpadding=3 cellspacing=0%0a||'''markup:''' ||'''definition:''' ||%0a||[[%3c%3c]]'''text colors:''' [[%3c%3c]] (equiv. to [@%25color=xxxx define=xxxx%25@] ||||%0a|| [@%25black%25@]  ||[@$WikiStyle['black']['color'] = 'black';@] ||%0a|| [@%25white%25@]  ||[@$WikiStyle
 ['white']['color'] = 'white';@] ||%0a|| [@%25red%25@]    ||[@$WikiStyle['red']['color'] = 'red';@] ||%0a|| [@%25yellow%25@] ||[@$WikiStyle['yellow']['color'] = 'yellow';@] ||%0a|| [@%25blue%25@]   ||[@$WikiStyle['blue']['color'] = 'blue';@] ||%0a|| [@%25gray%25@]   ||[@$WikiStyle['gray']['color'] = 'gray';@] ||%0a|| [@%25silver%25@] ||[@$WikiStyle['silver']['color'] = 'silver';@] ||%0a|| [@%25maroon%25@] ||[@$WikiStyle['maroon']['color'] = 'maroon';@] ||%0a|| [@%25green%25@]  ||[@$WikiStyle['green']['color'] = 'green';@] ||%0a|| [@%25navy%25@]   ||[@$WikiStyle['navy']['color'] = 'navy';@] ||%0a|| [@%25purple%25@] ||[@$WikiStyle['purple']['color'] = 'purple';@] ||%0a||[[%3c%3c]]'''list-styles:''' ||||%0a|| [@%25decimal%25@] ||[@$WikiStyle['decimal']['apply'] = 'list';@][[%3c%3c]][@$WikiStyle['decimal']['list-style'] = 'decimal';@] ||%0a|| [@%25roman%25@] ||[@$WikiStyle['roman']['apply'] = 'list';@][[%3c%3c]][@$WikiStyle['roman']['list-style'] = 'lower-roman';@] ||%0a|| [@%25R
 OMAN%25@] ||[@$WikiStyle['ROMAN']['apply'] = 'list';@][[%3c%3c]][@$WikiStyle['ROMAN']['list-style'] = 'upper-roman';@] ||%0a|| [@%25alpha%25@] ||[@$WikiStyle['alpha']['apply'] = 'list';@][[%3c%3c]][@$WikiStyle['alpha']['list-style'] = 'lower-alpha';@] ||%0a|| [@%25ALPHA%25@] ||[@$WikiStyle['ALPHA']['apply'] = 'list';@][[%3c%3c]][@$WikiStyle['ALPHA']['list-style'] = 'upper-alpha';@] ||%0a||[[%3c%3c]]'''special:''' ||||%0a||open links in a new browser-window: ||||%0a|| [@%25newwin%25@] ||[@$WikiStyle['newwin']['target'] = '_blank';@] ||%0a||Turns markup into a comment via display:none CSS ||||%0a|| [@%25comment%25@] ||[@$WikiStyle['comment']['display'] = 'none';@] ||%0a%0a!!Author-Defined WikiStyles%0a%0a# The first index of the array defines the style name (e.g. mynewstyle, projectentry etc)%0a# the second index defines the attribute name (e.g. color, bgcolor, etc.)%0a# the value set defines the attribute value (e.g. red, bold, #00ffcc, etc.)%0a%0a'''Sample:''' If you want to
  define a (site-wide) style the same as the page style%0a->[@%25define=projectentry color:red%25@]%0ause%0a->[@$WikiStyle['projectentry']['color'] = 'red';@]%0a%0a%0aThe [@$WikiStyle['projectentry']['apply']@] variable may be defined if the wikistyle concerns a particular tag. It may be @@'item' (for li|dt), 'list' (for ul|ol|dl), 'div', 'pre', 'img', 'p'@@ or the combining @@'block' (for p|div|ul|ol|dl|li|dt|pre|h[1-6])@@. Example:%0a%0a [@$WikiStyle['top']['apply'] = 'item';@]%0a [@$WikiStyle['top']['class'] = 'top';@]%0a%0athen a markup%0a [@* %25top%25 An important list-item@]%0awill output%0a [@%3cli class="top">An important list-item%3c/li>@]%0a%0a!!Notes%0a%0a!!!To be done:%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>
+time=1156526670

Added: trunk/oggdsf/website/wikilib.d/PmWiki.DebugVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.DebugVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.DebugVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.18 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
+author=TonyColley
+csum=include description of EnableDiag effects
+ctime=1156512549
+host=69.245.128.149
+name=PmWiki.DebugVariables
+rev=3
+targets=PmWiki.Variables
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0a:$EnableDiag:(:include AvailableActions#BEGENABLEDIAG#ENDENABLEDIAG:)%0a%0a:$EnableIMSCaching:A variable which, when set equal to 1, recognizes the "If-Modified-Since" header coming from browsers and allows browsers to use locally cached pages.  Disabled by default to help the administrator customize its page without needing permanent reloading.%0a%0a:$EnableStopWatch:This activates an internal stopwatch that shows how long it takes to render a page. (If you have a wiki that composes a HTML page from multiple pages, such as a normal layout with a sidebar, you'll get separate timings for each subpage and for the total page.)%0a%0a: :The timings can be displayed by adding [@%3c!--function:StopWatch-->@] in the wiki template.%0a%0a: :Valid values are:%0a        $EnableStopWatch = 0; # No timings (the default). No HTML will be generated.%0a        $EnableStopWatch = 1; # Wall-clock timings only.%0a        $EnableStopWatch = 2; # Wall-cloc
 k and CPU usage timings. Won't work on Windows.%0a%0aSee also:%0a* scripts/refcount.php is useful for debugging%0a
+time=1156872328

Added: trunk/oggdsf/website/wikilib.d/PmWiki.DeletingPages
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.DeletingPages	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.DeletingPages	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Opera/9.00 (Windows NT 5.1; U; de)
+author=
+csum=
+host=84.58.207.191
+name=PmWiki.DeletingPages
+rev=21
+targets=PmWiki.WikiAdministrator,Site.AllRecentChanges,PmWiki.EditVariables,PmWiki.DocumentationIndex
+text=To delete a page, edit the page, select (highlight) all text in the edit textarea and replace it with the single word%0a%0a    [@delete@]%0a%0aNote that it may be a good idea to add a comment to the field @@summary@@%0aexplaining why you deleted the page. (The field @@summary@@ is usually found%0ajust below the edit textarea).%0a%0aAfter saving the changes the page is deleted.  As an added safety feature, the deleted page still exists on the server (with a timestamp) and can be restored to the former page by the [[wiki administrator]].%0a%0aIf you suspect that a page has been deleted but aren't sure, have a look at the wikigroup's [=RecentChanges=]. Erasing a page counts as editing the page, and the activity is recorded there and on [[{$SiteGroup}.AllRecentChanges]].%0a%0aThe default word used for page deletion ("delete") can be changed in config.php by setting the variable $DeleteKeyPattern (see [[EditVariables]]). If there is a danger of malicious page deletion it may
  be a good idea to change the delete word to something more obscure. There is also a recipe for creating a separate delete action at Cookbook:DeleteAction.%0a%0a'''Deleting Groups & Categories'''%0a%0aOnce I create a Group or Category, how can I get rid of that group or category?%0a%0aJust remove the unwanted pages from wiki.d/ .  (Doing it via the wiki%0adoesn't resolve the problem, since it counts as an "update" which causes%0athe RecentChanges page to be re-created.)%0a%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>
+time=1154269894

Added: trunk/oggdsf/website/wikilib.d/PmWiki.DesignNotes
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.DesignNotes	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.DesignNotes	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.3) Gecko/20060425 SUSE/1.5.0.3-7 Firefox/1.5.0.3
+author=Pm
+csum=Added FAQ about WYSIWYG, link to WYSIWYG
+host=24.1.26.255
+name=PmWiki.DesignNotes
+rev=19
+targets=PmWiki.PmWikiPhilosophy,PmWiki.MailingLists,PmWiki.SimultaneousEdits,PmWiki.DocumentationIndex,PmWiki.DesignNotes
+text=Here are some of the features and notes about PmWiki's design decisions.  Many of these derive directly from the [[PmWikiPhilosophy]] and lots of discussion on the [[mailing lists]].%0a%0a* PmWiki:FlatFileAdvantages - why PmWiki uses flat files to store pages instead of an SQL database%0a* PmWiki:HierarchicalGroups - why PmWiki doesn't support nested groups%0a* PmWiki:PageLocking - how PmWiki works without locking pages (see also [[simultaneous edits]])%0a* PmWiki:SearchImprovements - why PmWiki has a native search engine%0a* PmWiki:FilePermissions - some information about PmWiki's file permission settings%0a* PmWiki:WikiGroupMotivation - why WikiGroups%0a* PmWiki:WYSIWYG - why not WYSIWYG.%0a%0a%25trail%25 %3c%3c|[[DocumentationIndex]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: Why doesn't PmWiki  use hierarchical / nested groups?%0aA: It essentially comes down to figuring out how to handle %0apage links between nested groups; if someone can figure out %0aan obvious, intuiti
 ve way for authors to%0ado that, then nested groups become plausible.  See [[DesignNotes]]%0aand [[PmWiki:HierarchicalGroups]].%0a%0aQ: Why don't PmWiki's scripts have a closing ?> tag?%0aA: All of PmWiki's scripts now omit the closing ?> tag.  The tag is not%0arequired, and it avoids problems with unnoticed spaces or blank%0alines at the end of the file.  Also, some file transfer protocols%0amay change the newline character(s) in the file, which can also%0acause problems.  See also the [[http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php | Instruction separation ]] page in the [[http://www.php.net/manual/en/index.php | PHP manual ]].%0a%0aQ: Does PmWiki support WYSIWYG editing (or something like the FCKEditor)?%0aA: Short answer:  PmWiki provides GUI buttons in a toolbar for common markups, but otherwise does not have WYSIWYG editing.  For the reasons why, see PmWiki:WYSIWYG.
+time=1153338464

Added: trunk/oggdsf/website/wikilib.d/PmWiki.DocumentationIndex
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.DocumentationIndex	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.DocumentationIndex	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.2.0-beta6 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=add blocklist
+host=24.1.26.255
+name=PmWiki.DocumentationIndex
+rev=261
+targets=PmWiki.BasicEditing,PmWiki.CreatingNewPages,PmWiki.Links,PmWiki.Images,PmWiki.TextFormattingRules,PmWiki.Uploads,PmWiki.Tables,PmWiki.TableDirectives,PmWiki.WikiStyles,PmWiki.WikiStyleExamples,PmWiki.PageDirectives,PmWiki.IncludeOtherPages,PmWiki.InterMap,PmWiki.ConditionalMarkup,PmWiki.PageVariables,PmWiki.MarkupMasterIndex,PmWiki.SimultaneousEdits,PmWiki.WikiStructure,PmWiki.WikiGroup,PmWiki.GroupHeaders,PmWiki.WikiTrails,PmWiki.PageHistory,PmWiki.Passwords,PmWiki.Categories,PmWiki.PageLists,PmWiki.DeletingPages,PmWiki.Installation,PmWiki.InitialSetupTasks,PmWiki.LocalCustomizations,PmWiki.Skins,PmWiki.Upgrades,PmWiki.BackupAndRestore,PmWiki.PerGroupCustomizations,PmWiki.PasswordsAdmin,PmWiki.AuthUser,PmWiki.UploadsAdmin,PmWiki.Internationalizations,PmWiki.WikiFarms,PmWiki.CustomInterMap,PmWiki.CustomMarkup,PmWiki.CustomWikiStyles,PmWiki.Blocklist,PmWiki.Notify,PmWiki.WebFeeds,PmWiki.RefCount,PmWiki.AvailableActions,PmWiki.Troubleshooting,PmWiki.UrlApprovals,PmWiki
 .Variables,PmWiki.Functions,PmWiki.PageFileFormat,PmWiki.ChangesFromPmWiki1,PmWiki.UpgradingFromPmWiki1,PmWiki.Audiences,PmWiki.Contributors,PmWiki.MailingLists,PmWiki.PmWikiPhilosophy,PmWiki.DesignNotes,PmWiki.Glossary,PmWiki.AccessKeys,PmWiki.BasicVariables,PmWiki.EditVariables,PmWiki.FilePermissions,PmWiki.FmtPageName,PmWiki.I18nVariables,PmWiki.LayoutVariables,PmWiki.LinkVariables,PmWiki.OtherVariables,PmWiki.PagelistVariables,PmWiki.PathVariables,PmWiki.Requirements,PmWiki.Security,PmWiki.SitePreferences,PmWiki.SkinTemplates,PmWiki.SpecialCharacters,PmWiki.UploadVariables,PmWiki.WikiAdministrator,PmWiki.WikiPage,PmWiki.WikiWikiWeb,PmWiki.WikiWord
+text=The pages below describe various aspects of [[#using|using]], [[#admin|administering]] and [[#trouble|troubleshooting]] a PmWiki installation, as well as aspects of the [[#misc|PmWiki community]].%0a%0aAs you can see, the documentation is still incomplete. Feel free to help yourself and others by completing it!  Just edit the pages on %25newwin%25[[PmWiki:DocumentationIndex|pmwiki.org]].  You might want to follow or contribute to the [[PmWiki:DocumentationGuidelines | documentation guidelines]].%0a%0a!! [[#contents]] Table of Contents%0a%0a* [[#using | Beginner Topics for Creating/Editing Pages]]%0a* [[#intermed |Intermediate Editing Topics]]%0a* [[#struct | Wiki Structures: Organizing and Protecting Pages]]%0a* [[#admin | PmWiki Site Administration]]%0a* [[#misc |About PmWiki]]%0a%0a----%0a%0a!! [[#using]] Beginner Topics for Creating and Editing Pages%0a%0a* [[Basic editing]] - Examples of common PmWiki page markup%0a* [[Creating new pages]] - How to add a page to the
  site%0a* [[Links]] - Creating links to other places in the site or to an external URL%0a* [[Images]] - Placing images in pages%0a* [[Text formatting rules]] - A large list of available PmWiki markup%0a%0a!! [[#intermed]] Intermediate Editing Topics%0a* [[Uploads]] - Allow authors to upload files, also known as page attachments%0a* [[Tables]] - How to use the original type of table markup%0a* [[Table directives]] - Newer, more advanced type of table markup%0a* [[WikiStyles]] - Modify the color and other CSS style attributes of a page's contents%0a** [[WikiStyle examples]] - More wikistyle demonstration%0a%0a* [[Page directives]] - Specify page titles, descriptions, etc., and display of various components%0a* [[Include other pages]] - Insert the contents of other pages into a wiki page%0a* [[InterMap]] links - System for defining links among (usually wiki) sites%0a* [[Conditional markup]] - Use the [=(:if:)=] directive to include or exclude portions of a page%0a* [[Page varia
 bles]] - Variables that can be used in page markup%0a%0a* [[Markup master index]] - Everything you wanted to know about wiki markup but were afraid to ask%0a* [[Simultaneous edits]] - Handling multiple attempts to edit a page nearly simultaneously%0a%0a!! [[#struct]] Organizing and Protecting Pages%0a* [[Wiki structure]] - Some options for organizing pages on the site%0a* [[Wiki Group]]s - Organizing pages into wiki groups%0a* [[Group Headers]] - Add content to the beginning of all pages in a [[WikiGroup]]%0a* [[WikiTrails]] - Create navigation paths (trails) through pages%0a* [[Page history]] - View/recover previous versions of a page%0a%0a* [[Passwords]] - Password protect pages and groups%0a* [[Categories]] - Organize pages into categories (like "tags" and "labels")%0a* [[Page lists]] - Get lists of pages using [=(:pagelist:)=] and [=(:searchresults:)=]%0a* [[Deleting pages]] - How to remove pages from the site%0a%0a!! [[#admin]] PmWiki Site Administration%0a* [[Installat
 ion]] - How to download and install PmWiki%0a* [[Initial setup tasks]] - First steps following a fresh installation%0a* [[Local customizations]] - Customize your installation%0a* [[Skins]] - Change your site's overall look and feel%0a* [[Upgrades]] - Upgrade your site to a newer version of PmWiki%0a%0a* [[Backup and Restore]] - Be prepared for disaster recovery%0a* [[PerGroup customizations | Per-group customizations]] - How to customize a subset of your wiki%0a* [[Passwords admin]]istration - Apply passwords to pages, wiki groups, or the entire site%0a* [[AuthUser]] - Identity-based authorization system (usernames and authorization groups)%0a* [[Uploads admin]]istration - Configure your site for file attachments%0a%0a* [[Internationalizations]] - How to use translation pages and the XLPage() function%0a* [[Wiki Farms]] - Run multiple sites using one copy of [=PmWiki=]%0a* [[Custom InterMap]] - The default InterMap links, and how to create more of them%0a* [[Custom markup]] 
 - Create custom wiki markup as a local customization%0a* [[Custom WikiStyles]] - The predefined WikiStyles and how to define your own%0a%0a* [[Blocklist]] - Avoid wikispam by blocking phrases or IP addresses %0a* [[Notify]] - Send email messages when pages are changed (but see also [[web feeds]])%0a* [[Web feeds]] - Provide RSS, Atom, and Dublin Core syndication feeds%0a* [[RefCount]] - Find orphaned and missing pages%0a* [[Available actions]] - A list of descriptions for what ?action=XXX does%0a* [[Troubleshooting]] [[#trouble]] - Advice for troubleshooting an installation%0a%0a* [[Url approvals]] - Discourage "link spamming" with ''urlapprove.php''%0a* [[Variables]] - Variables available for local customization%0a* [[Functions]] - How some functions in pmwiki.php work%0a* [[Page file format]] - Create wiki formatted pages in bulk and for upload to your pmwiki site%0a%0a* [[Changes from PmWiki 1]] - Features of PmWiki 1.0 that have been changed or eliminated%0a* [[Upgrading
  from PmWiki 1]] - Suggestions for upgrading a PmWiki 1.x installation to PmWiki 2%0a%0a!! [[#misc]] About PmWiki%0a* [[Audiences]] - Describes the "audiences" for which PmWiki was designed%0a* [[Contributors]] - Some contributors to PmWiki's development and improvement%0a* [[Mailing lists]] - The email discussion lists available and their archives%0a* [[PmWikiPhilosophy]] - Some of the ideas that guide the design and implementation of PmWiki%0a* [[Design notes]] - Some of the features and notes about PmWiki's design decisions%0a%0a* [[(PmWiki:)References]] - Places where PmWiki has been written about%0a* [[Glossary]] - Descriptions of various terms related to PmWiki%0a%0a>>comment%3c%3c%0aNote: The following pages are listed here so that they can include a #faq section and have the questions appear on the FAQ page.  %0a%0a* [[AccessKeys]]%0a* [[BasicVariables]]%0a* [[EditVariables]]%0a* [[FilePermissions]]%0a* [[FmtPageName]]%0a* [[I18nVariables]]%0a* [[LayoutVariables]]%0a
 * [[LinkVariables]]%0a* [[OtherVariables]]%0a* [[PagelistVariables]]%0a* [[PathVariables]]%0a* [[Requirements]]%0a* [[Security]]%0a* [[SitePreferences]]%0a* [[SkinTemplates]]%0a* [[SpecialCharacters]]%0a* [[UploadVariables]]%0a* [[WikiAdministrator]]%0a* [[WikiPage]]%0a* [[WikiWikiWeb]]%0a* [[WikiWord]]%0a
+time=1159595670

Added: trunk/oggdsf/website/wikilib.d/PmWiki.EditVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.EditVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.EditVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.15 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=It's called 'EditTemplate' (and yes, it's standard)
+host=24.1.26.255
+name=PmWiki.EditVariables
+rev=43
+targets=PmWiki.Variables
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0a:$EnableGUIButtons:When set to '1', turns on the graphical buttons in the "Edit Page" form.%0a        # turn on graphical edit buttons%0a        $EnableGUIButtons = 1;%0a%0a:$EnablePostAuthorRequired:When set to '1', posting of pages requires the author to provide an author name.  Otherwise, authors can post without a name.%0a        # require authors to provide a name%0a        $EnablePostAuthorRequired = 1; %0a%0a:$EnableDrafts:When set to '1', enables the "Save as draft" button and built-in handling of "draft" versions of pages, where: (1) initial "Save as draft" of an existing page ("PageName") saves changes to a new name ("PageName-Draft"), (2) subsequent attempts to edit PageName causes PageName-Draft to be edited, (3) subsequent selections of "Save as draft" cause PageName-Draft to be saved, and (4) pressing "Save" causes PageName-Draft to be posted to PageName, and deleted.%0a        # turn on draft edits%0a        $EnableDraf
 ts = 1;%0a%0a:$DraftSuffix:The suffix to use for draft versions of pages (default "-Draft").%0a%0a:$DiffKeepDays:The $DiffKeepDays variable sets the minimum length of time that a page's revision history is kept. By default it is set to 3650 days, or a little less than ten years. You can change this value in a customization file to be something smaller, e.g.:%0a        $DiffKeepDays = 30; # keep revisions at least 30 days%0a: :Note that a specific page revision isn't removed from the page until the first edit after the time specified by $DiffKeepDays has elapsed. Thus, it's still possible for some pages to have revisions older than $DiffKeepDays -- such revisions will be removed the next time those pages are edited.%0a%0a:$DeleteKeyPattern:The pattern used to determine if a page should be deleted.  The default is to remove pages that contain only the single word "delete" (and optional spaces).%0a        # change delete word to "remove"%0a        $DeleteKeyPattern = "^\\s*remo
 ve\\s*$";%0a        # delete any page with no visible text, i.e., empty%0a        $DeleteKeyPattern = "^\\s*$";%0a%0a:$EditTemplatesFmt:Name of the page (or an array of names) to be used as the default text for any newly created pages.%0a        [=# Use 'Main.NewPageTemplate' as default text of all new pages%0a        $EditTemplatesFmt = 'Main.NewPageTemplate';%0a        # Use 'Template' in the current group for new pages%0a        $EditTemplatesFmt = '$Group.Template';%0a        # Use 'Template' in the current group if it exists, otherwise%0a        # use 'Main.NewPageTemplate'%0a        $EditTemplatesFmt = array('$Group.Template', 'Main.NewPageTemplate');=]%0a%0a:$DefaultPageTextFmt:The text that should be displayed when browsing non-existent pages. As default PmWiki uses the contents of Site.PageNotFound %0a        [@$DefaultPageTextFmt = '(:include $[{$SiteGroup}.PageNotFound]:)';@] %0a%0a:$EditFunctions: This array contains the sequence of functions that are called when
  a page is edited.  It can be customized to provide additional functions to be called as part of the editing process.  The standard setting is:%0a        [=$EditFunctions = array('EditTemplate', 'RestorePage', 'ReplaceOnSave', %0a          'SaveAttributes', 'PostPage', 'PostRecentChanges', 'PreviewPage'); =]%0a%0a:$ROSPatterns: With this array you can give a pattern as key and a text which should replace it when saving an edited text.  See Cookbook:ROSPatterns for examples.%0a%0a:$IsPagePosted: Set to a true value if the page is actually saved (e.g., this is used to tell the RecentChanges handlers if they need to update).%0a       %0a:$PageEditFmt: By default, this is the HTML to be displayed for an edit form.%0a%0a:$PageEditForm: Specifies the edit form for ?action=edit.  Defaults to '$SiteGroup.EditForm'.%0a%0a:$HandleEditFmt: Like $HandleBrowseFmt, this specifies the entire output format for ?action=edit for a page.%0a%0a:$EditRedirectFmt: The page to which an author is s
 ent after pressing "Save" or "Cancel" from an edit form.  Defaults to "$FullName", which sends the author to the page just edited, but can be changed to specify another page.%0a        [@# redirect to Main.HomePage%0a        $EditRedirectFmt = 'Main.HomePage';  %0a        # redirect to HomePage of current group%0a        $EditRedirectFmt = '{$Group}.HomePage';%0a        @]
+time=1156622302

Added: trunk/oggdsf/website/wikilib.d/PmWiki.FAQ
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.FAQ	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.FAQ	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta53 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=
+host=76.183.97.54
+name=PmWiki.FAQ
+rev=580
+targets=Site.Search,PmWiki.DocumentationIndex
+text=(:Summary:List of frequently asked questions:)%0a%0aThis page will attempt to summarize some of the more commonly asked questions. The answers are on the corresponding pages (see link). If you have a question which isn't answered here, you can leave your question on the [[(PmWiki:)Questions]] page or search for documentation using the [[Site.Search | search]] facility. More documentation can be found on the [[PmWiki.DocumentationIndex | documentation index]] page.%0a%0a(:comment The questions and answers are held on their respective page(s), then collated below according to the pagelist. Please make changes to those page(s) rather than making the changes here .:)%0a%0a(:pagelist trail=PmWiki.DocumentationIndex "[[#faq]]" fmt=#includefaq class=faqtoc :)%0a%0a
+time=1180816327

Added: trunk/oggdsf/website/wikilib.d/PmWiki.FilePermissions
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.FilePermissions	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.FilePermissions	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,9 @@
+version=pmwiki-2.0.beta55 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6
+author=Pm
+host=24.1.26.255
+name=PmWiki.FilePermissions
+rev=8
+targets=PmWiki.PmWiki
+text=This page briefly describes PmWiki's settings for file and directory permissions in a typical Unix environment.%0a%0aFirst, let's look at PmWiki 2 without any cookbook scripts loaded.  PmWiki needs to be able to write into the wiki.d/ directory to be able to save pages.  And it needs to be able to write into the uploads/ directory to save uploads.  Those are the *only* directories that need to be writable by the webserver.  It doesn't matter to PmWiki who owns or creates those directories, as long as it has write permission to them.%0a%0aAll other directories should be owned by the account holder, and be accessible by the webserver (but normally not writable by the webserver).       %0a%0aThat's it -- everything else depends on the specific PHP configuration and running environment, which is detailed below (and which is why there isn't a definitive answer that applies to every situation).  But the above two rules are absolute and answer 95%25 of the questions about dire
 ctory permissions.      %0a%0aIn the example of "What ownerships should a pub/css/ directory have?", we simply ask "Does PmWiki need to create files in that directory?"  The answer is "no", so the directory can (should) be owned by the administrator and only have basic read permissions (r-x) to the webserver.  This means PmWiki shouldn't be responsible for creating the directory, because then the webserver would own the directory and not%0athe administrator.%0a%0aOkay, with that out of the way, here are some configuration specific details.  If someone is on a Unix host, then the webserver typically runs with a userid and groupid that is different from the account holder (e.g, "apache", "www", or "httpd").  Thus, if the account holder creates the wiki.d/ and uploads/ directories, then they must also to set the directories to be world-writable (rwx) permissions in order for PmWiki             (running as the webserver account) to create files there.                       %0a%0
 a-> [@%0a$ pwd%0a/home/pmichaud/public_html/pmwiki%0a$ mkdir uploads%0a$ mkdir wiki.d%0a$ chmod 777 uploads wiki.d        %0a$ ls -ld . uploads wiki.d%0adrwxr-xr-x   12 pmichaud pmichaud     1024 Feb 10 11:51 .         %0adrwxrwxrwx    8 pmichaud pmichaud     1024 Jan 23 11:58 uploads             %0adrwxrwxrwx    2 pmichaud pmichaud    54272 Feb 10 15:29 wiki.d      %0a@]%0a%0aHowever, lots of people don't like having those world-writable (rwx) permissions on directories.  Thus, one way to get around that is to let the webserver own the directory directly, so that world-writable permissions aren't needed to save files there.  However, most unix systems don't allow normal users to change file ownerships, so the way to get the webserver to own the directories is to let PmWiki create them, by   %0atemporarily granting write permissions to the parent and then running the pmwiki.php script to create the needed directories:                 %0a%0a-> [@%0a$ pwd%0a/home/pmichaud/publ
 ic_html/pmwiki%0a$ chmod 777 .  %0a$ ls -ld .%0adrwxrwxrwx   12 pmichaud pmichaud     1024 Feb 10 11:51 .%0a# %3c-- execute pmwiki.php script from web browser -->%0a$ ls -ld . uploads wiki.d%0adrwxrwxrwx   12 pmichaud pmichaud     1024 Feb 10 11:51 .%0adrwxrwxr-x    8 apache   apache       1024 Jan 23 11:58 uploads%0adrwxrwxr-x    2 apache   apache      54272 Feb 10 15:29 wiki.d    %0a$ chmod 755 .%0a$ ls -ld . uploads wiki.d%0adrwxr-xr-x   12 pmichaud pmichaud     1024 Feb 10 11:51 .%0adrwxrwsr-x    8 apache   pmichaud     1024 Jan 23 11:58 uploads       %0adrwxrwsr-x    2 apache   pmichaud    54272 Feb 10 15:29 wiki.d         %0a@]%0a%0aNow the two directories are owned by apache and we don't have world-writable permissions on them, but pmichaud still has write permissions to the files and directories by virtue of the group ownership and permissions.  The setgid bit also ensures that any files or subdirectories created within uploads/ or wiki.d/ will belong to the same (pm
 ichaud) group.%0a%0aHOWEVER, if a site is running in PHP's "safe_mode", then the "let PmWiki create the directories" solution doesn't work, as PHP will only create files in directories that are owned by the same user that owns the pmwiki.php script itself.  Thus, PmWiki (apache) cannot create the directories in this case, or safe_mode will complain when PmWiki attempts to write a file into those directories. The *only* way for things to work in safe_mode is to manually create the needed directories and set their permissions to 777, as outlined at the beginning of this section.%0a%0aAnd for those select webservers/PHP installations that are configured such that the PmWiki script runs with the same identity as the account holder, then everything "just works" without doing anything manually.  PmWiki creates any directories as needed (each owned by the account holder), and permissions aren't generally an issue at all.%0a%0aOkay, now let's look at cookbook scripts.  If a cookbook
  script has files that it wants to make available to browsers, such files should generally be placed somewhere within the 'pub/' hierarchy and referenced via '$PubDirUrl'.         %0a%0aIf a cookbook recipe needs to *write* files to disk, then the same rules apply to that directory as for the wiki.d/ and uploads/ directories above, with the exact ownerships and permissions depending on the webserver and PHP configuration.  In general the cookbook recipe should do the same as PmWiki, and just call PmWiki's mkdirp($dir) function.  PmWiki will then take care of creating the directory (if it can) or prompting for its creation as appropriate.%0a%0aFor example, if cookbook recipe 'frobot' wants to distribute a .css file, then that file should go somewhere like pub/css/frobot.css or pub/frobot/frobot.css.  The directories and files in this case should be created and owned by the account owner, since the cookbook recipe doesn't need to create or modify any of the files when it runs.
            %0a%0aAs an alternate example, the Cookbook:MimeTeX recipe wants to be able to create cached images for the math markup, and those images need to be available to the browser.  Thus, `MimeTeX uses a pub/cache/ directory, which should be created in whatever manner was used to create the wiki.d/ and uploads/ directories (i.e., according to the webserver and PHP configuration).  Again, Cookbook:MimeTeX just solves this by calling mkdirp("pub/cache"), and letting that function create the directory or prompt the administrator for the appropriate action based upon the server settings encountered.
+time=1125540508

Added: trunk/oggdsf/website/wikilib.d/PmWiki.FmtPageName
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.FmtPageName	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.FmtPageName	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.5 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418 (KHTML, like Gecko) Safari/417.9.2
+author=Pico
+csum=Added audience id
+host=66.108.51.56
+name=PmWiki.FmtPageName
+rev=11
+targets=PmWiki.Functions,PmWiki.Variables,PmWiki.Internationalizations
+text=%25audience%25 admins (advanced)%0aThis page describes an internal function in PmWiki's engine called%0a[@FmtPageName()@]. The contents are not intended for those with a weak heart%0a;-)%0a%0aAlso see: [[PmWiki.Functions]]%0a%0a!![[#FmtPageName]] [@FmtPageName@]($fmt, $pagename)%0a%0a[[#FmtPageName-desc]]Returns [@$fmt@], with $variable and $[internationalisation] substitutions performed, under the assumption that the current page is [@pagename@]. See [[PmWiki.Variables]] for an (incomplete) list of available variables, [[PmWiki.Internationalizations]] for internationalisation.%0a%0aThe function [@FmtPageName()@] applies internationalization-substitutions%0aand $Variable-substitions to the string $fmt under the assumption that the%0acurrent page is $pagename.%0a%0aThe substitutions goes as follows:%0a%0a# Replace any sequences of the form [@$XyzFmt@] with value of any \%0a  corresponding global variable.%0a# Process the string for any [@$[...]@] phrases (internationaliz
 ed phrase), \%0a  using the currently loaded translation tables.%0a# Perform any pattern replacements from the array $FmtP. Typically \%0a  this is used to handle things like $Name and $Group etc that are \%0a  specific to the name of the current page.%0a# If $EnablePathInfo isn't set, convert [@URIs@] to use the syntax \%0a  $ScriptUrl?n=%3cGroup>.%3cName> instead of $ScriptUrl/%3cGroup>/%3cName>.%0a# Replace any $-sequences with global variables (caching as needed) \%0a  of the same name (in reverse alphabetical order) *%0a# Replace any $-sequences with values out of the array $FmtV.%0a%0aNote that [@FmtPageName@]() is automatically aware of any global%0avariables. However, since modifying global variables may be expensive, the%0aarray $FmtV exists as a way to avoid rebuilding the variable cache for%0avalues that change frequently.%0a%0a%0aTo be very specific, here's what Pm wrote regarding different ways of%0adefining a variable that can be used by FmtPageName (when it is
  formatting a%0astring):%0a%0a* Set a global variable.  FmtPageName() automatically performs \%0a  substitution on all global variables that aren't arrays. \%0a  If the variable is going to change value over repeated calls \%0a  to FmtPageName, it's probably better to use $FmtV as in the next item.%0a%0a* Set a value in the $FmtV array.  $FmtV['$MyVariable']='something'  \%0a  means to replace instances of '$MyVariable' with 'something'. \%0a  Use this for variables that change value frequently over \%0a  multiple calls to FmtPageName.  %0a%0a* Set a pattern/replacement in the $FmtP array.  This is normally \%0a  done for substitutions that have to be dynamic somehow based on \%0a  the pagename being referenced, such as '$Title', '$Group', '$Name', \%0a  '$PageUrl', etc.%0a%0aAlso see: [[Cookbook:Functions#FmtPageName]]%0a%0aFinally, here's something else Pm wrote that is related and explains%0awhy we have this function:%0a%0a-> In order to produce its output, PmWiki has to 
 do a variety of string \%0a   substitutions:%0a%0a## Generating the full name, group, title, or url of a page \%0a    (other than the currently displayed page)%0a## Substituting the values of global variables%0a## Performing internationalization substitutions%0a## Converting $ScriptUrl/$Group/$Name to $ScriptUrl?n=$Group.$Name \%0a   for sites that cannot handle PATH_INFO urls%0a## Other substitutions needed by specific functions%0a   %0a-> PmWiki centralizes all of that substitute-a-dynamic-value-in-a-string \%0a   into the FmtPageName() subroutine.  Because some things are extremely \%0a   dynamic, such as the url or group for an arbitrary page that is not the \%0a   current one, those things cannot be simple global PHP variables.  Or, if \%0a   they do become global variables, they're variables that cannot be \%0a   trusted to hold a value for very long because some other routine (that \%0a   may happen to be formatting a string for a different page) will come \%0a   alon
 g and change that global variable for whatever it happens to be doing.%0a%0a->  A limited set of $-substitutions -- basically anything that \%0a    corresponds to a page attribute -- are not PHP variables and \%0a    are only available through the FmtPageName() subroutine.  \%0a    The complete set of these special substitutions is $Group, \%0a    $Name, $FullName, $PageUrl, $Title, $Titlespaced, $Namespaced, \%0a    $Groupspaced, $LastModifiedBy, $LastModifiedHost, and $LastModified.  \%0a    These items cannot just be standard PHP variables because often\%0a    PmWiki needs to obtain the url, name, group, title, etc. of a page \%0a    other than the one currently being viewed by a browser.%0a%0a->  At the moment, $Title, $LastModified, $LastModifiedBy, and \%0a    $LastModifiedHost can only work if the page's attributes have been \%0a    loaded and cached using the `PCache function.   So, to get\%0a    at these values one must typically do:%0a%0a-> [@%0a$page = `ReadPage($
 pagename);%0aPCache($pagename, $page);%0a$pvar = `FmtPageName('$Title', $pagename);%0a$pvar = `FmtPageName('$`LastModifiedBy', $pagename);%0a@]%0a%0a!! Source code for [@FmtPageName()@]%0a%0aNote: The source code below was taken from "pmwiki-2.0.beta55", while the%0acurrent version is {$Version}.%0a%0a-> [@%0a## FmtPageName handles $[internationalization] and $Variable%0a## substitutions in strings based on the $pagename argument.%0afunction FmtPageName($fmt,$pagename) {%0a  # Perform $-substitutions on $fmt relative to page given by $pagename%0a  global $GroupPattern, $NamePattern, $EnablePathInfo, $ScriptUrl,%0a    $GCount, $UnsafeGlobals, $FmtV, $FmtP, $PCache, $AsSpacedFunction;%0a  if (strpos($fmt,'$')===false) return $fmt;%0a  $fmt = preg_replace('/\\$([A-Z]\\w*Fmt)\\b/e','$GLOBALS[\'$1\']',$fmt);%0a  $fmt = preg_replace('/\\$\\[(?>([^\\]] ))\\]/e',"XL(PSS('$1'))",$fmt);%0a  $match = array('','$Group','$Name');%0a  if (preg_match("/^($GroupPattern)[\\/.]($NamePattern)\
 $/", $pagename, $m))%0a    $match = $m;%0a  $fmt = preg_replace(array_keys($FmtP),array_values($FmtP),$fmt);%0a  $fmt = preg_replace('!\\$ScriptUrl/([^?#\'"\\s%3c>] )!e',%0a    (@$EnablePathInfo) ? "'$ScriptUrl/'.PUE('$1')" :%0a        "'$ScriptUrl?n='.str_replace('/','.',PUE('$1'))",%0a    $fmt);%0a  if (strpos($fmt,'$')===false) return $fmt;%0a  static $g;%0a  if ($GCount != count($GLOBALS) count($FmtV)) {%0a    $g = array();%0a    foreach($GLOBALS as $n=>$v) {%0a      if (is_array($v) || is_object($v) ||%0a         isset($FmtV["\$$n"]) || in_array($n,$UnsafeGlobals)) continue;%0a      $g["\$$n"] = $v;%0a    }%0a    $GCount = count($GLOBALS) count($FmtV);%0a    krsort($g); reset($g);%0a  }%0a  $fmt = str_replace(array_keys($g),array_values($g),$fmt);%0a  $fmt = str_replace(array_keys($FmtV),array_values($FmtV),$fmt);%0a  return $fmt;%0a}%0a@]
+time=1146912078

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Functions
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Functions	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Functions	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.10) Gecko/20060902 Firefox/1.0.4 (Debian package 1.0.4-2sarge11)
+author=Nils
+csum=
+host=130.83.162.42
+name=PmWiki.Functions
+rev=48
+targets=PmWiki.Variables,PmWiki.Internationalizations,PmWiki.FmtPageName,PmWiki.CustomMarkup,PmWiki.DocumentationIndex
+text=%25audience%25 admins (advanced)%0a%3c%3c|[[PmWiki.Variables]]|>>%0a%0aThis page describes some of the internal workings of PmWiki by explaining how some of the functions in pmwiki.php work. For a more brief list/overview on functions useful to for instance cookbook writers, see Cookbook:Functions. %0a%0a!![[#PSS]] [@PSS($string)@]%0a%0aThis function should always be used, passing parameters to functions called via [@preg_replace@]. Especially when defining a replacement with%0athe [@Markup()@] function. It removes the escape in front of quotation marks. This function is frequently used in [@scripts/stdmarkup.php@],%0afor example in the definition of the [@(:redirect:)@]-directive.%0a%0a%0a!![[#stripmagic]] [@stripmagic($string)@]%0a%0aThis function should always be used when processing the contents of [@$_POST@] or [@_GET@] variables. It verifies [@get_magic_quotes()@], if true,%0astrips the automatically inserted escapes from the string.%0a%0a%0a!![[#FmtPageName]] [@F
 mtPageName@]($fmt, $pagename)%0a%0a[[#FmtPageName-desc]]Returns [@$fmt@], with $variable and [=$[internationalisation]=] substitutions performed, under the assumption that the current page is [@pagename@]. See [[PmWiki.Variables]] for an (incomplete) list of available variables, [[PmWiki.Internationalizations]] for internationalisation.%0a%0aThis is one of the major functions in PmWiki, see [[PmWiki.FmtPageName]] for%0alots of details.%0a%0a%0a!![[#Markup]] [@Markup@]($name, $when, $pattern, $replace)%0a%0a[[#Markup-desc]]Adds a new markup to the conversion table.  Described in greater detail at PmWiki.CustomMarkup.%0a%0aThis function is used to insert translation rules into the PmWiki's%0atranslation engine. The arguments to [@Markup()@] are all strings, where:%0a%0a:[@$name@]: The string names the rule that is inserted.  If a rule of the same name already exists, then this rule is ignored.%0a:[@$when@]: This string is used to control ''when'' a rule is to be applied relati
 ve to other rules.  A specification of "[@%3cxyz@]" says to apply this rule prior to the rule named "xyz", while "[@>xyz@]" says to apply this rule after the rule "xyz".  See [[(PmWiki:)CustomMarkup]] for more details on the order of rules.%0a:[@$pattern@]: This string is a [[regular expression -> http://www.php.net/preg_replace]] that is used by the translation engine to look for occurences of this rule in the markup source.%0a:[@$replace@]: This string will replace the matched text when a match occurs.%0a%0aAlso see: [[PmWiki.CustomMarkup]] and [[Cookbook:Functions#Markup]]%0a%0a!![[#MarkupToHTML]] [@MarkupToHTML@]($pagename, $str)%0a%0a[[#MarkupToHTML-desc]] Converts the string [@$str@] containing PmWiki markup into the corresponding HTML code, assuming the current page is [@$pagename@].%0a%0aAlso see: [[Cookbook:Functions#MarkupToHTML]]%0a%0a!![[#mkdirp]] [@mkdirp@]($dir)%0a%0aThe function [@mkdirp@]($dir) creates a directory, [@$dir@], if it doesn't%0aalready exist, inc
 luding any parent directories that might be needed.  For%0aeach directory created, it checks that the permissions on the directory are%0asufficient to allow PmWiki scripts to read and write files in that%0adirectory.  This includes checking for restrictions imposed by PHP's%0asafe_mode setting.  If [@mkdirp@]() is unable to successfully create a%0aread/write directory, [@mkdirp@]() aborts with an error message telling the%0aadministrator the steps to take to either create $dir manually or give%0aPmWiki sufficient permissions to be able to do it.%0a%0a!![[#MakeLink]] [@MakeLink@]($pagename, $target, $txt, $suffix, $fmt)%0a%0aThe function [@MakeLink@]($pagename, $target, $txt, $suffix, $fmt) returns a ???. It's arguments are as follows:%0a $pagename is the source page%0a $target is where the link should go%0a $txt is the value to use for '$LinkText' in the output %0a $suffix is any suffix string to be added to $txt%0a $fmt is a format string to use%0a%0aIf $txt is NULL or not 
 specified, then it is automatically computed from $target.%0a%0aIf $fmt is NULL or not specified, then MakeLink uses the default%0aformat as specified by the type of link.  For page links this%0ameans the $LinkPageExistsFmt and $LinkPageCreateFmt variables,%0afor intermap-style links it comes from either the $IMapLinkFmt%0aarray or from $UrlLinkFmt.  Inside of the formatting strings,%0a$LinkUrl is replaced by the resolved url for the link, $LinkText%0ais replaced with the appropriate text, and $LinkAlt is replaced%0aby any "title" (alternate text) information associated with the%0alink.%0a%0aAlso see: [[PmWiki:MakeLink]] and [[Cookbook:Functions#MakeLink]]%0a%0a!![[#MakeUploadName]] [@MakeUploadName@]($pagename, $x)%0a%0a@@MakeUploadName()@@ simply takes a string @@$x@@ (representing an attachment's%0aname) and converts it to a valid name by removing any unwanted characters.%0aIt also requires the name to begin and end with an alphanumeric character,%0aand as of 2.0.beta28 i
 t forces any file extensions to lowercase.%0aThis function is defined in @@scripts/upload.php@@ and only used when uploads%0aare enabled.%0a%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>
+time=1159186713

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Glossary
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Glossary	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Glossary	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.6 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.3) Gecko/20060425 SUSE/1.5.0.3-7 Firefox/1.5.0.3
+author=Pm
+csum=updated trail
+host=24.1.26.255
+name=PmWiki.Glossary
+rev=18
+targets=PmWiki.WikiFarmTerminology,PmWiki.DocumentationIndex
+text=This page describes various terms related to PmWiki.%0a%0a:Configuration file: A specially-named PHP script file where local customizations can take place for a farm, a wiki, a group, or a page.%0a%0a:Default configuration: The way Pm has chosen to set all settings, or an individual setting, by default.  For example, $EnablePathInfo is disabled by default.  A wiki with no ''local/config.php'' file is using the default configuration.  Likewise, a farm that only defines $FarmPubDirUrl in ''farmconfig.php'' is using the default configuration.%0a%0a:Farm: A group of wikis that share code. Content and formats may or may not be shared. For more farm-related terms, including several which have been deprecated, see [[WikiFarmTerminology]]%0a%0a:Farm-wide configuration file: A WikiFarm's ''local/farmconfig.php'' file, where any settings (besides $FarmPubDirUrl) customize the default configuration for all of the wikis in a farm.%0a%0a:Full page name: The ''full page name'' consis
 ts of a group and a name, e.g. [@Main.WikiSandbox@]. The variable for the full page name is [@{$FullName}@], which for this page is @@{$FullName}@@. Similarly, the variable for the group is [@{$Group}@] which here is @@{$Group}@@.%0a%0a:Local configuration file: A specially-named PHP script where local customizations can take place for an individual wiki.  For an entire wiki it's named ''local/config.php''.  Individual groups and pages can also have their own local configuration files.%0a%0a:Local customization: Any deviation from the default configuration.  A related phrase is "farm-wide customization".%0a%0a:Page file name: The ''page file name'' is the name of the file that normally stores the data of a page in the directory [@wiki.d/@]. This file name is normally built directly from the page name.%0a%0a:Page link: A ''page link'' is something that is used to generate a link to a page. For example, the markup [@[[wiki sandbox]]@], [@[[(wiki) sandbox]]@], [@WikiSandbox@], 
 [@Main/WikiSandbox@], [@[[Main/wiki sandbox]]@], [@[[Main.WikiSandbox | click here]]@], etc all specify a link to the page '[=Main.WikiSandbox=]'.  In each case PmWiki uses the context of the link to generate a page name from the page link -- normally by capitalizing each word found in the link and stripping any characters that aren't considered valid in page names.%0a%0a:Page name: The ''page name'' is a string that PmWiki uses to refer to a page - i.e. it ''names the page''. This could also be considered a ''handle'' for the page. The variable for the page name is simply called [@{$Name}@], which for this page is @@{$Name}@@.%0a-> Note that there is no whitespace in page names, and by default PmWiki capitalizes each word in a page's name. There is however a variable [@{$Namespaced}@] where spaces have been inserted, e.g. for the page [=WikiSandbox=] this variable would be [@Wiki Sandbox@].%0a-> Note that PmWiki also uses the page name to locate per-group and per-page custo
 mization files in the [@local/@] subdirectory. For example, browsing [=Main.WikiSandbox=] would cause [@local/Main.WikiSandbox.php@] and [@local/Main.php@] to be loaded if these files existed.%0a%0a:Page title: A ''page title'' is the title element of a page, i.e. what is usually shown above the page and in the browser window's name. This title is normally set via the directive [@(:title:)@], but if no such directive is given the title will be automatically generated from the page name. The title of a page is accessed via either the variable [@{$Title}@] or the variable  [@{$Titlespaced}@]. The latter differs in that it uses the spaced version of the name.%0a%0a:Page URI: Page names are used in `URIs to tell PmWiki which page is to be loaded or acted upon. The normal form of a page URI is usually one of these two%0a--> [@http://www.example.com/pmwiki/pmwiki.php?n=Main.WikiSandbox@]%0a--> [@http://www.example.com/pmwiki/pmwiki.php/Main.WikiSandbox@]%0a-> Note that various ali
 asing and rewriting tricks can be used to modify this, but PmWiki expects to obtain a page name from the parameter 'n' or from the [@PATH_INFO@] component following the URI of the script ([@pmwiki.php@]).%0a-> Note that the parameter 'n' takes precedence over [@PATH_INFO@] if both are available.%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>
+time=1149125225

Added: trunk/oggdsf/website/wikilib.d/PmWiki.GroupHeader
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.GroupHeader	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.GroupHeader	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5
+author=TeganDowling
+csum=de-sandbox
+host=69.131.28.243
+name=PmWiki.GroupHeader
+rev=16
+targets=
+text=%25define=trail bgcolor=#eee block%25%25define=note font-style=italic color=green%25%25define=important block bgcolor=#fcc border='1px solid black' padding=5px%25%25define=audience class='frame rfloat' font-size:smaller bgcolor=#ffffcc%25(:comment please leave the multiple style definitions concatenated as a single line.  Linebreaks do appear in the output when the wiki is configured with linebreaks enabled -- thanks!:)
+time=1154438806

Added: trunk/oggdsf/website/wikilib.d/PmWiki.GroupHeaders
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.GroupHeaders	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.GroupHeaders	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=update for new basepage= parameter
+host=24.1.26.255
+name=PmWiki.GroupHeaders
+rev=54
+targets=PmWiki.WikiGroup,PmWiki.WikiStyles,PmWiki.PageDirectives,PmWiki.WikiAdministrator,PmWiki.IncludeOtherPages,PmWiki.DocumentationIndex
+text=%25audience%25 authors (intermediate)%0aEvery [[WikiGroup]] can have `GroupHeader and `GroupFooter pages that contain markup that should be included at the beginning or end of each page within the group. This feature is useful for:%0a%0a* adding a disclaimer or heading to all of the pages of a group%0a* defining custom [[WikiStyles]] that may be used for all pages in a group%0a* replacing the default headers and/or footers for pages in a group (e.g., using [@(:noheader:)@] and or [@(:nofooter:)@] -- see [[PageDirectives]]).%0a%0aTo create a group header, just create a new page called [@YourGroup.GroupHeader@]. Group headers allow authors to create groups with custom headers and footers without having to coordinate with a [[wiki administrator]].  %0a%0aThe default `GroupHeader or `GroupFooter can be suppressed on an individual page (such as a group's `HomePage) by using the [@(:nogroupheader:)@] and [@(:nogroupfooter:)@] markups ''on that page''.%0a%0aIf a generic `Group
 Header is used in one wikigroup (say, the Site wikigroup), then the code can be easily duplicated in the `GroupHeader of any other group by using %0a[@(:include Site.GroupHeader:)@].  See [[IncludeOtherPages]].%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I set one header for all pages/groups?%0aA: The header for each page is controlled by the $GroupHeaderFmt variable.  Thus a site-wide groupheader can be added with%0a->[@%0a$GroupHeaderFmt = '(:include {$SiteGroup}.SiteHeader basepage={*$FullName}:)(:nl:)' . $GroupHeaderFmt;%0a@]%0a''(note that single quotes must be used so that ''[@$Group@]'' (which is part of the default contents of ''$GroupHeaderFmt'') will be substituted properly by PmWiki, and that this applies to all variables ending in ''$[@...Fmt@]'')''%0a%0aSee also the Cookbook:AllGroupHeader page.%0a%0aA: Any form of markup is valid in $GroupHeaderFmt, thus one can do%0a%0a->[@$GroupHeaderFmt .= "Global markup text her
 e.";@]%0a%0a
+time=1159202569

Added: trunk/oggdsf/website/wikilib.d/PmWiki.I18nVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.I18nVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.I18nVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.15 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8) Gecko/20051111 Firefox/1.5
+author=
+csum=add see also: $TimeFmt
+host=212.186.80.57
+name=PmWiki.I18nVariables
+rev=8
+targets=PmWiki.Variables,PmWiki.Internationalizations,Site.Preferences
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0aThis page describes the variables used by PmWiki for [[Internationalizations]] (i18n).%0a%0a:$VarPagesFmt:An array which contains the PageNames where you can find variable definitions.  To be modified when documentation is not in english.  See ''scripts/vardoc.php''.%0a%0a:$XLLangs:An array (hash) which contains pairs of language identifiers and translation hashes. Each translation hash maps a given lookup key (or phrase) into a corresponding text string for the given language. Thus, it is essentially a multi-lingual dictionary used for phrase translation.  It is also used for handling user preference mappings. Thus, the 'e_row' value that one finds on the [[Site.Preferences]] page is loaded into $XLLangs during preference processing.%0a%0aSee also:%0a* $TimeFmt%0a
+time=1156535546

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Images
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Images	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Images	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.1 ordered=1 urlencoded=1
+agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
+author=
+csum=
+host=80.129.137.105
+keywords=graphics, pictures, photos
+name=PmWiki.Images
+rev=56
+targets=PmWiki.DocumentationIndex,PmWiki.Uploads,PmWiki.InterMap,PmWiki.Links,PmWiki.WikiStyles
+text=!!Placing images in pages%0a%0aTo place an image into a page, enter the address (url) of the image into the markup text.  Any ''alternate text'' (used for tooltips and for browsers that do not display images) is placed in double quotes immediately following the image url.%0a%0a(:markup:) [=%0ahttp://www.pmichaud.com/img/misc/pc.jpg"Paper clips"%0aPaper clips are fun to work with.%0a=]%0a%0aImages can also be specified as [[upload(s)]]ed files (i.e., [@Attach:image.jpg@]) and using [[InterMap]] links.  Any file that ends in .gif, .jpg, .jpeg, or .png will be automatically treated as an image.  %25note%25 (See [[#notes|Notes]] below for image files that lack extensions.)%0a%0aTo create a [[link(s)]] to an image (like [[http://www.pmichaud.com/img/misc/pc.jpg]] as opposed to displaying the image itself), use double brackets to mark the link, as in [@[[http://www.pmichaud.com/img/misc/pc.jpg]]@] or [@[[Attach:image.jpg]]@].%0a%0aTo have an image link to another location, us
 e the image as the link text as in [@[[http://www.pmwiki.org | Attach:image.jpg"PmWiki"]]@].%0a%0a!! Captions and floating images%0a%0aA caption can be added to an image using a vertical brace and the caption text.%0a%0a(:markup:) [=%0ahttp://www.pmichaud.com/img/misc/pc.jpg"Paper clips" | '''Figure 1'''%0a=]%0a%0aNormally, images are displayed "in line" with the surrounding text.  To left or right-align an image with text wrapping around it, use the [@%25lfloat%25@] or [@%25rfloat%25@] [[WikiStyles]].%0a%0a(:markup:) [=%0a%25lfloat%25 http://www.pmichaud.com/img/misc/gem.jpg | '''Rock on!'''%0aThe image is left-aligned, and the text wraps on the right side of the image.%0a%0aLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. %0a=]%0a%0aThe [@[[%3c%3c]]@] markup breaks floating text, and the text
  continues at the bottom of the image.%0a%0a(:markup:) [=%0a%25lfloat%25 http://www.pmichaud.com/img/misc/gem.jpg%0aThe image is left-aligned, and the text wraps on the right side of the image. The text after the ''[@[[%3c%3c]]@]'' markup continues below the image.%0a[[%3c%3c]]%0aLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. %0a=]%0a%0aUse the [@%25lframe%25@] or [@%25rframe%25@] styles to float an image and place a frame around the image and its caption:%0a%0a(:markup:) [=%0a%25rframe%25 http://www.pmichaud.com/img/misc/gem.jpg | '''Rock on!'''%0aThe image is right-aligned, and the text wraps on the left side of the image.%0a%0aLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud ex
 ercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.%0a%0a%25cframe width=100px bgcolor=lightblue%25 http://www.pmichaud.com/img/misc/gem.jpg%0a=]%0a%0aUse [@%25center%25@] to center an image. Use [@%25right%25@] to right align an image, without floating it.%0a%0a(:markup:) [=%0a%25center%25http://www.pmichaud.com/img/misc/pc.jpg"Paper clips" | Paper clips are fun to work with %0a%0a%25right%25 http://www.pmichaud.com/img/misc/gem.jpg | Rock on!%0a=]%0a%0a!!Resizing images [[#resizing]]%0a%0aTo resize an image, use [@%25width=50px%25@] or [@%25height=50px%25@] in front of an image.    The [@%25thumb%25@] wikistyle is a helpful shortcut for [@%25width=100px%25@].%0a%0a(:markup:) [=%0a%25width=50px%25 http://www.pmichaud.com/img/misc/bubble.jpg \%0a%25height=50px%25 http://www.pmichaud.com/img/misc/bubble.jpg \%0a%25thumb%25 http://www.pmi
 chaud.com/img/misc/bubble.jpg%0a=]%0a%0aResizing an image only affects how it is displayed in a browser; it does not reduce the transfer size of the image itself.%0a%0aResized images using [@%25thumb%25@] can also be floated with frames, as well as made into links.%0a%0a(:markup:) [=%0a%25lframe thumb%25 [[http://www.pmichaud.com/img/misc/bubble.jpg | http://www.pmichaud.com/img/misc/bubble.jpg"Burst the bubble"]] | [-Bubble-]%0a%25lframe thumb%25 http://www.pmichaud.com/img/misc/pc.jpg"Clip the ticket" | [-Paper Clips-]%0a%25lframe thumb%25 [[DocumentationIndex | http://www.pmichaud.com/img/misc/gem.jpg"Visit the Documentation Index"]] | [[DocumentationIndex | [-Rock On-]]]%0a=]%0a%0a[[#notes]]%0a!!!Notes%0a* '''An image file that lacks a correct extension''' can be displayed by addition of a "false" extension to the URL. For example, if the url is [@http://www.example.com/script/tux@], add a fake query string on the end with the desired extension (e.g., [@http://www.exampl
 e.com/script/tux?format=.png@]). If query strings are unsuitable, a fragment identifier should work, e.g. [@http://www.example.com/script/tux#file.png@].%0a%0a!!!See also%0a* [[Cookbook:BackgroundImages]] - adding background images to divisions, tables and table cells. %0a%0a!!!Credits%0aThe images on this page were obtained from http://www.flickr.com and are redistributed under a Creative Commons License.%0a%0a%25trail%25 %3c%3c|[[DocumentationIndex]]|>>%0a(:keywords graphics, pictures, photos:)
+time=1142416738

Added: trunk/oggdsf/website/wikilib.d/PmWiki.IncludeOtherPages
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.IncludeOtherPages	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.IncludeOtherPages	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.2.0-beta6 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=typo correction
+host=24.1.26.255
+name=PmWiki.IncludeOtherPages
+rev=48
+targets=PmWiki.Links,PmWiki.WikiGroup,PmWiki.WikiStyles,PmWiki.DocumentationIndex,PmWiki.WikiAdministrator
+text=%25audience%25 authors (intermediate)%0aThe [@(:include:)@] directive makes it possible to insert the contents of other pages into the current wiki page.  All of the include directives below perform a straight text inclusion.  In particular, any page [[links]] in the included text are assumed to link to pages in the current [[(wiki) group]] if not otherwise qualified.%0a%0a:[@(:include PageName:)@]:%0a:[@(:include Group.PageName:)@]:%0a: :Includes the entire text of another page into the current page.  %0a%0a:[@(:include PageName#from#to:)@]:%0a:[@(:include PageName#from#:)@]:%0a:[@(:include PageName##to:)@]:%0a:[@(:include PageName#from:)@]:%0a: :Includes lines from `PageName between the [@[[#from]]@] and [@[[#to]]@] anchors.  If "to" is omitted (second example), then all of the lines after [@[[#from]]@] are included (and vice-versa if "from" is omitted).  In the last example, include everything between [@[[#from]]@] and the next anchor.%0a%0a-> %25note%25 Note: do not
  put whitespace between "#from" "#to"%0a%0a:[@(:include PageName lines=10:)@]:%0a:[@(:include PageName lines=5..10:)@]:%0a:[@(:include PageName lines=5..:)@]:%0a: :Include the first 10 lines, lines 5-10, or lines 5 and up from `PageName. ''A "line" in this context refers to a line of source. Thus a line may be a paragraph that wraps over several lines on the screen, or a completely blank line.''%0a%0a:[@(:include Page1 Page2 Page3 lines=1..5:)@]:%0a: :Include the first five lines from the first available of Page1, Page2, or Page3.  (To include lines from a list of pages, use a separate include for each.)%0a%0a:[@(:include PageName self=0:)@]:%0a: :The parameter @@self@@ can be @@0@@ or @@1@@. It tells the include directive if it is allowed to include the current page. This is useful if PageName is a variable like [@{$Name}@] and you want to prevent the directive from including the current page.%0a%0a!! See Also%0a* Cookbook:IncludeUrl%0a%0a!! Styling Note%0aBy default, Inclu
 ded pages or lines cannot be distinguished from other text on the page. To provide a visual indication that this text is special, you can apply [[PmWiki/WikiStyles]]. For example:%0a%0a(:markup:) [=%0a%25define=leftborder border-left="2px solid #88f" margin-left="2px" padding="1px 0 3px 10px"%25%0a%0aWhat is PmWiki?%0a%0a>>leftborder%3c%3c (:include PmWiki.PmWiki lines=1..4:) %0a>>%3c%3c%0a%0a''Have a very nice day!''%0a=]%0a%0a!!! Notes%0a* You can also say [@(:include My/Page#myanchor lines=4:)@] which starts from, and includes, the line with the anchor [@[[#myanchor]]@] for four lines.%0a%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: What's the maximum number of includes that can exist in a page?  My site seems to stop including after 48 includes.%0a%0aA: By default, PmWiki places a limit of 50 include directives for any given page, to prevent runaway infinite loops and other situations that might eat up server resources.  The limit ca
 n be modified by the [[wiki administrator]] via the $MaxIncludes variable.%0a%0a
+time=1159596789

Added: trunk/oggdsf/website/wikilib.d/PmWiki.InitialSetupTasks
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.InitialSetupTasks	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.InitialSetupTasks	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.1 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.7.12) Gecko/20050915
+author=HaganFox
+csum=Adjusted wording.
+host=216.161.175.221
+name=PmWiki.InitialSetupTasks
+rev=55
+targets=PmWiki.Installation,Site.Site,Site.SideBar,PmWiki.Variables,PmWiki.PasswordsAdmin,PmWiki.Upgrades,PmWiki.LocalCustomizations,PmWiki.WikiFarms,PmWiki.MailingLists,PmWiki.WikiAdministrator,PmWiki.DocumentationIndex
+text=%25audience%25 administrators (basic)%0aOnce you have PmWiki running on your site (see [[Installation]]), you can customize it for your particular needs.%0a%0aMost PmWiki configuration is performed in a file called ''local/config.php''. Some configuration is done on special pages in the [[Site/Site]] group, such as the [[Site.SideBar]] menu.%0a%0a%0a!! The local configuration file (''local/config.php'')%0aWhen you first install PmWiki, the ''local/config.php'' file does not exist. Copy the ''sample-config.php'' file (in the ''docs/'' directory) to ''local/config.php'' and use it as a starting point.  You could create ''local/config.php'' from scratch, but ''sample-config.php'' is already populated with many of the options you might want to adjust.%0a%0aHere is a simple ''config.php'' file:%0a%0a-> [@%0a%3c?php if (!defined('PmWiki')) exit();%0a$WikiTitle = "My New Wiki";%0a$PageLogoUrl = "http://www.example.com/mylogo.gif";%0a%0a$DefaultPasswords['admin'] = crypt('onese
 cret');%0a%0a$EnableUpload = 1;%0a$DefaultPasswords['upload'] = crypt('secrettwo');%0a%0aputenv("TZ=EST5EDT");%0a$TimeFmt = '%25B %25d, %25Y, at %25I:%25M %25p EST';%0a@]%0a%0aNote that ''config.php'' begins with @@%3c?php@@ . The PHP end tag @@?>@@ is optional, and can be left off to improve compatibility with some operating systems.  Be sure there aren't any blank lines or spaces before the @@%3c?php@@ or after any closing @@?>@@, or else you may get strange PHP error messages at the beginning of your wiki pages.%0a%0aThe ''config.php'' file above sets the value of four PHP variables used by PmWiki:%0a*The $WikiTitle variable gives the name of your site as it will appear in a user's browser title bar.%0a*The $PageLogoUrl variable specifies the URL of the icon image that will appear in the upper-left corner of each wiki page.%0a*The $DefaultPasswords['admin'] sets an administrative password.%0a*Setting $EnableUpload to "1" enables Uploads ("Attached files").  $DefaultPasswo
 rds['upload'] sets an upload password.%0a*The TZ environment variable defines a particular time zone.%0a*The $TimeFmt variable defines the appearance of time strings and (along with TZ) localizes the wiki to a specific time zone.%0a%0aBy setting these (and other) variables in ''local/config.php'', you can change the look and feel of PmWiki from its default, sometimes substantially so.  See [[PmWiki.Variables]] for a list of variables that PmWiki uses, and see PmWiki:PmWikiUsers for examples of sites that use PmWiki in customized ways.%0a%0a%0a!! Setting an administrative password%0a%0aThe pages in the [[Site/Site]] group (except the Site.SideBar) are locked by default. In order to edit pages in this group you need to create a site-wide admin password in ''local/config.php''.  To set the site-wide admin password to "@@mysecret@@", change the line to the following:%0a%0a->[@$DefaultPasswords['admin'] = crypt('mysecret');@]%0a%0aYou must use the [@crypt()@] function, but set th
 e password to a value with meaning for you. See [[PasswordsAdmin]] for details about making the password more secure.%0a%0a%0a!![[#dontmodify]]Don't modify or rename ''pmwiki.php''%0a%0aPmWiki has been designed so that all customizations can be made without changing the distribution files -- one of its design goals is to provide seamless upgrades.   PmWiki never writes to files in the ''local/'' or ''cookbook/'' directories, so placing your customizations here makes it easier to track the changes and [[upgrades | upgrade PmWiki]] without losing the changes.%0a%0aWhen changing the configuration of your site, always change the ''local/config.php'' file or add files to the ''cookbook/'' or ''pub'' directories.  Do not change ''pmwiki.php'' or the files in the ''scripts/'' directory because the files are supposed to be overwritten upon upgrading.%0a%0aYou shouldn't rename ''pmwiki.php'' either.  If you rename the file it will not be overwritten during an upgrade of the software 
 and there will be a version mismatch.  Many administrators add an ''index.php'' "wrapper script" in the pmwiki directory that contains the following single line:%0a%0a->[@%3c?php include('pmwiki.php');@]%0a%0a%0a!!Other customization%0a%0aAfter setting up ''local/config.php'' file, you may wish to make other [[local customizations]]. See the [[Cookbook:CookbookBasics | PmWiki Cookbook]] for a large number of customizations that have been contributed. And don't fear Cookbook recipes - they're well prepared, so that most of them require only to download a single file, add a one-line include command to @@config.php@@, and ''voilà!'' - they're working!%0a%0aIf you (or others sharing your server) want to maintain more than one wiki on the same server, see [[WikiFarms]].%0a%0a%0a!!Now what?%0a%0aDon't forget to join a [[MailingLists | PmWiki mailing list]], where you can email other [[wiki administrator]]s for help on customizing PmWiki and participate in discussions about PmWiki 
 improvements.  Once you have your site operational, be sure to add it to PmWiki:PmWikiUsers so others will know about it!%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>
+time=1142531455

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Installation
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Installation	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Installation	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta17 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
+author=simon
+csum=restore
+host=203.97.214.12
+name=PmWiki.Installation
+rev=223
+targets=PmWiki.Requirements,PmWiki.Upgrades,PmWiki.WikiFarms,PmWiki.ChangeLog,PmWiki.MailingLists,PmWiki.InitialSetupTasks,PmWiki.ReleaseNotes,PmWiki.Internationalizations,PmWiki.SimultaneousEdits,PmWiki.Troubleshooting,PmWiki.DocumentationIndex
+text=(:title PmWiki Installation :)%0a%25audience%25 administrators (basic)%0aThis page explains how to download and install PmWiki 2.1.  Here's a list of related pages:%0a%0a* [[Requirements]] - Requirements for installing PmWiki.%0a* [[Upgrades]] - How to upgrade an existing installation.%0a* [[WikiFarms]] - Running multiple wikis from a single installation.%0a* [[ChangeLog]] -  New features and bug fixes that are available.%0a%0aImprovements to these instructions are always appreciated.  Just report any problems you  encounter to the pmwiki-users [[mailing list(s)]] or use the [[PITS:PITS |PmWiki Issue Tracking System]].%0a%0a!! Installing PmWiki%0a%0a!!! 1. Download%0aDownload the latest version of PmWiki as a zip archive ([[(http://www.pmwiki.org/pub/pmwiki/)pmwiki-latest.zip]]) or a gzipped tarball ([[(http://www.pmwiki.org/pub/pmwiki/)pmwiki-latest.tgz]]) from [[http://www.pmwiki.org/pub/pmwiki/]].%0a%0a%0a!!! [[#unpack]] 2. Unpack%0aUnpack the archive ([@tar zxvf pmw
 iki-latest.tgz@] or [@unzip pmwiki-latest.zip@]).  This will create a ''pmwiki-x.y.z'' directory containing the PmWiki software.  For example, the current "latest" should unpack to a directory named ''{$Version}''.  The files in this directory include:%0a%0a    README.txt        An introductory document%0a    pmwiki.php        The main PmWiki script%0a    local/            Configuration scripts (local configuration files)%0a    cookbook/         Recipes (add-ons) from the [[(Cookbook:)Cookbook]]%0a    docs/             Brief documentation, sample configuration scripts%0a    pub/              Publicly accessible files%0a      css/            Extra CSS stylesheet files%0a      skins/          Layout templates for [[Cookbook:Skins|custom]] look and feel%0a    scripts/          Scripts that are part of PmWiki%0a    wikilib.d/        Bundled default PmWiki pages%0a%0aThe ''pmwiki-x.y.z'' directory needs to be placed into a location accessible by your webserver (e.g., in a ''publi
 c_html'' directory of some sort).  You can place files and directories using a number of methods -- FTP, or a Unix [@mv@] or [@cp@] command generally does the job.%0a%0a->%25note%25 Note: It's probably also a good idea to change the "''pmwiki-x.y.z''" directory name to be simply "''pmwiki''".%0a%0a%0a!!! [[#directories]] 3. Create directories%0a[[#dirsetup]]In most cases PmWiki will do this for you.%0aOpen a web browser to the ''pmwiki.php'' script on the server (i.e., not the one on your local computer or accessed using a [=file://...=] URL).  PmWiki will then analyze your system configuration and provide instructions (if needed) for creating the ''wiki.d/'' directory which will be used to hold the pages created for your site.  %0a%0aOtherwise, there are two ways to achieve this.%0a%0a->3a. You can create the ''wiki.d/'' directory manually, and then give it full write permissions (i.e., "[@chmod 777 wiki.d@]"). Use this method when "safe mode" is activated in the servers PH
 P installation.%0a%0a->3b. On some systems you can let PmWiki create ''wiki.d/'' by temporarily changing the permissions on the directory containing the ''pmwiki.php'' file to 2777.  In Unix this is commonly done by changing to the directory containing ''pmwiki.php'' and executing the command%0a%0a        chmod 2777 .%0a%0a->(note the dot at the end). The [@chmod@] command also works in many FTP programs. Creating ''wiki.d/'' in this manner will (1) make the directory writable so the web server can create the data directory it needs for the wiki files, (2) preserve group ownership of the directory so the installer account can manipulate the files created in this directory, and (3) make it more difficult for other accounts on the same server to access the files in ''wiki.d/''.%0a%0aAfter establishing directory permissions, try opening a browser to the ''pmwiki.php'' script again.  If all is well, the ''wiki.d'' directory will have been created and you'll see the default home 
 page.%0a%0aImportant: If you used method 3b, you should reset permissions by executing "[@chmod 755 .@]" in the directory containing pmwiki.php.%0a%0a[[#dirsetupend]]%0a!!! 4. Initialize%0aCheck out [[Initial Setup Tasks]] for other tasks you may want to perform to begin customizing your PmWiki installation.  You might also want to peruse the [[Release Notes]] for further information.%0a%0a%0a!!! 5. Set language%0aIf you want to use PmWiki in a different language download the international language pack as zip archive ([[(http://www.pmwiki.org/pub/pmwiki/)i18n.zip]]) or as gzipped tarball ([[(http://www.pmwiki.org/pub/pmwiki/)i18n.tgz]]) from [[http://www.pmwiki.org/pub/pmwiki/]]. Then extract it and copy the files into the ''wikilib.d/'' directory as described above.%0a%0aThere are two directories in the decompressed i18n archive, ''scripts'' and ''wikilib.d''. Copy the files respectively contained in these directories to the ''scripts'' and ''wikilib.d'' of your PmWiki dir
 ectory. For example, for French localization,  PmWikiFr.* and PmWiki.* must be contained in the '''same''' directory.%0a%0aThen, enable localization by adding an instruction to local/config.php to load the language translation page of your choice. For instance,  [@XLPage('fr','PmWikiFr.XLPage');@] loads the French language page PmWikiFr.XLPage.%0a%0aRead more about this on [[Internationalizations]].%0a%0a!! [[#notes]] Notes%0a%0a* The PmWiki distribution deliberately doesn't include an ''index.php'' file.  You can easily add your own "wrapper script" in the same directory as  ''pmwiki.php''.  Create a new file called ''index.php'' with the following single line of text (missing a closing "[@ ?>@]" tag deliberately):%0a%0a-->[@%3c?php include('pmwiki.php');@]%0a%0a  Resist the temptation to rename ''pmwiki.php'' to ''index.php'' because if you rename the file it will not be overwritten during an upgrade.%0a%0a* If using the Unix ''tar'' command to unpack the archive in step 2
  above, be sure that the files are created with sufficient permissions for the webserver to be able to access them.  Usually you can ensure this by typing @@umask 002@@ on the command line before unpacking the tar file.%0a%0a* When installing on Windows you should take a look at [[Cookbook:SimultaneousEdits]] to enable [[simultaneous edits]] on that platform.%0a%0a* Additional tips can be found at [[Troubleshooting]].%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I make pmwiki.php the default page for a website?  Should I rename pmwiki.php to index.php?%0a%0aA: Renaming pmwiki.php is not recommended. Instead, create an ''index.php'' file that contains the single line:%0a%0a->[@%3c?php include_once('pmwiki.php');@]%0a%0aYou may also want to check [[Cookbook:CleanUrls]].%0a%0a%0aQ: Why does pmwiki.org appear to have a directory structure rather than "?n=pagename" in urls?%0a%0aA: Pmwiki.org uses a variant of [[Cookbook:CleanUrls]
 ].%0a%0a%0aQ: Is it possible to move wiki.d to /tmp/persistent/wiki.d (a new sourceforge rule)?%0a%0aA: Sourceforge suggests moving everything to /tmp/persistent/new-folder-of-your-choice and creating a symbolic link to the new folder on /tmp . It works -- see [[Cookbook:SourceForgeServers]].%0a%0a%0aQ: How can I run PmWiki on a standalone (offline, portable) machine ?%0a%0aA: See [[Cookbook:Standalone]].%0a
+time=1166909268
+title=PmWiki Installation 

Added: trunk/oggdsf/website/wikilib.d/PmWiki.InterMap
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.InterMap	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.InterMap	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.5) Gecko/20060723 Firefox/1.5.0.5
+author=
+csum=
+host=70.80.46.133
+name=PmWiki.InterMap
+rev=32
+targets=PmWiki.InterMap,PmWiki.WikiWikiWeb,Site.InterMap,PmWiki.CustomInterMap,PmWiki.DocumentationIndex
+text=%25audience%25 author (intermediate)%0aThe [[InterMap]] is a system for defining links between [[WikiWikiWeb]] sites that was first developed by UseMod:UseModWiki and Meatball:MeatballWiki.  The method is to use a word that stands for a path that is defined. InterMap links have the form [@MapPrefix:PagePath@], where the host prefix is converted to a partial URL based on entries in the site's ''intermap.txt'' and ''localmap.txt'' files.%0a%0aThe default ''intermap.txt'' distributed with PmWiki (in the ''scripts/'' directory) includes the following InterMap entries:%0a%0a PmWiki:     http://www.pmwiki.org/wiki/PmWiki/ \\%0a Cookbook:   http://www.pmwiki.org/wiki/Cookbook/ \\%0a Wiki:       http://www.c2.com/cgi/wiki? \\%0a UseMod:     http://www.usemod.com/cgi-bin/wiki.pl? \\%0a Meatball:   http://www.usemod.com/cgi-bin/mb.pl? \\%0a Wikipedia:  http://www.wikipedia.com/wiki/ \\%0a PITS:       http://www.pmwiki.org/PITS/ \\%0a Path:%0a      %0aThus, "PmWiki:Variables" beco
 mes "http://www.pmwiki.org/wiki/PmWiki/" + "Variables," a link to the [[PmWiki.Variables->http://www.pmwiki.org/wiki/PmWiki/Variables]] page on the official PmWiki web site, Wiki:FrontPage is a link to the front page of the first WikiWikiWeb, and Wikipedia:Stonehenge takes you to the Wikipedia article about the famous megaliths in England.  %0a%0aLike other links, you can use the double-bracket syntax to get different link text:%0a* [@[[Meatball:StartingPoints | starting points]] over at Meatball@] becomes "[[Meatball:StartingPoints | starting points]] over at Meatball"%0a* [@[[starting points -> Meatball:StartingPoints]] over at Meatball@] becomes "[[starting points -> Meatball:StartingPoints]] over at Meatball"%0a%0aIf you want to link just to what the intermap says (e.g. http://www.wikipedia.com/wiki/ for Wikipedia), then do [@[[Wikipedia:. | Wikipedia's main page]]@], which produces [[Wikipedia:. | Wikipedia's main page]].  Note the . (period) after the Map: reference.%0
 a%0aThe special [@Path:@] InterMap entry can be used to create "[[Cookbook:RelativeUrls|relative urls]]" in [[Cookbook:RelativeLinks|links]].%0a%0aThe actual set of InterMap links at any site is defined by the site administrator via the [[Site.InterMap]] page and the ''local/localmap.txt'' file; for more details, see [[PmWiki.CustomInterMap]]s.%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>
+time=1154219903

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Internationalizations
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Internationalizations	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Internationalizations	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.2.0-beta5 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=small improvement
+host=24.1.26.255
+name=PmWiki.Internationalizations
+rev=40
+targets=PmWiki.WikiGroup,PmWiki.PerGroupCustomizations,PmWiki.DocumentationIndex
+text=PmWiki supports internationalization (internationalisation) of web pages, allowing accented characters to appear in page names and almost complete customization of PmWiki's prompts.  Most customization is provided via the `XLPage() function in PmWiki, which loads a set of translation variables from a wiki page (typically named `XLPage, but it can be named anything you wish).%0a%0a%0a!!Loading Translation Pages%0a%0aPages for many languages such as French, German, Dutch, and Spanish have already been created and maintained at the pmichaud.com site.  You can download an archive of these translations from http://www.pmichaud.com/pub/pmwiki/i18n.tgz.  Simply unpack the archive into the directory containing your ''pmwiki.php'' installation.  The archive contains a number of page files that are placed in your wikilib.d/ directory, and some special scripts for translations that use a character set other than iso-8859-1 (PmWiki's default).%0a%0aOnce the translation pages are in
 stalled, you enable a language by adding a call to `XLPage() in your ''config.php'' file.  For example, to select French language prompts, one would specify%0a%0a->[@XLPage('fr','PmWikiFr.XLPage');@]%0a%0awhich says to load the translations for French ('fr') from the page `PmWikiFr.XLPage.  It's perfectly okay to load multiple pages; so if you want to create your own local translations without changing the ones you got from ''i18n.tgz'', just create another page (see below) and load it on top. Be sure that you load first the page with your local chances:%0a%0a-> [@%0aXLPage('fr','PmWikiFr.XLPageLocal');  # my local translations%0aXLPage('fr','PmWikiFr.XLPage');       # from i18n.tgz%0a@]%0a%0aIf your intention is to offer multiple languages on your site, and use [[WikiGroup]]s as language selectors, you may want to place this code in local customizations files (see [[PerGroupCustomizations]]). For example, if your site is published in French and English, and the French pages
  are in a group called Fr, you could create a file named Fr.php in the local/ directory which contains:%0a%0a-> [@%0a%3c?php if (!defined('PmWiki')) exit();%0a##change to French language%0aXLPage('fr','PmWikiFr.XLPage');%0a@]%0a%0aYou may wish to create a page called `PmwikiFr.php with the same content to access the French documentation in the `PmwikiFr group.%0aEn.php is not necessary in this case since English is the default language.%0a%0aAn alternative to the above would be to add to config.php the following, which tests if there is an `XLPage in a group, and if it finds one it gets loaded:%0a%0a-> [@    %0a$xlpage = FmtPageName('$Group.XLPage', $pagename);%0aif (PageExists($xlpage)) XLPage($xlpage, $xlpage);%0a@]%0a%0aWith this method you would need to copy any relevant `XLPage into any group which needs the different language support.%0a%0a%0a!!Creating New Translations%0a%0aIf language pages don't exist for your desired language, it's easy to create one!  An `XLPage t
 ranslation file simply contains lines of the form%0a%0a->[@'phrase' => 'translated phrase',@]%0a%0awhere "phrase" is an internationalized phrase (denoted by [@$[phrase]@]) in PmWiki's $...Fmt variables, and "translated phrase" is what should be printed in your particular language.  For example, the line (in [@PmWikiFr.XLPage@])%0a%0a->[@'SearchWiki' => 'Rechercher',@]%0a%0aconverts "[@$[SearchWiki]@]" to "Rechercher" on output.  The file PmWiki:XLPageTemplate is a good starting point for creating a new `XLPage and has most of PmWiki's key phrases already listed in it.  Note that the translation mechanism only converts phrases that have been listed as translatable in $...Fmt strings--it won't translate normal text in wiki markup.%0a%0aIf you create new versions of PmWiki pages in other languages, please consider adding them to the [[PmWiki:PmWiki | main PmWiki site]] so that they can be made available to others in the ''i18n.tgz'' archive!%0a%0a->%25note%25 The term "i18n" is
  commonly used as an abbreviation for the English word "internationalization".  The abbreviation is derived from the fact that there are 18 letters between the "i" and the final "n" and few people want to type them all out.%0a%0a%0a!!Tools for PmWiki Localization%0a%0aYou can help to localize PmWiki in your language in the original site:%0a%0a* [[PmWiki:Localization]]%0a%0a%25trail%25 %3c%3c|[[DocumentationIndex]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: If my wiki is internationalized by [@config.php@], how do I revert a specific group to English?%0a%0aA: Use [@$XLLangs = array('en');@] in the [@group.php@] configuration file.%0a
+time=1159377560

Added: trunk/oggdsf/website/wikilib.d/PmWiki.LayoutVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.LayoutVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.LayoutVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=update description
+host=24.1.26.255
+name=PmWiki.LayoutVariables
+rev=59
+targets=PmWiki.Variables,PmWiki.SkinTemplates,PmWiki.WikiGroup,PmWiki.CustomWikiStyles,PmWiki.Tables,PmWiki.EditVariables
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0aVariable substitutions in the skin template are all managed by the `FmtPageName() function from pmwiki.php. Pmwiki variable substitutions available on pages are managed by the {$var} substitutions from stdmarkup.php or superseded in local/config files. %0a%0a:$WikiTitle:A variable which contains the Wiki title as displayed by the browser%0a%0a:$HTMLStylesFmt:An array of CSS statements to be included in the page's output along with other HTML headers.  This array provides an easy place for scripts to add custom CSS statements.%0a%0a:$HTMLHeaderFmt:An array of HTML text to be included in the page's %3chead> section, at the point where the [[skin template(s)]] specifies a [@%3c!--HTMLHeader-->@] directive.  This array provides an easy place for scripts to add custom HTML headers.%0a%0a->For example, if you want to specify a logo for all the pages of your wiki (a png image for Firefox (and others...), an ico for Internet Explorer):%0a-->[
 @ %0a$HTMLHeaderFmt['logo'] =%0a  '%3clink href="http://your/wiki/path/to/your/logo/logo.png" type="image/png" rel="icon" />%0a  %3clink href="http://your/wiki/path/to/your/logo/logo.ico" type="image/x-icon" rel="shortcut icon" />';%0a@]%0a%0a->Another example, if you want to get the rss notification on some browsers (the rss icon in firefox for instance):%0a-->[@ %0a$HTMLHeaderFmt['rss'] =%0a  '%3clink rel="alternate" type="application/rss+xml" title="Rss All recent Changes" %0a     href="$ScriptUrl/Site/AllRecentChanges?action=rss" />';%0a@]%0a%0a:$HTMLFooterFmt:Like $HTMLHeaderFmt above, this contains an array of HTML text to be included near the end of an HTML document, at the point where the [[skin template(s)]] specifies a [@%3c!--HTMLFooter-->@] directive (usually just before a closing %3c/body> tag).  Primarily used by scripts to add custom HTML output after the body of the page output. %0a%0a:$MetaRobots:Sets the value of the [@%3cmeta name='robots' ... />@] tag gen
 erated by PmWiki to control search engine robots accessing the site.  PmWiki's default setting tells robots to not index anything but the normal page view, and to not index pages in the PmWiki [[wiki group]].  Explicitly setting $MetaRobots overrides this default.%0a        # never index this site%0a        $MetaRobots = 'noindex,nofollow';%0a        # disable the robots tag entirely%0a        $MetaRobots = '';%0a%0a:$MessagesFmt:An array of HTML text to be displayed at the point of any [@(:messages:)@] markup.  Commonly used for displaying messages with respect to editing pages.%0a%0a:$RecentChangesFmt:An array specifying the format of the RecentChanges listing.%0a%0a->The format can be specified in your config.php using the following:%0a-->[@%0a$RecentChangesFmt['$SiteGroup.AllRecentChanges'] = %0a  '* [[$Group.$Name]] . . . $CurrentTime $[by] $AuthorLink: [=$ChangeSummary=]=][=';%0a$RecentChangesFmt['$Group.RecentChanges'] =%0a  '* [[$Group/$Name]] . . . $CurrentTime $[by
 ] $AuthorLink: [=$ChangeSummary=]=][=';%0a@]%0a%0a->Note that changes made to the format will only affect new edits. In other words, you will need to edit a page for your new format to be visible.  Note also that you need to have two spaces between the page name and the other information about the edit.%0a%0a:$RCLinesMax:The maximum number of lines to be stored in RecentChanges pages.  The default is zero, meaning "no limit".%0a        $RCLinesMax = 1000;       # maintain at most 1000 recent changes%0a%0a:$PageRedirectFmt:The text to be used when a page is redirected via the [@(:redirect:)@] markup.%0a-->[@%0a$PageRedirectFmt = '%3cp>%3ci>redirected from $FullName%3c/p>';%0a$PageRedirectFmt = '';%0a@]%0a->For display options, see also the FAQ on [[(PmWiki:)PageDirectives(#faq)]].%0a%0a:$WikiStyle:An array which contains the predefined WikiStyles which can be used on a textpage.[[%3c%3c]]See: [[PmWiki.CustomWikiStyles]]%0a%0a:$MaxIncludes:Controls the number of times that pag
 es can be included via the [@(:include:)@] and other directives, used to control recursion and otherwise pose a sanity check on page contents.  $MaxIncludes defaults to 50, but can be set to any value by the wiki administrator.%0a        $MaxIncludes = 50;            # default%0a        $MaxIncludes = 1000;          # allow lots of includes%0a        $MaxIncludes = 0;             # turn off includes%0a%0a:$Skin:Points to the directory of an own or different layout skin.%0a%0a:$SkinDirUrl:Set by ''scripts/skins.php'' to be the base url of the current skin's directory (i.e., within a 'pub/skins/' directory).  This variable is typically used inside of a skin .tmpl file to provide access to .css files and graphic images associated with the skin.%0a%0a:$SkinLibDirs:An associative array which PmWiki uses to locate skin directories (containing a ''.tmpl'' file) and provide the associated url for any such directory found (e.g., to obtain any ''.css'' or graphic images for the skin).
   $SkinLibDirs is an array of key/value pairs; the key is a path to a potential skin directory, while the value is the corresponding url prefix to use if the skin is found at the location given by the key.  By default $SkinLibDirs is set to:%0a-->[@%0a$SkinLibDirs = array(%0a  "./pub/skins/\$Skin" => "$PubDirUrl/skins/\$Skin",%0a  "$FarmD/pub/skins/\$Skin" => "$FarmPubDirUrl/skins/\$Skin");%0a@]%0a%0a:$PageLogoUrl: is the url that refers to a logo image which most skins display somewhere in the page's header (top left usually).%0a%0a:$EnablePathInfo:Changes the handling of the page URL. When set to @@1@@ page URL will be @@...wiki.php/Main/Main@@, when set to @@0@@ (default) it will be @@...wiki.php?n=Main.Main@@.%0a%0a:$EnableFixedUrlRedirect:When PmWiki is given a partial page name (e.g., just the name of a WikiGroup), it uses $PagePathFmt in order to make a complete page name from the partial one, then issues a "redirect" to the browser to tell it to reload the page with 
 the correct full page name.  Setting $EnableFixedUrlRedirect=0; blocks the redirect, so that PmWiki continues processing with the adjusted page name rather than issuing the redirect. %0a%0a:$GroupHeaderFmt:Defines the markup placed at the top of every page. Default value is:%0a        [@$GroupHeaderFmt = '(:include $Group.GroupHeader:)(:nl:)';@]%0a%0a:$GroupFooterFmt:Defines the markup placed at the bottom of every page. Default value is:%0a        [@$GroupFooterFmt = '(:include $Group.GroupFooter:)(:nl:)';@]%0a%0a:$PageNotFoundHeaderFmt:Specifies the HTTP header to send when attempting to browse a page that doesn't exist.  Some webserver packages (notably Microsoft's "Personal Web Server") require that this variable be changed in order to work.%0a%0a-->[@%0a# default%0a$PageNotFoundHeaderFmt = 'HTTP/1.1 404 Not Found';%0a# return all pages as found%0a$PageNotFoundHeaderFmt = 'HTTP/1.1 200 Ok';%0a@]%0a%0a:$HTMLVSpace:Setting [@$HTMLVSpace = '';@] in a local customizationfile
  (e.g., [@local/config.php@]) prevents insertion of spacer paragraphs ([@%3cp class='vspace'>%3c/p>@]) in generated HTML code. To limit this change to a single skin, place the [@$HTMLVSpace = '';@] statement in a skin.php file, preceded by the statement [@global $HTMLVSpace;@].%0a%0a:$TableCellAttrFmt:For [[Tables]], defines the HTML attributes given to each @@%3ctd>@@ or @@%3cth>@@ cell in the output.  Can contain references to $TableCellCount which holds the horizontal column number of the current cell.%0a%0a:$TableRowAttrFmt:For [[Tables]], defines the HTML attributes given to each @@%3ctr>@@ element in the output.  Can contain references to $TableRowCount to give the absolute row number within the table, or $TableRowIndex to provide a repeating row index from 1 to $TableRowIndexMax.%0a        # Give each row a unique CSS class based on row number (tr1, tr2, tr3, ... )%0a        $TableRowAttrFmt = "class='tr\$TableRowCount'";%0a        # Give each row alternating CSS clas
 ses (ti1, ti2, ti1, ti2, ti1, ... )%0a        $TableRowIndexMax = 2;%0a        $TableRowAttrFmt = "class='ti\$TableRowIndex'";%0a%0a:$TableRowIndexMax:The maximum value for $TableRowIndex in [[Tables]].%0a        # Set rows indexes as 1, 2, 3, 1, 2, 3, 1, 2, ...%0a        $TableRowIndexMax = 3;%0a %0aSee also: [[Edit Variables]]
+time=1159205827

Added: trunk/oggdsf/website/wikilib.d/PmWiki.LinkVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.LinkVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.LinkVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.5 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418 (KHTML, like Gecko) Safari/417.9.2
+author=Pico
+csum=
+host=66.108.51.56
+name=PmWiki.LinkVariables
+rev=21
+targets=PmWiki.Variables,Category.DocumentationToDo,PmWiki.CustomInterMap
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%25audience%25 admins (advanced)%0a%0a:$WikiWordCountMax:The maximum number of times to convert each WikiWord encountered on a page.  Defaults to 1,000,000.  Common settings for this variable are zero (disable WikiWord links) and one (convert only the first occurrence of each WikiWord).%0a        $WikiWordCountMax = 0;     # disable WikiWord links%0a        $WikiWordCountMax = 1;     # convert only first WikiWord%0a%0a:$WikiWordCount:An array that allows the number of WikiWord conversions to be set on a per-WikiWord basis.  The default is to use $WikiWordCountMax unless a value is set in this array.  By default PmWiki sets @@$WikiWordCount['PmWiki']=1@@ to limit the number of conversions of "PmWiki".%0a        $WikiWordCount[=['PhD']=0;     # Don't convert "PhD"=]%0a        $WikiWordCount['WikiWord']=5;  # Convert WikiWord 5 times%0a        # the following lines keep a page from linking to itself%0a        $title = [=FmtPageName=]('$Titl
 e_',$pagename);%0a        $WikiWordCount[$title]=0;    %0a%0a%0a:$PagePathFmt: [[!DocumentationToDo]].  But look at Cookbook:PagePaths for some ideas.%0a%0a:$LinkPageExistsFmt:The (HTML) string to output for links to already existing wiki pages.  Defaults to %0a        %3ca class='wikilink' href='\$LinkUrl'>\$LinkText%3c/a>%0a%0a:$LinkPageCreateFmt:The (HTML) string to output for links to non-existent wiki pages.  The default is to add a '?' after the link text with a link to the page edit/create form.  Defaults to%0a        %3ca class='createlinktext' href='\$PageUrl?action=edit'>\$LinkText%3c/a>%0a        %3ca class='createlink' href='\$PageUrl?action=edit'>?%3c/a>%0a%0a:$LinkPageCreateSpaceFmt:Same as $LinkPageCreateFmt, but used when the link text has a space in it. %0a%0a:$LinkPageSelfFmt:The (HTML) string to output for self-referencing links (i.e. links to the page itself).  Defaults to%0a        %3ca class='selflink' href='\$LinkUrl'>\$LinkText%3c/a>%0a%0a:$UrlLinkFmt
 :The (HTML) string to output for URL-links that begin with 'http:', 'ftp:', etc.  Defaults to%0a        %3ca class='urllink' href='\$LinkUrl'>\$LinkText%3c/a>%0a%0a:$IMapLinkFmt: an array of link formats for various link "schemes". Not set as default.%0a->Examples of custom formats to allow different styling via classes: %0a->Links to http: standard url links:%0a         $IMapLinkFmt['http:'] = "%3ca class='httplink urllink' href='\$LinkUrl'>\$LinkText%3c/a>";  %0a->Links to https: secure pages:%0a         $IMapLinkFmt['https:'] = "%3ca class='httpslink urllink' href='\$LinkUrl'>\$LinkText%3c/a>";   %0a->Links to PmWiki: InterMap shortcut:%0a         $IMapLinkFmt['PmWiki:'] = "%3ca class='pmwikilink urllink' href='\$LinkUrl'>\$LinkText%3c/a>"; %0a->Links to Cookbook: InterMap shortcut %0a         $IMapLinkFmt['Cookbook:'] = "%3ca class='cookbooklink urllink' href='\$LinkUrl'>\$LinkText%3c/a>"; %0a%0a:$InterMapFiles:An array consisting a list of files and pages containing Int
 erMap entries to be loaded (see [[CustomInterMap]]).%0a%0a:$MakePageNameFunction:Name of a custom function to replace `MakePageName(), which converts strings into valid page names.%0a%0a:$MakePageNamePatterns:%0a: :$MakePageNamePatterns is an array of regular expression replacements that is used to map the page link in a ''free link'' such as [@[[free link]]@] into a page name. Currently the default sequence is: [@%0a    "/'/" => '',                           # strip single-quotes%0a    "/[^$PageNameChars]+/" => ' ',         # convert non-alnums to spaces%0a    "/((^|[^-\\w])\\w)/e" %0a      => "strtoupper('$1')",               # initial caps after spaces%0a    "/ /" => ''                            # strip spaces%0a@]%0a%0a
+time=1146912656

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Links
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Links	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Links	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.2.0-beta14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=restore -- doesn't format well on my display
+host=24.1.26.255
+name=PmWiki.Links
+rev=62
+targets=PmWiki.WikiWikiWeb,PmWiki.WikiSandbox,PmWiki.Installation,PmWiki.WikiWord,PmWiki.Links,PmWiki.InterMap,PmWiki.WikiGroup,Main.WikiSandbox,PmWiki.DocumentationIndex,PmWiki.PageLists
+text=%25audience%25 authors (basic)%0aA key feature of [[WikiWikiWeb]]s is the ease of creating links in the text of a document.  %0aPmWiki provides multiple mechanisms for creating such links.%0a%0a!! Links to other pages%0a%0aTo create a link to another page, simply enclose the name of the page inside double square brackets, as in [@[[wiki sandbox]]@] or [@[[installation]]@].  These result in links to [[wiki sandbox]] and [[installation]], respectively.%0a%0aPmWiki creates a link by using the text inside the double brackets. It does this by removing spaces between words, and automatically capitalizing words following spaces or other punctuation (like ~). Thus [@[[Wiki sandbox]]@], [@[[wiki sandbox]]@], and [@[[WikiSandbox]]@] all display differently but create the same link to the page titled ''WikiSandbox''.%0a%0aIn other words, PmWiki will automatically create the link path name using title case as a rule, but link text will display in the format you have entered it.%0a%
 0aA suffix can also be added to the end of a link, which becomes part of the link text but not the target.  Thus [@[[wiki sandbox]]es@] is a link to ''WikiSandbox'' but displays as [[wiki sandbox]]es.%0a%0aLink text in (parentheses) will not be not displayed, so that [@[[(wiki) sandbox]]@] links to ''WikiSandbox'' and displays as [[(wiki) sandbox]].%0a%0aFinally, you can specify the link text via a vertical brace, thus  [@[[WikiSandbox | a play area]]@], which links to ''WikiSandbox'' but displays as [[WikiSandbox | a play area]].  You can use an arrow ([@->@]) to reverse the order of the text and target, as in [@[[a play area -> WikiSandbox]]@]  ([[a play area -> WikiSandbox]]).%0a%0aSome sites also recognize [[WikiWord]] links, in which a ''WikiWord'' appearing in the text is automatically treated as a link to a page of the same name.%0a%0a!! [[#linkshortcuts]]Link Shortcuts%0a%0a[@[[PageName|+]]@] creates a link to PageName and uses that page's title as the link text, eg 
 [@[[Links|+]]@] gives [[Links|+]].  %0a%0a[@[[PageName|#]]@] creates a [[#reference|reference]] link as shown below.%0a%0a[@[[!PageName]]@]creates a link to the PageName in the group called Category.%0a%0a[@[[~Author]]@] link creates a link to the page in the page called Author in the Profiles group.  PmWiki will automatically generate that link for the current Author when it encounters three tilde characters ([@~@]) in a row ([@~@][@~@][@~@]).  Adding a fourth tilde ([@~@][@~@][@~@][@~@]) appends the current date and time.%0a%0a!! [[#anchors]]Links to specific locations within a page%0a%0aTo define a location within a page to which you may jump directly, use the markup [@[[#name]]@].   This creates an "anchor" that uniquely identifies that location in the page.  Then to have a link jump directly to that anchor, use one of%0a%0a* [@[[#name|link text]]@] within the same page, or%0a* [@[[PageName#name]]@] or [@[[PageName#name|link text]]@] for a location on another page%0a* Th
 e form [@[[PageName(#name)]]@] may be useful for hiding the anchor text in a link. %0a%0aFor example, here's a link to the [[#intermaps | Intermaps]] section, below. %0a%0a!!Links to external sites ([=URLs=])%0a%0aLinks to external sites simply begin with a prefix such as 'http:', 'ftp:', etc.  Thus [@http://google.com/@] and [@[[http://google.com/]]@] both link to Google.  As with the above, an author can specify the link text by using the vertical brace or arrow syntax, as in [@[[http://google.com/ | Google]]@] and [@[[Google -> http://google.com]]@].%0a%0a!! [[#reference]]Links as References%0a%0aLinks may also be specifed as '''References''', so the target appears as an anonymous ''numeric'' reference rather than a ''textual'' reference. The following markup is provided to produce sequential reference numbering within a PmWiki page:%0a%0aFormatting the link as: [@[[http://google.com |#]]@] produces: [[http://google.com |#]] as the link.%0a%0aSubsequent occurrence of the 
 reference link format on the same page will be incremented automatically as per the following example: Entering [@[[http://pmwiki.com |#]]@] produces [[http://pmwiki.com |#]], [@[[#intermaps |#]]@] produces [[#intermaps |#]], and so on for further reference links.%0a%0a!! [[#intermaps]]Intermaps%0a%0aInterMap links are also supported (see [[InterMap]]).  In particular, the [@Path:@] InterMap entry can be used to create links using relative or absolute paths on the current site (e.g., [@Path:../../somedir/foo.html@] or [@Path:/dir/something.gif@]).%0a%0a%0a!!Links to pages in other [[wiki group]]s%0a%0aSee [[WikiGroup]].%0a%0a!!Links that open a new browser window%0a%0aTo have a link open in another window, use [@%25newwin%25@]:%0a%0a* [@%25newwin%25  http://www.pmichaud.com@] produces %25newwin%25  http://www.pmichaud.com %0a* [@%25newwin%25 [[http://google.com/ | Google]]@] produces %25newwin%25 [[http://google.com/ | Google]]%0a* [@%25newwin%25  Main.WikiSandbox@] produces
  %25newwin%25  [[Main.WikiSandbox]]%0a%0aYou can also specify that links should open in a new window via the @@target@@ attribute:%0a%0a(:markup:) [=%0a%25target=_blank%25 Any links on this line like http://www.pmichaud.com %0awill open in a new window.%0a=]%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I put a link that will open as a new window?%0a%0aA: Use the [@%25newwin%25@] wikistyle, as in:%0a(:markup:) [=%25newwin%25http://www.example.com/=]%0a%0a%0aQ: How do I place a mailing address in a page?%0a%0aA: Use the [@mailto:@] markup, as in one of the following:%0a%0a    [@mailto:myaddress at example.com%0a    [[mailto:myaddress at example.com]]%0a    [[mailto:myaddress at example.com | email me]]@]%0a%0aSee also [[Cookbook:EProtect]] for information on protecting email addresses from spammers.%0a%0aQ: How do I make a WikiWord link to an external page instead of a WikiPage?%0a%0aA: Use link markup.  There are two formats:%0a%0a    [@[[h
 ttp://www.example.com/ | WikiWord]]%0a    [[WikiWord -> http://www.example.com/]]@]%0a%0a%0aQ: How do I find all of the pages that link to another page (i.e., backlinks)?%0a%0aA: Use the [@link=@] option of the [[[@(:pagelist:)@] directive -> PageLists]], as in%0a%0a    [@(:pagelist link=SomePage:)   -- show all links to SomePage%0a    (:pagelist link={$FullName}:)  -- show all links to the current page@]%0a
+time=1161032541

Added: trunk/oggdsf/website/wikilib.d/PmWiki.LocalCustomizations
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.LocalCustomizations	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.LocalCustomizations	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.9 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.3) Gecko/20060425 SUSE/1.5.0.3-7 Firefox/1.5.0.3
+author=Pm
+csum=moved 404 page question
+host=24.1.26.255
+name=PmWiki.LocalCustomizations
+rev=28
+targets=PmWiki.PerGroupCustomizations,PmWiki.WikiAdministrator,PmWiki.PmWikiPhilosophy,PmWiki.Variables,PmWiki.DocumentationIndex,PmWiki.Skins,PmWiki.Internationalizations,PmWiki.CustomMarkup,PmWiki.CustomInterMap,PmWiki.MailingLists,PmWiki.Upgrades,Site.PageNotFound
+text=A WikiAdministrator can make a lot of customizations simply by setting variables in the ''local/config.php'' file.  Any group or page can also have [[PerGroupCustomizations|its own configuration file]].%0a%0aFrom its inception, PmWiki has been designed so that [[WikiAdministrator]]s can greatly customize the way PmWiki displays pages and the markup sequences used to generate pages.  (This is even mentioned explicitly in [[PmWikiPhilosophy]] #4.)  As a result, the core ''pmwiki.php'' script makes extensive use of [[PmWiki.Variables]] to determine how markup sequences will be processed and what each individual page will output.%0a%0aThe bulk of this page describes how customizations work in general, see [[PmWiki.DocumentationIndex]] for specific customizations that are commonly performed at many PmWiki installations, including:%0a%0a* [[Skins]]%0a* [[Internationalizations]]%0a* [[Custom Markup]]%0a* [[Custom InterMap]]s%0a%0aThe simplest type of customization is merely se
 tting a variable to 1 (or TRUE).  Here's an example that enables ?action=diag and ?action=phpinfo actions:%0a%0a->[@$EnableDiag = 1;@]%0a%0aYou can begin a line with a "#"  (an octothorpe, a.k.a. a hash symbol or pound sign) to add a comment.  Additionally, some built-in PmWiki variables take values other than 1 or 0 (true or false).  Here's another example that customizes the wiki's behavior with respect to search engine web robots (see [[Cookbook:ControllingWebRobots]]):%0a%0a->[@%0a# Allow the site to be indexed by search engines.%0a$MetaRobots = 'index,follow';%0a$EnableRobotCloakActions = 1;%0a@]%0a%0aThe ''scripts/'' subdirectory (below the directory holding the ''pmwiki.php'' script) has many customizations.%0aThe PmWiki [[(Cookbook:)Cookbook]] contains many example customizations (recipes) that you can download into the ''cookbook/'' subdirectory,%0aThe first few lines of each of these scripts generally contain instructions about how to enable (and use) the feature p
 rovided by the script.%0a%0aThese customizations are included in your ''config.php'' site configuration. For most scripts this is done by simply adding lines like:%0a->[@include_once("cookbook/recipefile.php");@]%0aand%0a->[@include_once("scripts/scriptfile.php");@]%0aat the end of the ''config.php'' file to enable them.  %0a%0aSome of the scripts are automatically enabled for you via the ''scripts/stdconfig.php'' script unless you disable it by setting @@$EnableStdConfig=0;@@ in ''local/config.php''.%0a%0aNote that you should strongly resist the temptation to directly modify the ''pmwiki.php'' script or the files in the ''scripts/'' subdirectory.  Any modifications you make to these files will probably be overwritten whenever you perform a [[PmWiki.Upgrade(s)]].  Instead, look at some of the sample scripts for examples of customizations that can be performed from ''config.php''. You can even create your own script to do a customization and use @@include_once(...)@@ to inclu
 de it from ''config.php''.  If you do make your own customization script, you can safely put it in the ''cookbook/'' subdirectory--it won't get overwritten by an upgrade there.  You might also want to submit your customization to the [[MailingLists|pmwiki-users mailing list]] or the [[(Cookbook:)Cookbook]] so that others can benefit from your effort and so that it can perhaps be included in future releases of PmWiki.%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I get the group / page name in a local configuration file (e.g. ''local/config.php'')?%0aA: Use the following markup in pmwiki-2.1.beta21 or newer:%0a%0a->[@%0a## Get the group and page name%0a$pagename = ResolvePageName($pagename);%0a$group = PageVar($pagename, '$Group');%0a$name = PageVar($pagename, '$Name');%0a@]%0a%0a%0aQ: Can I remove items from the wikilib.d folder on my site?%0aA: Yes, the files in ''wikilib.d/'' can be safely removed.  They'll reappear again when yo
 u upgrade, however.  If you want to permanently configure your site so that these distribution pages don't appear, try:%0a%0a->[@$WikiLibDirs = array(&$WikiDir);@]%0a%0a%0aQ: How do I customize my own 404 error page for non-existent pages?%0aA: To change the text of the message, try editing the [[Site.PageNotFound]] page.%0a%0a
+time=1149272166

Added: trunk/oggdsf/website/wikilib.d/PmWiki.MailPosts
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.MailPosts	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.MailPosts	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
+author=jm
+csum=added trail
+host=201.14.213.228
+name=PmWiki.MailPosts
+rev=57
+targets=PmWiki.Variables,PmWiki.Notify,PmWiki.MailPosts,PmWiki.DocumentationIndex
+text=%25audience%25 administrators (basic)%0a%3c%3c|[[PmWiki.Variables]]|>>%0a%0a->%25note%25 As of PmWiki 2.1.7, the MailPosts capability is being superceded by the more advanced ''notify.php'' script.  See [[Notify]] for details.%0a %0aThe ''mailposts.php'' script allows a site administrator to configure PmWiki to send email messages whenever pages are changed on the wiki site. MailPosts can be configured so that multiple page changes over a short period of time are combined into a single email message (to avoid flooding a mailbox).%0a%0aThe MailPosts feature is especially useful for sites that have infrequent updates, eliminating the need to frequently check [=RecentChanges=] pages just to see if anything has changed.%0a%0aFull configuration details are available in ''scripts/mailposts.php''.%0a%0aBelow is a brief synopsis of what needs to go in '''config.php''' or a per-group customization script for MailPosts:%0a%0a %3c?php if (!defined('PmWiki')) exit();%0a $EnableMail
 Posts=1;                   # to enable mailposts%0a $MailPostsTo="somebody at example.com";  # where to send mail %0a $MailPostsDelay=1800;                 # wait 30+ min after initial post%0a $MailPostsSquelch=7200;               # require 2+ hours between mails%0a%0aNote that $MailPostsTo may be a comma-separated list of addresses if multiple recipients are desired.%0a%0a''For newbies:  The ONLY file that needs editing is the local/config.php for this recipe to work.  Add any or all of the configurations to the config.php file and it should work rather easily, assuming your host meets the other requirements.  ''%0a%0aOn a per group basis you could set ''local/`MyGroup.php'' (Create the `MyGroup.php file if necessary) to:%0a%0a %3c?php if (!defined('PmWiki')) exit();%0a $EnableMailPosts=1;                           # Enable mailposts%0a $MailPostsTo="xxx at mail1.com, yyy at mail2.com";  # where to send mail%0a $MailPostsFrom="bbb at mail4.com";%0a $MailPostsDelay=1800;            # Wa
 it 30+ minutes after initial post%0a $MailPostsSquelch=7200;          # Require 2+ hours between mails@]%0a $pagename = ResolvePageName($pagename);%0a $group = PageVar($pagename, '$Group');%0a $MailPostsMessage = "Recent wiki posts:\n"%0a    ."  ($ScriptUrl/$group/RecentChanges)\n\n\$MailPostsList\n";%0a $MailPostsFile = "$WorkDir/.$group.mailposts";%0a%0aNow make a change or add a document to one of the `MyGroup documents and save it. You should receive an email. Be patient. Even if you set (my test settings)%0a%0a $MailPostsDelay=18;              # Wait 18 seconds after initial post%0a $MailPostsSquelch=72;            # Wait 72 seconds after initial post%0a%0ait took between 5 and 10 minutes for me to get the email.%0a%0aSince an initial post is often followed by several posts containing minor edits, it's useful to wait a short period of time before sending an email.  $MailPostsDelay is the minimum amount of time that must elapse from an initial post before a message is se
 nt. A delay of zero means to immediately send a message whenever an update is received. Any additional posts occuring during the delay period are included in the message when it is sent.  The message is sent on the first execution of pmwiki.php after the delay period has expired (which for inactive sites could be much longer than the delay period). pmwiki.php calls mailposts.php so if no one visits the section that calls mailposts.php the email will be delayed. For clarification and an example using per Group settings: The $MailPostsDelay is set to 1800 (1/2 hour) in `MyGroup and the person editing `MyGroup finishes in less than 1/2 hour and leaves `MyGroup. No one visits `MyGroup again for two days. The email message indicating that the editing of `MyGroup has taken place will not be sent for two days. This will not be a problem as Site or Group activity increases.%0a%0a$MailPostsSquelch specifies the minimum amount of time that must elapse before sending another notificati
 on message.  This is useful to prevent large number of rapid-succession messages if $MailPostsDelay is set to a small value.  %0a%0aThe defaults for $MailPostsDelay and $MailPostsSquelch are 0 and 7200. With these values, an email is sent as soon as a page is changed, and subsequent changes are "held" for at least two hours before being sent in another message.%0a%0aThe variables used to control MailPosts are given [[#variables | below]], and also described in the ''mailposts.php'' script.%0a%0a!!!Note for Windows installations%0a%0aSites running PHP under Windows may not have PHP's [[http://www.php.net/mail | mail]] function configured correctly.  Such sites may need to add a line like%0a%0a    ini_set('SMTP','smtp.server.com');%0a%0ato ''config.php'', where ''smtp.server.com'' is the name of your host's preferred outgoing mail server.%0a%0a!!![[#variables]] MailPosts Variables%0a%0a%3c%3c|Variables|>>%0a%0a:$EnableMailPosts:Tells ''stdconfig.php'' to enable the [[MailPosts
 ]] script.%0a        $EnableMailPosts = 1;          # enable mailposts%0a        $EnableMailPosts = 0;          # disable mailposts%0a%0a:$MailPostsTo:A comma separated list of email recipients.%0a        $MailPostsTo = 'admin at example.com, joe at somewhere.org';%0a%0a:$MailPostsFrom:Return email address to be used in the sent email.%0a        $MailPostsFrom = 'wiki at example.com';%0a        $MailPostsFrom = 'Wiki server %3cwiki at example.com>';%0a%0a:$MailPostsDelay:The length of time (seconds) to wait before sending mail after the first post.  Defaults to zero - posts are sent as soon as the $MailPostsSquelch period has expired.%0a        $MailPostsDelay = 360;    # send mail 6+ min after first post%0a%0a:$MailPostsSquelch:The minimum length of time (seconds) that must elapse between sending mail messages.  Useful when $MailPostsDelay is set to a small value to keep the number of mail notification messages down.  Defaults to 7200 (two hours).%0a        $MailPostsSquelch = 43200;  
 # wait 12+ hours between mailings%0a%0a:$MailPostsItemFmt:The text to be sent for each changed item in the post.  The string "$PostTime" is substituted with the time of the post (controlled by $MailPostsTimeFmt below).%0a        # default%0a        $MailPostsItemFmt = ' * $FullName . . . $PostTime by $Author';%0a        # include the page's URL in the message%0a        $MailPostsItemFmt =%0a          " * \$FullName . . . \$PostTime by \$Author\n     \$PageUrl";%0a%0a:$MailPostsTimeFmt:The format for dates/times in $PostTime above.  Defaults to the value of $TimeFmt.%0a        $MailPostsTimeFmt = '%25Y-%25m-%25d %25H:%25M';  # 2004-03-20 17:44%0a%0a:$MailPostsMessage:The body of the message to be sent.  The string "$MailPostsList" is replaced with the list of posts (as formatted by $MailPostsItemFmt above).%0a%0a:$MailPostsSubject:The subject line of the mail to be sent.%0a%0a:$MailPostsHeaders:String of extra mail headers to be passed to the mail() function.%0a%0a:$MailPosts
 Function:Name of the function to be called to send the mail.  Defaults to using PHP's built-in @@[[http://www.php.net/mail | mail()]]@@ function, but some systems may not be configured correctly.  Can be set to [='MailPostsSendmail'=] to explicitly call ''/usr/lib/sendmail''.%0a        # call /usr/lib/sendmail directly instead of using mail()%0a        $MailPostsFunction = [='MailPostsSendmail'=];%0a%0a:$MailPostsFile:The scratch file where MailPosts keeps track of recent posting information.  Defaults to @@[="$WikiDir/.mailposts"=]@@.  Note that this file must generally be writable by the webserver process.%0a%0aDiscussion that was here has been moved to [[PmWiki:MailPosts-Discussion]].%0a%0a%25trail%25 %3c%3c|[[DocumentationIndex]]|>>
+time=1152585055

Added: trunk/oggdsf/website/wikilib.d/PmWiki.MailingLists
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.MailingLists	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.MailingLists	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.2.0-beta16 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.8) Gecko/20060911 SUSE/1.5.0.8-0.2 Firefox/1.5.0.8
+author=
+csum=
+host=76.183.97.54
+name=PmWiki.MailingLists
+rev=52
+targets=PmWiki.PmWiki,PmWiki.DocumentationIndex
+text=There are several mailing lists available for [[PmWiki]].%0a %0a:[ [[(http://pmichaud.com/lists/)pmwiki-users]] ]: This is a great resource where a very helpful group of people will answer questions and discuss PmWiki development. Traffic is around 20-40 messages a day (on slow days :).\%0a''If you ask a question on the list and it doesn't get answered, don't feel let down. Just'' '''''ask it again'''''. It probably slipped by unnoticed.%0a%0a->Archives are available from:%0a-->http://pmichaud.com/pipermail/pmwiki-users/%0a-->http://news.gmane.org/gmane.comp.web.wiki.pmwiki.user ([[http://search.gmane.org/search.php?group=gmane.comp.web.wiki.pmwiki.user|searchable]])%0a%0a:[ [[(http://pmichaud.com/mailman/listinfo/)pmwiki-devel]] ]: This list was created to lower the traffic on pmwiki-users, it focuses on discussions surrounding code development for PmWiki (both core and recipe development).%0a%0a->Archives are available from:%0a-->http://pmichaud.com/pipermail/pmwiki-d
 evel/%0a-->http://news.gmane.org/gmane.comp.web.wiki.pmwiki.devel ([[http://search.gmane.org/search.php?group=gmane.comp.web.wiki.pmwiki.devel|searchable]])%0a%0a%0a:[ [[(http://pmichaud.com/lists/)pmwiki-announce]] ]: Announcements of new version releases.  The archive is at:%0a-->http://pmichaud.com/pipermail/pmwiki-announce%0a%0a:[ [[(http://pmichaud.com/lists/)pmwiki-users-de]] ]: A mailing list for german-speaking users of PmWiki.  Archived at%0a-->http://pmichaud.com/pipermail/pmwiki-users-de%0a%0aSuggestions:%0a* If you reply to a digest message, please remove the messages irrelevant to your reply before sending it back to the list.  It's also helpful (but less important) to change "Re: pmwiki-users Digest, Vol [...]" to "Re: [the original subject]" because some mail programs determine threads based on the subject.%0a* If you address a reply to a single list member, please take the [pmwiki-users] off the subject line, or it's possible for your message to get lost in t
 he mailing list traffic. Many people filter list traffic to a separate mailbox.%0a%0a!! Changing mail list settings%0a%0aHere are some tips regarding changing the mailing list settings:%0a%0a* Logging in...%0a** First go to [[http://pmichaud.com/mailman/listinfo/pmwiki-users]]%0a   and enter your e-mail address in the field at the bottom of the page,%0a   to the left of the button ''Unsubscribe or edit options''.%0a** Next you need to enter your password. As you've probably forgotten this,%0a   use the button ''Remind'' at the bottom of the page to get a new password.%0a** Finally enter the password you should get momentarily via e-mail.%0a%0a* You can directly go to the options web page through a URI such as the%0a  following:%0a-> [@http://host.pmichaud.com/mailman/options/pmwiki-users/%3cuser>%2540%3cdomain>@]%0a-> where [@%3cuser>@] is everything before the [@@@] in an e-mail address,%0a   and [@%3cdomain>@] is everything after (%0a   For those who wonder, the [@%2540@] 
 in the URI just stands for '[@@@]'.%0a%0a* You can also obtain various help by sending an email to%0a  mailto:pmwiki-users-request at pmichaud.com with the text [@help@] in either%0a  the subject or the body.%0a%0a!! Newsgroups (NNTP)%0aYou may be interested, that the lists are also accessible as newsgroups.%0a%0aThe NNTP server is:%0a* news.gmane.org%0a%0aThe groups are:%0a* gmane.comp.web.wiki.pmwiki.user%0a* gmane.comp.web.wiki.pmwiki.announce%0a* gmane.comp.web.wiki.pmwiki.user.de%0a%0asee also http://gmane.org%0a%0a%25trail%25 %3c%3c|[[DocumentationIndex]]|>>%0a
+time=1166049417

Added: trunk/oggdsf/website/wikilib.d/PmWiki.MarkupExpressions
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.MarkupExpressions	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.MarkupExpressions	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta52 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=
+ctime=1176718061
+host=76.183.97.54
+name=PmWiki.MarkupExpressions
+rev=11
+targets=PmWiki.DocumentationIndex
+text=(:Summary:Markup expressions:)%0a%25audience%25 authors (advanced)%0a%0aThe [@{(...)}@] "expression markup" allows for a variety of string and formatting operations to be performed from within markup.  Operations defined by this recipe include ''substr'', ''ftime'', ''strlen'', ''rand'', ''toupper'', ''tolower'', ''ucfirst'', ''ucwords'', ''pagename'', and ''asspaced''.%0a%0a-> %25note%25 Markup Expressions were introduced in PmWiki 2.2.0-beta43.  %0a%0a!! ''substr''%0a%0aThe "substr" expression extracts portions of a string.  The first argument is the string to be processed, the second argument is the initial position of the substring, and the third argument is the number of characters to extract.  Note that the initial position argument is zero-based (i.e., the first character is referenced via a "0").%0a%0a(:markup class="horiz":)%0a {(substr "PmWiki" 2 3)}%0a {(substr "PmWiki" 2)}%0a {(substr "PmWiki" 0 1)}%0a(:markupend:)%0a%0a!! ''ftime''%0a%0a"Ftime" expressions 
 are used for date and time formatting.  The generic form is%0a%0a->[@{(ftime "fmt" "when")}@]%0a->[@{(ftime fmt="fmt" when="when")}@]%0a%0awhere ''fmt'' is a formatting string and ''when'' is the time to be formatted.  The arguments can be in either order and may use the optional "fmt=" and "when=" labels.%0a%0aExamples:%0a(:markup class="horiz":)%0a {(ftime fmt="%25F %25H:%25M")}%0a {(ftime %25Y)}%0a {(ftime fmt=%25F)}%0a {(ftime yesterday)}%0a {(ftime when=tomorrow)}%0a {(ftime %25F yesterday)}%0a {(ftime week %25F)}%0a {(ftime fmt=%25F month)}%0a(:markupend:)%0a%0aThe ''fmt'' parameter is whatever is given by "fmt=", the first parameter containing a '%25', or else the site's default.  The formatting codes are described at %25newwin%25 http://www.php.net/strftime.  Some common formatting strings:%0a%0a    [= %25F            =]    # ISO-8601 dates      "{(ftime %25F)}"%0a    [= %25H:%25M:%25S      =]    # time as hh:mm:ss    "{(ftime %25H:%25M:%25S)}"%0a    [= %25m/%25d/%25
 Y      =]    # date as mm/dd/yyyy  "{(ftime %25m/%25d/%25Y)}"%0a    [= "%25A, %25B %25d, %25Y" =]  # in words            "{(ftime "%25A, %25B %25d, %25Y")}"%0a%0aThe ''when'' parameter understands many different date formats.  The when parameter is whatever is given by "when=", or whatever parameter remains after determining the format parameter.  Some examples:%0a%0a    2007-04-11            # ISO-8601 dates%0a    20070411              # dates without hyphens, slashes, or dots%0a    2007-03               # months%0a    @1176304315           # Unix timestamps (seconds since 1-Jan-1970 00:00 UTC)%0a    now                   # the current time%0a    today                 # today @ 00:00:00%0a    yesterday             # yesterday @ 00:00:00%0a    "next Monday"         # relative dates%0a    "last Thursday"       # relative dates%0a    "-3 days"             # three days ago%0a    "+2 weeks"            # two weeks from now%0a    "2007-04-11 -4 days"  # four days before April 11%0
 a%0aThe ''when'' parameter uses PHP's %25newwin%25[[(http://www.php.net/)strtotime]] function to convert date strings according to the GNU [[http://gnu.org/software/tar/manual/html_node/tar_109.html|date input formats]]; as of this writing it only understands English phrases in date specifications.%0a%0aThe variable $FTimeFmt can be used to override the default date format used by the "ftime" function.  The default $FTimeFmt is $TimeFmt.%0a%0a!! ''strlen''%0a%0aThe "strlen" expression returns the length of a string.  The first argument is the string to be measured.%0a%0a(:markup class="horiz":)%0a {(strlen "{$:Summary}")}%0a(:markupend:)%0a%0a!! ''rand''%0a%0aThe "rand" expression returns a random integer.  The first argument is the minimum number to be returned and the second argument is the maximum number to be returned.  If called without the optional min, max arguments rand() returns a pseudo-random integer between 0 and RAND_MAX. If you want a random number between 5 an
 d 15 (inclusive), for example, use rand (5, 15).%0a%0a(:markup class="horiz":)%0a {(rand)}%0a(:markupend:)%0a%0a!! ''toupper'' / ''tolower''%0a%0aThe "toupper" and "tolower" expressions convert a string into uppercase or lowercase.  The first argument is the string to be processed.%0a%0a(:markup class="horiz":)%0a {(toupper "{$:Summary}")}%0a {(tolower "{$:Summary}")}%0a(:markupend:)%0a%0a!! ''ucfirst''%0a%0aThe "ucfirst" expression converts the first character of a string to uppercase.  The first argument is the string to be processed.%0a%0a(:markup class="horiz":)%0a {(ucfirst "{$:Summary}")}%0a(:markupend:)%0a%0a!! ''ucwords''%0a%0aThe "ucwords" expression converts the first character of each word in a string to uppercase.  The first argument is the string to be processed.%0a%0a(:markup class="horiz":)%0a {(ucwords "{$:Summary}")}%0a(:markupend:)%0a%0a!! ''pagename''%0a%0aThe "pagename" expression builds a pagename from a string.  The first argument is the string to be pr
 ocessed.%0a%0a!! ''asspaced''%0a%0aThe "asspaced" expression formats wikiwords.  The first argument is the string to be processed.%0a%0a!! Nesting expressions%0a%0aMarkup expressions can be nested:%0a%0a(:markup class="horiz":)%0a {(tolower (substr "Hello World" 2))}%0a(:markupend:)%0a    %0a!! Notes%0a%0a* Some of the string-processing markups may not work properly on UTF-8 characters or escaped sequences.%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>%0a%0a
+time=1180212993

Added: trunk/oggdsf/website/wikilib.d/PmWiki.MarkupMasterIndex
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.MarkupMasterIndex	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.MarkupMasterIndex	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta16 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.8) Gecko/20060911 SUSE/1.5.0.8-0.2 Firefox/1.5.0.8
+author=
+csum=
+host=76.183.97.54
+name=PmWiki.MarkupMasterIndex
+rev=171
+targets=PmWiki.Links,PmWiki.WikiWord,PmWiki.WikiGroup,PmWiki.Categories,PmWiki.InterMap,PmWiki.Uploads,PmWiki.Images,PmWiki.TextFormattingRules,PmWiki.WikiStyles,PmWiki.PageDirectives,PmWiki.Tables,PmWiki.TableDirectives,PmWiki.GroupHeaders,PmWiki.CommentMarkup,PmWiki.IncludeOtherPages,PmWiki.ConditionalMarkup,PmWiki.PageLists,PmWiki.WikiTrails,PmWiki.PageVariables,PmWiki.DocumentationIndex
+text=(:title Markup Master Index:)%0a%0aEverything you wanted to know about wiki markup but were afraid to ask.%0a%0a'''Table of contents'''%0a*[[#LinkMarkups|Links]]%0a**[[#ExternalLinks|To external urls]]%0a**[[#InternalLinks|To internal pages and more]]%0a*[[#Images|Images]]%0a**[[#ImagesAsImages|as images]]%0a**[[#ImagesAsLinks|as links]]%0a*[[#StartOfLine|Start-of-line markup]]%0a**[[#Lists|Lists]]%0a**[[#BlockMarkups|Paragraph blocks]]%0a**[[#DivisionBlocks|Division blocks]]%0a*[[#Text|Text]]%0a**[[#InlineMarkups|Character markup]]%0a**[[#PostingMarkups|Posting markup]]%0a*[[#Tables|Tables]]%0a**[[#Tables|Plain tables]]%0a**[[#TablesAndDivs|Structured tables]]%0a* [[#Directives|Directives]]%0a**[[#PageDirectives|Page directives]]%0a**[[#IncludeOtherPages|Include other pages]]%0a**[[#ConditionalMarkup|Conditional markup]]%0a**[[#PageLists|Page lists]]%0a**[[#OtherDirectives|Other directives]]%0a* [[#Forms|Forms]]%0a**[[#Forms|Forms]]%0a**[[#EditForms|Edit Forms]]%0a*[[#
 WikiTrails|WikiTrails]]%0a*[[#PageVariables|Page variables]]%0a%0a%0a!! [[#LinkMarkups]] Links%0a%0aSee [[Links]]%0a!!![[#ExternalLinks]]External links%0a:[@http://example.com@]:%0a:[@[[http://example.com]]@]:%0a:[@[[http://example.com | link text]]@]:%0a:[@[[link text -> http://example.com]]@]:%0a%0a%0a[[#InternalLinks]]%0a!!! Page links%0a:[@[[PageName]]@]:%0a:[@[[page name]]@]:%0a:[@[[page (name)]]@]:%0a:[@[[PageName | link text]]@]:%0a:[@[[PageName | + ]]@] ''(titled link)'':%0a:[@[[PageName | # ]]@] ''(anonymous numerical reference link)'':%0a:[@[[link text -> PageName]]@]:%0a:[@[[#anchor]]@]:%0a:[@[[#anchor | link text]]@]:%0a:[@[[PageName#anchor | link text]]@]:%0a%0a%0a!!! Wiki page links%0aSee [[WikiWord]] and [[WikiGroup]]%0a:[@WikiWord@]:%0a:[@`NonWikiWord@]:%0a:[@Group/PageName@]:%0a:[@Group.PageName@]:%0a:[@[[GroupName/]]@]:%0a:[@[[GroupName.]]@]:%0a%0a!!! Special group links%0aSee [[Links]] and [[Categories]] %0a:[@[[~Author Name]]@]:%0a:[@[[!Category Name]]@]:
 %0a%0a!!! Intermap links%0aSee [[InterMap]]%0a:[@[[Path:/path/local_document.html]]@]:%0a:[@[[Wikipedia:WikiWikiWeb]]@]:%0a%0a%0a!!! Upload links%0aSee [[Uploads]]%0a:[@[[Attach:file with spaces.doc]]@]:%0a:[@[[Attach:Groupname/file with spaces.doc]]@]:%0a%0a%0a!! [[#Images]] Images%0a%0aSee [[Images]] and [[Uploads]]%0a!!! [[#ImagesAsImages]] Images as Images%0a:[@http://example.com/image.gif@]:%0a:[@http://example.com/image.gif"alt text"@]:%0a:[@Attach:image.gif"My image"@]:%0a:[@Attach:Groupname/image.gif"image in another group"@]:%0a:[@%25lfloat%25 Attach:image.gif@]:%0a:[@%25rfloat%25 Attach:image.gif@]:%0a:[@%25center%25 Attach:image.gif@]:%0a:[@%25rframe%25 Attach:image.gif | Caption@]:%0a:[@%25lframe%25 Attach:image.gif | Caption@]:%0a:[@%25width=200px%25 Attach:image.gif@]:%0a:[@%25thumb%25 Attach:image.gif@]:%0a%0a%0a!!! [[#ImagesAsLinks]] Images as links%0a%0a:[@[[Attach:image.gif]]@]:%0a:[@[[(Attach:)image.gif]]@]:%0a:[@[[PageName | Attach:image.gif"alt text"]]@]
 :%0a:[@[[http://example.com/ | Attach:image.gif"alt text"]]@]:%0a:[@%25rframe thumb%25 [[Attach:image.gif | Attach:image.gif"alt text"]] | Caption @]:%0a%0a%0a!! [[#StartOfLine]] Start-of-line markup%0a%0aSee [[Text Formatting Rules]]%0a%0a!!! [[#Lists]] Lists%0a%0aSee [[WikiStyles]] and [[Cookbook:OutlineLists]]%0a:[@* unordered list@]:%0a:[@** deeper list@]:%0a:[@# ordered list@]:%0a:[@# %25item value=#%25 arbitrary start number@]:%0a:[@# %25decimal%25, %25roman%25, %25ROMAN%25, %25alpha%25, %25ALPHA%25 @]%0a:[@:term:definition@]:%0a%0a%0a!!! Headings%0a%0a:[@!! Heading@]:%0a:[@!!! Deeper heading@]:%0a%0a%0a!!! [[#BlockMarkups]] Paragraph blocks%0a%0a:[@-> indented text@]:%0a:[@-%3c hanging indent@]:%0a:[@%3cspace> preformatted text@]:%0a:@@[=[@...@]=] preformatted block@@:%0a:[@---- (horizontal rule)@]:%0a:[@blank line is vertical space@]:%0a:[@\ at end of line joins next line@]:%0a:[@\\ at end of line produces a line break@]:%0a:[@\\\ at the end of a line produces a blan
 k line, even within a list item@]:%0a:[@[[%3c%3c]]@] produces a line break that clears floating content:%0a%0a%0a!!! [[#DivisionBlocks]] Division blocks%0a%0aSee [[WikiStyles]] and [[PageDirectives]]%0a:[@>>wikistyle%3c%3c@]:%0a:[@(:div attr:)@]:%0a:[@(:divend:), >>%3c%3c@]:%0a%0a%0a!! [[#Text]] Text markup%0a%0aSee [[Text Formatting Rules]]%0a!!! [[#InlineMarkups]] Character format%0a%0a:[@''emphasized'' (italic)@]:%0a:[@'''strong''' (bold)@]:%0a:[@'''''strong emphasis'''''@]:%0a:[@@@monospaced@@@]:%0a:[@[-small-], [--smaller--]@]:%0a:[@[+big+], [++bigger++]@]:%0a:[@'-small-', '+big+'@]:%0a:[@'^superscript^', '_subscript_'@]:%0a:[@{+inserted+} (underscore)@]:%0a:[@{-deleted-} (strikethrough)@]:%0a:@@[=[@escaped code@]=]@@:%0a:[@[=escaped text=]@]:%0a%0a%0a!!! [[#PostingMarkups]] Posting markup%0a%0a:@@~~@@@@~@@ (author's signature):%0a:@@~~@@@@~~@@ (author's signature and date):%0a:@@[=(:encrypt=] ''phrase''[=:)=]@@ -- replaced with encrypted form of ''phrase'':%0a%0a%0a!! 
 [[#Tables]] Tables%0a%0a!!!  Plain rows and columns of text%0a%0aSee [[Tables]]%0a:[@||table attributes@]:%0a:[@||!table caption!||@]:%0a:[@||left aligned  || centered ||  right aligned||@]:%0a:[@||!column heading||@]:%0a:[@||spanned columns ||||||@]:%0a%0a!!! [[#TablesAndDivs]]  Structured tables%0a%0aSee [[Table directives ]]%0a:[@(:table attr:)@]:%0a:[@(:cellnr attr:)@]:%0a:[@(:cell attr:)@]:%0a:[@(:tableend:)@]:%0a%0a!! [[#Directives]] Directives%0a%0a!!! [[#PageDirectives]] Page directives%0a%0aSee [[PageDirectives]]%0a:[@(:redirect PageName:)@]:%0a%0a:[@(:(no)spacewikiwords:)@]:%0a:[@(:(no)linkwikiwords:)@]:%0a:[@(:(no)linebreaks:)@]:%0a:[@(:nl:)@]:%0a%0a!!! Display%0a%0aSee [[Page Directives]] [[Group Headers]]%0a:[@(:noheader:), (:nofooter:)@]:%0a:[@(:notitle:)@]:%0a:[@(:noleft:), (:noright:)@]:%0a:[@(:nogroupheader:), (:nogroupfooter:)@]:%0a:[@(:noaction:)@]:%0a%0a!!! Metadata%0a%0aSee [[Page Directives]] [[CommentMarkup]] %0a:[@(:title text:)@]:%0a:[@(:keywords wor
 d, ...:)@]:%0a:[@(:description text:)@]:%0a:[@(:comment text:)@]:%0a%0a%0a!!! [[#IncludeOtherPages]] Include%0a%0aSee [[Include Other Pages]]%0a:[@(:include PageName:)@]:%0a:[@(:include PageName #start#end lines=n paras=n:)@]:%0a:[@(:include Page1 Page2 Page3:)@]:%0a%0a%0a!!! [[#ConditionalMarkup]] Conditional markup%0a%0aSee [[Conditional markup]]\\%0a:[@(:if (!)@]''cond param''[@:)...(:ifend:):@]%0a%0a%0a!!! [[#PageLists]] Pagelists%0a%0aSee [[PageLists]]%0a:[@(:searchbox group=Group size=size label=label target=Group.Page fmt=def list=ghi order=jkl:)@]:%0a:[@(:searchresults incl -excl group=abc fmt=def list=ghi order=jkl:)@]:%0a:[@(:pagelist incl -excl group=abc fmt=def list=ghi order=jkl:)@]:%0a%0a%0a!!! [[#OtherDirectives]] Other directives%0a%0a:[@(:attachlist:)@]:%0a:[@(:markup:)@][@ [=...=]@]:%0a:[@(:markup:)...(:markupend:)@]:%0a:[@(:markup class=horiz:)...(:markupend:)@]:%0a:[@(:markup caption='...':)...(:markupend:)@]:%0a%0a%0a!! [[#Forms]] Forms%0a%0aSee [[Cookbo
 ok:Input]]%0a:[@(:input form method=get action=url enctype=multipart/form-data:)@]:%0a:[@(:input end:)@]:%0a:[@(:input text name=first value="Bob" size=20:)@]:%0a:[@(:input submit name=post value="Go" accesskey=g:)@]:%0a:[@(:input reset:)@]:%0a:[@(:input hidden name=action value=edit:)@]:%0a:[@(:input radio name=xyz value="abc" checked=1:)@]:%0a:[@(:input checkbox name=xyz value="abc" checked=1:)@]:%0a:[@(:input password name=authpw:)@]:%0a:[@(:input file name=upload:)@]:%0a:[@(:input image name=xyz src="http:..." alt="Alt Text":)@]:%0a:[@(:input select name=xyz value="abc" label="Alphabet":)@]:%0a:[@(:input default name=xyz value="abc":)@]:%0a%0a%0a!!! [[#EditForms]] Edit forms%0a%0aSee [[Cookbook:Input#pageeditcontrols]]%0a:[@(:messages:)@]:%0a:[@(:input e_form:)@]:%0a:[@(:e_guibuttons:)@]:%0a:[@(:e_preview:)@]:%0a:[@(:input e_textarea rows=24 cols=60:)@]:%0a:[@(:input e_author value={$Author} size=40:)@]:%0a:[@(:input e_changesummary value="Summary" size=60:)@]:%0a:[@(:in
 put e_savebutton value=$[Save]:)@]:%0a:[@(:input e_saveeditbutton value=$[Save and edit]:)@]:%0a:[@(:input e_previewbutton value=$[Preview]:)@]:%0a:[@(:input e_resetbutton value=$[Reset]:)@]:%0a%0a%0a!! [[#WikiTrails]] Wiki trails%0a%0aSee [[WikiTrails]]%0a:[@%3c%3c|TrailPage|>>@]:%0a:[@%3c|TrailPage|>@]:%0a:[@^|TrailPage|^@]:%0a%0a%0a!! [[#PageVariables]] Page variables%0a%0aSee [[Page Variables]]%0a:[@{@]''[@$variable@]''[@}@]:%0a:[@{@]''[@pagename$variable@]''[@}@]:%0aFor example:%0a:[@{$Group}@]:%0a:[@{$Name}@]:%0a:[@{$LastModifiedBy}@]:%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a
+time=1166049238
+title=Markup Master Index

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Notify
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Notify	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Notify	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta57 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20061023 SUSE/2.0.0.4-1.1 Firefox/2.0.0.4
+author=Pm
+charset=ISO-8859-1
+csum=Site -> SiteAdmin
+ctime=1149115706
+host=76.183.97.54
+name=PmWiki.Notify
+rev=35
+targets=PmWiki.LocalCustomizations,SiteAdmin.NotifyList,PmWiki.PageLists,PmWiki.WikiTrails,PmWiki.Variables,PmWiki.DocumentationIndex
+text=(:Summary:Allows a site administrator to configure PmWiki to send email messages whenever pages are changed on the wiki site:)%0a%25audience%25 administrators (basic)%0a%0aThe ''notify.php'' script allows a site administrator to configure PmWiki to send email messages whenever pages are changed on the wiki site.  Notifications can be configured so that multiple page changes over a short period of time are combined into a single email message (to avoid flooding mailboxes).%0a%0aThis feature is useful for sites and pages that have infrequent updates, as it eliminates the need to frequently check `RecentChanges pages just to see if anything has changed.%0a%0aIn order for notifications to work, the notify.php script must be enabled in the site's [[local customization(s)]].  Usually this is as simple as placing the following in ''local/config.php'':%0a%0a    $EnableNotify = 1;%0a%0aOnce enabled, the notification system gets its configuration from the [[SiteAdmin.NotifyList]]
  page.  The SiteAdmin.NotifyList page contains entries of the form:%0a%0a    notify=alice at example.com%0a%0aThis says that information about page changes should be periodically emailed to ''alice at example.com''.  The SiteAdmin.NotifyList page can contain multiple "notify=" lines to cause notifications to be sent to multiple addresses; the "notify=" lines can be concealed by placing them inside of an [@(:if false:)@] conditional section on the page.%0a%0aNOTE: Do not put any spaces around the equal sign! Notifications will fail silently if you have%0a    notify = fred at example.com%0arather than%0a    notify=fred at example.com%0a(:comment this is a really easy mistake to make because all of the other assignments have spaces around the equal sign.:)%0a%0aA number of options exist for limiting the pages that result in a notification.  The [@group=@] and [@name=@] parameters can be used to restrict notifications to specific pages or groups:%0a%0a    # send notifications about the Main
  group to alice at example.com%0a    notify=alice at example.com group=Main%0a%0a    # notify bob at example.com of any changes to the home page%0a    notify=bob at example.com name=Main.HomePage%0a%0a    # notify charles at example.com of changes to pages except in Main%0a    notify=charles at example.com group=-Main%0a%0a(Note: It looks like these are using [[PmWiki/PageLists | the usual PageList syntax]].  [[PmWiki:PagelistsExplained | More info on PageList syntax here]]. -- XES)%0a%0aFor maintaining arbitrary lists of pages, i.e., "watchlists", it's generally easier to build a [[trail -> WikiTrails]] of pages to be watched.  The following entry in SiteAdmin.NotifyList will send alice at example.com an email containing changes to any of the pages listed in the Profiles.Alice trail:%0a%0a    # notify Alice of changes to pages listed in Profiles.Alice%0a    notify=alice at example.com trail=Profiles.Alice%0a%0aNote that once this entry has been added to SiteAdmin.NotifyList, Alice can easily chang
 e her watchlist by editing the Profiles.Alice page, and doesn't need to edit the SiteAdmin.NotifyList page.  In particular, this means that an administrator can restrict editing of SiteAdmin.NotifyList, yet allow individuals to maintain custom watchlists in other pages. %0a%0aLimitations of this feature:%0a* only manually-added links on a trail will be acknowleged by the Notify List (no "group=" or other pagelist syntax, nor any "Group.RecentChanges" links, will generate notifications)%0a* using an [@(:include:)@] directive on the page SiteAdmin.NotifyList is not an operational work-around.%0a%0aThis is probably a good place to point out that edit access to SiteAdmin.NotifyList should be controlled, otherwise malicious persons can use the notification capability to flood others' electronic mailboxes.  By default, SiteAdmin.Notify is blocked against reading or edits except by the admin (as is the case for most pages in the SiteAdmin group).%0a%0a!! Adding notification entries
  via local customizations%0a%0aNotification entries can also be added via the $NotifyList array in ''local/config.php''.  Simply add a line like the following:%0a    $EnableNotify = 1;%0a    $NotifyList[] = 'notify=alice at example.com group=Main';%0a    $NotifyList[] = 'notify=bob at example.com name=Main.HomePage';%0a%0a!! Controlling notification frequency%0a%0aTo prevent flooding of recipients' mailboxes, the notify script uses a "squelch" value as the minimum amount of time that must elapse between messages sent to any given email address.  The ''default squelch setting is 10800 (three hours)'', which means that once a recipient address is sent a notification message, it will not receive another for at least three hours.  Any edits that occur during the squelch interval are queued for the next notification message.%0a%0aThe site administrator can change the default squelch interval via the $NotifySquelch parameter %0a%0a    # enable notifications%0a    $EnableNotify = 1;%0a  
   $NotifySquelch = 86400;    # wait at least one day between notifications%0a%0aIn addition, individual addresses can specify a custom squelch parameter in the SiteAdmin.NotifyList page:%0a%0a    # Alice receives at most one email per day%0a    notify=alice at example.com squelch=86400%0a%0a    # Bob can get notifications hourly%0a    notify=bob at example.com trail=Profiles.Bob squelch=3600%0a%0a    # Charles uses the site default squelch%0a    notify=charles at example.com %0a%0aBecause a page will often receive several edits in rapid succession (e.g., a long post followed by several minor edits), a site administrator can also set a $NotifyDelay value that specifies how long to wait after an initial post before sending notifications:%0a%0a    # enable notifications%0a    $EnableNotify = 1;%0a    $NotifySquelch = 86400;    # wait at least one day between notifications%0a    $NotifyDelay = 300;        # wait five minutes after initial post%0a%0aNote that the squelch and delay values 
 are minimums; notifications are sent on the first execution of PmWiki after the delay period has expired.  For inactive sites, this could be much longer than the specified delay periods.  This isn't really considered an issue since timely notifications are less important on relatively inactive sites. However, changes within the squelch time after the last notification will remain unnoticed if the wiki is not even visited for a long period after. If this matters it might be necessary to make the server call pmwiki.php regularly (e.g. [[http://en.wikipedia.org/wiki/Cron | cron job]]).%0a%0aCustom delay parameters cannot be specified for individual addresses in the SiteAdmin.NotifyList page.%0a%0a!!Note for Windows installations%0a%0aSites running PHP under Windows may not have PHP's [[http://www.php.net/mail | mail]] function configured correctly.  Such sites may need to add a line like%0a%0a    ini_set('SMTP','smtp.server.com');%0a%0ato ''config.php'', where ''smtp.server.com
 '' is the name of your host's preferred outgoing mail server. You may also need to set the sendmail_from value if that is not configured:%0a%0a    ini_set('sendmail_from','noreply at foo.com');%0a%0a%0a!![[#variables]] Notify Variables%0a%0a%3c%3c|[[Variables]]|>>%0a%0a:$EnableNotify:Tells ''stdconfig.php'' to enable the notify script.%0a        $EnableNotify = 1;          # enable notify%0a        $EnableNotify = 0;          # disable notify%0a%0a:$NotifyFrom:Return email address to be used in the sent email.%0a        $NotifyFrom = 'wiki at example.com';%0a        $NotifyFrom = 'Wiki server %3cwiki at example.com>';%0a%0a:$NotifyDelay:The length of time (seconds) to wait before sending mail after the first post.  Defaults to zero - posts are sent as soon as any squelch period has expired.%0a        $NotifyDelay = 300;    # send mail 5+ min after first post%0a%0a:$NotifySquelch:The default minimum time (seconds) that must elapse between sending mail messages.  Useful when $NotifyDel
 ay is set to a small value to keep the number of mail notification messages down.  Defaults to 10800 (three hours).  Individual recipients can override this value in the SiteAdmin.NotifyList page.%0a        $NotifySquelch = 43200;  # wait 12+ hours between mailings%0a%0a:$NotifyItemFmt:The text to be sent for each changed item in the post.  The string "$PostTime" is substituted with the time of the post (controlled by $NotifyTimeFmt below).%0a        # default%0a        $NotifyItemFmt = ' * $FullName . . . $PostTime by $Author';%0a%0a        # include the page's URL in the message%0a        $NotifyItemFmt =%0a          " * \$FullName . . . \$PostTime by \$Author\n     \$PageUrl";%0a%0a        # include the change summary and link to the page's history in the message%0a        $NotifyItemFmt = %0a          " * {\$FullName} . . . \$PostTime by {\$Author}%0a          \n    Summary: {\$LastModifiedSummary}\n    {\$PageUrl}?action=diff";%0a%0a%0a:$NotifyTimeFmt:The format for dat
 es/times in $PostTime above.  Defaults to the value of $TimeFmt.%0a        $NotifyTimeFmt = '%25Y-%25m-%25d %25H:%25M';  # 2004-03-20 17:44%0a%0a:$NotifyBodyFmt:The body of the message to be sent.  The string "$NotifyItems" is replaced with the list of posts (as formatted by $NotifyItemFmt above). Use single quotation marks ' to prevent substring "$NotifyItems" from being untimely evaluated as variable in config.php. %0a        $NotifyBodyFmt = "Changed items:\n\n" . '$NotifyItems' . "\n\n Best regards...";%0a%0a:$NotifySubjectFmt:The subject line of the mail to be sent.%0a%0a:$NotifyHeaders:String of extra mail headers to be passed to the mail() function.%0a%0a:$NotifyParameters:String of additional parameters to be passed to PHP's mail() function [[http://www.php.net/mail|#]].%0a%0a:$NotifyFile:The scratch file where Notify keeps track of recent posting information.  Defaults to @@[="$WikiDir/.notifylist"=]@@.  Note that this file must generally be writable by the webserve
 r process.%0a%0a:$NotifyListPageFmt:The name of the page containing [@notify=@] lines for use by ''notify.php''.  Defaults to [@$SiteAdminGroup.NotifyList@].%0a%0a:$NotifyList:An array of [@notify=@] specifications that can be specified from a local customization file (used in addition to entries in SiteAdmin.NotifyList).%0a        # send notifications to alice at example.com%0a        $NotifyList[] = 'notify=alice at example.com';%0a%0a%25trail%25 %3c%3c|[[DocumentationIndex]]|>>%0a%0a
+time=1184708244

Added: trunk/oggdsf/website/wikilib.d/PmWiki.OtherVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.OtherVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.OtherVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8) Gecko/20051111 Firefox/1.5
+author=
+csum=separate [[Debug Variables]] and [[Security Variables]]
+host=212.186.80.57
+name=PmWiki.OtherVariables
+rev=56
+targets=PmWiki.Variables,PmWiki.FmtPageName,PmWiki.PageVariables
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0a:$FmtV: %0a: :This variable is an array that is used for string substitutions at the end of a call to @@[[FmtPageName]]()@@. For each element in the array, the "key" (interpreted as a string) will be replaced by the corresponding "value".  The variable is intended to be a place to store substitution variables that have frequently changing values (thus avoiding a rebuild of the variable cache).  Also see $FmtP.%0a%0a:$FmtP:%0a: :This variable is an array that is used for pattern substitutions near the beginning of a call to [@FmtPageName@]. For each element in the array, the "key" (interpreted as a pattern) will be replaced by the corresponding value evaluated for the name of the current page. This is for instance used to handle $-substitutions that depend on the pagename passed to [@FmtPageName()@].  Also see $FmtV.%0a%0a:$FmtPV:%0a: :This variable is an array that is used for [[Page Variables]]. New variables can be defined with [@$F
 mtPV['$VarName'] = 'variable definition';@]  which can be used in markup with [@{$VarName}@]. %0a%0a        #example for "source" action%0a        [=$PageAttributes['passwdsource'] = "$['Set new source password']"=]%0a
+time=1156512605

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PageDirectives
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PageDirectives	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PageDirectives	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5
+author=TeganDowling
+csum=clearer lead-in to cases
+host=69.131.28.243
+name=PmWiki.PageDirectives
+rev=36
+targets=PmWiki.GroupHeaders,PmWiki.Skins,PmWiki.IncludeOtherPages,PmWiki.DocumentationIndex,PmWiki.PerGroupCustomizations
+text=PmWiki uses a number of directives to specify page titles, descriptions, page keywords, and control the display of various components.%0a%0a[[#attachlist]]%0a:[@(:attachlist:)@]:%0a->Shows a list of attachments of the current group or page, depending on whether attachments are organised per group or per page. The attachlist is displayed at the foot of the uploads page form.%0a%0a->Options: [@(:attachlist NAME:)@] shows a list of attachments of the group or page NAME. [@(:attachlist ext=xxx:)@] specifies an extension for filtering by type of file. %0a%0a[[#description]]%0a:[@(:description text:)@]:Descriptive text associated with the page.  (Generates a [@%3cmeta name='description' content='...' />@] element in the page output.)%0a%0a[[#keywords]]%0a:[@(:keywords word1, word2, ...:)@]:Identifies keywords associated with the page.  These are not displayed anywhere, but are useful to help search engines locate the page.  (Essentially, this generates a [@%3cmeta name='keywo
 rds' content='...' />@] element in the output.)%0a%0a[[#linebreaks]]%0a:[@(:linebreaks:)@], [@(:nolinebreaks:)@]: Honors any newlines in the markup; i.e., text entered on separate lines in the markup will appear as separate lines in the output.  Use [@(:nolinebreaks:)@] to cause text lines to automatically join again.%0a%0a[[#linkwikiwords]]%0a:[@(:linkwikiwords:), (:nolinkwikiwords:)@]: Enables/disables WikiWord links in text.%0a%0a[[#markup]]%0a:[@(:markup:) ... (:markupend:)@]: Can be used for markup examples, showing first the markup and then the result of the markup.  %0a->Options: [@(:markupend:)@] is not required when using [@(:markup:)@] [@[=...=]@].%0a->Arguments: [@(:markup class=horiz:)@] and [@(:markup caption='...':)@]%0a%0a[[#nogroupheader]]%0a:[@(:nogroupheader:)@]:%0a:[@(:nogroupfooter:)@]: Turns off any groupheader or groupfooter for the page.  (See [[GroupHeaders]].)%0a%0a[[#noheader]]%0a:[@(:noheader:), (:nofooter:)@]: %0a:[@(:noleft:), (:noright:), (:noti
 tle:)@]: If supported by the [[skin(s)]], each of these turns off the corresponding portion of the page.%0a%0a[[#redirect]]%0a:[@(:redirect PageName:)@]:%0a:[@(:redirect PageName status=301 from=name:)@]:Redirects the browser to another page, along with a redirect message.  For security reasons this only redirects to other pages within the wiki and does not redirect to external urls.  The [@status=@] option can be used to return a different HTTP status code as part of the redirect.  The [@from=@] option limits redirects to occuring only on pages matching the wildcarded ''name'' (helpful when [@(:redirect:)@] is in [[include other pages|another page]]).%0a%0a[[#spacewikiwords]]%0a:[@(:spacewikiwords:), (:nospacewikiwords:)@]:%0a->Enables/disables automatic spacing of WikiWords in text.%0a%0a[[#title]]%0a:[@(:title text:)@]: Sets a page's title to be something other than the page's name.  The title text can contain apostrophes and other special characters.  If there are multip
 le titles in a page, the last one encountered wins.%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0aQ: Can I get [@(:redirect:)@] to return a "moved permanently" (HTTP 301) status code?%0aA: Use [@(:redirect PageName status=301:)@].%0a%0aQ: Is there any way to prevent the "redirected from" message from showing at the top of the target page when I use [@(:redirect:)@]?%0aA: If you want to suppress the message...%0a* in all cases, add add [@$PageRedirectFmt = '';@] in your local/config.php%0a* based on the destination/target of the redirect, add [@$PageRedirectFmt = '';@] to a local/group.page.php or local/group.php file (see [[PmWiki.PerGroupCustomizations]]).%0a* based on the origin/source of the redirect, add the following to your local/config.php%0a[@%0a   if (@$_GET['from']) {%0a     $group = PageVar($_GET['from'], '$Group');%0a     if ($group == 'SomeGroup') $PageRedirectFmt = '';%0a   }%0a@]%0a->Example application: Replace 'SomeGroup' with
  'Profiles'
+time=1154107670

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PageFileFormat
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PageFileFormat	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PageFileFormat	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.19 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=Updated description (thanks!)
+host=24.1.26.255
+name=PmWiki.PageFileFormat
+rev=33
+targets=PmWiki.DocumentationIndex
+text=You may have many documents that you would like to use a local program to format in a format PmWiki can display.%0a%0aYou could open each document and copy/paste the content to new pmwiki pages or you could format the document in advance and upload it using a FTP client.%0a%0aOnly two lines are necessary in a PmWiki page file:%0a%0a->[@%0aversion=pmwiki-2.1.0 urlencoded=1%0atext=Markup text%0a@]%0a%0aThe first line tells PmWiki that the values are urlencoded.  The actual value of the "version=" parameter doesn't matter, as long as "urlencoded=1" appears somewhere in the line.  The markup text needs to have newlines converted to "%250a" and percent signs converted to "%2525".%0a%0aKeys you could see in a raw PmWiki file:%0a%0a:'''version''': Version of PmWiki used to create the file %25comment%25 More??? (ordered, urlencoded)%25%25%0a:'''agent''': Author's browser when saving the page%0a:'''author''': Last author to save page%0a:'''csum''': Change summary%0a:'''ctime''':
  Page creation time%0a:'''host''': Host created this page%0a:'''name''': Name of the page (e.g., [@Main.WikiSandbox@])%0a:'''rev''': Number of times the page has been edited%0a:'''targets''': Targets for links in the page%0a:'''text''': The page's wiki markup%0a:'''time''': Time the page was last saved (seconds since 1 Jan 1970 00:00 UTC)%0a:'''title''': Page title set via [@(:title The Page Title:)@].%0a:'''newline''': Character used for newlines (deprecated)%0a:'''passwdedit''': encrypted version of the password%0a%0aBelow these you will see information used to keep track of the page's revision history.%0a%0a!![[#creating]] Creating a Page for Distribution%0a%0aA simple way to create a wikipage file to use for distribution (for example with a recipe or a skin) is to create the page with PmWiki and then use a text editor to delete all lines but ''version'', ''text'', and ''ctime''.  Example:%0a%0a->[@%0aversion=pmwiki-2.1.0 ordered=1 urlencoded=1%0atext=This is a line.%250a
 This is another.%0actime=1142030000%0a@]%0a%0a!! Keeping track of page history%0a%0aInside of a page file, PmWiki stores the latest version of the markup text, and uses this to render the page.  The page history is kept as a sequence of differences between the latest version of the page and each previous version.%0a%0aPmWiki normally puts the page history at the end of each page file in reverse chronological sequence, and sets the "ordered=1" items in the header.  If an operation needs only the most recent version of a page, then PmWiki will stop reading and processing a page file at the point where the history begins, potentially saving a lot of time and memory.  If the "ordered=1" flag isn't present, PmWiki makes no assumptions about the ordering of items in the pagefile and processes the entire file.%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>
+time=1157428308

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PageHistory
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PageHistory	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PageHistory	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
+author=TeganDowling
+csum=not quite the same
+host=69.212.65.250
+name=PmWiki.PageHistory
+rev=19
+targets=PmWiki.WikiAdministrator,PmWiki.DocumentationIndex,PmWiki.PageFileFormat
+text=%25audience%25 authors (basic) %0aWhen PmWiki is called with '?action=diff', it displays a summary of past edits on a page. Each past edit is shown in a box which shows lines added, changed or deleted during that edit in a before & after format.%0a%0aBelow each box is a "Restore" link. Clicking the link will open an edit box with the page as it was ''before'' that edit.  You can make changes or simply click Save to restore the text.%0a%0aThere are two additional options specific to Page''''History:%0a* '''Hide minor edits''' - hides any edit that the author marked as 'minor'.%0a* '''Show changes to markup'''- shows changes to the markup (as opposed to the normal display which shows changes to the output).%0a%0aA page's history is kept for the number of days given by the $DiffKeepDays variable (set by the site's [[wiki administrator]]).  When a page is edited, any page history information older than this value is automatically discarded.%0a%0aNote that a specific page re
 vision isn't removed from the page until the first edit ''after'' the time specified by $DiffKeepDays has elapsed. Thus, it's still possible for some pages to have revisions older than $DiffKeepDays -- such revisions will be removed the next time those pages are edited.%0a%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>%0a%0a%25audience%25 administrators (basic)%0a>>faq%3c%3c [[#faq]]%0a%0aQ: [[#removepagehistory]] Is there a way to remove page history from page files?%0aA: 1. Administrators can clean page histories using the Cookbook:ExpireDiff recipe. %0a%0aA: 2. Administrators with FTP file access can download individual pages from the wiki.d directory, open them in a text editor, manually remove history, and re-upload the files to wiki.d/ directory. Care must be exercised, when manually editing a page file, to preserve the minimum required elements of the page and avoid corrupting its contents. See [[PmWiki/PageFileFormat#creating]].%0a%0aA: 3. Edit the page. Select '
 'all'' the contents of the edit text area and cut them to the clipboard. Enter @@delete@@ into the text area and  click on the ''save and edit'' button. Select ''all'' the contents of the edit text area and paste the contents of the clipboard over them. Click on the ''save'' button. This will remove all of the page's history up to the final save in which the pasted material is re-added.%0a%0aQ: [[#restrictpagehistory]] How can I restrict viewing the page history to people with edit permission?%0aA: In the ''local/config.php'' file, set%0a%0a->[@$HandleAuth['diff'] = 'edit'@];%0a
+time=1150661252

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PageLists
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PageLists	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PageLists	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2
+author=Pico
+csum=
+ctime=1138643894
+host=12.33.45.37
+name=PmWiki.PageLists
+rev=66
+targets=PmWiki.WikiTrails,PmWiki.Categories,Site.PageListTemplates,Site.LocalTemplates,PmWiki.Directives,PmWiki.PagelistVariables,PmWiki.DocumentationIndex
+text=%25audience%25 authors, admins (intermediate)%0aPmWiki comes with two directives for generating lists of pages -- [@(:pagelist:)@] and @@[=(:=]searchresults:)@@.  Both directives are basically the same and each accepts the parameters documented below.  The primary difference between the two is that searchresults generates the "Results of search for ..." and "### pages found out of ### searched" messages around the results.%0a%0aThe [@(:searchbox:)@] directive generates a search form (input text box) to submit search queries.  The markup generally accepts the same parameters as [@(:pagelist:)@], which makes it possible to restrict, order and format searchresults in the same ways that are described below for a [@(:pagelist:)@].  For more information about the [@(:searchbox:)@] directive, and the ways in which it differs from a [@(:pagelist:)@], skip to the section [[#searchbox|below]].%0a%0a!! Basic syntax%0a%0a* [@(:pagelist:)@] without any arguments shows a bulleted lis
 t of all pages, as links, ordered alphabetically and in groups.%0a* [@(:pagelist group=abc fmt=def list=ghi order=jkl argument1 argument2 etc:)@] shows a pagelist according to the  parameters supplied. Parameters are optional.%0a%0a!!Parameters%0aAny argument supplied within [@(:pagelist:)@] that isn't in the form @@'key=value'@@ is treated as text that either must (or must not) exist in the page text.  The minus sign (-) or exclamation mark (!) can be used to indicate the logical ''not''. Thus%0a%0a    [@(:pagelist trail=PmWiki.DocumentationIndex list=normal apple -pie:)@]%0a%0alists all "normal" pages listed in the DocumentationIndex trail that contain the word "apple" but not "pie".%0a%0a!!!group= and name= %0a%0aThe "[@group=@]" and "[@name=@]" parameters limit results to pages in a specific group or with a specific name:%0a%0a    [@# All pages in the Pmwiki group:%0a    (:pagelist group=PmWiki :)%0a    # All pages except those in the PmWiki or Site groups:%0a    (:pagel
 ist group=-PmWiki,-Site :)%0a    # All RecentChanges pages%0a    (:pagelist name=RecentChanges :)%0a    # All pages except RecentChanges%0a    (:pagelist name=-RecentChanges :)@]%0a%0a!!!Wildcards%0aName and group parameters can contain ''wildcard'' characters that display only pages matching a given pattern:%0a* An asterisk (*) represents zero or more characters%0a* A question mark (?) represents exactly one character%0a%0aExamples:%0a%0a    [@# All pages in any group beginning with "PmWiki"%0a    (:pagelist group=PmWiki* :)%0a    # All pages in any group beginning with "PmWiki", except for Chinese%0a    (:pagelist group=PmWiki*,-PmWikiZh :)%0a    # All pages in the PmCal group with names starting with "2005":%0a    (:pagelist name=PmCal.2005* :)@]%0a%0a!!!trail= %0aThe "[@trail=@]" option obtains the list of pages to be displayed from a [[WikiTrail(s)]]:%0a%0a    [@# Display pages in the documentation by modification time%0a    (:pagelist trail=PmWiki.DocumentationIndex or
 der=-time:)%0a    # Display five most recently changed pages%0a    (:pagelist trail=RecentChanges count=5:)@]%0a%0a!!!list= %0a%0aThe "[@list=@]" option allows a search to include or exclude pages according to predefined patterns set by the administrator.  %0a* "[@list=normal@]" is predefined, and which excludes things like AllRecentChanges, RecentChanges, GroupHeader, GroupFooter, GroupAttributes, and the like from being displayed in the list results.  %0a* "[@list=all@]" over-rides a "default" list that may be set by the wiki's administrator to exclude groups such as PmWiki or Site from regular search results.%0a* Wiki administrators can define custom lists via the $SearchPatterns array (see [[Cookbook:SearchResults]]).%0a%0a!!!fmt= %0a%0aThe "[@fmt=@]" option determines how the resulting list should be displayed.  PmWiki predefines several formats:%0a* @@fmt=#bygroup@@ - Display pages within groups (default format)%0a* @@fmt=#simple@@ - Display a simple ordered list of pa
 ges in the form Group.Name%0a* @@fmt=#title@@ - Display a list of pages by page title.  Use "[@order=title@]" to have them sorted by title (default is to order by page name).%0a* @@fmt=#group@@ - Display a list of wikigroups (without listing the pages in the groups)%0a* @@fmt=#include@@ - Display the contents of each page in the list (note, this could take a very long time for long lists!)%0a%0aThese formats are defined in pagelist templates, which can be customized, as shown [[#templates|below]].%0a%0a[[#pagelistlink]]%0a!!!link= %0a%0aThe "[@link=@]" option implements "backlinks" -- i.e., it returns a list of pages with a link to the target.  It's especially useful for [[categor(ies)]]y pages and finding related pages.%0a%0a    [@# all pages with a link to PmWiki.DocumentationIndex%0a    (:pagelist link=PmWiki.DocumentationIndex:)%0a    # all pages with links to the current page%0a    (:pagelist link={$FullName}:)%0a    # all pages in the "Skins" category%0a    (:pagelist 
 link=Category.Skins:)@]%0a%0a!!!count= %0a%0aThe "[@count=@]" option limits the pagelist to a specific number of pages.%0a%0a    [@# A simple bullet list of ten most recently modified pages%0a    (:pagelist trail=Site.AllRecentChanges count=10 fmt=#simple:)@]%0a%0a!!!order=%0a%0aThe "[@order=@]" option allows the pages in the list to be sorted according to different criteria.  Use a minus sign to indicate a reverse sort.  Multiple sorting criteria can be specified using a comma:%0a* [@order=name@] - alphabetically by name (default order)%0a* [@order=title@] - sorted alphabetically by title rather than names%0a* [@order=time@] - most recently changed pages '''last'''%0a* [@order=ctime@] - time of page creation (see note)%0a* [@order=size@] - sort by page size (not file size), smallest pages first.%0a* [@order=group,title@] - sort by title within groups%0a* [@order=random@] - shuffle the pages into random sequence%0a%0a->Note: fmt=trail results in an unordered pagelist, i.e. t
 he trail order is preserved in the pagelist. So PmWiki's alphabetical default order does not apply in this case.%0a%0a->Note: ctime was added to pages only from pmwiki 2.1.beta15 onwards, pages created by earlier versions don't carry a ctime attribute and can't be sorted that way.%0a%0a!! Examples%0a%0aInclude the contents of a random page from the Banners group:%0a%0a    [@(:pagelist group=Banners order=random count=1 fmt=#include list=normal:)@]%0a%0aDisplay a simple list of the last ten recently changed pages:%0a%0a    [@(:pagelist trail=Site.AllRecentChanges count=10 fmt=#simple:)@]%0a%0aDisplay the "top twenty" biggest cookbook pages:%0a%0a    [@(:pagelist group=Cookbook order=-size count=20 :)@]%0a%0a%0a[[#searchbox]]%0a!!The Searchbox Directive%0a%0aThe [@(:searchbox:)@] directive generally accepts the same parameters as [@(:pagelist:)@], with the following differences:%0a*Parameters can be added to the input text of a searchbox (or to the markup, or both)%0a*The targ
 et page for displaying searchbox results can be set with the parameter target=''GroupName.PageName''.  The default is the current page. %0a*An initial search string can be specified in the searchbox markup, but it must be in the form @@value='search string'@@.  That search string is displayed in the input text and can be modified by when the search is run.%0a**Tip:  If more than one searchbox appears on a page, adding a blank initial value like this @@value=''@@, to the markup for each searchbox will prevent a search string for one box from populating all of the other boxes.%0a%0a[[#templates]]%0a!!Customizing Pagelist Templates%0a%0aPmWiki's default templates are in [[Site.PageListTemplates]], which is replaced during upgrades.  These default templates can be supplemented with custom templates stored in other locations.  As of version 2.1.10, PmWiki's default configuration looks for templates in [[Site.PageListTemplates]], [[Site.LocalTemplates]], and the current page.  Adm
 inistrators can change those locations by using  the $FPLTemplatePageFmt variable.  Custom templates are used in the same way as default templates: by referencing the desired format with the [@fmt=@] option.  There are several ways to indicate which template to use:%0a* [@fmt=#custom@] uses the #custom section from [[Site.PageListTemplates]], [[Site.LocalTemplates]], or current page (sections are denoted by [@[[#custom]]@] anchors.%0a* [@fmt=MyTemplatePage#custom@] uses a custom format from page MyTemplatePage from its #custom section.%0a* [@fmt=custom@] uses custom format which is defined in a cookbook script as ''custom''.%0a%0aA pagelist template contains standard pmwiki markup.  When creating pagelist output, pmwiki iterates over each page returned from the pagelist and will include the pagelist template markup once for every page in the list.  During the page list iteration pmwiki sets 3 special page references: =,%3c and >.  These special page references are updated on
  each pagelist iteration and can be used with the PageVariable syntax, such as ''{=$variable}'',  to define a pagelist template which will format the pagelist output.  The meaning of the special references are:%0a%0a   =   current page    so ''{=$Title}'' displays the title of the current page in the iteration%0a   %3c   previous page   so ''{%3c$Group}'' displays the group of the previous page in the iteration%0a   >   next page       so ''{>$Name}''  displays the name of the next page in the iteration%0a%0aThe > and %3c references are most useful to help structure pagelist output before and after the actual pagelist.  Some common tests used to structure pagelist output are:%0a%0a    [@(:if equal {%3c$Group}:)              # Iteration is at the beginning of list%0a    (:if equal {>$Group}:)              # Iteration is at the end of list%0a    (:if ! equal {=$Group} {%3c$Group}:)  # Iteration is at the first item in a group%0a    (:if ! equal {=$Group} {>$Group}:)  # Iterati
 on is at the last item in a group @]%0a%0aThree additional PageVariables are available during pagelist iterations which are not normally available, they are: %0a%0a    [@{$PageCount}       The current page count of this iteration%0a    {$GroupCount}      The current group count of this iteration%0a    {$GroupPageCount}  The current page count within the current group of this iteration @]%0a%0aIt is advisable to not modify the [[Site.PageListTemplates]] file directly so that you will still benefit from upgrades.  Instead, modify the Site.LocalTemplates page (which is not part of the PmWiki distribution).  Cookbook:PagelistTemplateSamples has many examples of custom pagelist formats.%0a%0aIn addition, the [[Cookbook:Cookbook]] has other recipes for special [@fmt=@] options, including [[Cookbook:DictIndex | [@fmt=dictindex@] ]] (alphabetical index) and [[Cookbook:SimpleForum | [@fmt=forum@] ]] (forum postings).%0a%0a!! See Also%0a%0a* [[Directives#attachlist]] - display a list 
 of attachments%0a* [[Site.PageListTemplates]] - default pmwiki pagelist templates%0a* [[Cookbook:PagelistTemplateSamples]] - contributed pagelist template samples%0a* [[(PmWiki/)PagelistVariables]] - ''local/config.php'' customizations%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How can I configure my site to always exclude wiki-related pages from searches?%0aA: Try the following in your ''local/config.php file''.  See also [[Cookbook:SearchPatterns]].%0a%0a->[@%0a## Exclude Certain pages / groups from search results.%0a$SearchPatterns['default'][] = '!\\.(All)?Recent(Changes|Uploads|Comments)$!';%0a$SearchPatterns['default'][] = '!\\.Group(Print)?(Header|Footer|Attributes)$!';%0a$SearchPatterns['default'][] = '!\\.(Left|Right|Side)(Bar|Menu|Note)$!';%0a$SearchPatterns['default'][] = '!^Site\\.!';%0a$SearchPatterns['default'][] = '!^PmWiki\\.!';%0a@]%0a%0aIf you add [@$SearchPatterns['default']...@] to exclude groups and pages from pa
 gelist and search output, you can ''include'' the omitted pages by using "list=all" in the pagelist or search parameters.
+time=1153236071

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PageVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PageVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PageVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,13 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)
+author=Pico
+csum=Supplied "as in" example for [@{$ScriptUrl}@] 
+ctime=1135816487
+description=Documentation for "variables" that are associated with pages. 
+host=12.33.45.37
+name=PmWiki.PageVariables
+rev=28
+targets=PmWiki.FmtPageName,PmWiki.ConditionalMarkup,PmWiki.Variables,PmWiki.MarkupMasterIndex,PmWiki.DocumentationIndex
+text=%25audience%25 authors (intermediate)%0a(:title Page-specific Variables:)%0a(:description Documentation for "variables" that are associated with pages. :)%0a[[#desc]]This page describes the "variables" that are associated with pages.  Page variables have the form @@{$''variable''}@@, and can be used in page markup or in certain formatting strings in PmWiki.  For example, the markup "[@{$Group}@]" renders in this page as "{$Group}".%0a%0aNote that these variables do not necessarily exist in the PHP code, because they have to be determined for a specific page.  (However, they are usable in [[FmtPageName]] strings.)%0a%0aThere is also the form @@{''pagename''$''variable''}@@, which returns the value of the variable for another page.  For example, "[@{MarkupMasterIndex$Title}@]" displays as "{MarkupMasterIndex$Title}".%0a%0a%0a!! Default page variables%0a%0aThe page variables defined for PmWiki are:%0a%0a->[@{$Group}@] - page's group name, as in "`{$Group}"%0a->[@{$Groupspa
 ced}@] - spaced group name, as in "{$Groupspaced}"%0a->[@{$DefaultGroup}@] - default group name, as in "{$DefaultGroup}"%0a->[@{$SiteGroup}@] - default group name for e.g. RecentChanges, as in "{$SiteGroup}"%0a->[@{$Name}@] - page name, as in "`{$Name}"%0a->[@{$Namespaced}@] - spaced page name, as in "{$Namespaced}"%0a->[@{$DefaultName}@] - name of default page, as in "`{$DefaultName}"%0a->[@{$FullName}@] - page's full name, as in "`{$FullName}"%0a->[@{$Title}@] - page title (may differ from Name), as in "{$Title}"%0a->[@{$Titlespaced}@] - title/spaced page name, as in "{$Titlespaced}"%0a->[@{$Description}@] - page's description from the [@(:description:)@] markup, as in "{$Description}"%0a%0a->[@{$LastModified}@] - date page was edited, as in "{$LastModified}"%0a->[@{$LastModifiedBy}@] - page's last editor, as in "{$LastModifiedBy}"%0a->[@{$LastModifiedHost}@] - IP of page's last editor, as in "{$LastModifiedHost}"%0a->[@{$LastModifiedSummary}@] - Summary from last edit, as
  in "{$LastModifiedSummary}"%0a-->%25note%25 Note: Enclose [@{$LastModifiedSummary}@] with [@[=@] and [@=]@] to avoid having PmWiki process any markup that may be contained in the summary.%0a%0a->[@{$PageUrl}@] - page's url, as in "{$PageUrl}"%0a->[@{$Action}@] - page's url action argument, as in "{$Action}"%0a%0aIn addition to the above, there are some page-invariant variables available through this markup:%0a%0a->[@{$Author}@] - the name of the person currently interacting with the site, as in "{$Author}"%0a->[@{$AuthId}@] - current authenticated id, as in "{$AuthId}" %25red%25Please note the lower case 'd'.  [@{$AuthID}@] returns nothing%0a%0a->[@{$Version}@] - PmWiki version, as in "{$Version}"%0a->[@{$VersionNum}@] - The internal version number, as in "{$VersionNum}"%0a->[@{$ScriptUrl}@] - The url to the pmwiki script, as in "{$ScriptUrl}"%0a%0a%0a!! Custom page variables%0a%0aYou may add custom page variables as a local customization. In a local configuration file or a
  recipe script, use the variable $FmtPV:%0a%0a->[@%0a$FmtPV['$VarName'] = "'variable definition'";%0a$FmtPV['$CurrentSkin'] = '$GLOBALS["Skin"]';%0a@]%0a%0aDefines new Page Variable of name $CurrentSkin, which can be used in the page with [@{$CurrentSkin}@] (also for [[Conditional markup]]).  It's necessary to use the single quotes nested inside double-quotes as shown above (preferred) or a double-quoted string nested inside single-quotes like ''[@'"this"'@]''.%0a%0aMaking a [@{$WikiTitle}@] markup doesn't quite follow the formula above.  Instead you need to use%0a%0a->[@%0a$FmtPV['$WikiTitle'] = '$GLOBALS["WikiTitle"]';%0a@]%0a%0a!! See also%0a%0a* [[Cookbook:More custom page variables]]%0a* [[PmWiki.Variables]] &mdash; about variables internal to PmWiki.%0a* [[PmWiki.MarkupMasterIndex]] &mdash; complete list of PmWiki markups.%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>%0a>>faq%3c%3c [[#faq]]%0a%0aQ:Is there a variable like $LastModified, but which shows me the crea
 tion time?%0aA:No, but you can create one in config.php. For instance:%0a->[@# add page variable {$PageCreationDate} in format yyyy-mm-dd%0a$FmtPV['$PageCreationDate'] = 'strftime("%25Y-%25m-%25d", $page["ctime"])';@]%0a
+time=1151078524
+title=Page-specific Variables

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PagelistVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PagelistVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PagelistVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.9 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5
+author=Pm
+csum=
+ctime=1136054369
+host=24.1.26.255
+name=PmWiki.PagelistVariables
+rev=13
+targets=PmWiki.Variables
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0a:$EnablePageListProtect:When set to 1 (which is the default), causes [@(:pagelist:)@] and [@(:searchresults:)@] to exclude listing any pages for which the browser does not currently have read authorization.  Setting this to zero means that read-protected pages can appear in a listing, but can also speed up searches considerably (because page permissions do not need to be checked).%0a%0a:$EnablePageIndex:When set to 1, causes PmWiki to maintain a "link and word index" in $PageIndexFile which significantly speeds up categories, backlinks, and searches.%0a%0a:$PageIndexFile:The location of the "page index" file for [@(:pagelist:)@], defaults to @@$WorkDir/.pageindex@@.%0a%0a:$SearchPatterns:An array of page name patterns to be required or excluded from search and pagelist results.  In order to be included in a search listing or page listing, a page's name must not match any pattern that is delimited by exclamation points (!) and must mat
 ch all other patterns.  See Cookbook:SearchPatterns.%0a        # Limit all searches to Main group%0a        $SearchPatterns['default'][] = [='/^Main\\./';=]%0a        # Exclude the Main group from search results%0a        $SearchPatterns['default'][] = [='!^Main\\.!';=]%0a        # Exclude RecentChanges pages from search results%0a        $SearchPatterns['default'][] = [='!\\.(All)?RecentChanges$!';=]%0a%0a:$PageSearchForm:The page to be used to format search results for [@?action=search@] (unless the current page has a "searchresults" directive in it).  This variable can be an array, in which case the first page found from the array is used.%0a        # Use Search page in current group if it exists, otherwise use Site.Search%0a        $PageSearchForm = array('$Group.Search', '[=$[$SiteGroup/Search]=]');%0a%0a:$FPLTemplatePageFmt:The pages to be searched for a pagelist template specified by a [@fmt=#xyz@] parameter.  Defaults to searching Site.LocalTemplates and Site.PageLis
 tTemplates, but can be customized to look in other pages.%0a        [@# Search a Group.Templates page as well as the Site templates%0a        $FPLTemplatePageFmt = array(%0a          '{$Group}.Templates',%0a          '{$SiteGroup}.LocalTemplates',%0a          '{$SiteGroup}.PageListTemplates');@]%0a%0a%0a
+time=1149354850

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Passwords
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Passwords	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Passwords	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.18 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=remove note
+host=24.1.26.255
+name=PmWiki.Passwords
+post= Save
+rev=109
+targets=PmWiki.PasswordsAdmin,PmWiki.PmWiki,PmWiki.WikiGroup,PmWiki.Security,PmWiki.Uploads,PmWiki.DocumentationIndex
+text=%25audience%25 authors%0a[[PmWiki]] has built-in support for password-protecting various areas of the wiki site.  Authors generally want to be able to apply passwords to individual pages or to [[wiki group]]s.  Wiki Administrators can apply passwords to individual pages, to wiki groups, or to the [[PasswordsAdmin#settingsitewidepasswords|entire site]].  As with any access control system, the password protection mechanisms described here are only a small part of overall system and wiki [[security]].%0a%0a!!As an author editing pages...%0a%0aAn author will generally set 3 types of passwords:%0a# to control who can see a page or group, use  @@read@@ passwords%0a# to control who can edit a page or group, use @@edit@@ passwords%0a# to control who can alter the passwords used to protect a page or group, use @@attr@@ passwords%0a%0a'''''To set a password on an individual wiki page,''''' add @@?action=attr@@ to the page's URL (address) to access its attributes.  Using the form 
 on the attributes page, you can set or clear the @@read@@, @@edit@@, or @@attr@@ passwords on the page.  In the form you enter the passwords as cleartext; PmWiki encrypts them for you automatically when it stores them. %0a* Leaving a field blank will leave the attribute unchanged. %0a* To remove a password from a page (''reverting back'' to the group's or site's default), enter "clear". %0a* To indicate that the page can be edited ''even if a group or site password is set'', enter "@nopass".%0a* To lock a page for everybody but the admin, enter "@lock".%0a* To assign the site's site-wide edit-password to the @@read@@, @@edit@@, or @@attr@@ password for the page, enter "@_site_edit".%0a%0a%0a'''''To set a password on a wiki group''''' is slightly more difficult -- you just set the passwords on a special page in each group called "`GroupAttributes".  First, you can get to the attributes page for `GroupAttributes by entering a URL (address) like [@http://www.example.com/pmwiki.
 php?n=GroupName.GroupAttributes?action=attr@].  Then, using the form on the attributes page, you can set or clear the @@read@@, @@edit@@, or @@attr@@ passwords for the entire group.  In the form you enter the passwords as cleartext; PmWiki encrypts them for you automatically.%0a* To remove a password from a group (''reverting back'' to the site's default), enter "clear". %0a* To indicate that the group can be edited ''even if a site password is set'', enter "@nopass". %0a* To lock a group for everybody but the admin, enter "@lock".%0a%0a'''''Multiple passwords for a page, group or site''''' are allowed. Simply enter multiple passwords separated by a space. This allows you to have a read password, a write password, and have the write password allow read/write access.  In other words, if the read password is "alpha" and the edit password is beta, then enter%0a%0a-> [@%0aSet new read password: alpha beta%0aSet new edit password: beta%0a@]%0a%0aThis says that either "alpha" or "
 beta" can be used to read pages, but only "beta" may edit. Since PmWiki checks the passwords you've entered since the browser has been opened, entering a read password that is also a write password allows both reading and writing.%0a%0a%0a%25audience%25 administrator%0a%0a!!As an administrator ...%0a%0aYou can set passwords on pages and groups exactly as described above for authors. You can also:%0a# set site-wide passwords for pages and groups that do not have passwords%0a# use @@attr@@ passwords to control who is able to set passwords on pages%0a# use @@upload@@ passwords to control access to the file [[upload(s)]] capabilities (if uploads are enabled)%0a# use an @@admin@@ password to override the passwords set for any individual page or group  %0aFor more information on password options available to administrators, see [[PasswordsAdmin]].%0a%0a!!Which password wins?%0a%0aIn PmWiki, page passwords override group passwords, group passwords override the ''default'' passwords
 , and the @@admin@@ password overrides all passwords.  This gives a great deal of flexibility in controlling access to wiki pages in PmWiki. %0a%0a!!Opening access to pages in protected groups/sites%0a%0aSometimes we want to "unprotect" pages in a group or site that is otherwise protected.  In these cases, the special password "@nopass" is used to indicate that access should be allowed to a page without requiring a password.  %0a%0aFor example, suppose `Main.GroupAttributes has an edit password set, thus restricting the editing of all pages in Main.  Now we want `Main.WikiSandbox to be editable without a password.  Using "clear" for the edit password for `Main.WikiSandbox ''doesn't unprotect the page'', because the password is being set by the group.  Instead, we set the edit password for `Main.WikiSandbox to the special value "@nopass", which tells PmWiki to ignore any site-wide or group-level passwords for that page.%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a>
 >faq%3c%3c [[#faq]]%0a%0aQ:  How can I password protect all the pages and groups on my site?  Do I really have to set passwords page by page, or group by group?%0a%0aA:  Administrators can set passwords for the entire site by editing the config.php file; they don't have to set passwords for each page or group.  For example, to set the entire site to be editable only by those who know an "edit" password, an administrator can add a line like the following to local/config.php:%0a%0a    $DefaultPasswords['edit'] = crypt('edit_password');%0a%0aFor more information about the password options that are available only to administrators, see [[PasswordsAdmin]].%0a%0aQ:  How can I create private groups for users, so that each user can edit pages in their group, but no one else (other than the admin) can?%0a%0aA:  Administrators can use the [[(PmWiki:)AuthUser]] recipe and add the following few lines to their local/config.php file to set this up:%0a%0a    $group = FmtPageName('$Group', 
 $pagename); \\%0a    $DefaultPasswords['edit'] = 'id:'.$group; \\%0a    include_once("$FarmD/scripts/authuser.php");%0a%0aThis automatically gives edit rights to a group to every user who has the same user name as the group name.
+time=1156994520

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PasswordsAdmin
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PasswordsAdmin	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PasswordsAdmin	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.23 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=
+csum=move question about setting groups to AuthUser faq
+host=24.1.26.255
+name=PmWiki.PasswordsAdmin
+post= Save
+rev=123
+targets=PmWiki.Passwords,PmWiki.WikiGroup,PmWiki.Security,PmWiki.WikiAdministrator,PmWiki.AuthUser,PmWiki.PasswordsAdmin,PmWiki.ConditionalMarkup,PmWiki.DocumentationIndex
+text=%25audience%25 administrators (basic)%0aPmWiki has built-in support for [[Passwords|password-protecting]] various areas of the wiki site.  Passwords can be applied to individual pages, to [[Wiki Group]]s, or to the entire wiki site.  Note that the password protection mechanisms described here are only a small part of overall system (and wiki) security, see [[PmWiki.Security]] for more discussion of this.%0a%0aAuthors can use PmWiki to add passwords to individual pages and WikiGroups as described in [[Passwords]].  However, [[WikiAdministrator]]s can also set passwords in ''local/config.php'' as described below.%0a%0a!! Password basics%0a%0aPmWiki supports several levels of access to wiki pages:%0a-> @@read@@ passwords allow viewing the contents of wiki pages%0a-> @@edit@@ passwords control editing and modification of wiki pages%0a-> @@attr@@ passwords control who is able to set passwords on pages (and potentially other future attributes)%0a-> if uploads are enabled, @@u
 pload@@ passwords control uploading of files and attachments%0a%0aFinally, there is an @@admin@@ password that allows an administrator to override the passwords set for any individual page or group.%0a%0aBy default, PmWiki has the following password settings:%0a* The @@admin@@ and @@upload@@ passwords are locked by default.%0a* The Main and PmWiki groups have a locked @@attr@@ password (in their respective `GroupAttributes pages).%0a* The pages in the Site group except `Site.SideBar are locked against editing; by default the Site.SideBar page requires the admin or the site-wide edit password.%0a%0aAn @@admin@@ password can be used to overcome "locked" passwords, other than that, no password will allow access.%0a%0aSee [[Passwords]] for information about setting per-page and per-group passwords.  The remainder of this page describes setting site-wide passwords from the ''local/config.php'' file.%0a%0a[[#settingsitewidepasswords]]%0a!! Setting site-wide passwords%0a%0aOne of t
 he first things an admin should do is set an @@admin@@ password for the site.  This is done via a line like the following in the ''local/config.php'' file:%0a%0a    $DefaultPasswords['admin'] = crypt('secret_password');%0a%0aNote that the crypt() call is required for this -- PmWiki stores and processes all passwords internally as encrypted strings.  See the [[#crypt | crypt section]] below for details about eliminating the cleartext password from the configuration file.%0a%0aTo set the entire site to be editable only by those who know an "edit" password, add a line like the following to ''local/config.php'':%0a%0a    $DefaultPasswords['edit'] = crypt('edit_password');%0a%0aSimilarly, you can set [@$DefaultPasswords['read']@], [@$DefaultPasswords['edit']@], and [@$DefaultPasswords['upload']@] to control default @@read@@, @@edit@@, and @@upload@@ passwords for the entire site.  The default passwords are used only for pages and groups which do not have passwords set.  Also, eac
 h of the $DefaultPasswords values may be arrays of encrypted passwords:%0a%0a    $DefaultPasswords['read'] = array(crypt('alpha'), crypt('beta'));%0a    $DefaultPasswords['edit'] = crypt('beta');%0a%0aThis says that either "alpha" or "beta" can be used to read pages, but only the "beta" password will allow someone to edit a page.  Since PmWiki remembers any passwords entered during the current session, the "beta" password will allow both reading and writing of pages, while the "alpha" password allows reading only.  A person without either password would be unable to view pages at all.%0a%0a!! Identity-based authorization (username/password logins, [[AuthUser]])%0a%0aUnlike many systems which have '''identity-based''' systems for controlling access to pages (e.g., using a separate ''username'' and ''password'' for each person), PmWiki defaults to a ''password-based'' system as described above.  In general password-based systems are often easier to maintain because they avoid 
 the administrative overheads of creating user accounts, recovering lost passwords, and mapping usernames to permitted actions.%0a%0aHowever, PmWiki's ''authuser.php'' script augments the password-based system to allow access to pages based on a username and password combination.  See [[AuthUser]] for more details on controlling access to pages based on user identity.%0a%0a!!Security holes ...%0a%0aAdministrators need to carefully plan where passwords are applied to avoid opening inadvertent security holes. If your wiki is open (anyone can read and edit), this would not seem to be a concern, '''except''', a malicious or confused user could apply a read password to a group and make the group completely unavailable to all other users. At the very least, even an open wiki should have a site-wide "admin" password and a site-wide "attr" password set in config.php. The ''sample-config.php'' file distributed with PmWiki indicates that the PmWiki and Main groups have "attr" locked by
  default, but if anyone creates a new group, "attr" is unlocked. Administrators must remember to set "attr" passwords for each new group (if desired) in this case. An easier solution is to include these lines in ''config.php'' :%0a%0a-> [@%0a$DefaultPasswords['admin'] = crypt('youradminpassword');%0a$DefaultPasswords['attr'] = crypt('yourattrpassword');%0a@]%0a%0a!! Encrypting passwords in ''config.php'' [[#crypt]]%0a%0aOne drawback to using the crypt() function directly to set passwords in ''config.php'' is that anyone able to view the file will see the unencrypted password.  For example, if ''config.php'' contains%0a%0a    $DefaultPasswords['admin'] = crypt('mysecret');%0a%0athen the "mysecret" password is in plain text for others to see.  However, a wiki administrator can obtain and use an encrypted form of the password directly by using [@?action=crypt@] on any PmWiki url (or just jump to [[{$Name}?action=crypt]]).  This action presents a form that generates encrypted ve
 rsions of passwords for use in the ''config.php'' file.  For example, when [@?action=crypt@] is given the password "@@mysecret@@", PmWiki will return a string like%0a%0a    [@$1$hMMhCdfT$mZSCh.BJOidMRn4SOUUSi1@]%0a%0aThe string returned from [@?action=crypt@] can then be placed directly into config.php, as in:%0a%0a    $DefaultPasswords['admin'] = [='$1$hMMhCdfT$mZSCh.BJOidMRn4SOUUSi1'=];  %0a%0aNote that in the encrypted form the ''crypt'' keyword and parentheses are removed, since the password is already encrypted.  Also, the encrypted password must be in single quotes.  In this example the password is still "@@mysecret@@", but somebody looking at ''config.php'' won't be able to see that just from looking at the encrypted form.  ''Crypt'' may give you different encryptions for the same password--this is normal (and makes it harder for someone else to determine the original password).%0a%0a!! Removing passwords%0a%0aTo remove a site password entirely, such as the default lo
 cked password for uploads, just set it to empty:%0a%0a    $DefaultPasswords['upload'] = '';%0a%0aYou can also use the special password "@nopass" via @@?action=attr@@ to have a non-password protected page within a password-protected group, or a non-password protected group with a site-wide default password set.%0a%0a!! Revoking or invalidating passwords%0a%0aIf a password is compromised and the wiki administrator wants to quickly invalidate all uses of that password on a site, a quick solution is the following in ''local/config.php'':%0a%0a    $ForbiddenPasswords = array('secret', 'tanstaafl');%0a    if (in_array(@$_POST['authpw'], $ForbiddenPasswords)) %0a      unset($_POST['authpw']);%0a%0aThis prevents "secret" and "tanstaafl" from ever being accepted as a%0avalid authorization password, regardless of what pages may be%0ausing it.%0a%0a!! See Also%0a%0a* The $HandleAuth array, which sets the required authentication level that is necessary to perform an action.%0a%0a!! Prot
 ecting actions (example)%0a%0aEach action can be password protected. Cookbook authors providing scripts with own actions can use this also, but I'll limit the example to a (by default) not protected [@?action=source@]. This action shows the wikisource of the actual page. Sometimes you don't want that especially when using some [[PmWiki/conditional markup]] which should not be discovered easily or only by persons that are allowed to edit the page.%0a%0aThere are several solutions for that:%0a# Limit "source" only to editors add the following to your ''local/config.php'':%0a  %0a--> [@$HandleAuth['source'] ='edit';@]%0a%0a# For using "source" with an own password, then add:%0a%0a--> [@$HandleAuth['source'] ='source';@]%0a--> [@$DefaultPasswords['source'] = crypt(secret);@] # ''see above''%0a%0a  If you additionally want to set the password in the attributes page add:%0a%0a--> [@$PageAttributes['passwdsource'] = "$['Set new source password']";@]%0a%0aIn general, adding the pref
 ix 'passwd' to an action name in the [@$PageAttributes@] array indicates that you wish for the given field to be encrypted when saved to disk.%0a%0aThe full set of steps to add new password handling for an action such as "diff" would be:%0a%0a->[@%0a# add a new (encrypted) field to the attr page%0a$PageAttributes['passwddiff'] = '$[Set new history password]';%0a%0a# clear the default password for 'diff'%0a$DefaultPasswords['diff'] = '';%0a%0a# Tell PmWiki that the 'diff' password allows action 'diff'.%0a$HandleAuth['diff'] = 'diff';%0a%0a# Tell PmWiki that a 'read' password %0a# (or optionally the 'edit') password%0a# is also sufficient to enable 'diff'.%0a# Of course, the 'admin' password will work too.%0a$AuthCascade['diff'] = 'read';    ## or 'edit'%0a@]%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: There seems to be a default password.  What is it? [[#pwlocked]]%0a%0aA: There isn't any valid password until you set one.  [[PasswordsAdm
 in]] describes how to set one.%0a%0aPmWiki comes "out of the box" with $DefaultPasswords['admin'] set to '*'.   This doesn't mean the password is an asterisk, it means that default admin password has to be something that encrypts to an asterisk.  Since it's impossible for the crypt() function to ever return a 1-character encrypted value, the admin password is effectively locked until the admin sets one in config.php.%0a%0aQ: How do I use passwd-formatted files (like .htpasswd) for authentication?%0a%0aA: See [[AuthUser]] or [[Cookbook:UserAuth]]%0a%0aQ: Is there anything I can enter in a GroupAttributes field to say 'same as the admin password'? If not, is there anything I can put into the config.php file to have the same effect?%0a%0aA: For the sitewide edit password (in config.php), use '@_site_edit'. I haven't tested this, but I think one can also use '@_site_admin', '@_site_read', '@_site_attr', etc. for the other site-wide passwords set in config.php.  '@admin' is used 
 to specify the site admin password.%0a%0aQ: How do I edit protect, say, all RecentChanges pages?%0a%0aA: (needs answer)%0a
+time=1157578396

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PathVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PathVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PathVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=adjust note
+host=24.1.26.255
+name=PmWiki.PathVariables
+rev=28
+targets=PmWiki.Variables,PmWiki.LocalCustomizations,PmWiki.PerGroupCustomization,PmWiki.WikiFarms,PmWiki.LayoutVariables,PmWiki.LinkVariables,PmWiki.EditVariables,PmWiki.UploadVariables
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0aWhen dealing with file or path variables, one has to recognize the difference between working with URLs and files on disk.  For example:%0a* The include() statements are used to include other files (on disk) into the currently running PmWiki script.  Thus they require paths on the server's filesystem. %0a* The $ScriptUrl and $PubDirUrl variables are used to tell a ''browser'', connecting via the webserver, how to execute the pmwiki script ($ScriptUrl) and the base url for getting files from PmWiki's pub/ directory ($PubDirUrl).%0a%0aNote that a browser needs a URL (http://www.example.com/pmwiki/pub) while an include statement requires a server file path ($FarmD/scripts/something.php).%0a%0a:$FarmD:The directory on the server where the farm is located (i.e., the directory containing the farm's copy of ''pmwiki.php'' and the ''scripts/'' directory).  This directory is automatically determined by pmwiki.php when it runs, and can be used 
 to distinguish the farm's ''cookbook/'' and ''pub/'' subdirectories from a field's subdirectories.%0a%0a:$FarmPubDirUrl:is the url that refers to the @@pub@@ directory for an entire farm. It defaults to the same value as $PubDirUrl. %0a%0a:$PageCSSListFmt:is an associative array which PmWiki uses to find any local css configuration files. It consists of a set of (''key'',''value'') pairs. The ''key'' is a possible path to a file on disk holding the css data, while the ''value'' is the coresponding URL for that file. They keys are tested in turn, and for each named file that exists, the browser is instructed to load the corresponding URL. The default value for this variable is:%0a%0a        array( %0a          'pub/css/local.css' => '$PubDirUrl/css/local.css',%0a          'pub/css/{$Group}.css' => '$PubDirUrl/css/{$Group}.css',%0a          'pub/css/{$FullName}.css' => '$PubDirUrl/css/{$FullName}.css');%0a%0a->Note that the default (as of version pmwiki-2.1.beta26) makes no re
 ference to $FarmPubDirUrl. If you wish to be able to place css configuration files in both the field's @@pub@@ directory, and the farm's @@pub@@ directory, you may want to add these lines to your @@local/config.php@@ file (as described in [[Cookbook:SharedPages]]):%0a%0a        $PageCSSListFmt = array(%0a          '$FarmD/pub/css/local.css' => '$FarmPubDirUrl/css/local.css',%0a          '$FarmD/pub/css/$Group.css' => '$FarmPubDirUrl/css/$Group.css',%0a          '$FarmD/pub/css/$FullName.css' => '$FarmPubDirUrl/css/$FullName.css',%0a          'pub/css/local.css' => '$PubDirUrl/css/local.css',%0a          'pub/css/$Group.css' => '$PubDirUrl/css/$Group.css',%0a          'pub/css/$FullName.css' => '$PubDirUrl/css/$FullName.css');%0a%0a:$PubDirUrl: is the URL that refers to the @@pub@@ directory. That directory contains all the files and subdirectories that must be directly accessible from a browser (e.g. CSS and HTML files). Most prominent here is the @@skins@@ subdirectory.%0a%
 0a:$ScriptUrl: is the URL that you want people's browsers to use when accessing PmWiki, either as a field or farm.  It's used whenever PmWiki needs to generate a link to another PmWiki page or action. PmWiki is usually fairly good about "guessing" the correct value for $ScriptUrl on its own, but sometimes an admin needs to set it explicitly because of URL manipulations by the webserver (such as Cookbook:CleanUrls, mod_rewrite, bizarre PHP configurations, and so on).%0a%0a:$SkinDirUrl:Set by ''scripts/skins.php'' to be the base url of the current skin's directory (i.e., within a 'pub/skins/' directory).  This variable is typically used inside of a skin .tmpl file to provide access to .css files and graphic images associated with the skin.%0a%0a:$WorkDir:%0a: :This variable is a string that gives a local path to a directory where the pmwiki engine can create temporary files etc. PmWiki needs this for a variety of things, such as building merged edits, caching mailposts entries
 , keeping track of the last modification time of the site, other types of cache, etc.  Do not confuse this variable with $WikiDir; the reason that both $WorkDir and $WikiDir refer by default to the directory [@wiki.d/@] is merely to simplify things for the administrator. %0a%0a:$WikiDir: %0a: :$WikiDir is a `PageStore-object that refers to how wiki pages are stored. This can be a simple reference to a directory (typically ''wiki.d/''), or something more advanced such as a `MySQL backend or a .dbm-file.  Do not confuse this variable with $WorkDir; the reason that both $WorkDir and $WikiDir refer by default to the directory [@wiki.d/@] is merely to simplify things for the administrator.%0a%0a:$WikiLibDirs:%0a: :$WikiLibDirs is an array of `PageStore objects that specify where to look for pages.  By default it is set up to look in ''wiki.d/'' and ''wikilib.d/'', but can be changed to look other places.  For example, to exclude the pages that are bundled in the PmWiki distributi
 on, use the line below.  (Note that some features such as editing and search rely on having certain pages available, so you may need to copy them to the $WikiDir.)%0a        $WikiLibDirs = array(&$WikiDir);%0a%0a:$LocalDir:The filesystem location of the ''local/'' directory, holding [[local customization(s)]] and [[per group customization]] files.  Typically set in a [[WikiFarm(s)]]'s ''farmconfig.php''.  (Note that farm configuration files always occur in ''$FarmD/local/farmconfig.php'', regardless of any setting for $LocalDir.)%0a%0a%0a!!See also%0a* [[LayoutVariables]] for URL layout options%0a* [[LinkVariables]] - variables that control the display of links in pages%0a* [[EditVariables]] - variables used when editing pages%0a* [[UploadVariables]] - variables used for uploads/attachments%0a
+time=1156519259

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PatrickMichaud
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PatrickMichaud	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PatrickMichaud	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.7.12) Gecko/20050915
+author=HaganFox
+csum=Removed self-referencing link
+host=216.161.175.221
+name=PmWiki.PatrickMichaud
+rev=12
+targets=
+text=Patrick Michaud (Pm) is the author of PmWiki.  More information about him can be found at http://www.pmichaud.com.
+time=1142132859

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PerGroupCustomizations
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PerGroupCustomizations	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PerGroupCustomizations	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.1 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5
+author=Pm
+csum=more link spacing cleanup
+host=24.1.26.255
+name=PmWiki.PerGroupCustomizations
+rev=23
+targets=PmWiki.WikiGroup,PmWiki.WikiAdministrator,PmWiki.LocalCustomizations,PmWiki.PasswordsAdmin,PmWiki.WikiFarms,PmWiki.DocumentationIndex
+text=%25audience%25 administrators (intermediate)%0aOne of the purposes of [[WikiGroup]]s is to allow a [[Wiki Administrator]] to customize the features of PmWiki on a per-group basis.  Here is where ''per group customizations'' come into play.%0a%0aThe ''local/'' subdirectory (in the same directory that holds ''pmwiki.php'') is used to hold local configuration files.  To perform [[local customizations]] for a particular WikiGroup, place the customizations in a file called "''%3cgroupname>.php''" (where ''%3cgroupname>'' is the actual name of the page group in question) in the ''local/'' subdirectory.  This file will be automatically processed after processing any local customizations in the ''config.php'' file.%0a%0aFor example, to change the image displayed in the upper-left corner of pages in the "Chess" WikiGroup, one could create ''local/Chess.php'' containing%0a%0a    %3c?php%0a      $PageLogoUrl = "/myimages/chess.gif";%0a%0aThis would cause all pages in the Chess [[W
 iki Group]] to use "/myimages/chess.gif" as the logo image instead of the default.%0a%0aAlmost any customization that would be placed in ''config.php'' can be used as a per-group customization.%0a%0a[[#PerPage]] PmWiki also allows per-page customizations, simply use the full name of the page to be customized instead of the group.  For example, one can use the file ''local/Chess.`HomePage.php'' to set local customizations for Chess.`HomePage.%0a%0aFor all local customizations, PmWiki first processes the ''local/config.php'' file, and then looks for a per-page customization file in the ''local/'' subdirectory to process, followed by any per-group customization file.  If no per-page or per-group customizations are loaded, then PmWiki loads ''local/default.php''.%0a%0aAny customization file can set $EnablePGCust=0; to prevent later page/group/default customizations from being automatically loaded.  If a per-page customization needs to have the per-group customizations loaded fir
 st, it can do so directly by using PHP's [@include_once()@] function.%0a%0aAny passwords required for a group should be set in the group's `GroupAttributes page (see [[PasswordsAdmin]]) and not in a group customization file. %0a%0a[[Wiki Group]]s are an easy way to host multiple sites in a single PmWiki installation by giving each site its own group.  Another approach is to use [[Wiki Farms]], which allows each site to have its own set of WikiGroup and local customization files.  If you're hoping to add several levels of groups, [[PmWiki:HierarchicalGroups|read this first]].%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>
+time=1142464534

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PmWiki
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PmWiki	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PmWiki	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5
+author=Pm
+csum=
+host=24.1.26.255
+name=PmWiki.PmWiki
+rev=121
+targets=PmWiki.WikiWikiWeb,Main.WikiSandbox,PmWiki.BasicEditing,PmWiki.Skins,PmWiki.PmWikiPhilosophy,PmWiki.Installation
+text=PmWiki is a [[wiki(WikiWeb)]]-based system for collaborative creation and maintenance of websites.%0a%0aPmWiki pages look and act like normal web pages, except they have an "[[Main/WikiSandbox?action=edit|Edit]]" link that makes it easy to modify existing pages and add new pages into the website, using [[basic editing]] rules. You do not need to know or use any HTML or CSS. Page editing can be left open to the public or restricted to small groups of authors.%0a%0a!!Key PmWiki Features%0a%0a-%3c'''Custom look-and-feel''': A site administrator can quickly change the appearance and functions of a PmWiki site by using different [[skins]] and HTML templates.  If you can't find an appropriate skin [[already made -> Cookbook:Skins]], you can easily modify one or create your own.%0a%0a-%3c'''Access control''': PmWiki password protection can be applied to an entire site, to groups of pages, or to individual pages.  Password protection controls who can read pages, edit pages, and
  upload attachments.  PmWiki's access control system is completely self-contained, but it can also work in conjunction with existing password databases, such as ''.htaccess'', LDAP servers, and MySQL databases.%0a%0a-%3c'''Customization and plugin architecture''': One principle of the [[PmWikiPhilosophy]] is to only include essential features in the core engine, but make it easy for administrators to customize and add new markup.  Hundreds of features are already available by using extensions (called "recipes") that are available from the PmWiki [[(Cookbook:)Cookbook]].%0a%0aPmWiki is written in %25newwin%25[[http://php.net/|PHP]] and distributed under the %25newwin%25[[http://www.gnu.org/copyleft/gpl.html|General Public License]].  It is designed to be simple to [[PmWiki/install(ation)]], customize, and maintain for a variety of applications. This site is running {$Version}.%0a%0aPmWiki is a registered trademark of [[http://www.pmichaud.com/ | Patrick R. Michaud ]].%0a%0aPm
 Wiki's home on the web is at [[(http://)pmwiki.org(/)]].%0a
+time=1142195525

Added: trunk/oggdsf/website/wikilib.d/PmWiki.PmWikiPhilosophy
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.PmWikiPhilosophy	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.PmWikiPhilosophy	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.15 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=Adjust text to be somewhat more precise
+host=24.1.26.255
+name=PmWiki.PmWikiPhilosophy
+rev=45
+targets=PmWiki.PatrickMichaud,PmWiki.Audiences,PmWiki.WikiWikiWeb,PmWiki.CustomMarkup,PmWiki.DocumentationIndex
+text=This page describes some of the ideas that guide the design and implementation of PmWiki.  [[Patrick Michaud]] doesn't claim that anything listed below is an original idea; these are just what drive the development of PmWiki.  You're welcome to express your disagreement with anything listed below.  [[PmWiki.Audiences]] also describes much of the reasoning behind the ideas given below.%0a%0a:''1. Favor writers over readers'':At its heart, PmWiki is a collaborative authoring system for hyperlinked documents.  It's hard enough to get people (including Pm) to contribute written material; making authors deal with HTML markup and linking issues places more obstacles to active contribution.  So, PmWiki aims to make it easier to author documents, even if doing so limits the types of documents being authored.%0a%0a:''2. Don't try to replace HTML'':PmWiki doesn't make any attempt to do everything that can be done in HTML.  There are good reasons that people don't use web browsers
  to edit HTML--it's just not very effective.  If you need to be writing lots of funky HTML in a web page, then PmWiki is not what you should be using to create it.  What PmWiki does try to do is make it easy to link PmWiki to other "non-wiki" web documents, to embed PmWiki pages inside of complex web pages, and to allow other web documents to easily link to PmWiki.%0a%0a: :This principle also follows from the "favor writers over readers" principle above--every new feature added to PmWiki requires some sort of additional markup to support it.  Pretty soon the source document looks pretty ugly and we'd all be better off just writing HTML.  %0a%0a: :Another reason for avoiding arbitrary HTML is that ill-formed HTML can cause pages to stop displaying completely, and arbitrary HTML can be a security risk--more so when pages can be created anonymously.  See http://www.cert.org/advisories/CA-2000-02.html for more information.  %0a%0a:''3. Avoid gratuitous features (or "creeping fea
 turism")'':In general PmWiki features are implemented in response to specific needs, rather than because someone identifies something that "might be useful".  In any sort of useful system, it's hard to change a poorly designed feature once people have built a lot of structure based on it.  (Need an example?  Look at MS-DOS or Windows.)  One way to avoid poor design is to resist the temptation to implement something until you have a clearer idea of how it will be used.  %0a%0a:''4. Support collaborative maintenance of public web pages'':Although this wasn't at all the original intent of PmWiki, it became quickly obvious that [[WikiWikiWeb]] principles could be used to make it easier for groups to collaboratively design and maintain a public web site presence.  PmWiki allows individual pages to be password protected, and a couple of local customizations makes it easy to protect large sections of PmWiki pages.  Furthermore, in many ways PmWiki provides "style sheets on steroids
 ": you can quickly change the headers, footers, and other elements on a large group of pages without ever having to touch the individual page contents.  Finally, it's relatively easy to add [[custom markup]] for specialized applications.%0a%0a:''5. Be easy to install, configure, and maintain'': With a compressed gzip file size of just around 200K, uploading PmWiki to your server is a speedy operation. Do a chmod or two, update a few settings in config.php and you should be up and running. PmWiki stores all data in flat files, so there is no need for `MySQL or other utilities.  Upgrading is usually a simple matter of copying the latest version's files over the files of your existing PmWiki installation.  (One of the biggest reasons for the creation of PmWiki was that other wiki engines at the time required modifications to the distribution files, so admins ended up losing their customizations on every upgrade.)%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a
+time=1156622489

Added: trunk/oggdsf/website/wikilib.d/PmWiki.RefCount
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.RefCount	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.RefCount	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5
+author=Pm
+csum=
+host=24.1.26.255
+name=PmWiki.RefCount
+rev=27
+targets=PmWiki.WikiAdministrator,PmWiki.LocalCustomizations,PmWiki.DocumentationIndex
+text=RefCount performs link reference counts on pages in the PmWiki database (i.e., counts of links between pages).  Before using RefCount, it must be enabled by the [[wiki administrator]] by placing the following line in a [[local customization(s)]] file:%0a%0a->[@include_once("$FarmD/scripts/refcount.php");@]%0a%0aTo use refcount add [@?action=refcount@] to the URL of any wiki page to bring up the reference count form. For example:%0a%0a%25newwin%25http://www.pmichaud.com/wiki/PmWiki/RefCount?action=refcount%0a%0aThe refcount form contains the following controls:%0a*'''Show''' ~ This selects which pages will appear in the output%0a**all ~ Shows all references %0a**missing ~ Shows only references to pages that don't exist%0a**existing ~ Shows only references to pages that do exist%0a**orphaned ~ Shows pages that exist but don't have any references to them.  There is no way to browse to an orphaned page.%0a*'''page names in group''' ~ Selects which group(s) to the referenced
  pages can be in%0a*'''referenced from pages in''' ~ Selects which group(s) the referencing pages can be in%0a*'''Display referencing pages''' ~ Includes a link to the referencing page -- this can make for a very long output unless you limit the groups searched%0a%0aThe output is a table where each row of the table contains a page name or link reference, the number of (non-RecentChanges) pages that contain links to the page and the number of Recent Changes pages with links to the page.%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a
+time=1142197844

Added: trunk/oggdsf/website/wikilib.d/PmWiki.ReleaseNotes
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.ReleaseNotes	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.ReleaseNotes	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta64 ordered=1 urlencoded=1
+agent=pmwikiedit
+author=Pm
+charset=ISO-8859-1
+csum=
+host=74.200.73.46
+name=PmWiki.ReleaseNotes
+rev=394
+targets=PmWiki.DocumentationIndex,Site.Site,SiteAdmin.SiteAdmin,PITS.00961,Profiles.Isidor,Site.PageActions,Site.EditForm,Site.PageNotFound,PmWiki.PageLists,PmWiki.WikiTrails,PmWiki.Blocklist,SiteAdmin.AuthList,PmWiki.SkinTemplates,PmWiki.AuthUser,Site.AuthUser,PmWiki.WikiFarms,PmWiki.MailPosts,PmWiki.Notify,PmWiki.LocalCustomizations,Site.PageListTemplates,Site.SideBar,PmWiki.PageVariables,PmWiki.WebFeeds,PmWiki.InterMap,PmWiki.WikiStyles,PmWiki.ConditionalMarkup,PmWiki.Categories,PmWiki.Images,PmWiki.ChangeLog,Site.Search,PmWiki.Tables
+text=(:title Release Notes:)%0a(:Summary: PmWiki release notes:)%0a%0a%25rfloat trail%25%3c%3c|[[Documentation Index]]|>>%25%25%0a%0a!! Version 2.2.0-beta1 through 2.2.0-beta65 (2006-09-25 to 2007-11-17)%0aAs discussed on the pmwiki-users mailing list, we have a number of%0anew features and refactorings taking place in the core code.  Thus,%0athe next set of releases will be designated as "2.2.0-beta", so%0athat administrators will know to review the release notes here%0afor important changes that may impact their site when upgrading%0afrom 2.1.x or earlier to a 2.2 release.%0a%0aHere's a list of important changes:%0a%0a* As of 2.2.0-beta58, several pages that were formally in the [[Site]].* group are now in a separate [[SiteAdmin]].* group, which is read-restricted by default.  The affected pages include Site.AuthUser, Site.AuthList, Site.NotifyList, Site.Blocklist, and Site.ApprovedUrls .  If upgrading from an earlier version of PmWiki, PmWiki will prompt to automatically 
 copy these pages to their new location if needed.  If a site wishes to continue using the old Site.* group for these pages, simply set%0a%0a-> $SiteAdminGroup = $SiteGroup;%0a%0a->As of 2.2.0-beta59 this feature works for WikiFarms, in beta-58 affected pages in each field have to be manually reconfigured, or the above setting to change $SiteAdminGroup made.%0a-> when carrying out this upgrade inspect your config files for lines such as%0a--> $BlocklistDownload['Site.Blocklist-PmWiki'] = array('format' => 'pmwiki');%0a->as you may wish to fix then, eg%0a--> $BlocklistDownload[$SiteAdminGroup . '.Blocklist-PmWiki'] = array('format' => 'pmwiki');%0a%0a* Important Change in Passwords in PmWiki 2.2 indicating that the group can be edited even if a site password is set will be done by @@"@nopass"@@ prior it was done by @@"nopass"@@%0a-> When migrating a wiki you will have to manually modify the permission or by a script replace in all the page concerned @@passwdread=nopass:@@ by @
 @passwdread=@nopass@@ (see [[PITS/00961]]) [[~isidor]]%0a%0a* PmWiki now ships with WikiWords entirely disabled by default.  To re-enable them, set either $LinkWikiWords or $EnableWikiWords to 1.  To get the 2.1 behavior where WikiWords are spaced and parsed but don't form links, use the following:%0a-> $EnableWikiWords = 1;%0a-> $LinkWikiWords = 0;%0a%0a* It's now easy to disable the rule that causes lines with leading spaces to be treated as preformatted text -- simply set $EnableWSPre=0; to disable this rule.%0a%0a--> '''Important:''' There is ongoing discussion that the leading whitespace rule may be disabled ''by default'' in a future versions of 2.2.0-beta.  If you want to make sure that the rule will continue to work in future upgrades, set $EnableWSPre=1; in ''local/config.php''.%0a%0a* The $ROSPatterns variable has changed somewhat -- replacement strings are no longer automatically passed through FmtPageName() prior to substitution (i.e., it must now be done explici
 tly).%0a%0a* Page variables and page links inside of [@(:include:)@] pages are now treated as relative to the included page, instead of the currently browsed page.  In short, the idea is that links and page variables should be evaluated with respect to the page in which they are written, as opposed to the page in which they appear.  This seems to be more in line with what authors expect.  There are a number of important ramifications of this change:%0a%0a[[#relativeurls]]%0a** We now have a new [@{*$var}@] form of page variable, which always refers to "the currently displayed page".  Pages such as Site.PageActions and Site.EditForm that are designed to work on "the currently browsed page" should generally switch to using [@{*$FullName}@] instead of [@{$FullName}@].%0a%0a** The $EnableRelativePageLinks and $EnableRelativePageVars settings control the treatment of links and page variables in included pages.  However, to minimize disruption to existing sites, $EnableRelativePag
 eVars defaults to '''disabled'''.  This will give existing sites an opportunity to convert any absolute [@{$var}@] references to be [@{*$var}@] instead.%0a%0a** Eventually $EnableRelativePageVars will be enabled by default, so we highly recommend setting [@$EnableRelativePageVars = 1;@] in ''local/config.php'' to see how a site will react to the new interpretation.  Administrators should especially check any customized versions of the following:%0a---> [[Site.PageActions]]%0a---> [[Site.EditForm]]%0a---> [[Site.PageNotFound]]%0a---> SideBar pages with ?action= links for the current page%0a---> $GroupHeaderFmt, $GroupFooterFmt%0a---> [[Page lists]] that refer to the current group or page, etc in sidebars, headers, and footers%0a%0a** The [@(:include:)@] directive now has a [@basepage=@] option whereby an author can explicitly specify the page upon which relative links and page variables should be based.  If no basepage= option is specified, the included page is assumed to be 
 the base.%0a%0a* Sites that want to retain the pre-2.2 behavior of [@(:include:)@] and other items can set [@$Transition['version'] = 2001900;@] to automatically retain the 2.1.x defaults.%0a%0a* Text inserted via [@(:include:)@] can contain "immediate substitutions" of the form [@{$$option}@] -- these are substituted with the value of any options provided to the include directive.%0a%0a* PmWiki now recognizes when it is being accessed via "https:" and switches its internal links appropriately.  This can be overridden by explicitly setting $ScriptUrl and $PubDirUrl.%0a%0a* A new $EnableLinkPageRelative option allows PmWiki to generate relative urls for page links instead of absolute urls.%0a%0a* Draft handling capabilities have been greatly improved.  When $EnableDrafts is set, then the "Save" button is relabeled to "Publish" and a "Save draft" button appears.  In addition, an $EnablePublishAttr configuration variable adds a new "publish" authorization level to distinguish e
 diting from publishing.  See [[PmWiki:Drafts]] for more details.%0a%0a[[#ptvstart]]%0a* There is a new [@{$:var}@] "page text variable" available that is able to grab text excerpts out of markup content.  For example, [@{SomePage$:Xyz}@] will be replaced by a definition of "Xyz" in SomePage.  Page text variables can be defined using definition markup, a line beginning with the variable name and a colon, or a special directive form (that doesn't display anything on output):%0a%0a-->[@%0a:Xyz: some value            # definition list form%0aXyz: some value             # colon form%0a(:Xyz: some value:)         # directive form%0a@]%0a[[#ptvend]]%0a%0a* The [@(:pagelist:)@] command can now filter pages based on the contents of page variables and/or page text variables.  For example, the following directive displays only those pages that have an "Xyz" page text variable with "some value":%0a%0a-->[@(:pagelist $:Xyz="some value":)@]%0a%0a  Wildcards also work here, thus the follow
 ing pagelist command lists pages where the page's title starts with the letter "a":%0a%0a-->[@(:pagelist $Title=A* :)@]%0a%0a* The if= option to [@(:pagelist)@] can be used to filter pages based on conditional markup:%0a%0a-->[@(:pagelist if="auth upload {=$FullName}":)@]  pages with upload permission%0a-->[@(:pagelist if="date today.. {=$Name}":)@] pages with names that are dates later than today%0a%0a* Spaces no longer separate wildcard patterns -- use commas.  (Most people have been doing this already.)%0a%0a* Because page variables are now "relative", the [@{$PageCount}, {$GroupCount}, {$GroupPageCount}@] variables used in pagelist templates are now [@{$$PageCount}, {$$GroupCount}, {$$GroupPageCount}@].%0a%0a* One can now use [@{$$option}@] in a pagelist template to obtain the value of any 'option=' provided to the [@(:pagelist:)@] command.%0a%0a* The [@(:pagelist:)@] directive no longer accepts parameters from urls or forms by default.  In order to have it accept such p
 arameters (which was the default in 2.1 and earlier), add a [@request=1@] option to the [@(:pagelist:)@] directive.%0a%0a* The [@count=@] option to pagelists now accepts negative values to count from the end of the list.  Thus [@count=5@] returns the the first five pages in the list, and [@count=-5@] returns the last five pages in the list.  In addition, ranges of pages may be specified, as in [@count=10..19@] or [@count=-10..-5@].%0a%0a* Pagelist templates may have special [@(:template first ...:)@] and [@(:template last ...:)@] sections to specify output for the first or last page in the list or a group.  There's also a [@(:template defaults ...:)@] to allow a template to specify default options.%0a%0a* PmWiki comes with an ability to cache the results of certain [@(:pagelist:)@] directives, to speed up processing on subsequent visits to the page.  To enable this feature, set $PageListCacheDir to the name of a writable directory (e.g., ''work.d/'').%0a%0a* The [@(:if ...:)
 @] conditional markup now also understands [@(:elseif ...:)@] and [@(:else:)@].  Conditions still do not nest, however.%0a%0a* The [@(:if date ...:)@] conditional markup can now perform date comparisons for dates other than the current date and time.%0a%0a* [[WikiTrails]] can now specify #anchor identifiers to use only sections of pages as a trail.%0a%0a* A new [@(:if ontrail ...:)@] condition allows testing if a page is listed on a trail.%0a%0a* The extensions .odt, .ods, and .odp (from OpenOffice.org) are now recognized as valid attachment types by default.%0a%0a* A new [[blocklist]] capability has been added to the core distribution.  It allows blocking of posts based on IP address, phrase, or regular expression, and can also make use of publicly available standard blocklists.  See [[PmWiki.Blocklist]] for details.%0a%0a* There is a new [[SiteAdmin.AuthList]] page that can display a summary of all password and permissions settings for pages on a site.  This page is restri
 cted to administrators by default.%0a%0a* There are new [@{$PasswdRead}@], [@{$PasswdEdit}@], etc. variables that display the current password settings for a page (assuming the browser has attr permissions or whatever permissions are set in $PasswdVarAuth).%0a%0a* Forms creation via the [@(:input:)@] markup has been internally refactored somewhat (and may still undergo some changes prior to 2.2.0 release).  The new [@(:input select ...:)@] markup can be used to create select boxes, and [@(:input default ...:)@] can be used to set default control values, including for radio buttons and checkboxes.%0a%0a* The [@(:input textarea:)@] markup now can take values from other sources, including page text variables from other pages.%0a%0a* Specifying [@focus=1@] on an [@(:input:)@] control causes that control to receive the input focus when a page is loaded.  If a page has multiple controls requesting the focus, then the first control with the lowest value of [@focus=@] "wins".%0a%0a*
  PmWiki now provides a ''scripts/creole.php'' module to enable Creole standard markup.  To enable this, add [@include_once('scripts/creole.php')@] to a local customization file.%0a%0a* PmWiki adds a new [@{(...)}@] ''markup expression'' capability, which allows various simple string and data processing (e.g., formatting of dates and times).  This is extensible so that recipe authors and system administrators can easily add custom expression operators.%0a%0a* It's now possible to configure PmWiki to automatically create Category pages whenever a page is saved with category links and the corresponding category doesn't already exist.  Pages are created only if the author has appropriate write permissions into the group.  To enable this behavior, add the following to ''local/config.php'':%0a%0a-->[@$AutoCreate['/^Category\\./'] = array('ctime' => $Now);@]%0a%0a* Sites with wikiwords enabled can now set $WikiWordCount['WikiWord'] to -1 to indicate that 'WikiWord' should not be sp
 aced according to $SpaceWikiWords.%0a%0a* WikiWords that follow # or & are no longer treated as WikiWords.%0a%0a* Links to non-existent group home pages (e.g., [@[[Group.]]@] and [@[[Group/]]@]) will now go to the first valid entry of $PagePathFmt, instead of being hardcoded to "Group.Group".  For example, to set PmWiki to default group home pages to [@$DefaultName@], use%0a%0a-->[@$PagePathFmt = array('{$Group}.$1', '$1.{$DefaultName}', '$1.$1');@]%0a%0a* PmWiki now provides a $CurrentTimeISO and $TimeISOFmt variables, for specifying dates in ISO format.%0a%0a* [[(Cookbook:)Cookbook]] authors can use the internal PmWiki function UpdatePage (temporarily documented at [[(Cookbook:)DebuggingForCookbookAuthors]]) to change page text while preserving history/diff information, updating page revision numbers, updating RecentChanges pages, sending email notifications, etc.%0a%0a* [[Skin templates]] are now required to have %3c!--HTMLHeader--> and %3c!--HTMLFooter--> directives.  Se
 tting $EnableSkinDiag causes PmWiki to return an error if this isn't the case for a loaded skin.  Skins that explicitly do not want HTMLHeader or HTMLFooter sections can use %3c!--NoHTMLHeader--> and %3c!--NoHTMLFooter--> to suppress the warning.%0a%0a* Added a new "pre" wikistyle for preformatted text blocks.%0a%0a* The xlpage-utf-8.php script now understands how to space UTF-8 wikiwords.  %0a%0a* Searches on utf-8 site are now case-insensitive for utf-8 characters.%0a%0a* Many Abort() calls now provide a link to pages on pmwiki.org that can explain the problem in more detail and provide troubleshooting assistance.%0a%0a* PmWiki no longer reports "?cannot acquire lockfile" if the visitor is simply browsing pages or performing other read-only actions.%0a%0a* The $EnableReadOnly configuration variable can be set to signal PmWiki that it is to run in "read-only" mode (e.g., for distribution on read-only media).  Attempts to perform actions that write to the disk are either ign
 ored or raise an error via Abort().%0a%0a* Including authuser.php no longer automatically calls ResolvePageName().%0a%0a* Authentication using Active Directory is now simplified.  In Site.AuthUser or the $AuthUser variable, set "ldap://name.of.ad.server/" with no additional path information (see PmWiki.AuthUser for more details).%0a%0a* Pages are now saved with a "charset=" attribute to identify the character set in effect when the page was saved.%0a%0a* The phpdiff.php algorithm has been optimized to be smarter about finding smaller diffs.%0a%0a* Removed the (deprecated) "#wikileft h1" and "#wikileft h5" styles from the pmwiki default skin.%0a%0a* The mailposts.php and compat1x.php scripts have been removed from the distribution.%0a%0a!! Version 2.1.27 (2006-12-11)%0a%0aThis version backports from 2.2.0-beta a bugfix for $TableRowIndexMax and also support for the [@{*$Variable}@] markup.%0a%0a!! Version 2.1.26 (2006-09-11)%0a%0aThis version fixes a bug in feeds.php that wou
 ld cause feed entries to be mixed up.%0a%0a!! Version 2.1.25 (2006-09-08)%0a%0aThis release fixes a bug in authuser.php introduced by the 2.1.24 release.%0a%0aThe skin template code has also been extended to allow [@%3c!--XMLHeader-->@] and [@%3c!--XMLFooter-->@] as aliases for [@%3c!--HTMLHeader-->@] and [@%3c!--HTMLFooter-->@].%0a%0a!! Version 2.1.24 (2006-09-06)%0a%0aThis release makes some improvements and fixes to the [[AuthUser]]%0acapability.%0a%0aA bug in authuser.php that had trouble dealing with non-array values in $AuthUser has been fixed.%0a%0aIt is now possible to specify group memberships from ''local/config.php'' (remember that such entries must come ''before'' including the ''authuser.php'' script):%0a%0a    # alice and bob's passwords%0a    $AuthUser['alice'] = crypt('alicepassword');%0a    $AuthUser['bob'] = crypt('bobpassword');%0a%0a    # members of the @writers and @admins groups%0a    $AuthUser['@writers'] = array('alice',  'bob');%0a    $AuthUser['@adm
 ins'] = array('alice', 'dave');%0a%0a    # carol is a member of @editors and @writers%0a    $AuthUser['carol'] = array('@editors', '@writers');%0a%0aAuthUser can now read from Apache-formatted .htgroup files.  The location of the .htgroup file can be done either in ''local/config.php'' or [[Site.AuthUser]]%0a%0a    # local/config.php:%0a    $AuthUser['htgroup'] = '/path/to/.htgroup';%0a%0a    # Site.AuthUser%0a    htgroup: /path/to/.htgroup%0a%0a%0a!! Versions 2.1.21, 2.1.22, 2.1.23 (2006-09-05, 2006-09-06)%0a%0aThis release closes a potential security vulnerability for sites %0athat are running with 'register_globals' set to on.  Details of%0athe vulnerability will be forthcoming on the mailing list%0aand site.%0a%0aSites that are running with PHP 'register_globals' and 'allow_url_fopen'%0aset to 'On' should upgrade to this release at the earliest%0aopportunity.  If upgrading isn't an option, contact Pm for%0aa patch to older versions.%0a%0aThere is now a tool available to 
 analyze PmWiki sites for security%0aand other configuration settings, see [[PmWiki:SiteAnalyzer]].%0a%0aVersion 2.1.23 also corrects a bug that prevented PmWiki from being%0aable to read pagefiles created by versions of PmWiki before 0.5.6.%0a%0a!! Version 2.1.20 (2006-09-04)%0a%0aMore minor bugfixes:%0a* Corrected a bug with WikiWord references appearing in the [@(:attachlist:)@] markup.%0a* Restore ability to remove/override PmWiki's default CSS settings.%0a%0a!! Version 2.1.19 (2006-08-30)%0a%0aThis release provides a number of very minor bugfixes and%0aenhancements:%0a%0a* Fixed a bug in the pageindex code that was causing it to not regenerate as quickly as it should.%0a* Fixed image/object/embed handling in wikistyles to better support the [[Cookbook:Flash]] recipe.%0a* Fixed a bug with wikistyles and input form tags.%0a%0aThe next release(s) may have a number of substantial code%0aenhancements and changes, so this release simply closes out%0aa few items before introduc
 ing those changes.%0a%0a%0a!! Version 2.1.18 (2006-08-28)%0a%0aThis release closes a potential cross-site scripting vulnerability%0athat could allow authors to inject Javascript code through the%0avarious table markups.%0a%0aThe release also adds a new [@(:input image:)@] markup to generate%0aimage input tags in forms.%0a%0aFinally, this release corrects a problem with [@?action=print@]%0afailing to properly set the [@{$Action}@] page variable.%0a%0a!! Version 2.1.17 (2006-08-26)%0a%0aThis release fixes a long-standing bug with $EnableIMSCaching%0a(PITS:00573), whereby login/logout operations wouldn't invalidate %0abrowser caches, causing some people to see versions of a page prior%0ato the login/logout taking place.  %0a%0aThe new IMS caching code maintains a "imstime" cookie in the %0avisitor's browser that keeps track of the time of last login, %0alogout, author name change, or site modification.  This cookie%0ais then used to determine the proper response to browser requ
 ests%0acontaining If-Modified-Since headers.  (Previously only the%0atime of the last site modification was available.)  %0a%0aBrowsers which do not accept cookies will effectively act as%0athough IMS caching is disabled.%0a%0a%0a!! Version 2.1.16 (2006-08-26)%0a%0aThis release makes some improvements to skin handling -- primarily%0athis improves the capability of relocating skin files to other%0alocations, and to provide the ability for recipes to insert items%0aat the ''end'' of HTML output.%0a%0aThis release introduces a [@%3c!--HTMLFooter-->@] directive into%0a[[skin templates]], which allows recipes and local%0acustomizations to insert output near the end of a document %0ausing a $HTMLFooterFmt array from PHP.%0a%0aAlso, the [@%3c!--HeaderText-->@] directive, which inserts the%0acontents of $HTMLHeaderFmt into the output, has now been%0arenamed to [@%3c!--HTMLHeader-->@].  PmWiki will continue to%0arecognize [@%3c!--HeaderText-->@] to preserve compatibility with%0aexist
 ing skins, but [@%3c!--HTMLHeader-->@] is preferred.%0a%0aA new $SkinLibDirs array has been introduced which allows%0athe source locations and urls for skins to be specified from%0aa customization file.  By default $SkinLibDirs is set as%0a%0a  $SkinLibDirs = array("./pub/skins/\$Skin"      => "$PubDirUrl/skins/\$Skin",%0a                  "$FarmD/pub/skins/\$Skin" => "$FarmPubDirUrl/skins/\$Skin");%0a%0aThe keys (on the left) indicate the places to look for a "skin .tmpl %0afile" in the filesystem, while the values (on the right) indicate the%0aurl location of the "skin css file".  Modifying the value of %0a$SkinLibDirs allows a skin .tmpl file to be located anywhere on the %0afilesystem.%0a%0aAs far as I can see, none of the changes introduced by this%0arelease should have any sort of negative impact on existing%0asites, so it should be safe to upgrade.  (If I'm wrong, please%0alet me know.)%0a%0a%0a!! Version 2.1.15 (2006-08-25)%0a%0aThis release includes a number of feat
 ure enhancements and code cleanups%0aas reported or requested by administrators.%0a%0aFirst, AuthUser's LDAP authentication system now allows the use of%0aa [@?filter@] parameter, consistent with urls used for mod_auth_ldap%0aauthorization in Apache.  See the newly updated LDAP section of the%0a[[AuthUser]] documentation for more details.%0a%0aA chicken-and-egg problem with the [@@_site_*@] authorization groups%0ahas been resolved.  It's now possible to have a page's read authorization%0arefer to things such as [@_site_edit@].%0a%0aAlso, the RetrieveAuthPage() function -- used for retrieving pages only%0aif the visitor is authorized to do so -- now recognizes a special%0alevel parameter of 'ALWAYS', which means to always authorize access%0aregardless of the browser or visitors current permissions.  This%0amay be useful for allowing certain operations to take place from%0awithin trusted scripts without having to grant full authorization%0ato the browser.%0a%0aHardcoded instan
 ces of the ''local/'' directory now use a%0acustomizable $LocalDir variable.  This variable controls where%0aPmWiki looks for ''local/config.php'' and per-group customization %0afiles.  It may be useful for some [[Wiki Farm(s)]] contexts.  Note that%0athis does not change or affect the location of %0a''$FarmD/local/farmconfig.php''.%0a%0aSome minor internal changes have been made to %0a''scripts/wikistyles.php'' to better accommodate the %0awikipublisher recipe.  It's probably better if we don't try%0ato explain them.  :-)%0a%0a%0a!! Version 2.1.13, 2.1.14 (2006-08-15, 2006-08-16)%0a%0aThis release fixes a bug in handling numeric passwords, and also%0aallows ldaps:// authentication sources.%0a%0a!! Version 2.1.12 (2006-08-07)%0a%0aThis version introduces the ability to nest divs and tables.%0aThe standard [@(:table:)@] and [@(:div:)@] markups are still%0aavailable, except that a [@(:div:)@] may contain a [@(:table:)@]%0aand vice-versa.  %0a%0aAs in previous versions of PmWik
 i, the [@(:div:)@] markup%0aautomatically closes any previous [@(:div:)@].  However, there%0aare now [@(:div1:)@], [@(:div2:)@], etc. markups (and the%0acorresponding [@(:div1end:)@], [@(:div2end:)@], ...) which can be%0aused to uniquely distinguish divs for nesting purposes.%0a%0aTo restore PmWiki's previous "non-nested" div behavior, set%0a$Transition['nodivnest'] = 1; in a local customization file.%0a%0aOther changes in this release:%0a* Add a [@(:noaction:)@] directive to suppress display of page actions.%0a* Allow anchor tags to contain colons, hyphens, and dots.%0a* Add "white-space" as an allowed wikistyle.%0a* Other minor bug fixes and typographical corrections.%0a%0a%0a!! Version 2.1.11 (2006-06-09)%0a%0aThis is a minor update that prevents [@%25define=%25@] wikistyles%0afrom generating empty paragraphs in the HTML output.  Prior to%0athis release, markup lines containing only wikistyle definitions%0awould often generate empty paragraphs (%3cp>%3c/p>), this release%
 0achanges things so that a markup line beginning with [@%25define=@]%0aand containing only wikistyle definitions will not initiate%0aa new paragraph.%0a%0a%0a!! Version 2.1.10 (2006-06-03)%0a%0aVersion 2.1.4 introduced an [@{$Action}@] page variable that would%0acontain the current [@?action=@] value.  Unfortunately, this page%0avariable conflicted with a pre-existing [@$Action@] global variable%0athat was being used by skins to display a human-friendly form of%0athe current action.  Since there's not really a clean way to resolve%0athis, I've decided to keep [@{$Action}@] as a page variable%0awith the current action value (as introduced in 2.1.4), and change %0athe global for skins to be $ActionTitle.  This will require updating%0askins to use $ActionTitle instead of $Action.  I apologize for the%0aconflict.%0a%0aThis release adds a Site.LocalTemplates page for the [@fmt=#xyz@]%0aoption in pagelist and search results.  The list of pages to be%0asearched can be customized vi
 a the $FPLTemplatePageFmt variable.%0aThe [@fmt=#xyz@] option will now also search the current page for%0aa matching template before searching Site.LocalTemplates%0aand Site.PageListTemplates.%0a%0aThe 'pmwiki' skin now places a %3cspan> around the "Recent Changes"%0alink in the header to make it somewhat easier to style.%0a%0a!! Version 2.1.9 (2006-06-02)%0a%0aThis release fixes a long-standing and difficult-to-find bug with%0athe handling of [@[[~Author]]@] links.%0a%0a!! Version 2.1.8 (2006-06-01)%0a%0aThis release simply changes the $NotifyListFmt variable to be%0a$NotifyListPageFmt (more descriptive), and adds a $NotifyList%0aarray that can be used to specify notification entries from%0aa configuration file.%0a%0a!! Version 2.1.7 (2006-05-31)%0a%0aThis release introduces a variety of improvements and bugfixes.%0a%0a'''Vspace paragraphs are now divs:'''%0aVersion 2.1.7 changes the way that PmWiki handles vertical%0aspace in output (the infamous [@%3cp class='vspace>%3c/p
 >@] sequence).%0aInstead of using paragraphs, PmWiki now generates %0a[@%3cdiv class='vspace'>%3c/div>@] for vertical space sequences.%0aIn addition, PmWiki is able to collapse the vspace %3cdiv> with%0aany subsequent paragraph tags, such that a sequence like%0a%0a    %3cdiv class='vspace>%3c/div>%3cp>...paragraph text...%3c/p>%0a%0ais automatically converted to%0a%0a    %3cp class='vspace'>...paragraph text...%3c/p>%0a%0aThis allows for better control over paragraph spacing.  It is%0aexpected that this change in vspace handling will not have%0aany detrimental effects on existing sites.  Sites that have%0aset custom values for $HTMLVSpace will continue to use the%0acustom value.  A site that wants to restore PmWiki's earlier%0ahandling of vspace can do so by adding the following to%0a''local/config.php'':%0a%0a    $HTMLVSpace = "%3cp class='vspace'>%3c/p>";%0a%0a'''Improved email notifications of changes:'''  Version 2.1.7%0aincorporates a ''notify.php'' script that provides
  improved%0acapabilities for sending email notifications in response to%0apage changes.  This script is intended to replace the previous%0a[[MailPosts]] capability, which is now deprecated (but will%0acontinue to be supported in PmWiki 2.1.x).  Details and %0ainstructions for using notify.php are in the [[PmWiki.Notify]] page.%0a%0a'''Added 'group home page' syntax:''' A group name followed%0aby only a dot or slash is automatically treated as a reference%0ato the group's home page, whatever it happens to be.  This simplifies%0asome pagelist templates as well as a number of other items. %0aIn particular, group links in pagelist output now points to the%0acorrect locations (instead of being a page in the current group).%0a%0aSeveral bugs and vulnerabilities have been fixed:%0a* The default width of edit forms is now more appropriate for Internet Explorer.%0a* Authentication failure messages from LDAP are now suppressed.%0a* Some cross-site scripting vulnerabilities in uploads 
 and page links have been corrected (courtesy Moritz Naumann, http://moritz-naumann.com).%0a* A problem with invalid pagenames resulting in redirect loops has been corrected.%0a%0a!! Version 2.1.6 (2006-05-22)%0a%0aThe primary improvement in this release is the addition of %0aa pagename argument to the [@(:if auth:)@] conditional markup.%0aThus one can display markup based on a visitor's authorization%0ato a page other than the current one.  For example, to test%0afor edit privileges to `Main.WikiSandbox, one would use%0a[@(:if auth edit Main.WikiSandbox:)@].  As before, if the%0apagename is omitted the directive tests authorization to%0athe current page.%0a%0aThis release also restores the ability to have hyphens in%0aInterMap link names.%0a%0aLastly, the release closes a potential cross-site scripting%0avulnerability in the WikiTrail markup, and provides some small%0aperformance improvements.%0a%0a!! Version 2.1.4, 2.1.5 (2006-03-29)%0a%0aThis release fixes a few more bugs:
 %0a* Pagelist-based feeds using ?action=rss work again.%0a* Multi-term searches with special characters is fixed.%0a%0aThe release also adds a couple of items:%0a* There is now an [@{$Action}@] page variable.%0a* Usernames and passwords submitted to authuser.php can contain quotes.%0a* The [@(:attachlist:)@] command now uses a natural case sort.%0a%0a!! Version 2.1.3 (2006-03-17)%0a%0aThis release fixes a bug that prevents the [@lines=@] option from%0aworking on sites running PHP 5.1.1 or later.  It also re-fixes%0aa bug involving empty passwords and LDAP authentication.%0a%0a!! Version 2.1.2 (2006-03-16)%0a%0aThis release fixes a bug with handling "nopass" passwords.  It also%0amakes some speed improvements to large web feeds, and fixes a couple%0aof minor HTML tag mismatches.%0a%0a!! Version 2.1.1 (2006-03-13)%0a%0aThis release primarily fixes a bug with passwords containing%0amultiple authorization groups, and in the process slightly liberalized%0athe formatting of "@grou
 p" and "id:name" handling.  This release also %0aadds a new mechanism for managing and displaying FAQ pages.%0a%0a!! Version 2.1.0 (2006-03-12)%0a%0aThis set of release notes is fairly lengthy, as it chronicles all of the changes since 2.0.13 (four months of development).  A lot remains the same, but some changes warrant extra care when upgrading from a 2.0.x version to 2.1.0 (thus the major revision number change).  As always, questions and issues can be mailed to the pmwiki-users mailing list.%0a%0aHere's the list:%0a%0a* WikiWords are now disabled by default.  To enable them, set "$LinkWikiWords = 1;" in a [[local customization(s)]] file.  As of 2.1.beta2, you can now leave WikiWords enabled but have links to non-existent pages display without decoration -- to do this, place the following lines in ''pub/css/local.css'':%0a%0a    span.wikiword a.createlink { display:none; }%0a    span.wikiword a.createlinktext %0a      { border-bottom:none; text-decoration:none; color:inhe
 rit; }%0a%0a* The [@(:pagelist:)@] code has been substantially revised.  Pagelist formatting can now be specified using markup, and several defaults are available from [[Site.PageListTemplates]].  Also, several built-in pagelist formatting functions (FPLSimple, FPLByGroup, FPLGroup) are now removed in favor of the template code.  The FPLByGroup function can be restored by setting $Transition['fplbygroup']=1; . '''Remark:''' Check to see if your page [[Site.PageListTemplates]] is not passwordprotected for viewing, otherwise the resulting pagelist will not be shown. %0a%0a* [@(:pagelist:)@] now also understands wildcards in @@group=@@ and @@name=@@ arguments, as well as excluding specific names and groups.%0a%0a* [@(:pagelist:)@] now has an "order=random" option.%0a%0a* [@(:searchbox:)@] now accepts "group=", "link=", "list=", etc. options to be passed along to the search results.  It also accepts a "target=" option that identifies the page on which to send the search query.%0
 a%0a* [@?action=search@] will display the contents of the current page if it contains a [@(:@][@searchresults:)@] directive, otherwise it uses the content of the page identified by $PageSearchForm (default is the search page for the current language translation).  %0a%0a* PmWiki no longer maintains a ".linkindex" file -- it now has a ".pageindex" file that contains not only a table of links, but also words used in each page (to speed up term searches).  The maintenance of the .pageindex file can be disabled by setting $PageIndexFile=''; %0a       %0a* The $EnablePageListProtect variable now defaults to true, so that read-only pages appear in pagelists only if the visitor has read authorization.  Note that this can also slow down some [@(:pagelist:)@] and search commands, so if the site doesn't have any read-only pages or if you aren't worried with cloaking read-only pages from searchlists, it might be worth setting $EnablePageListProtect=0; .%0a%0a* Whitespace indentation ru
 les now exist and are enabled by default.  Any line that begins with whitespace and aligns with a previous list item is considered to be "within" that list item.  Text folds and wraps as normal, and the [@(:linebreaks:)@] directive is honored.  To turn off whitespace indentation, use [@DisableMarkup('^ws');@].%0a%0a* A single blank line after a [@!!Heading@] is silently ignored.%0a%0a* The [@(:redirect:)@] directive is now a true markup, and can be embedded inside conditional markups or includes.  It also allows redirecting to an anchor in a page, such as [@(:redirect PageName#anchor:)@].  A new [@from=@] option allows the redirect to take place only from pages that match the given wildcard specification.  The [@status=@] option allows a 301, 302, 303, or 307 HTTP status code to be returned.%0a%0a* The built-in authorization function has gone through some substantial internal changes, however these changes should be fully backward compatible so that it doesn't impact any exi
 sting sites.  (If it ''does'' cause a problem, please let me know so I can investigate why!)  The password prompts are now specified by an admin-customizable Site.AuthForm page.  In addition, the authorization function no longer creates PHP sessions for visitors that aren't being authenticated.%0a%0a* The authuser.php has likewise been substantially updated.  The new version should have complete backwards compatibility with previous authuser.php settings, but this version also offers the ability to configure authentication resources and authorization groups through the [[Site.AuthUser]] page.  Note that by default the Site.AuthUser page can only be edited using the admin password.%0a%0a* The $Author variable now defaults to $AuthId if not otherwise set by a script or cookie.%0a%0a* The [[Site.SideBar]] page now defaults its edit password to the sitewide edit password (in $DefaultPasswords['edit']).%0a%0a* PmWiki now supports a "draft edit" mode, enabled by $EnableDrafts = 1.
   This creates a "Save as draft" button that will save a page under a "-Draft" suffix, for intermediate edits.%0a%0a* There is now an ?action=login action available.%0a%0a* A potential security vulnerability for sites running PHP 5 with register_globals enabled has been fixed.%0a%0a* The [@[[PageName |+]]@] markup is now available by default; this creates a link to `PageName and uses that page's title as the link text.%0a%0a* What used to be "markup variables" are now "[[page variables]]".  These are always specified using the @@{$''variable''}@@ syntax, and can be used in markup and in $...Fmt strings.  In addition, one can request a value for a specific page by placing the pagename in front of the variable, as in @@{''pagename''$''variable''}@@.%0a%0a* The ''scripts/rss.php'' script is now ''scripts/feeds.php'', and is a complete redesign for [[web feed(s)]] generation.  The new version supports UTF-8 and other encodings, can generate Atom 1.0 ([@?action=atom@]), Dublin Co
 re Metadata ([@?action=dc@]) output, and enclosures for podcasting.  It also allows feeds to be generated from trails, groups, categories, and backlinks, and provides options (same as pagelists) for sorting and filtering the contents of the feed.  Most sites can simply switch to using [@include_once("scripts/feeds.php");@] instead of the previous ''rss.php'' include.  The ''rss.php'' file has been removed from the distribution (but still works with PmWiki 2.1 for those sites that wish to continue using it).%0a%0a* [[PmWiki/InterMap]] entries can now come from a `Site.InterMap page as well as the ''local/localmap.txt'' and ''local/farmmap.txt'' files.  The format of these files has changed slightly, in that the InterMap name should now have a colon after it (previously the colon was omitted).%0a%0a* We can now provide better control of robot (webcrawler) interactions with a site to reduce server load and bandwidth.  The $RobotPattern variable is used to detect robots based on
  the user-agent string, and any actions not listed in the $RobotActions array will return a 403 Forbidden response to robots.  In addition, setting $EnableRobotCloakActions will eliminate any forbidden ?action= values from page links returned to robots, which will reduce bandwidth loads from robots even further (PITS:00563).%0a%0a* Non-existent page handling has been improved; whenever a browser hits a non-existent page, PmWiki returns the contents of Site.PageNotFound and a 404 ("Not Found") status code.%0a%0a* Page links that have "?action=" in their query arguments are now treated as "existing page" links even if the page does not exist.%0a%0a* The PmWiki default skin now adds rel='nofollow' to various action links.%0a%0a* Some of the CSS styles in the PmWiki default skin have been changed for better presentation.%0a%0a* The gui edit buttons have transparent (instead of white) borders so they integrate better into skins.%0a%0a* The $EnableIMSCaching variable is now much s
 marter, it can detect changes in local customization files as well as pages.%0a%0a* [[PmWiki/WikiStyles]] can now make percentage specifications by using "pct" to mean "%25".%0a%0a* Class attributes in [[WikiStyle(s)]] shortcuts are now cumulative, so that [@%25class1 class2%25@] results in [@class='class1 class2'@] instead of just [@class='class2'@] in the output.%0a%0a* A problem with the [@(:include PageName#from#:)@] markup not working has been fixed (PITS:00560).%0a%0a* Viewing a GroupHeader or GroupFooter page no longer displays the contents twice.%0a%0a* It's now easier to share pages among multiple sites (e.g., [[WikiFarms]]), see Cookbook:SharedPages (PITS:00459).%0a%0a* A problem with nested apostrophe markups has been fixed (PITS:00590).%0a%0a* PmWiki is now smarter about not surrounding block HTML tags with %3cp>...%3c/p> tags.%0a%0a* If an [@[[#anchor]]@] is used more than once in a page, only the first generates an actual anchor (to preserve XHTML validity).%0a
 %0a* There are now [@(:if equal ...:)@] and [@(:if exists pagename:)@] [[conditional markup]]s.%0a%0a* Compound conditional markup expressions are now possible -- e.g. [@(:if [ group PmWiki && ! name PmWiki ] :)@] .%0a%0a* Added an $InputValues array that can supply default values for certain form controls (PITS:00566).%0a%0a* The default setting of $UploadUrlFmt is now based on $PubDirUrl instead of $ScriptUrl.%0a%0a* The $text global variable has been removed (use $_GET['text'], $_POST['text'], or $_REQUEST['text']).%0a%0a* A possible problem with url-encoding of attachments with non-ASCII characters has been addressed (PITS:00588).%0a%0a* Page actions in non-existent pages no longer display with non-existent link decorations.%0a%0a* A README.txt file has been added, and several documentation files are now available through the docs/ directory.%0a  %0a* PmWiki is no longer available through CVS on sourceforge.net.  It is now available via SVN on pmwiki.org, at svn://pmwiki
 .org/pmwiki/tags/latest .  For more details, see PmWiki:Subversion.%0a%0a* The $NewlineXXX variable (deprecated in 2.0.0) has been removed.%0a%0a* There is experimental support for server-side caching of pages that take a long time to render; this is currently an unsupported feature and may be removed in future releases.%0a%0a%0a!! Version 2.0.13 (2005-11-10)%0a%0aThis is a release containing minor bugfixes and improvements%0ain preparation for the 2.1.beta series.%0a%0a%25red%25Wiki administrators should note that after this release PmWiki will default to having WikiWords disabled.\\%0a%0aTo make sure WikiWords are enabled, use [@$LinkWikiWords = 1;@] in%0athe ''local/config.php'' file.%0a%0a%0a!! Version 2.0.12 (19-Oct-2005)%0a%0aThis release cleans up problems with page validation for page links%0acontaining query fragments and ampersands, changes PmWiki to use a%0aPHP "return" statement instead of "exit", and fixes a warning in%0ascripts/transition.php.%0a%0a!! Version 2
 .0.11 (17-Oct-2005)%0a%0aThis release fixes a couple of important bugs and adds some new%0afeatures to PmWiki.%0a%0aMost importantly, this release fixes bug with ?action=attr%0aaffecting the page history.%0a%0aFor sites using LDAP authentication with authuser.php, PmWiki%0anow provides $AuthLDAPBindDN and $AuthLDAPBindPassword variables%0ato specify the binding to be used for searching.  It also works%0aaround a PHP oddity that causes users to appear authenticated%0awhen an empty password is provided.  Authuser.php also now%0ahandles straight md5 password encryptions (commonly used by%0a`MySQL databases).%0a%0aThe core now includes the [@(:linebreaks:)@] markup%0a(from Cookbook:LineBreaks), which causes text on separate%0alines in the markup to appear as separate lines in the output%0a(i.e., no auto-joining of one line to the previous one).%0a%0aThere have been some internal changes designed to provide%0abetter support for leading-whitespace rules (more details on%0athis in 
 a future release).%0a%0aThe core now provides an [@(:if date:)@] markup to display%0atext only if the current day is within a range of supplied%0adates.%0a%0a!! Version 2.0.10 (29-Sep-2005)\\%0aVersion 2.0.9 (28-Sep-2005)%0a%0aThis release fixes an oversight in xlpage-utf-8.php that failed to uppercase ASCII letters when mb_strtoupper isn't present.%0a%0a!! Version 2.0.8 (27-Sep-2005)%0a%0aThis release simply adds the capability to use quotes to enter%0apass phrases (passwords containing spaces) using ?action=attr,%0aand fixes a bug with displaying the name instead of the title in%0athe default print skin.%0a%0a!! Version 2.0.7 (26-Sep-2005)%0a%0aThis version changes the xlpage-utf-8.php case conversion slightly%0ato use a more direct conversion table, and completed the table%0afor more characters in the utf-8 set.%0a%0aThis release also fixes the $VersionNum variable that was supposed to%0aappear in 2.0.6.%0a%0aAn accesskey shortcut (ak_textedit) is being added to the edit 
 form%0atext area.%0a%0aLastly, this release adds a timelimit to the generation of .linkindex,%0ato avoid long page times when generating the .linkindex.%0a%0a%0a!! Version 2.0.6 (16-Sep-2005)%0a%0aIn this release, we provide quite a few more updates for sites that%0awant or need to use utf-8 encoding, fix a large number of utf-8 %0arelated bugs, introduce better handling of author cookies, and%0abetter support for keeping track of version releases.%0a%0aThe biggest change is to the xlpage-utf-8.php recipe, which has%0abeen substantially rewritten from the previous version.  This new%0aversion of xlpage-utf-8.php no longer depends on the %0a[[http://www.php.net/mb_strtoupper | mb_strtoupper()]]%0afunction, which seems to be not available in many PHP installations.%0aThe new version of xlpage-utf-8.php uses mb_strtoupper() if it's%0aavailable, but if not available then it manually performs case %0aconversions from a Unicode table that is directly encoded in the%0ascript.  At p
 resent this table only understands case conversions%0afor Western European (Latin-1 or ISO-8859-1) and Cyrillic characters,%0awe'll want to expand the table to support other language character%0asets as needed.  Just contact me on the listserv if a particular%0acharacter isn't yet supported.%0a%0aIn addition to the above, author names and cookies in utf-8 environments%0anow work again, and link suffixes containing non-ASCII characters work%0aagain also.%0a%0aThe GUI button handling in IE has been greatly improved; text selection%0ain IE now works as you would expect it to work when a gui button is%0apressed.  Possibly still no hope for Mac Safari browsers, unfortunately...%0a%0aA $CookiePrefix variable has been introduced; a wiki administrator%0acan set $CookiePrefix to prevent PmWiki's cookies from interfering with%0acookies set from other applications under the same domain name.%0a%0aSome XHTML validation issues surrounding the use of %3cscript> tags %0ahave been fixed.%0a
 %0aAnd lastly, for script and recipe authors, there is now a $VersionNum%0anumeric value that makes it easier to determine if the currently running%0aversion of PmWiki is older or newer than a known release.  $VersionNum%0ais composed from the release number by padding the major and minor%0arelease numbers with zeroes to three digits, thus $VersionNum for this%0arelease (2.0.6) is 2000006, while a release like "2.1.24" will have%0a$VersionNum set to 2001024.%0a%0aAs mentioned on the pmwiki-users mailing list, we are also now maintaining%0aPITS entries for enhancements and changes to consider making in the %0acore distribution.  The list can be found at %0ahttp://www.pmwiki.org/PITS/CoreCandidate, all are welcome to add %0acomments and vote on the items under consideration.%0a%0a%0a!! Version 2.0.5 (9-Sep-2005)%0a%0aThis version adds an [@?action=logout@] and cleans up a few things %0afor internationalization (i18n) support.  %0a%0aWe've also formally deprecated and eliminate
 d the $Newline variable %0afrom the core code -- sites that absolutely need pages stored in%0athe 1.x format can set $NewlineXXX.  (Note that this version %0acontinues to be able to read pages from all previous PmWiki%0aformats.)%0a%0a!! Version 2.0.4 (8-Sep-2005)%0a%0aOne week after the release of 2.0.0 we're now up to 2.0.4, most%0achanges have been minor bug fixes and improvements.  This release%0aprovides a few improvements here and there.%0a%0aThe biggest change is the addition of a link indexing system for%0aimproving the speed of [[Categories]] and backlinks (using the %0a[@(:pagelist link=...:)@] markup.  The system uses a ''.linkindex'' %0afile to keep track of all page links within the site, generating and%0aupdating the file as needed and using the file to avoid scanning pages%0athat are known to not link to the target.  The ''.linkindex''%0afile can be removed at anytime to cause it to be regenerated from%0ascratch.  Link indexing can be disabled by setting $Enab
 leLinkIndex=0;%0ain ''local/config.php''.%0a%0aThe "change summary" associated with each edit is now limited to%0aa maximum of 100 characters.  A local customization can increase%0athe size of the summary.%0a%0aThe tilde sequences used to generate signatures are now precise;%0aonly a sequence of exactly three or four tildes result in a signature.%0aLonger sequences of tildes such as ~~~~~~~~ are left alone and not%0aconverted to signatures.  (Generating a sequence of three or four%0atildes still requires creative use of escapes, as in [@[=~~=]~@] and%0a[@[=~~=]~~@].)%0a%0aA number of previously hard-coded prompts are now internationalized.%0a%0aMany PHP E_NOTICE messages (displayed when error_reporting() is%0aset to its maximum value) are now eliminated.%0a%0a%0a!! Version 2.0.3 (6-Sep-2005)%0a%0aThis is a minor update; it enhances the core to display change%0asummaries in the page history, and makes additional attributes%0aavailable to input forms in forms.php.%0a%0aThis re
 lease also fixes a bug in the setting of the $sub parameter%0afor LDAP authentication, improves the setting of default values%0ain scripts/urlapprove.php, and fixes the search pages and skin%0ato use $SiteGroup instead of the hard-coded "Site" variable.%0a%0aLastly, this update changes the [@(:searchbox:)@] markup to%0abe a bit smarter about form generation when $EnablePathInfo%0ais set.%0a%0a!! Version 2.0.2 (3-Sep-2005)\\%0aVersion 2.0.1 (2-Sep-2005)%0a%0aThese versions correct some minor bugs in the loading and saving%0aof pages, the MailPosts feature, and documentation.%0a%0a!! [+ Version 2.0.0 (1-Sep-2005) +]%0a%0aAt long last, I'm very pleased to announce the official release of%0aPmWiki 2.0.0, now available at http://www.pmwiki.org/pub/pmwiki .%0a%0aPmWiki 2.0 has been in development for well over a year, with more%0athan eighty development and beta releases.  In addition, the%0acookbook for 2.0 continues to expand, and currently has over 200%0arecipes and more on the
  way.%0a%0a'''Not available at press time:''' For those who may be concerned%0athat their "must-have feature" didn't make it into the 2.0.0 release,%0adon't be.  The 2.0.0 release isn't the end of development, but%0ajust the stable basis for the next set of features and improvements.%0aEven if some features (e.g., discuss/comments pages, table of%0acontents, authorization groups, faster backlinks/categories)%0aaren't in the 2.0.0 release, I'm comfortable that we're at a point%0awhere these features can be added as 2.0.x releases with minimal%0aimpact to existing 2.0 sites.  And if not, then we'll start on 2.1.  :-)%0a%0a'''Upgrading to 2.0.0:''' Many sites have been keeping relatively%0aup-to-date with the latest 2.0 beta releases; for most of these%0asites upgrading to 2.0.0 is a minor upgrade (but see the notes below).%0aFor sites running beta versions of PmWiki older than 2.0.beta44,%0athe upgrade may require a bit of extra work -- check the ReleaseNotes%0afor more detail
 s.  For sites running 1.x or 0.6 versions of PmWiki,%0asee http://www.pmwiki.org/wiki/PmWiki/UpgradingFromPmWiki1 for%0atips on successfully migrating the site to PmWiki 2.0.0.%0a%0aPmWiki 2.0.0 does have some changes over the previous (beta55)%0arelease:%0a%0a* Lots of changes and improvements to the documentation.  Some documentation pages still need work, but the documentation is now sufficiently far along that I'm comfortable with making the release.%0a%0a* The release comes with a new default skin, matching the one currently available at http://www.pmwiki.org.  For those sites that wish to retain the old skin, it is available from http://www.pmwiki.org/wiki/Cookbook/PmWikiV1Skin .%0a%0a* The storage format for pages in wiki.d/ has changed somewhat.  PmWiki 2.0.0 can seamlessly read and interact with pages stored in previous formats, but any external scripts that may attempt to read wiki.d/ files directly will need to be adjusted to understand the new format.  In particu
 lar, the $Newline variable has been deprecated in this release and is no longer used.  (Sites that need file-level compatibility with previous versions can set a value for $Newline and PmWiki 2.0 will use that, however.)%0a%0a* Deleted pages now have a ",del-1234567890" suffix instead of just the timestamp.%0a%0a* The Site.SideBar is now unprotected by default.  Other pages in the Site group continue to be protected against edits and require the admin password to unlock.%0a%0a* Several relatively small improvements and bug fixes -- see the ChangeLog for details.%0a%0a'''What's next:'''  Next I plan to work on getting internationalizations updated to 2.0.0 -- many i18n items "broke" in beta44 and need to be cleaned up.  In conjunction with this will be page improvements and cleanups on pmwiki.org, as well as addressing outstanding PITS entries.  After that will come more feature enhancements, including comments pages, section edits, and improved indexing/search capabilities.%
 0a%0a----%0a%0a'''Thank you:''' My sincere and humble thanks to everyone who has contributed so much of their time, ideas, opinions, writing, and code to PmWiki.  I notice that the PmWiki:Contributors page is way out of date, so if you've helped at all with PmWiki core development, don't be shy or modest -- feel free to add yourself to the list and be associated with an outstanding group.%0a%0aAnd, as always, comments, suggestions, questions, and bug reports can be reported to the mailing list or the PmWiki Issue Tracking System.%0a%0aThanks again,%0a%0aPm%0a%0a----%0a%0a!!!Version 2.0.beta55 (25-Aug-2005)%0aI was really hoping that the next release would be 2.0.0, but it %0adidn't work out that way.  Really all that needs to be done now is %0ato finish cleaning up the documentation.%0a%0aThis release has a number of important changes and bugfixes.  First,%0athe 'value=' wikistyle is working again, having been broken in an%0aearlier release.  WikiStyles now also accept dots 
 and parens in values,%0aso that things like "1.5em" and "rgb(255,255,255)" work.  There's a%0anew "[@%25cframe%25@]" wikistyle, which centers content in a 200-pixel frame%0a(this can be adjusted with a "width=" parameter in the wikistyle).%0a%0aThe [@(:include:)@] directive now allows a list of pages to be searched%0afor inclusion; the first existing page is selected.  Thus the markup%0a%0a    [@(:include Page1 Page2 Page3:)@]%0a%0aincludes the contents of the first available of Page1, Page2, or Page3.%0a%0aThe [=[@...@]=] markup is now the "preformatted text" markup.  It can be%0aused instead of the space [@[=...=]@] markup to generate blocks of%0apreformatted and escaped text.  It's also fairly smart about handling%0aextra newlines inside the [=[@...@]=], so that there isn't a lot of%0aunwanted vertical space displayed in the output.%0a%0aAnd speaking of unwanted vertical space, PmWiki's handling of "blank lines"%0ain the markup text has been changed somewhat.  In previous
  versions%0aof PmWiki, some directives %0a(e.g., [@(:comment:), (:keyword:), (:noleft:), (:if:)@]) often %0aresulted in blank lines in the markup text, which then%0agenerated vertical space on the output.  In this release, only those%0alines that are blank in the original source markup (before processing)%0aend up generating vertical space in the output.  This ends up being%0amuch more natural for authors and allows cleaner markup sequences.%0a%0aThis change may have some ramifications for selected recipe authors.%0aIf a custom markup rule produces other wiki markup to be processed by%0aPmWiki, and the output wiki markup contains blank lines that is intended%0ato generate vertical space in the page output, then the custom markup rule%0aneeds to either generate '%3c:vspace>' tags for the blank lines or call%0athe PVS() function to convert blank lines into vertical space tags.%0a(For more details or assistance, query the mailing list.)%0a%0aSome may have noticed that pmwiki.or
 g now has a new skin; some version of%0athis skin is expected to become the standard skin in the next release.  %0aThe current 2.0.beta skin will be made available for download in the %0aCookbook for sites that want to continue using it.%0a%0a!!!Version 2.0.beta54 (1-Aug-2005)\\%0aVersion 2.0.beta53 (30-Jul-2005)%0a%0aThis release restores ?action=search, to be able to perform searches%0ain the context of a group or current page.  It also modifies the%0a[@(:searchbox:)@] directive to allow a "group=" option to limit%0asearches to certain groups.%0a%0a!!!Version 2.0.beta52 (29-Jul-2005)%0a%0aThis release provides a number of minor bugfixes and introduces improvements%0ato image handling.  Most of the improvements for images are described%0aon the [[PmWiki.Images]] page.  Other changes are in the [[ChangeLog]].%0a%0a!!!Version 2.0.beta51 (22-Jul-2005)%0a%0aThis release corrects a problem introduced by the "Save and Edit"%0acapabilities introduced in 2.0.beta44 -- posts made wi
 th "Save and Edit"%0acould bypass blocklists, urlapprovals, and simultaneous edits.%0a%0aFor administrators and recipe writers who have been working with%0aposting capabilities, posting is now controlled by an $EnablePost%0avariable.  Setting $EnablePost to zero suppresses the actual post --%0apreviously this was generally performed with [@unset($_POST['post'])@].%0aIf appropriate, a message for why the post was suppressed can%0ausually be placed in the $MessagesFmt array.%0a%0a!!!Version 2.0.beta50 (20-Jul-2005)%0a%0aThis release makes two major improvements to the authorization%0asemantics in PmWiki:%0a%0a1.  The $HandleAuth array can be used to set the authorization%0alevel required for executing a corresponding action.  For example,%0asetting $HandleAuth['diff'] to 'edit' means that edit authorizations%0aare required to view the page history ([@?action=diff@]).  Similarly,%0asetting $HandleAuth['source'] to 'admin' means that only the%0aadmin would be able to use [@?acti
 on=source@].%0a%0a2.  Passwords can now "cascade" -- that is, if a page sets a 'read'%0apassword but not an 'edit' password, then the read password%0ais also used as the edit password.  Similarly, if a page sets%0aan 'edit' password but not an 'attr' password, then the edit%0apassword is also used as the attr password.%0a%0aThis prevents situations where authors set an edit password%0aon a page but don't set a corresponding attr password.%0a%0aThis does not change PmWiki's other passwording characteristics --%0ai.e., page passwords still override group passwords, and group%0apasswords still override site passwords.  Password cascading%0ais only used where there's no page, group, or site password set %0afor a given authorization level.%0a%0a!!!Version 2.0.beta49 (19-Jul-2005)%0a%0aThis release adds a Content-Disposition: header for sites that have%0adirect downloads disabled (automatically fills in a browser's filename%0afor such downloads).  It also fixes some issues with \\
  markup at the%0aends of lines.%0a%0a!!!Version 2.0.beta48 (13-Jul-2005)\\%0aVersion 2.0.beta47 (12-Jul-2005)\\%0aVersion 2.0.beta46 (11-Jul-2005)\\%0aVersion 2.0.beta45 (10-Jul-2005)\\%0aVersion 2.0.beta44 (10-Jul-2005)%0a%0aThis release has a number of major changes, and is hopefully the%0alast such "major" release before 2.0.0.  %0a%0aIncluded with this release is a special ''transition.php'' script%0athat reconfigures PmWiki as needed to cause it to work as it did%0ain previous releases.  In the release notes below any changes%0athat are handled by the transition script are marked by [ ].%0aThis transition script is automatically loaded by default so the%0asite admin doesn't need to do anything to use it.%0a%0aEventually the transition script will also provide diagnostic%0aoptions to inform site admins of places where they may be relying%0aon outdated or deprecated features, and how they can change their%0asettings to be up-to-date.%0a%0aPmWiki now sets CSS stylings so t
 hat all images within a page are%0adisplayed without a border (HTML's default is a 1-pixel border).%0aTo restore the behavior of previous versions, add the following to%0a''local/config.php'':%0a%0a    $HTMLStylesFmt['img'] = ' img { border:1px solid; } ';%0a    $ImgTagFmt="%3cimg src='\$LinkUrl' style='border:0px;' alt='\$LinkAlt' />";%0a%0aWith this release we are officially initiating use of the "Site"%0agroup discussed on the pmwiki-users mailing list.  The Site group %0ais intended to hold a variety of utility and configuration pages %0aused by PmWiki, and many of PmWiki's pages have moved from the %0a"Main" group into this new location.  More on this in a bit.%0a%0aThe major internal change is that this release provides support%0afor input forms.  Notably, the "Edit Page" form layout can now%0abe specified using wiki markup in the Site.EditForm page.  ( [ ] However,%0aPmWiki still honors the $PageEditFmt variable for those sites or%0askins that may have customized edit
  forms.)%0a%0aThe edit form now includes a "change summary" line where authors%0acan summarize the edits.  The edit form can also contain %0aa "Save and edit" button to save changes but continue editing, and%0aa "Cancel" button for abandoning changes.%0a%0aThe $EditMessageFmt variable for displaying messages to authors%0ais now the $MessagesFmt array, which can be displayed using the%0a[=(:messages:)=] markup.  [ ] The transition script takes care%0aof moving messages between $EditMessageFmt and $MessagesFmt as%0aneed to preserve correct operation.%0a%0aA number of traditional locations for pages have now been moved%0ainto the Site group, many of which are handled by the transition%0ascript:%0a%0a* The new location for the `AllRecentChanges page is Site.AllRecentChanges.  [ ] However, if `Main.AllRecentChanges exists then it will continue to be updated also.  Administrators may wish to move `Main.AllRecentChanges to Site.AllRecentChanges and/or remove `Main.AllRecentChanges 
 entirely.%0a%0a* The search results page is now [[Site.Search]] instead of `Main.SearchWiki.  `Main.SearchWiki will be removed entirely in a future release.  [ ] The transition script takes care of mapping some instances of `Main.SearchWiki in links to Site.Search.%0a%0a* Approved urls are now stored in `Site.ApprovedUrls .  [ ] However, if `Main.ApprovedUrls exists it is used and updated as appropriate.%0a%0a* `Main.SideBar is now `Site.SideBar.  Unfortunately, it's very difficult to manage this particular change among all possible skin combinations, so it's up to the admin to correctly move existing sidebar pages into the appropriate group, or to update the skin template accordingly.%0a%0a* `PmWiki.EditQuickReference and `PmWiki.UploadQuickReference are now stored in the Site group.%0a%0a* `PmWiki.WikiHelp is being deprecated and will be removed from a future release.%0a%0aThe $PagePreviewFmt variable no longer exists in standard PmWiki (it's now handled by Site.EditForm).
   [ ] However, to preserve backwards compatibility it is loaded by the transition script in certain situations.%0a%0aThe $PageName substitution (deprecated in 2.0.devel14) is now gone.%0aUse $FullName instead.%0a%0aThe GUI buttons can now have accesskeys associated with them.%0a%0aGUI buttons are now displayed via a [@(:e_guibuttons:)@] directive in Site.EditForm, instead of being attached to $EditMessagesFmt.%0a%0aThis release now provides the ability for user and browser-specific%0apreferences and customizations, including accesskeys and form element%0asizes.  More details about this will be forthcoming in documentation.%0a%0aThe release adds standard [@(:noleft:)@] and [@(:noright:)@] directives for suppressing the display of the left and right sidebars (depending on skin template).%0a%0a%0a!!!Version 2.0.beta43 (8-Jul-2005)%0a%0aThis release adds the long awaited [@(:div:)@] markup.  The format of%0athe markup is%0a    [=%0a    (:div:)%0a    ...%0a    (:divend:)%0a    =]
 %0aAttributes (e.g., [@id='name'@] and [@class='class'@] can be supplied %0ato the [@(:div:)@] directive.  [@(:div:)@] lives in the same markup%0alayer as advanced tables [@(:table:)@], so divs and tables do not%0anest, and any div or advanced table directive ends any previous%0a[@(:div:)@].  (We may change this in a future release; for now we'll go%0awith the non-nesting version.)%0a%0aThe release also adds a div shortcut, any line beginning with >>%3c%3c%0amarks a new div section.  In addition, wikistyle specifications%0acan go between the >> and %3c%3c, thus [@>>bgcolor=#ffffdd%3c%3c@] will create%0aa division with a light yellow background.  Similarly, one can%0ado things like [@>>id=foo%3c%3c@], [@>>class=bar%3c%3c@], and even make%0ause of author-defined wikistyles such as >>center%3c%3c or >>Don%3c%3c.%0a%0aLastly, the wikistyle code now supports [@%25id=name%25@], which%0aallows an HTML [@id='name'@] attribute to be added to the%0aaffected text.%0a%0a!!!Version 2.0.b
 eta42 (7-Jul-2005)%0a%0aThis minor release adds the [@(:if attachments:)@] conditional markup, to include/exclude markup based on the (non)existence of attachments to the current page.%0a%0a!!!Version 2.0.beta41 (7-Jul-2005)%0a%0aThis is a minor release with some small bugfixes to uploads, adding the ability to set the item number for ordered lists with [@%25item value=nn%25@], and enabling nested Keep()s for module writers.%0a%0a!!!Version 2.0.beta40 (22-Jun-2005)%0a%0aThis very minor release simply updates the authuser.php script to %0asupport Apache `MD5 encryption in .htpasswd files.%0a%0a!!!Version 2.0.beta39 (20-Jun-2005)%0a%0aThis release primarily fixes some bugs with wikistyles and their interactions with block structures such as tables and headings.  In addition, the release fixes some nagging errors with opening directories in PITS and other recipes.%0a%0aThis release also adds definition lists to the available syntaxes for building WikiTrails.%0a%0aFinally, this 
 release adds ''scripts/authuser.php'', which is a preliminary script for user-authentication based on .htpasswd (and similarly formatted) files.%0a%0a!!!Version 2.0.beta38 (14-Jun-2005)%0a%0aThis version performs a minor bug fix to the `ListPages() function for those sites that are storing pages in per-group subdirectories.%0a%0a!!!Version 2.0.beta37 (26-May-2005)%0a%0aThis version performs some minor bug fixes and improvements:%0a* Changed the location in which $SearchIncl, $SearchExcl, and $SearchGroup are set %0a* Fixed bug in setting of $SearchExcl %0a* Added filesize check after new page is written to disk but before replacing existing page%0a* Added $LinkUrl and $LinkAlt to urlapprove.php %0a%0a!!!Version 2.0.beta36 (30-Apr-2005)%0a%0aThis release fixes a rather large bug with excluded terms in the %0apagelist code, and a very minor bug with generating cells if there%0aare spaces after the final '||' in a simple table.%0a%0a!!!Version 2.0.beta35 (24-Apr-2005)%0a%0aThis
  release fixes some bugs in the new pagelist code.%0a%0a!!!Version 2.0.beta34 (23-Apr-2005)%0a!!!Version 2.0.beta33 (22-Apr-2005)%0a%0aThis version introduce a major redesign of working and speed of  scripts/pagelist.php, which defines [@(:pagelist:)@] and [@(:@][@searchresults:)@] markups. This version now have a parameter [@link=@] to display pages with links to target page (i.e. "backlinks"). There is also "order=" and  "count=" parameters which can be used for sorting listed pages and limit display length.%0a%0aHowever, the changes also mean that it's possible that any%0alocal customizations or cookbook recipes that depended on the%0aprevious pagelist code will no longer work, so be careful%0awhen upgrading.%0a%0aThis release also optimizes the rendering of page links and%0afixes a performance bug in the `FmtPageName() function.  These%0achanges have been observed to improve page rendering times by%0aup to 40%25.%0a%0aWhat remains before the 2.0 official release:  redesi
 gn of the%0aedit page form, addition of a "comments" feature, and fixing%0aPmWiki documentation.  %0a%0aLastly, the trailing ?> sequences have been removed from all%0ascripts to simplify installations on VMS and other environments%0athat have trouble with newlines after the closing ?>.%0a%0a%0a!!!Version 2.0.beta32 (17-Apr-2005)%0a%0aVersion beta32 adds the $RCLinesMax variable, which limits the maximum%0anumber of lines that are saved in `RecentChanges files.  The default%0ais set to zero, meaning "no limit".%0a%0a!!!Version 2.0.beta31 (15-Apr-2005)%0a%0aThis release adds the ability to store and serve attachments (uploads)%0afrom directories that is not directly accessible to the webserver.  %0aThe "download" action ([@?action=download@]) tells PmWiki to retrieve%0aan attachment associated with the current page.  This can be used for%0aprotecting attachments via a page's passwords, or for working around%0awebservers that cannot access files in the PmWiki-created ''uploads/
 ''%0adirectories.%0a%0aSetting $EnableDirectDownload=0; tells PmWiki to generate links to %0a[@?action=download@] to retrieve attachments instead of accessing%0athe attachments directly through the webserver.  Note that this%0asetting by itself may not be enough to protect uploads; one may need%0aalso need to to configure the webserver or ''uploads/'' directory%0ato block direct requests to the webserver for attachment files.%0a%0aThis release also adds $EnableFixedUrlRedirect.  When PmWiki receives%0aa url with a "partial pagename" (such as the name of a WikiGroup),%0ait first determines the correct "full name" for the page.  Normally%0aPmWiki then issues a "redirect" to the browser requesting the browser%0ato reload the page with its full, "official" url, but setting%0a$EnableFixedUrlRedirect to zero will suppress the reload so that the%0adetermined page is sent immediately (and keeps the same url used to%0aaccess the page).%0a%0a%0a!!!Version 2.0.beta30 (14-Apr-2005)%0a%0
 aThis release works around some problems with PHP sessions resulting in%0adeadlocked web processes.  The changes to the authorization code in%0a2.0.beta29 greatly increased the likelihood of such deadlocks, so%0aall sites running 2.0.beta29 are encouraged to upgrade to this one.%0a%0aThis release also changes the wikiword-handling functions so that%0awikiwords are no longer spaced if $LinkWikiWords is disabled.%0a%0aFinally, this release adds $PageTextStartFmt and%0a$PageTextEndFmt to allow local customization of the container%0asurrounding %3c!--`PageText--> in skin templates.%0a%0a%0a!!!Version 2.0.beta29 (11-Apr-2005)%0aThis release incorporates some significant changes in the authorization%0aand page storage code, so production-level sites might want to wait for%0aany new bugs to found and fixed before upgrading.  Or, go ahead and%0aupgrade but be prepared to revert back to beta28 or earlier if you%0astart to notice problems.%0a%0aHowever, I do need lots of testers for t
 he new code in this release,%0aof which there's a fair bit.  Thus, I'd greatly appreciate any%0ahelp people can provide with testing the new system and suggesting%0aimprovements.  I'm particularly looking for suggestions about how%0athe interfaces can be made easier to understand.%0a%0aThe Page Attributes form (reached via ?action=attr and used to set%0apasswords) has been improved so that it's now possible to see which%0apasswords have been set, and if those passwords are coming from the%0agroup or site defaults.  For an example, see%0ahttp://www.pmwiki.org/wiki/Test/AttrExample?action=attr .  These%0aprompts are not yet internationalized -- I want to get the english%0ainterface finalized first and then we'll make the i18n strings for it.%0a%0aMultiple passwords (separated by spaces) can now be set on pages and groups,%0athus entering "one two" for an edit password will means that either "one" or%0a"two" will be accepted.  Because of this, passwords cannot contain%0aspaces 
 (I hope this won't be a major loss -- let me know if it will).%0a%0aThe password request field now appears within a normal skin layout%0a(i.e., with header, sidebar, footer); previously requests for%0apasswords were undecorated forms that appeared alone in the browser%0awindow.%0a%0aThere is an [=(:if auth ...:)=] conditional markup available for%0aprocessing depending on the current authorizations in effect.  For%0aexample, one can create a bullet list with%0a    [=%0a    (:if auth read:)* [[View page -> {$Name}?action=browse]]%0a    (:if auth edit:)* [[Edit page -> {$Name}?action=edit]]%0a    (:if auth upload:)* [[Attachments -> {$Name}?action=upload]]%0a    (:if auth attr:)* [[Page Attributes -> {$Name}?action=attr]]%0a    (:if auth admin:)* You're logged in as admin%0a    (:ifend:)%0a    =]%0aand only those items corresponding to the user's current authorizations%0awill appear.  This should be very useful in creating action buttons.%0a%0aAssuming there's already some mec
 hanism in place for identifying%0aand authenticating someone, pages can specify a password field of%0a"id:xyz", which means to allow only user "xyz" the specified%0aaccess.  For example, specifying an edit password of "id:alice"%0ameans that only user "alice" (and the admin) is allowed to edit the%0apage.  Multiple ids can be specified as either "id:alice,bob,carol"%0aor "id:alice id:bob id:carol".  The special value "id:*" is used%0ato mean any authenticated user, and users can be excluded via the%0aminus sign, as in "id:-eve,*".%0a%0aUser-based authentication can completely coexist and mix freely with%0apassword-based authentication, thus an edit password of%0a"id:alice glorp" will allow Alice and anyone who knows the%0apassword "glorp" to edit the page.%0a%0a2.0.beta29 supports only REMOTE_USER authentication; future releases%0awill add other authentication mechanism.%0a%0a!!!Version 2.0.beta28 (27-Mar-2005)%0a%0aThis release makes some substantial improvements to the att
 achments/uploads feature in PmWiki.  The specific enhancements include:%0a%0a* The Attach: markup can now be used to reference attachments on other pages; the syntax is [@Attach:pagename/file.ext@].  The "pagename" can refer to pages in other groups.  %0a%0a* Attachments automatically have the file extension (if any) converted to lowercase.%0a%0a* The [@(:attachlist:)@] markup now accepts parameters; ''ext='' can be used to limit the list of attachments to specific extensions, and one can supply a page's name to obtain a list of attachments for that page (e.g., [@(:attachlist Group.PageName:)@].%0a%0a%0a!!!Version 2.0.beta27 (26-Mar-2005)%0a%0aThis release makes a number of minor changes and bugfixes.  The more significant changes are listed below.%0a%0a* The localmap.txt and farmmap.txt files can now contain $-variable substitutions (same as any variables available through `FmtPageName).%0a%0a* Most built-in directives are now case insensitive.%0a%0a* The (:markup:) directi
 ve now has a (:markup:) ... (:markupend:) version.  The previous [=(:markup:)=] [@[=...=]@] syntax is still supported, but may change in future releases.%0a%0a* A bug was fixed with preformatted text eating the leading whitespace character.%0a%0a* Added the missing [@{$FullName}@] markup.%0a%0a* Fixed a bug in the handling of $MetaRobots.%0a%0a!!!Version 2.0.beta26 (5-Mar-2005)%0a%0aThis release adds support for edit page templates; i.e., site administrators can specify the default text for new pages.  More details are available at Cookbook:EditTemplates.%0a%0a!!!Version 2.0.beta25 (2-Mar-2005)%0a!!!Version 2.0.beta24 (1-Mar-2005)%0a%0aThis release contains an important correction to the processing of QUERY_STRING parameters, and changes to the way that `PageNotFound messages are generated.  These are needed to prevent webcrawlers (notably the one used by inktomi) from generating long sequences of links to non-existent pages.%0a%0aThis release also adds a `ParseArgs() functi
 on to make it easier for cookbook recipes and other components to parse directive arguments.  Documentation for the function will be forthcoming at Cookbook:ParseArgs.%0a%0aList and heading markups have been changed to consume any single space character that follows the list or heading marker.%0a%0aA $EnablePostAttrClearSession switch has been added to control whether or not changing a page's attributes causes any existing passwords to be forgotten.  The default is that changing attributes forgets any passwords entered; this can be changed by setting $EnablePostAttrClearSession to zero.%0a%0a%0a!!!Version 2.0.beta23 (24-Feb-2005)%0a%0aThis release adds a couple of improvements.%0a%0aFirst, the passwording system has been improved slightly to hopefully make passwords a little less confusing (although more improvements are coming).  Previously PmWiki would remember all passwords previously entered during the current browser session.  In this release, changing a page's password
  causes PmWiki to "forget" all of the previously entered passwords, thus eliminating the confusion that arose when a page would appear unprotected when in fact a previously entered password was authorizing access.%0a%0aThis release also adds as $EnablePageListProtect option.  When set, the [@(:pagelist:)@] and [@(:@][@searchresults:)@] directives will exclude pages for which the browser does not have read authorization.%0a%0a!!!Version 2.0.beta22 (23-Feb-2005)%0a%0aThis release makes some feature enhancements and some bugfixes.%0a%0aThe skins loading code has undergone some enhancements and substantial rewriting, but it should have no negative impacts on existing skins.  The $BasicLayoutVars variable has been deprecated and is no longer needed.  This version introduces a `SetTmplDisplay() function that makes it easier for local customizations to disable sections of a skin template.%0a%0aThe password prompt form has been customized so that the cursor is%0aautomatically placed
  in the form when the page is loaded.%0a%0aThe ?action=source action has been fixed for pages with characters%0aoutside of ASCII.%0a%0aThe graphical button bar can now be used for buttons with arbitrary%0aHTML elements (e.g., "save" and "preview" buttons).%0a%0aOther changes are noted in the ChangeLog.%0a%0a!!!Version 2.0.beta21 (13-Feb-2005)%0a%0aThis version has a number of changes.  The major change that could (but shouldn't) affect some sites is that PmWiki has changed its default umask from 000 to 002, which will improve the default permissions for files and directories created by PmWiki for some sites, while (hopefully) not affecting others.%0a%0aMany of you probably don't know (or care) what a umask is.  If everything still works after upgrading to this version, you can continue to not know or care.  However, if after upgrading to this version you start seeing file permission errors where you weren't seeing them before, try adding the line%0a%0a    umask(0);%0a%0ato y
 our ''local/config.php'' and things should work again.  (And be sure to report that you ran into trouble so we can investigate and improve things for the next version!)%0a%0aThis release also changes the %3ctitle> tag generated by ?action=rss%0ato properly honor the [@(:title:)@] setting on various pages.%0a%0aFinally, the release fixes some minor bugs in the HTML generation for [[tables]], corrects some bugs with settings for $AuthorPage and $AuthorLink, and makes some cookbook-related additions to the v1 conversion script.%0a%0aFor more details, see the [[ChangeLog]].%0a%0a!!!Version 2.0.beta20 (30-Jan-2005)%0a%0aThis version has a number of relatively minor changes.%0a%0aFirst, the $UrlLinkFmt variable has been modified so that links to external urls automatically have a rel='nofollow' attribute added to them, to help combat wiki spam as described in http://www.google.com/googleblog/2005/01/preventing-comment-spam.html.  Site administrators can customize $UrlLinkFmt and $
 UnapprovedLinkFmt to supply or omit rel='nofollow' as appropriate.%0a%0aThe algorithm for creating page names from [@[[free links]]@] has been modified slightly.  First, letters following a hyphen are no longer automatically capitalized, thus [@[[page-link]]@] refers to a page named "Page-link" and not "Page-Link".  This is more compatible with version 1's naming syntax.  Also, single quotes don't promote the following letter to uppercase, thus [@[[John's page]]@] now links to [@JohnsPage@] and not [@JohnSPage@].%0a%0aSites that want to keep PmWiki 2's prior behavior can do so with the following:%0a    [=%0a    $PageNameChars = '-[:alnum:]';%0a    $MakePageNamePatterns = array(%0a      "/[^$PageNameChars] /" => ' ',%0a      "/(\\b\\w)/e" => "strtoupper('$1')",%0a      "/ /" => '');%0a    =]%0a%0aThe localmap.txt InterMap file can now contain comments (denoted by leading '#' in the file).%0a%0aHeadings (!! markup) can now have block wikistyles.%0a%0aMore information is availa
 ble in the PmWiki.ChangeLog.%0a%0a%0a!!!Version 2.0.beta19 (17-Jan-2005)%0a%0aPmWiki uses PHP's sessions for tracking passwords and page authorizations;  however, if a session times out (or is otherwise lost) while an author is in the middle of editing a password-protected page, the author's edits may be lost when re-prompted for the password.  This release fixes this problem by preserving the edit text and other posted form variables when prompting for a password.%0a%0a!!!Version 2.0.beta18 (17-Jan-2005)%0a%0aThis release makes improvements to the gui buttons, fixes some bugs, and minor other improvements and changes.%0a%0aAlternate text is now valid inside of WikiTrails; i.e., one can use [@%3c%3c|[[TrailPage | alternate text]]|>>@]  to change the text of the link to the trailpage.%0a%0aThe GUI button module has a number of changes.  %0a* New images are provided for lists, indentation, headings, and tables, and the sample-config.php file has examples for configuring these 
 additional buttons into the bar.  %0a* The "Heading 3" button has now been changed into separate "Heading" and optional "Subheading" buttons.%0a* The "Attach:" (paperclip) button appears in the bar only if uploads are enabled for that page.%0a* For browsers that support it, clicking one of the buttons that adds text will leave the text highlighted (to make it easier to replace the text).%0a%0aThis release also eliminates the %3cp>...%3c/p> tags that were being generated around markup lines that contained other HTML block markups (e.g., search results, page listings, forms).  As a result, these pages are now valid HTML and pass the `W3C validator.%0a%0a$HTMLHeaderFmt has been changed so that skin designers can completely turn off the inline-styles mechanism used by PmWiki and other cookbook modules.  To disable the inline styles, use [@ $HTMLHeaderFmt['styles'] = ''; @].%0a%0aFinally, this release fixes a call to setlocale() which was supposed to only return the current local
 e but instead was causing the locale to change.%0a%0a%0a!!!Version 2.0.beta17 (12-Jan-2005)%0a%0aThis release simply makes some minor bug fixes to wikistyles (colors set in wikistyles extend to anchor tags), arrays of default passwords, and advanced table handling.%0a%0a!!!Version 2.0.beta16 (11-Jan-2005)%0a!!!Version 2.0.beta15 (10-Jan-2005)%0a%0aThe major feature of this release is the addition of the graphical buttons in the edit page.  By default this feature is disabled -- to enable it, use the following in config.php.%0a%0a    $EnableGUIButtons = 1;%0a%0aIf your site customizes the $PageEditFmt variable, then note that the buttons are placed at the end of the $EditMessageFmt and that the %3ctextarea> needs to have [@id='edit'@] in order for the buttons to work.%0a%0aThe rss.php script has also been improved -- it now automatically translates named character entities (from HTML 4) into their numeric equivalents.  This eliminates a lot of feed validation errors and probl
 ems in specific RSS feed consumers.%0a%0aThis release adds a $Titlespaced variable and [@{$Titlespaced}@] markup; $Titlespaced is replaced by either a page's title (if defined by the [@(:title:)@] directive) or by the spaced version of the page's name.%0a%0aFinally, a number of WikiStyles bugs have been fixed.%0a%0a%0a!!!Version 2.0.beta14 (28-Dec-2004)%0a%0aThis release introduces a number of relatively minor optimizations and improvements, summarized below.  If you don't understand what any of these mean, they probably don't affect you.  :-) %0a%0a* PmWiki's %3cimg ...> tags now use style='border:0px;' instead of border='0'.%0a%0a* `PrintFmt() now calls Lock(0) to release any locks prior to sending output to the browser.  This is important because some webservers (notably Apache) sometimes get stuck when they're unable to send output to the browser, and thus inadvertently lock others from being able to edit/post pages.%0a%0a* $PageEditFmt now includes id='text' to make for
  easier styling/referencing.%0a%0a* `MarkupToHTML()'s "posteval" code has been changed considerably.%0a%0a* `PageExists() now caches results of checking for page existence.%0a%0a* Page urls are now automatically url-encoded as needed.%0a%0a* Many of PmWiki's internal regex patterns have been optimized to (hopefully) improve matching speed.%0a%0a* Comparisons to substr() have been replaced with more efficient comparison functions.%0a%0a%0a!!!Version 2.0.beta13 (22-Dec-2004)%0a%0aThis release fixes a bug introduced in 2.0.beta7 that prevented the refcount.php (for ?action=refcount) from generating links correctly.  It also cleans up the handling of wikistyles and %25-in-urls (which is what 2.0.beta7 was supposed to fix).%0a%0aIn general, all sites using the 2.0.betaXX series are recommended to upgrade to this latest release.%0a%0a%0a!!!Version 2.0.beta12 (21-Dec-2004)%0a%0aThis release adds a number of %3cdiv> tags and identifiers around the%0avarious forms that PmWiki produce
 s (e.g., uploads, search results,%0aattribute pages, etc.).  This makes such forms easier to style in CSS.%0a%0aIn addition, this release adds some functionality to the urlapprove.php%0ascript to limit the number of unapproved urls that can be saved in%0aa page (helps to combat wikispam).%0a%0aFinally the release adds the [@(:description:)@] markup for generating %3cmeta name='description' ... /> tags in the output.  [@(:description:)@] may also get used for other features later on (e.g., excerpts in search results, etc.).%0a%0a!!!Version 2.0.beta11 (19-Dec-2004)%0a%0aThis release primarily cleans up a number of items in the handling of uploads:%0a# A new $LinkUpload variable has been defined for $...Fmt strings -- it contains the URL of the upload page for the current attachment%0a# [@(:attachlist:)@] automatically adds "replace-attachment" links (denoted by triangles) to the items in the list%0a# After performing an upload, the "upload name" field is automatically cleared%
 0a# Fixed error message when upload exceeds maximum allowed by PHP%0a%0aThis release also changes the `StopWatch() function (used internally for benchmarking/timing PmWiki performance) to only have an effect when $EnableStopWatch is set to 1 (wall clock timings only) or 2 (wall clock and user-process timings).%0a%0a!!!Version 2.0.beta10 (14-Dec-2004)%0a%0aThis release makes some substantial improvements in the installation%0aprocedure.  First, the installation steps have been simplified, and PmWiki%0aprovides accurate instructions when it encounters a PHP "safe_mode"%0aenvironment.  %0a%0aThe release also provides better handling of the '.flock' file -- if%0aPmWiki discovers it cannot open an existing .flock file for writing,%0ait removes the file and tries again rather than complaining about it.%0aThis makes the system more robust when page directories are going%0athrough backup restore.%0a%0a%0a!!!Version 2.0.beta9 (14-Dec-2004)%0a%0aThis release provides some very minor b
 ugfixes to the [@[[target |#]]@] markup, to the appearance of $...variables in documentation, and extends uploads.php to be able to work better with url rewriting.%0a%0a!!!Version 2.0.beta8  (13-Dec-2004)%0a%0aThis release makes a number of reasonably significant changes.  First and%0aforemost, it changes the [@?pagename=@] uri syntax to be [@?n=@], and%0ainstallation now defaults to $EnablePathInfo = 0; to make better%0acompatibility.%0a%0aSites which wish to continue using the [@.../Main/HomePage@] form of uri%0ainstead of [@?n=Main.HomePage@] should set $EnablePathInfo = 1 in%0aconfig.php.  %0a%0aThis release also fixes a probable bug in the handling of author%0anames which was causing spaces to be incorrectly removed.%0a%0a2.0.beta8 includes features for advanced CSS styling of [[tables]]%0avia the $TableRowAttrFmt and $TableCellAttrFmt variables, more description %0awill be forthcoming in a Cookbook recipe.  %0a%0aAlso, this release includes vastly improved support for 
 UTF-8 sites,%0aincluding the ability to have UTF-8 characters in pagenames and%0a[@[[utf-8 links]]@].  We're still working out the details to be%0aable to support UTF-8 wikiwords -- PHP's functions don't provide%0agood support for this.  See scripts/xlpage-utf-8.php for more%0ainformation on UTF-8.%0a%0aFinally, the Q: and A: markups are back, and a few other minor%0abug fixes and documentation improvements have been included.%0a%0a%0a!!!Version 2.0.beta7  (8-Dec-2004)%0a%0aThis release has a number of improvements and changes to it.  First,%0athis release provides a ''scripts/xlpage-utf-8.php'' file, which adapts%0aPmWiki to be able to work somewhat with utf-8 characters in pagenames.%0aSince PHP's preg_* functions seem to be unable to detect UTF-8 alphanumeric%0acharacters, the trade-off at the moment is that WikiWord links are limited%0ato the ASCII character set.  We're working on ways to get around this%0arestriction, however.%0a%0aThe xlpage-utf-8.php script can be aut
 omatically loaded by any `XLPage %0atranslation that specifies 'xlpage-i18n' => 'utf-8'.%0a%0aThis release also:%0a%0a* fixes up the .htaccess files that are placed in local/ and wiki.d/%0a* changes the default textarea size for the pmwiki skin, %0a* restores the link/citation markup ([@[[target |#]]@])%0a* fixes the default value of $DefaultPageTextFmt (note this may change again)%0a* automatically converts instances of $Newline in posted text%0a%0a%0a!!!Version 2.0.beta6  (5-Dec-2004)%0a%0aThis release contains a number of relatively minor bugfixes (see the ChangeLog), and it also restores the $WikiWordCount functionality from PmWiki 1 in which the wiki administrator can limit the number of conversions for each WikiWord.%0a%0aThe ''sample-config.php'' file has been updated with more comments and suggestions for customizations.%0a%0aFinally, this release increases the default value of $MaxIncludes to 50 (and provides better documentation of the $MaxIncludes variable).%0a%0a
 !!!Version 2.0.beta5  (1-Dec-2004)%0a!!!Version 2.0.beta4  (1-Dec-2004)%0a%0aThese releases fix a number of bugs introduced by the changes in 2.0.beta3.%0aUsers of 2.0.beta3 are encouraged to upgrade directly to this release.%0a%0a!!!Version 2.0.beta3  (30-Nov-2004)%0a%0aThis release provides a simple version of the [@(:attachlist:)@] markup (different sorting orders are not available yet as the syntax is likely to change), as well as fixes the `PmWiki.EditQuickReference and `PmWiki.UploadQuickReference pages.  It also provides default pages to lock passwords in the Main and PmWiki groups and adds uppercase versions for ".GIF", ".JPG", and ".PNG" files.%0a%0aInternally, this release also changes the edit page sequence to use the $_POST autoglobal instead of $_REQUEST (i.e., posting edits is only allowed via method='post' and not via query string parameters).%0a%0a!!!Version 2.0.beta2%0a%0aThis release fixes the bug that caused $PageTemplateFmt to no longer%0awork in pmwiki-2
 .0.beta1.%0a%0a!!!Version 2.0.beta1%0a%0aThis release marks PmWiki 2.0 as entering "beta" status, as it finally%0abegins moving towards official release.  The major change for this release%0ais in the skins code -- previous versions of PmWiki used $PageTemplateFmt%0ato specify the location of the template file to be used; newer versions%0anow use the $Skin variable to specify the location of the skins directory%0a(in pub/skins/) that contains the skin template file, php configuration%0ascript, and other files.%0a%0aIn general, if you previously had $PageTemplateFmt set to "pub/skins/myskin/myskin.tmpl", then you now simply set $Skin='myskin'; to get things to work.  See `PmWiki.LayoutBasics for more details.%0a%0a!!!Version 2.0.devel releases%0a%0aThese are the release notes for the development releases of PmWiki 2.0.%0a%0aFirst, this is definitely still in the development stages, so many%0athings are likely to change between now and the official releases.%0a%0aSecond, at pr
 esent there's not a good way to upgrade from PmWiki 1.0%0ato PmWiki 2.0, although upgrade support is expected to arrive in future%0a(development) releases.  So, you can use this version just to see the%0anew developments and gain some experience, but migrating from 1.0%0ato this version is still likely to be a bit of a chore.%0a%0aBugs and other requests can be reported to the PmWiki Issue Tracking %0aSystem at http://www.pmwiki.org/wiki/PITS/PITS.  Any help%0ain testing, development, and/or documentation is greatly appreciated.%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a
+time=1195349574
+title=Release Notes

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Requirements
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Requirements	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Requirements	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3
+author=Götz Hoffart
+csum=
+host=195.158.167.200
+name=PmWiki.Requirements
+rev=44
+targets=PmWiki.DocumentationIndex
+text=%25audience%25 administrators (basic)%0aPrerequisites for running the PmWiki wiki engine:%0a# [[http://www.php.net/ | PHP]] 4.1 or later%0a# Some sort of webserver that can run PHP scripts.%0a%0aPmWiki has been reported to work with the following OS/webserver combinations:%0a* Apache 1.3 or 2.0, on roughly anything (Unix, Linux, Windows, and Mac OS/X)%0a* Microsoft Internet Information Server, on Windows%0a%0a* I got it to work on appWeb (a very small, php-enabled webserver) executing on a Linksys NSLU2 Network Storage Link device (runs Unslung 5.5 beta which is a Linux derivate for embedded systems). Still have to work out why file-uploads does not seem to work, however. --Hans-Göran Puke%0a%0a* PmWiki works very well on x86 Linux + [[http://www.litespeedtech.com/|LiteSpeedWeb Server]] Standard Edition  --Jeff Muday%0a%0aPmWiki has been reported not to work on:%0a* Mac OS before Mac OS X because there's no PHP available%0a%0aThe [[(Cookbook:)Standalone]] recipe provide
 s a special, bare-bones webserver application that can be used to run PmWiki in places where another webserver isn't available.%0a%0a%3c%3c|[[DocumentationIndex]]|>>
+time=1158441670

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Security
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Security	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Security	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.22 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=add faq about botnet exploit
+host=24.1.26.255
+name=PmWiki.Security
+rev=28
+targets=PmWiki.Passwords,PmWiki.PasswordsAdmin,PmWiki.UrlApprovals
+text=Distributed Pages:%0a* [[PmWiki.Passwords]] General use of passwords%0a* [[PmWiki.PasswordsAdmin]] More password options for the administrator%0a* [[PmWiki.UrlApprovals]] Require approval of Url links%0a* [[PmWiki:SiteAnalyzer]] A tool for analyzing site configuration settings and security%0a%0aCookbook Pages%0a%0a* See also [[Cookbook:Cookbook#Security | Cookbook index: Security]]%0a* [[Cookbook:Blocklist2]] Block postings based on content or IP address%0a* [[Cookbook:MTBlackList]] Movable Type spam blacklist%0a* [[Cookbook:WebServerSecurity]] Making the server more secure with .htaccess%0a* [[Cookbook:FarmSecurity]] Making Farm installations secure%0a* [[Cookbook:EProtect]] Hide e-mail address%0a* [[Cookbook:AuditImages]] Check to see what images have been uploaded to your wiki.%0a%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: What about the botnet security advisory at [[http://isc.sans.org/diary.php?storyid=1672]]?%0a%0aA: Sites that are running with PHP's ''register_globals'' s
 etting set to "On" and versions of PmWiki prior to 2.1.21 may be vulnerable to a botnet exploit that is taking advantage of a bug in PHP.  The vulnerability can be closed by turning ''register_globals'' off, upgrading to PmWiki 2.1.21 or later, or upgrading to PHP versions 4.4.3 or 5.1.4.  In addition, there is a test at [[PmWiki:SiteAnalyzer]] that can be used to determine if your site is vulnerable.%0a%0a
+time=1157561724

Added: trunk/oggdsf/website/wikilib.d/PmWiki.SecurityVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.SecurityVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.SecurityVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=$AuthLDAPBindPassw[or]d
+ctime=1156512569
+host=24.1.26.255
+name=PmWiki.SecurityVariables
+rev=5
+targets=PmWiki.Variables,PmWiki.AuthUser,PmWiki.UrlApprovals
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0a:$DefaultPasswords:(not documented yet)%0a%0a:$EnablePostAttrClearSession:A switch to control whether or not changing a page's attributes causes any existing passwords to be forgotten. The default is that changing attributes forgets any passwords entered; this can be changed by setting $EnablePostAttrClearSession to zero.%0a%0a:$HandleAuth:This sets the required authentication Level that is necessary to perform an action. When using the following example in your @@config.php@@ you need to be authenticated as editor in order to view the page history:%0a        $HandleAuth['diff'] = 'edit';%0a%0a:$PageAttributes:Set the string showed on the attributes page when entering a password for an action.%0a%0a:$AuthLDAPBindDN:For sites using [[AuthUser]] with LDAP authentication, this specifies the distinguished name (DN) to be used to bind to the LDAP server to check identity.%0a%0a:$AuthLDAPBindPassword:For [[AuthUser]] with LDAP authenticatio
 n, this specifies the password used for binding (in conjunction with $AuthLDAPBindDN above).%0a%0aSee also:%0a* $EnablePageListProtect%0a* [[UrlApprovals]]%0a
+time=1156529861

Added: trunk/oggdsf/website/wikilib.d/PmWiki.SimultaneousEdits
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.SimultaneousEdits	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.SimultaneousEdits	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta33 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5
+author=Pm
+csum=Updated link to cookbook recipe
+host=24.1.26.255
+name=PmWiki.SimultaneousEdits
+rev=12
+targets=Main.WikiSandbox,PmWiki.DocumentationIndex
+text=PmWiki has support for handling the case where multiple authors attempt to edit the same page nearly simultaneously.  Here's the basic scenario for systems where simultaneous edits are ''not'' handled:%0a%0a* Alice starts to edit a page.%0a* Before Alice saves her edits, Bob requests an edit of the same page, and receives the page text prior to Alice's edits.%0a* Bob finishes with his edits and hits "save".%0a* Alice finishes editing her page, hits "save", and since she was working from a version of the page from before Bob had made his changes, she wipes out Bob's edits in the process.%0a%0aPmWiki's simultaneous edit feature detects when this occurs, and instead of saving Alice's edits PmWiki presents Alice with a message that someone else changed the page while she was editing it.  Furthermore, Bob's changes are merged into Alice's copy of the page, with any conflicts highlighted by %3c%3c%3c%3c%3c%3c%3c and >>>>>>>.  Alice can then fix things as appropriate and save 
 the updated page, or, if Alice is lazy, she can just hit "save" a second time and leave it to someone else to fix.%0a%0aThe simultaneous edits feature is also invoked whenever someone requests a page preview; thus if a page changes while previewing a page the author gets notification and can see the merged results.%0a%0a!!!How can I test/experiment with this feature?%0a%0a# Open up two browser windows and select the same page to be edited in each window (e.g., try  [[Main/WikiSandbox?action=edit]]).%0a# In one browser window, make some changes to the page and then save those changes.%0a# In the second browser window, make some different changes to the same page and hit "save".  Since the page changed after the edit form was loaded into the second window, there's a potential edit conflict and you'll receive the "edit conflict message".%0a# You can make any adjustments in the second window, and press "Save" again to save the changes.%0a%0a!!!Notice%0a%0aSome environments such 
 as Windows and PHP running in safe_mode are unable to use the simultaneous edits capability distributed with PmWiki.  See Cookbook:SimultaneousEdits for a solution for these environments.%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a
+time=1141500021

Added: trunk/oggdsf/website/wikilib.d/PmWiki.SitePreferences
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.SitePreferences	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.SitePreferences	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5
+author=Pm
+csum=Made "access keys" a link
+host=24.1.26.255
+name=PmWiki.SitePreferences
+rev=7
+targets=Site.Preferences,PmWiki.AccessKeys,Site.EditForm
+text=The page [[{$SiteGroup}.Preferences]] contains customisable browser preference settings.%0aThese include [[access keys]] (keyboard shortcuts to certain actions like edit, history, browse) and settings of the [[{$SiteGroup}.EditForm]] (width and height of the edit textarea) as well as the name of the edit form in use.%0a%0aA different page than [[{$SiteGroup}.Preferences]] can be choosen by making a copy of that page under a new name, customising it, and setting a cookie which will point to this page for the browser being used, through %0a%0a   ?setprefs=`SomeGroup.`CustomPreferences %0a%0a`SomeGroup.`CustomPreferences being the name of the new customised preference page.%0a%0a!!!About Access Keys%0a%0a----%0a!!Notes and Comments%0a%0aNote that in order to enable parsing of [[{$SiteGroup}.Preferences]], a line like the following needs to be added to local/config.php:%0a%0a XLPage('prefs', "Site.Preferences");%0a
+time=1142183681

Added: trunk/oggdsf/website/wikilib.d/PmWiki.SkinTemplates
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.SkinTemplates	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.SkinTemplates	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
+author=swestrup
+csum=Added description of how multiple .tmpl files work.
+host=216.138.194.169
+name=PmWiki.SkinTemplates
+rev=18
+targets=PmWiki.Skins,PmWiki.PageVariables,PmWiki.PageDirectives,PmWiki.Internationalizations,PmWiki.DocumentationIndex
+text=This page describes the skin template files (.tmpl) that are used to create PmWiki ''skins'', and how PmWiki uses them. As described in the [[skins]] page, a skin is a collection of files that specifies the layout for PmWiki pages. Each skin must include a template file that provides the skeleton for displaying a PmWiki page.%0a%0a!! Template Processing%0a%0aPmWiki processes any skin.php file in the skin directory before loading any templates. If there is no skin.php file, or if the skin.php file doesn't load a template, then PmWiki falls back to looking%0afor a template with the same name of the skin, or a single .tmpl file if it exists.%0a%0aIn simpler setups (which is what the vast majority of skins have), the skin.php file is absent or makes no mention of the .tmpl file, and so PmWiki finds and loads the template itself. To exert greater control over the process, simply call LoadPageTemplate() inside the skin.php file, with the name of the .tmpl file to be loaded:%0
 a%0a->[@LoadPageTemplate($pagename, "$SkinDir/xyz.tmpl");@]%0a%0aFor example, a skin might specify a special template to be used if the action is 'print':%0a%0a->[@if ($GLOBALS['action'] == 'print')@]%0a-->[@LoadPageTemplate($pagename, "$SkinDir/print.tmpl");@]%0a%0aWhen the action is something else, the default skin gets loaded instead.%0a%0a!!Template file format%0a%0aA template file is basically an HTML file that also contains variable substitutions (indicated by '$') and special directives embedded in HTML comments.  Two special directives are ''required'' in the template file.  The directive [@%3c!--PageText-->@] belongs to the %3cbody> section of the HTML document, and tells PmWiki where the main content of each wiki page should be placed.  The other required directive is [@%3c!--HTMLHeader-->@], which goes somewhere in the %3chead> section of the HTML document.%0a%0aThere is also an optional [@%3c!--HTMLFooter-->@] directive, which typically goes before the final %3c/
 body> tag and is used by some recipes to insert things at the end of the HTML document.   %0a%0aWhen PmWiki displays a page, it replaces the directives and variable substitutions with the values appropriate to the current page.  For example, the [@%3c!--PageText-->@] directive is replaced with the page's contents, while any instances of $PageUrl are replaced with the url (address) of the current page.%0a%0aThere is a long list of variables available for substitution in pages; some of the%0amost useful include:%0a%0a    [@$PageUrl         the url of the current page%0a    $ScriptUrl       the base url to the pmwiki.php script%0a    $Title           the page's title (e.g., "`SkinTemplates")%0a    $Titlespaced     the page's title with spaces (e.g., "Skin Templates")%0a    $Group           the name of the current group  (e.g., "`PmWiki")%0a    $FullName        the page's full name (e.g., "`PmWiki.SkinTemplates")%0a    $LastModified    the page's last modification time%0a    $Pa
 geLogoUrl     the url of a site logo%0a    $WikiTitle       the site's title%0a    $SkinDirUrl      the url of the skin's folder@]%0a%0aThis last variable, $SkinDirUrl, is particularly useful in templates as it allows the skin designer to refer to other files (such as images or style sheets) in the skin folder without having to know the exact url.%0a%0aThe template is not limited to using the variables listed here; nearly any PHP global variable that begins with a capital letter can be used in a skin template.  [[Page variables]] can also be used in templates.%0a%0a!! Skin directives%0a%0aBesides the required [@%3c!--PageText-->@] and [@%3c!--HTMLHeader-->@] directives, PmWiki provides other built-in directives for generating page output.  It's not necessary to use any of these directives, but they can often add capabilities to a skin %0a%0a:[@%3c!--wiki:Main.SomePage-->@]:%0a: :The [@%3c!--wiki:Main.SomePage-->@] directive outputs the contents of `Main.SomePage.  $-substitu
 tions are allowed in directives, thus a directive like [@%3c!--wiki:$Group.SomePage-->@] will include "`SomePage" of the current group.  %0a%0a: :If multiple pages are listed in the directive, then only the first available page is used.  Thus [@%3c!--wiki:$Group.SomePage Site.SomePage-->@] will display the contents of `SomePage in the current group if it exists, and `Site.SomePage if it doesn't.  To always display `Site.SomePage, even if $`Group.SomePage exists, use two consecutive [@%3c!--wiki:...-->@] directives.%0a%0a:[@%3c!--file:somefile.txt-->@]:%0a: :The directive [@%3c!--file:somefile.txt-->@] outputs the contents of another file (on the local filesystem) at the point of the directive.  If the file to be included is a .php script, then the PHP script is executed and its output is sent to the browser.  Like the [@%3c!--wiki:...-->@] directive above, $-substitutions are available to be able to output files based on the current page name or group.%0a%0a:[@%3c!--markup:.
 ..-->@]:%0a: :The markup directive processes any text that follows the colon as wiki markup and displays that in the output.  %0a%0a:[@%3c!--function:SomeFunction args-->@]:%0a: :This directive calls a PHP function named "`SomeFunction", passing the current page's name and the text following the function name as arguments.  PHP functions called in this manner are typically defined in a local customization file. Args allows only one argument, which has to be splitted then. [@%3c!--function:SomeFunction arg1 arg2 arg3-->@] generates one parameter "arg1 arg2 arg3". However variables can be used (like $LastModifiedBy).%0a%0a!! Page sections%0a%0aA template file can designate "sections" that are included or excluded from the output based on [[page directives]] or other criteria.  A section always begins with [@%3c!--Page...Fmt-->@] and continues to the next section, the end of the template file, or [@%3c!--/Page...Fmt-->@].  For example, a template can specify a [@%3c!--PageLeftF
 mt-->@] section that is excluded from the output whenever the [@(:noleft:)@] directive is encountered in the page's contents.  PmWiki's predefined sections (and their corresponding page directives) are:%0a%0a    [@%3c!--PageHeaderFmt-->          (:noheader:)%0a    %3c!--PageFooterFmt-->          (:nofooter:)%0a    %3c!--PageTitleFmt-->           (:notitle:)%0a    %3c!--PageLeftFmt-->            (:noleft:)%0a    %3c!--PageRightFmt-->           (:noright:)%0a    %3c!--PageActionFmt-->          (:noaction:)@]%0a%0aSkin designers can define custom sections and markups, but currently all section names in the template must begin with "Page" and end with "Fmt". As mentioned you also have to define the corresponding markup (for example in your config.php) like this: %0a%0a    [@Markup('noxyz', 'directives',  '/\\(:noxyz:\\)/ei',%0a       "SetTmplDisplay('PageXYZFmt',0)");@] %0a%0a!! Internationalization (i18n)%0a%0aSkins can also be [[internationaliz(ations)]]ed by using [@$[...]@] 
 substitutions.  Any string placed inside of [@$[...]@] is treated as a "translatable phrase", and the phrase is looked up in the current translation tables for a corresponding output phrase.  If a translation is available, then the translated phrase is substituted at that point, otherwise the original phrase is left intact.%0a%0aFor example, the substitution [@$[Edit]@] will display the current translation of "Edit" if it is known, otherwise it displays "Edit".  Thus, the same template can be used for multiple languages, displaying "Editer" when French translations are loaded, "Bearbeiten" when German translations are loaded, and "Edit" when no translation is available.%0a%0a%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I customize the CSS styling of my PmWiki layout?[[#customcss]]%0a%0aA: See [[Skins]] for how to change the default PmWiki skin.  See also [[Cookbook:Skins]], where you will find pre-made templates you can use to cu
 stomize the appearance of your site.  You can also create a file called ''local.css'' in the ''pub/css/'' directory and add CSS selectors there (this file gets automatically loaded if it exists).  Or, styles can be added directly into a local customization file by using something like:%0a%0a->[@$HTMLStylesFmt[] = '.foo { color:blue; }';@]%0a%0a%0aQ: Where can the mentioned "translation table" be found for adding translated phrases?%0a%0aA: See [[Internationalizations]].%0a%0a
+time=1159038649

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Skins
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Skins	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Skins	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
+author=jb
+csum=add information about documentation files
+host=216.40.220.150
+name=PmWiki.Skins
+rev=34
+targets=PmWiki.SkinTemplates,PmWiki.DocumentationIndex,Site.EditQuickReference
+text=%25audience%25 administrators (basic)%0a!!Contents%0a* [[#what | What is a skin?]]%0a* [[#where | Where do I get skins?]]%0a* [[#use | How do I use a skin?]]%0a* [[#make | How can I make a skin?]]%0a%0a!!What is a skin? [[#what]]%0a%0aA skin is a bunch of files that control what PmWiki pages look like (colors, fonts, borders, etc.) and how they are laid out.  The easiest way to understand what a skin does is to try some out using the links below.  They lead to this same page (PmWiki.Skins) on the pmwiki.org site, and open in a separate window.%0a%0a* %25target=skin%25[[PmWiki:Skins?skin=beeblebrox-gila2  | BeeblebroxNetGila ]]%0a* %25target=skin%25[[PmWiki:Skins?skin=jhskin | JHSkin ]]%0a* %25target=skin%25[[PmWiki:Skins?skin=gemini | GeminiSkin ]]%0a* %25target=skin%25[[PmWiki:Skins?skin=light | LightSkin ]]%0a* %25target=skin%25[[PmWiki:Skins?skin=monobook | Monobook Skin ]]%0a* %25target=skin%25[[PmWiki:Skins?skin=simple | Simple Skin ]]%0a%0aAs you saw, all skins sh
 ow the same page contents, but the other elements such as the sidebar, header, and footer, all changed.  For example, different skins may display the sidebar on the left, on the right, or even not at all.  Some skins have action links and features that others do not, especially if they were designed to take advantage of particular [[cookbook recipes -> Cookbook:Cookbook]].%0a%0aSo, a skin is just the set of files that determine how pages are displayed in PmWiki.  Normally skins are stored as subfolders of ''pub/skins/''.  Each skin typically has one or more of the following kinds of files:%0a* A template file, such as ''skin.tmpl'' or ''gemini.tmpl''.  The template is written in HTML or XHTML, and is the skeleton for the skin.  It contains special markers that tell PmWiki where to insert the page's contents.%0a* CSS files, which can control the skin's appearance%0a* Image files, for decorating a page with images.  Common image file formats are .jpg, .png, and .gif.%0a* PHP f
 iles, such as ''skin.php''.  These let skins provide extra customization setting or capabilities that HTML and CSS alone cannot.%0a* Documentation files, usually something like ''readme.txt'' or ''skinname.txt''.  These usually give you information about any special installation steps or nifty features the skin has. These are usually for administrators to read, but PMWiki program does not need them/%0a%0a!!Where do I get skins? [[#where]]%0a%0aSkins are available in the [[Cookbook:Skins]] collection.  The skins in the collection have been contributed by other PmWiki administrators for others to use, and typically have their own set of customization possibilities.  When you find a skin you like, follow the link to download the skin package.%0a%0a!!How do I use or install a skin? [[#use]]%0a%0aMost skin packages are .zip, .tgz, or .tar.gz files.  You should be able to unpack these with most archiving software.%0a%0a# Unpack the skin to ''pub/skins/'' inside your pmwiki folder.
   Most well-designed skin packages will create a subfolder in ''pub/skins/'' named after the skin.%0a** If the skin did not make a folder of its own, create one and move the skin files to it.%0a%0a# Open up your ''local/config.php'' file, and add a line like\\%0a\\%0a[@$Skin = 'my-favourite-skin';@]\\%0a\\%0awhere 'my-favourite-skin' is the name of the skin's folder.%0a%0aReload a page from your wiki in the browser, and you should be able to see the difference.%0a%0aIf you'd like to let your site's visitors choose one skin from a selection of skins you've installed, look at the [[Cookbook:SkinChange]] recipe.  (That's what we used for the demo above.)%0a%0aThere are a number of ways to further customize the appearance of a skin, including adding statements to /local/config.php that are compatible with your chosen skin; adding css files to /pub/css/, such as local.css (for your entire wiki) and MyGroup.css (for MyGroup); and directly editing the skin's files. If the skin is u
 pdated regularly, you probably will want to avoid editing the files in the skin's folder. Check the skin's page in the Cookbook for specific suggestions.%0a%0a!!How can I make a skin? [[#make]]%0a%0aThe best way to make your first skin is to modify a copy of PmWiki's default skin.  %0a%0a# Make a copy of the folder ''pub/skins/pmwiki'' and name it whatever your new skin should be named.%0a# In your ''local/config.php'' file, set $Skin to be the name of your new skin.%0a# Modify the template and CSS files to suit you.%0a# Test your new skin.%0a# Repeat steps 3 and 4 until you're happy with the results.%0a%0aThe reason we recommend starting with the default PmWiki skin is that it's quite a simple skin, much more so than many of the skins you'll find in [[Cookbook:Skins]].  The starting point is the template (.tmpl) file, which provides the overall layout of the page.  Inside of the template file are a number of special substitutions and directives that provide places for PmWik
 i to insert the data relevant to the current page being displayed.  [[SkinTemplates]] describes the format and directives in more detail.%0a%0aIt's beyond the scope of this page to explain how to write HTML (hypertext markup language), XHTML (extensible HTML, which is a bit newer) or CSS (cascading style sheets), but there are many good tutorials on the web for all three of them.  One caution: if you run into an HTML tutorial that explains about how to use %3cfont> or %3cblink> tags, or spacer gifs, it's at least five years out of date, so skip it and find another one.  %0a%0aYou should test your skin on a variety of browsers -- ideally as many as you can, on as many different platforms as you can -- but at minimum you should be testing on Internet Explorer 6 and Firefox or Mozilla, since those are the most common, and have different bugs.  Don't forget to do things like resize windows and change text size during your testing.%0a%0a!!!Tools that you'll need%0a%0aThere are go
 od examples of all these programs available for free.  %0a%0a'''HTML and CSS editor(s).''' There are two types of editors: graphical (WYSIWYG, or "what you see is what you get"), and hand-coding or programmer's editors.  Graphical editors are less intimidating to novices, but you won't learn as much, or know your code as intimately as you will by using a hand-coding editor.  Whichever you choose, get one that has syntax highlighting for the code, because it will help you spot mistakes.  Also, live preview features are not that helpful when writing a PmWiki skin, because PmWiki does stuff that the live preview won't, such as substitute values for variables and insert sidebar content.%0a%0a'''Test wiki'''.  You don't want to be wreaking havoc on your skin while visitors can see your site.  It's a better idea to set up a test wiki, either on your real webserver or on your own machine.  Linux or [=MacOS=] computer owners may have webservers and PHP already running on their machi
 nes, but Windows users often don't.  If that describes you, then you might want to take a look at the Cookbook:Standalone recipe, which runs PmWiki without needing a complex webserver.  Or, you can find many local server packages which install a webserver, PHP, and other stuff (e.g. `MySQL), all configured to work together.  Try to get a package that has the same software and versions as used on your live setup, since then there will be less to go wrong when the site goes live.%0a%0a'''FTP client''' to transfer files to your webserver.  You probably had one of these already.%0a%0a'''Color picker'''.  Your editor might include one, or you could pick up a standalone application.  Extremely helpful for creating and saving color palettes.%0a%0a!!See also%0a%0a* [[PmWiki/SkinTemplates]]%0a* [[Cookbook:Skins]]%0a* [[Cookbook:SkinGuidelines]]%0a* [[Cookbook:Standalone]]%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I change the Wiki's d
 efault name in the upper left corner of the Main Page?%0a%0aA: Put the following config.php%0a%0a->[@$WikiTitle = 'My Wiki Site';@]%0a%0aThe ''docs/sample-config.php'' file has an example of changing the title.%0a%0a%0aQ: How can I embed PmWiki pages inside a web page?%0a%0aA: Source them through a PHP page, or place them in a frame.%0a%0a%0aQ: How do I change the font or background color of the hints block on the Edit Page?%0a%0aA: Add a CSS style to pub/css/local.css: [@.quickref {background:...; color:... }@]. The hints are provided by the [[Site.EditQuickReference]] page, which is in the PmWiki or Site wikigroup.  Edit that page, and change the "bgcolor" or specify the font "color" to get the contrast you need.%0a
+time=1158977964

Added: trunk/oggdsf/website/wikilib.d/PmWiki.SpecialCharacters
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.SpecialCharacters	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.SpecialCharacters	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.19 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
+author=TeganDowling
+csum=cross-reference
+host=69.131.28.243
+name=PmWiki.SpecialCharacters
+rev=12
+targets=
+text=When creating pages it's common to use commercial trademarks, copyright, umlaut, and other non-keyboard symbols.  therefore it's important that you have the means to input these special characters.  %0a%0a!!!ISO Standard codes%0aPmWiki supports the HTML special character listings by the w3c. [[http://www.w3.org/MarkUp/html-spec/html-spec_13.html |  W3C Page of Special Character codes ISO standard.]]%0a%0aHere are some samples: %0a(:markup:)[=%0a&#169; | &#188; | &#189; | &#174; | &#181; | &#168; =]%0a%0a(:markup:)[=%0a&#198; | 32&#176; | Un&#239;ted St&#228;tes | &#182; | &#165;Yen | PmWiki&#8482;=]%0a%0aFor a nice table of the same codes that show the codes with the output go to the [[http://www.nobledesktop.com/specialcharacters.html | Noble Desktop]] special character page. %0a%0a!!!Other ways to do it: %0a%0a!!!!Character Map%0aFind the "Character Map" utility in your computer's System Tools folder.  Click the symbol you're interested in, and note the keystroke info
 rmation at the bottom of the box.  You execute these by ''holding "Alt"'' while keying the numbers ''on the numerical keypad'' of your keyboard (not the numbers across the top of the board).%0a%0a[=&#169;=] = Alt+0169 = © | [=&#174;=] = Alt+0174 =  ® | [=&#176;=] = Alt+0176 = ° (degrees).%0a%0a!!!!Paste%0a*Use Word or another desktop application to create your text with the special characters that you want.  Copy and paste the text to the wiki page you're editing or creating.%0a*Find an instance of a special character in an online document; copy and paste the character to your wiki page:  ©%0a%0aThere's a list of special characters at [[PmWiki:SpecialCharactersList]].%0aThere's another illustration at [[PmWiki:Characters]]
+time=1157030301

Added: trunk/oggdsf/website/wikilib.d/PmWiki.TableDirectives
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.TableDirectives	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.TableDirectives	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=minor edits
+host=24.1.26.255
+name=PmWiki.TableDirectives
+rev=39
+targets=PmWiki.Tables,PmWiki.TableDirectives,PmWiki.Audiences,PmWiki.PmWikiPhilosophy,PmWiki.LocalCustomizations,PmWiki.TextFormattingRules,PmWiki.IncludeOtherPages,PmWiki.DocumentationIndex
+text=%25audience%25 authors (intermediate)%0a%0a(:title Table Directives:)%0aThere are four directives for table processing.  All must be at the beginning of a line to have any effect.%0a%0a!!![@(:table (attr...):)@]%0aGenerates a new HTML %3ctable> tag with the attributes provided in ''attr...''.%0aCloses the previous table, if any.%0aValid attributes and values are:%0a* border ''(a positive integer)''%0a* bordercolor ''(a color name or hex number; doesn't display in all browsers)''%0a* cellspacing ''(a positive integer indicating the space between cells)''%0a* cellpadding ''(a positive integer indicating the interior border of a cell)''%0a* width ''(a positive integer or percent)''%0a* bgcolor ''(a color name or hex number)''%0a* align ''(left, center or right)''%0a* summary ''(does not display; used primarily to help visually disabled people navigate)''%0a%0a!!![@(:cell (attr...):)@]%0aGenerates a new cell with the attributes given by ''attr...''.  %0aCloses the previous 
 table cell, if any.%0aIn HTML, this creates a new "%3ctd attr>" tag (and possibly %3ctable>, %3ctr>, and %3c/td> tags if they are needed to produce a valid HTML table). %0a%0a->%25note%25 '''Note:''' Placing a space after the cell markup "(:cell:) " causes subsequent text on that line to be treated as preformatted text.%0a%0aValid attributes and values are:%0a* align ''(left, center or right)''%0a* valign ''(top, middle or bottom)''%0a* colspan ''(a positive integer)''%0a* rowspan ''(a positive integer)''%0a* bgcolor ''(a color name or hex number)''%0a* width ''(a positive integer or percent)''%0a%0a!!![@(:cellnr (attr..):)@]%0aGenerates a new cell at the beginning of the next row.%0aCloses the previous table cell, if any.%0aIn HTML, this creates a "%3ctr>%3ctd attr>" tag, and possibly %3ctable>, %3c/td>, and %3c/tr> tags if they are needed for valid HTML.%0aValid attributes and values are:%0a* align ''(left, center or right)''%0a* valign ''(top, middle or bottom)''%0a* cols
 pan ''(a positive integer)''%0a* rowspan ''(a positive integer)''%0a* bgcolor ''(a color name or hex number)''%0a* width ''(a positive integer or percent)''%0a%0a!!![@(:tableend:)@]%0aCloses the previous table cell and closes off any table.  Generates %3c/td>, %3c/tr>, and %3c/table> tags as needed.%0a%0a!! Notes%0a%0aFor the table, cell, and cellnr tags the author can specify any attributes that would be valid in the HTML %3ctable> or %3ctd> tags.  Thus you can specify rowspan, colspan, etc. arguments to build arbitrary tables.  However, it's not possible to nest a [@(:table:)@] inside of a [@(:cell:)@] or [@(:cellnr:)@] -- the next paragraph explains why.%0a%0aMany are likely to ask why we didn't just use the standard HTML table markup (%3ctable>, %3ctr>, %3ctd>, %3cth>) instead of creating a new markup, and allowing nested tables as a result.  There are two answers:  first, the HTML table markup is very ugly for naive authors (see [[PmWiki.Audiences]] and [[PmWikiPhilosop
 hy]] #2), and second, it'd be very easy for authors to create tables that are incorrect HTML and that display incorrectly (or not at all) on some browsers.  Even seasoned web professionals sometimes get the table markup wrong, so it's a bit unrealistic to expect the average author to always get it right, or to be able to read arbitrary HTML table markup that someone else has created.%0a%0a-> %25color=green%25 ''Common comment:'' Surely, the average or naive author would not be writing HTML directly, but using a tool, such as [=FrontPage=], or even [=MSWord=], to generate the HTML. This would be a lot simpler than learning even the simplest PmWiki markups.%0a%0a-> %25color=green%25 ''Pm's Response:'' And once the HTML has been generated and posted, how is someone else going to edit or modify the table if they don't have the original [=FrontPage or MSWord=] file used to create it?  Remember that we're talking about ''collaborative'' authoring.  The HTML that those packages gen
 erate is among the hardest to read and edit of all!%0a%0aIt's difficult to write the code needed to make PmWiki understand and fix arbitrary table markup, so PmWiki uses the simplified version above.  Still, this version is able to handle most table requirements (with the possible exception of nested tables).%0a%0aAnd, this is not to say that nested HTML tables are impossible in PmWiki --they just can't be easily created by wiki authors using the default wiki markup.  A site administrator can of course create header/footer HTML code and other [[local customizations]] that make use of nested tables.%0a%0a!!!Example 1.  A table using table directive markup.%0a%0a(:markup:) [=%0a(:table border=1 cellpadding=5 cellspacing=0:)%0a(:cell:) a1%0a(:cell:) b1%0a(:cell:) c1%0a(:cell:) d1%0a(:cellnr:) a2%0a(:cell:) b2%0a(:cell:) c2%0a(:cell:) d2%0a(:tableend:)%0a=]%0a%0a%0aIn HTML, this is the same as%0a%0a-> [@%0a%3ctable border='1' cellpadding='5' cellspacing='0'>%0a  %3ctr>%0a    %3c
 td>a1%3c/td>%0a    %3ctd>b1%3c/td>%0a    %3ctd>c1%3c/td>%0a    %3ctd>d1%3c/td>%0a  %3c/tr>%0a  %3ctr>%0a    %3ctd>a2%3c/td>%0a    %3ctd>b2%3c/td>%0a    %3ctd>c2%3c/td>%0a    %3ctd>d2%3c/td>%0a  %3c/tr>%0a%3c/table>%0a@]%0a%0a%0a-----%0a!!!Floating Table with bulleted navigation list%0a%0a(:table border=1 width=30%25 align=right bgcolor=#cccccc cellspacing=0 :)%0a(:cellnr:)%0a'''Navigation Links'''%0a(:cellnr:)%0a*[[Text formatting rules]]%0a*[[Tables]]%0a*[[Table directives]]%0a(:tableend:)%0a%0aWhat if you wanted to create a nice little table like a table of contents in a page like this? In this example, the table is floating right and contains some links in a bulleted list. This is a nice demonstration of how it's possible to build a little table of contents in the page, which might navigate to other pages just within the same wiki group. Note that having a bulleted list ''won't work in a ordinary table'' - it only works inside an  table created with table directives such 
 as the example code used here.%0a%0a(:markup:)%0a(:table border=1 width=30%25 align=right bgcolor=#cccc99 cellspacing=0 :)%0a(:cellnr:)%0a'''Navigation Links'''%0a(:cellnr:)%0a*[[Tables]]%0a*[[Table directives]]%0a(:tableend:)%0a(:markupend:)%0a%0a(:markup:)%0a(:table border=1 width=30%25 align=right bgcolor=#cccc99 cellspacing=0 :)%0a(:cellnr colspan=2 align=center:)%0a'''Navigation Links'''%0a(:cellnr align=center:)%0a[[Tables]]%0a(:cell align=center:)%0a[[Table directives]]%0a(:tableend:)%0a(:markupend:)%0a%0aLooking at the markup here, notice that we have used a #cccc99 hex color for the table background. also the [@(:cellnr:)@] markup creates a new row, a new cell and closes the row at the end.%0a%0aYou could take this concept a little further: since you might want each page in the group to contain the same table of contents, you can make ONE table like the above and put it in its own page.  Then use an [[include (other pages)]] on any of your pages and bring in the tab
 le. The float (align) property will be honored in each page where it's included. Pretty sweet!%0a%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: Can I define table headers using the table directive markup?%0aA: No, but you can with [[Cookbook:AdvancedTableDirectives]]. See [[PITS:00535#pmanswer|Pm's reply]] to pending [[PITS:00535]]%0a
+time=1156527396
+title=Table Directives

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Tables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Tables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Tables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=fix audience case
+ctime=1141945978
+host=24.1.26.255
+name=PmWiki.Tables
+rev=17
+targets=PmWiki.TableDirectives,PmWiki.DocumentationIndex,PmWiki.Tables
+text=%25audience%25 authors (basic)%0a%0a!! Table basics%0a%0aPmWiki has two types of table markup; the markup described in this page is useful for creating tables with lots of small cells, while [[table directive(s)]] markups help with larger scale tables.  For more possibilities with table formatting see [[Cookbook:FormattingTables]].%0a%0aTables are created via use of the double pipe character: @@||@@. Lines beginning with this markup denote rows in a table; within such lines the double-pipe is used to delimit cells.  In the examples below a border is added for illustration (the default is no border).%0a%0a(:markup caption='Basic table':) [=%0a|| border=1%0a|| cell 1 || cell 2 || cell 3 ||%0a|| cell 1 || cell 2 || cell 3 ||=]%0a%0aHeader cells can be created by placing ! as the first character of a cell.  Note that these are ''table headers'', not ''headings'', so it doesn't extend to !!, !!!, etc.%0a%0a(:markup caption='Table headers':) [=%0a|| border=1%0a||! cell 1 ||! 
 cell 2 ||! cell 3 ||%0a|| cell 1  ||  cell 2 ||  cell 3 ||=]%0a%0aA table can have a caption, indicated by [@||!caption!||@].  Any caption must appear prior to other rows of the table.%0a%0a(:markup caption='Table caption':) [=%0a|| border=1%0a||! A special table !||%0a||! cell 1 ||! cell 2 ||! cell 3 ||%0a|| cell 1  ||  cell 2 ||  cell 3 ||=]%0a%0a%0a!! Formatting cell contents%0a%0aCell contents may be aligned left, centered, or aligned right. %0a* To left-align contents, place the cell contents next to the leading @@||@@.%0a* To center contents, add a space before and after the cell contents.%0a* To right-align contents, place a space before the cell contents and leave the cell contents next to the trailing @@||@@.%0a%0a(:markup caption='Cell alignments':) [=%0a|| border=1 width=100%25%0a||!cell 1      ||! cell 2  ||!       cell 3||%0a||left-aligned || centered || right-aligned||=]%0a%0a(:markup caption='Default cell alignments':) [=%0a|| border=1 width=100%25%0a||!cell d
 efault||!cell left ||%0a||default-aligned||left-aligned ||=]%0a%0aNote that header and detail cells have different default alignments.%0a%0aTo get a cell to span multiple columns, follow the cell with empty cells.%0a(At present there is no markup for spanning rows.)%0a%0a(:markup caption='Column spanning':) [=%0a|| border=1 width=100%25%0a|| |||| right column ||%0a|| || middle column ||||%0a|| left column ||||||%0a|| left column || middle column || right column ||%0a=]%0a%0a!! Table attributes%0a%0aAny line that begins with [@||@] but doesn't have a closing [@||@] sets the ''table attributes'' for any tables that follow.  These attributes can control the size and position of the table, borders, background color, and cell spacing.  (In fact these are just standard HTML attributes that are placed in the %3ctable> tag.)%0a%0aUse the [@width=@] attribute to set a table's width, using either a percentage value or an absolute size.%0a%0a(:markup caption='Table width':) [=%0a|| bor
 der=1 width=100%25 %0a|| cell 1 || cell 2 || cell 3 ||%0a|| c1 || cellcellcellcell2 || cell 3 ||=]%0a%0aThe [@border=@] attribute sets the size of a table's borders.%0a%0a(:markup caption='Bordered and borderless tables':) [=%0a|| border=10 %0a||!cell 1      ||! cell 2  ||!       cell 3||%0a||left-aligned || centered || right-aligned||%0a%0a|| border=0%0a||!cell 1      ||! cell 2  ||!       cell 3||%0a||left-aligned || centered || right-aligned||=]%0a%0aUse [@align=center@], [@align=left@], and [@align=right@] to center, left, or right align a table.  Note that [@align=left@] and [@align=right@] create a ''floating table'', such that text wraps around the table.%0a%0a(:markup caption='Table alignment':) [=%0a|| border=1 align=center%0a||!cell 1      ||! cell 2  ||!       cell 3||%0a||left-aligned || centered || right-aligned||%0a%0a|| border=1 align=left%0a||!cell 1      ||! cell 2  ||!       cell 3||%0a||left-aligned || centered || right-aligned||%0aNotice how text wraps to
  the right of a table using "align=left".=]%0a%0aThe [@bgcolor=@] attribute sets the background color for a table.  At present there is no way to specify the color of individual rows or cells in this type of table (but see Cookbook:FormattingTables).%0a%0a(:markup:) [=%0a|| border=1 align=center bgcolor=yellow%0a||!cell 1      ||! cell 2  ||!       cell 3||%0a||left-aligned || centered || right-aligned||=]%0a%0a!!Other examples%0a%0a(:markup caption='A more complex table':) [=%0a%25define=sp padding-right:1em font-weight:bold%25%0a|| border=1%0a|| [++Events Calendar++] ||||||||||%0a|| '''May 2005''' || '''June 2005''' || '''July 2005''' || '''August 2005''' || '''September 2005''' ||%0a||%25sp%25'''10'''%25%256:30 - 8:30 Big Meeting\\\%0a%25sp%25'''17'''%25%257:00 - 8:30 Bigger Meeting\\\%0a%25sp%25'''24'''%25%257:00 - 8:30 Biggest Meeting|| || || || ||%0a|| '''October 2005''' || '''November 2005''' || '''December 2005''' || '''January 2006''' || '''February 2006''' ||%0a|| 
 || || || || ||%0a=]%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I create nice tables similar to Product X?  %0aA: See [[tables]] and [[table directives]].%0a
+time=1156527570

Added: trunk/oggdsf/website/wikilib.d/PmWiki.TextFormattingRules
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.TextFormattingRules	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.TextFormattingRules	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=restore
+host=24.1.26.255
+name=PmWiki.TextFormattingRules
+post= Save
+rev=293
+targets=Main.WikiSandbox,PmWiki.ListStyles,PmWiki.WikiStyles,PmWiki.WikiWord,PmWiki.MarkupMasterIndex,PmWiki.Tables,PmWiki.TableDirectives,PmWiki.Links,PmWiki.DocumentationIndex
+text=This page provides a more complete list of some of the markup sequences available in PmWiki.  Note that it's easy to create and edit pages without using any of the markups below, but if you ever need them, they're here. %0a%0a'''To experiment''' with the rules, '''please''' try editing the [[Main/WikiSandbox]].%0a%0a!!Table of contents%0a*[[#Paragraphs|Paragraphs]]%0a*[[#IndentedParagraphs|Indented Paragraphs ''(Quotes)'']]%0a*[[#BulletedLists|Bulleted and Numbered Lists]]%0a*[[#DefinitionLists|Definition Lists]]%0a*[[#WhitespaceRules|Whitespace Rules]] %0a*[[#HorizontalLine|Horizontal Line]]%0a*[[#Emphasis|Emphasis]]%0a*[[#References|References]]%0a*[[#Headings|Headings]]%0a*[[#EscapeSequence|Escape sequence]]%0a*[[#SpecialCharacters|Special characters]]%0a*[[#Tables|Tables]]%0a%0a----%0a%0a!! [[#Paragraphs]] Paragraphs%0a%0aTo create paragraphs, simply enter text.  Use a blank line to start a new paragraph.%0a%0aWords on two lines in a row will wrap and fill as needed
  (the normal XHTML behavior).  To turn off the automatic filling, use the [@(:linebreaks:)@] directive above the paragraph.%0a%0a* Use [@\@] (single backslash) at the end of a line to join the current line to the next one.%0a* Use [@\\@] (two backslashes) at the end of a line to force a line break.%0a* Use [@\\\@] (three backslashes) at the end of a line to force 2 line breaks.%0a* Use [@[[%3c%3c]]@] to force a line break that will clear floating elements.%0a%0a%0a!! [[#IndentedParagraphs]] Indented Paragraphs ''(Quotes)''%0a%0aArrows ([@->@]) at the beginning of a paragraph can be used to produce an indented paragraph.  More hyphens at the beginning ([@--->@]) produce larger indents.%0a%0a(:markup:)%0a->Four score and seven years ago our fathers placed upon this continent a new nation, conceived in liberty and dedicated to the proposition that all men are created equal.%0a(:markupend:)%0a%0aInverted Arrows ([@-%3c@]) at the beginning of a paragraph can be used to produce a 
 paragraph with a hanging indent.  Adding hyphens at the beginning ([@---%3c@]) causes all the text to indent.%0a%0a(:markup:)%0a-%3cFour score and seven years ago our fathers placed upon this continent a new nation, conceived in liberty and dedicated to the proposition that all men are created equal. %0a(:markupend:)%0a%0a(:markup:)%0a--%3cFour score and seven years ago our fathers placed upon this continent a new nation, conceived in liberty and dedicated to the proposition that all men are created equal.  And that food would be good to.%0a(:markupend:)%0a%0aBlocks of text to which [@(:linebreaks:)@] has been applied can be indented by preceding the first line of the block with indention arrows ([@->@]) and aligning subsequent lines under the first. An unindented line stops the block indentation.  See [[Cookbook:MarkupTricks | Cookbook/MarkupTricks]] for an example.%0a%0a%0a!! [[#BulletedLists]] Bulleted and Numbered Lists%0a%0aBullet lists are made by placing asterisks at 
 the left margin. Numbered lists are made by placing number-signs (#) at the left margin.  More asterisks/number-signs increases the level of bullet:%0a%0a(:markup:) %0a* First-level list item%0a** Second-level list item%0a### Order this%0a#### And this (optional)%0a### Then this%0a** Another second-level item%0a* A first-level item: cooking%0a## Prepare the experiment%0a### Unwrap the pop-tart%0a### Insert the pop-tart into the toaster%0a## Begin cooking the pop tart%0a## Stand back%0a(:markupend:)%0aAlso see: [[ListStyles]], Cookbook:OutlineLists and Cookbook:NumberedHeaders%0a%0a%0a!! [[#DefinitionLists]] Definition Lists%0a%0aDefinition lists are made by placing colons at the left margin:%0a%0a(:markup:)%0a:term:definition of term%0a::second-level item: definition of 2nd-level item%0a(:markupend:)%0a%0a!! [[#WhitespaceRules]] Whitespace Rules%0a%0aWhitespace indentation in lists.  Any line that begins with whitespace ''and aligns'' with a previous list item (whether bulle
 ted, numbers or definitional) is considered to be "within" that list item.  Text folds and wraps as normal, and the (:linebreaks:) directive is honored. %0a%0a(:markup:) %0a# First-level item\\%0a  Whitespace used to to continue item on a new line%0a# Another first-level item%0a  # Whitespace combined with a single # to create a new item one level deeper%0a(:markupend:)%0a%0aOtherwise, lines that begin with whitespace are treated as ''preformatted text'', using a monospace font and not generating linebreaks except where explicitly indicated in the markup.  (Another way to create preformatted text blocks is by using the [=[@...@]=] markup.)%0a%0a!! [[#HorizontalLine]] Horizontal Line%0a%0aFour or more dashes ([=----=]) at the beginning of a line produce a horizontal line.%0a%0a%0a!! [[#Emphasis]] Emphasis%0a%0a* Enclose text in doubled single-quotes ([=''text''=]), i.e., ''two apostrophes'', for emphasis (usually ''italics'')%0a* Enclose text in tripled single-quotes ([='''te
 xt'''=]), i.e. ''three apostrophes'', for strong emphasis (usually '''bold''')%0a* Enclose text in five single-quotes ([='''''text'''''=]), or triples within doubles (''five apostrophes''), for some other kind of emphasis (usually '''''bold italics''''')%0a* Enclose text in doubled at-signs ([=@@text@@=]) for @@monospace@@ text%0a* Use [=[+large+]=] for [+large+] text, [=[++larger++]=] for [++larger++], [=[-small-]=] for [-small-] text, and [=[--smaller--]=] for [--smaller--].%0a* Emphasis can be used multiple times within a line, but cannot span across markup line boundaries (i.e., you can't put a paragraph break in the middle of bold text).%0a%0aOther styling %0a(:markup:)%0a'+big+', '-small-', '^super^', '_sub_', %0a%0a{+insert or underscore+}, %0a%0a{-delete or strikethrough or strikeout-}%0a(:markupend:)%0a* [@`WikiWord@] `WikiWord neutralisation%0a%0aSee also [[Wiki Styles]] for advanced text formatting options.%0a%0a%0a!! [[#References]] References%0a%0a* Use words an
 d phrases in double brackets (e.g., [=[[text formatting rules]]=]) to create links to other pages on this wiki.%0a* On some PmWiki installations, capitalized words joined together (e.g., [[WikiWord]]s) can also be used to make references to other pages without needing the double-brackets.%0a* Precede [=URLs=] with "@@http:@@", "@@ftp:@@", "@@gopher:@@", "@@mailto:@@", or "@@news:@@" to create links automatically, as in http://www.pmichaud.com/toast.%0a* [=URLs=] ending with @@.gif@@, @@.jpg@@, or @@.png@@ are displayed as images in the page%0a* Links with arbitrary text can be created as either [=[[=]''target'' | ''text'']] or [=[[=]''text'' -> ''target''[=]]=].  ''Text'' can be an image URL, in which case the image becomes the link to the remote ''url'' or ''[[WikiWord]]''.%0a* [[#Anchors]] Anchor targets within pages (#-links) can be created using @@[=[[#target]]=]@@.%0a%0a%0a!! [[#Headings]] Headings%0a%0aHeadings are made by placing an exclamation mark ('''!''') at the l
 eft margin.  More exclamation marks increase the level of heading.  For example,%0a%0a(:markup:)%0a! Level 1 Heading%0a!! Level 2 Heading%0a!!! Level 3 Heading%0a!!!! Level 4 Heading%0a(:markupend:)%0a%0a%0a!! [[#EscapeSequence]] Escape sequence%0a%0aAnything placed between [=[= and =]=] is not interpreted by PmWiki.  This makes it possible to turn off  special formatting interpretations and neutralise [=WikiWords=] that are not links (even easier is to use a tick ` in front, like [=`WikiWord=]).%0a%0aFor preformatted text blocks, use the [=[@...@]=] markup. %0a%0a(:markup:)%0a[@%0aCode goes here like [[PmWiki.PmWiki]]%0a'$CurrentTime $[by] $AuthorLink:  [=$ChangeSummary=]'; #just some code%0a@]%0a(:markupend:)%0a%0aIt is also useful to use [=[= =]=] within other wiki structures, as this enables the inclusion of new lines in text values.  The example below shows how to include a multi-line value in a hidden form field.%0a%0a->[@(:input hidden message "[=Line1%0aLine2=]":)@]%
 0a%0a!! [[#SpecialCharacters]] Special Characters%0a(:include SpecialCharacters:)%0a%0a%0a!! [[#Tables]] Tables%0a%0aTables are defined by enclosing cells with '||'.  A cell with leading and trailing spaces is centered; a cell with leading spaces is right-aligned; all other cells are left-aligned.  An empty cell will cause the previous cell to span multiple columns.  (There is currently no mechanism for spanning multiple rows.)  A line beginning with '||' specifies the table attributes for subsequent tables. A '!' as the first character in a cell provides emphasis that can be used to provide headings. This is interesting stuff.%0a%0a(:markup:)%0a%0a||border=1 width=50%25%0a||!Table||!Heading||!Example||%0a||!Left   || Center || Right||%0a||A       ||!  a B   ||     C||%0a||        || single ||      ||%0a||        || multi span   ||||%0a(:markupend:)%0a%0a----%0a!!!Can't find it here?%0aSee [[MarkupMasterIndex]], [[Tables]], [[Table directives]], or [[Links]].%0a%0a%25trail%2
 5%3c%3c|[[DocumentationIndex]]|>>%0a%0a
+time=1156527589

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Troubleshooting
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Troubleshooting	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Troubleshooting	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=remove top trail, add audience
+host=24.1.26.255
+name=PmWiki.Troubleshooting
+rev=55
+targets=PmWiki.MailingLists,PmWiki.DocumentationIndex,PmWiki.Upgrades,PmWiki.Installation,PmWiki.InitialSetupTasks,PmWiki.WikiGroup,PmWiki.LocalCustomizations
+text=%25audience%25 administrators%0a%0aPmwiki is pretty robust and can automatically adapt to a very wide variety of environments.  However, sometimes things don't go as we expect, so we're catalogging common errors and their fixes here.%0a%0a!! Troubleshooting Frequently Asked Questions%0a%0a->%25note%25 Note: This page on pmwiki.org is probably not the best place to post questions.  Consider sending questions to the pmwiki-users [[mailing list(s)]], or post your question on the [[PmWiki:Questions]] page.%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ: Why am I seeing strange errors after [[(PmWiki.)upgrad(es)]]ing?%0aA: Make sure all of the files were updated, in particular ''pmwiki.php''.%0a%0aA: This question sometimes arises when an administrator hasn't%0afollowed the advice, which used to be less prominent, on the%0a[[(PmWiki.)installation(#notes)]] and%0a[[(PmWiki.)initial setup tasks(#dontmodify)]] pages and has renamed%0a''pmwiki
 .php'' instead of creating an ''index.php'' wrapper script.%0aIf you have renamed ''pmwiki.php'' to ''index.php'', then the upgrade procedure%0awon't have updated your ''index.php'' file.  Delete the old version and%0acreate a wrapper script so it won't happen again.%0a%0aA: Sometimes an FTP or other copy program will fail to transfer all of the%0afiles properly.  One way to check for this is by comparing file sizes.%0a%0aA: Be sure all of the files in the ''wikilib.d/'' directory%0awere also upgraded.  Sometimes it's a good idea to simply delete the ''wikilib.d/''%0adirectory before upgrading.  (Local copies of pages are stored in ''wiki.d/'' and not ''wikilib.d/''.)%0a%0a%0aQ: I'm suddenly getting messages like "@@Warning: fopen(wiki.d/.flock): failed to open stream: Permission denied...@@" and @@Cannot acquire lockfile@@"... what's wrong?%0a%0aA: Something (or someone) has changed the permissions on the ''wiki.d/.flock'' file or the ''wiki.d/'' directory such that the web
 server is no longer able to write the lockfile.  The normal solution is to simply delete the ''.flock'' file from the ''wiki.d/'' directory  -- PmWiki will then create a new one.  Also be sure to check the permissions on the ''wiki.d/'' directory itself. (One can easily check and modify permissions of the ''wiki.d/'' directory in Filezilla (open-source FTP app) by right-clicking on the file > File attributes)%0a%0a%0aQ: My links in the sidebar seem to be pointing to non-existent pages, even though I know I created the pages.  Where are the pages?%0a%0aA: Links in the sidebar normally need to be qualified by a [[WikiGroup]] in order to work properly.  Otherwise they will point to whatever group you happen to be viewing the sidebar in.\\%0aAlso: Make sure you type Side'''B'''ar with a capital B.%0a%0a%0aQ: Why am I seeing "@@Warning: Cannot modify header information - headers already sent ...@@" messages at the top of my page.%0a%0aA: If this is the first or only error message
  you're seeing, it's usually an indication that there are blank lines or spaces before the [@%3c?php@] or after the [@?>@] in a [[local customization(s)]] file.  Double-check the file and make sure there aren't any blank lines or spaces before the initial [@%3c?php@].  It's often easiest and safest to eliminate any closing [@?>@] altogether.%0a%0aA: If the warning is appearing after some other warning or error message, then resolve the other error and this warning may go away.%0a%0a%0aQ: Why is PmWiki prompting me multiple times for a password I've already entered?%0a%0aA: Usually this is an indication that the browser isn't accepting cookies, or that PHP's session handling functions on the server aren't properly configured.  If the browser is accepting cookies, then try setting $EnableDiag=1; in ''local/config.php'', run PmWiki using [@?action=phpinfo@], and verify that sessions are enabled and that the session.save_path has a reasonable value.  Note that several versions o
 f PHP under Windows require that a session_save_path be explicitly set (this can be done in the ''local/config.php'' file).%0a%0aQ: I edited ''config.php'', but when I look at my wiki pages, all I see is "@@Parse error: parse error, unexpected T_VARIABLE in ''somefile'' on line ''number''.@@"%0a%0aA: You've made a mistake in writing the PHP that goes into the ''config.php'' file. The most common mistake that causes the T_VARIABLE error is forgetting the semi-colon (;) at the end of a line that you added. The line number and file named are where you should look for the mistake.%0a%0a%0aQ: Searches and pagelists stopped working after I upgraded -- no errors are reported, but links to other pages do not appear (or do not appear as they should) -- what gives?%0a%0aA: Be sure all of the files in the ''wikilib.d/'' directory%0awere also upgraded.  In particular, it sounds as if the Site.PageListTemplates page is either missing (if no links are displayed) or is an old version (if t
 he links do not appear as they should).%0a%0aQ: Some of my posts are coming back with "403 Forbidden" errors or "Not Acceptable"?  This happens with posts containing "wget", "curl", "file(" or ...%0a%0aA: Your webserver probably has [[http://www.modsecurity.org | mod_security]] enabled.  The mod_security "feature" scans all incoming posts for forbidden words or phrases that might indicate someone is trying to hack the system, and if any of them are present then Apache returns the 403 Forbidden error.  Common phrases that tend to trigger mod_security include "curl ", "wget", and "file(", although there are many others.%0a%0aSince mod_security intercepts the requests and sends the "forbidden"%0amessage before PmWiki ever gets a chance to run, it's not a bug in PmWiki, and%0athere's little that PmWiki can do about it.  Instead, one has to alter the%0awebserver configuration to disable mod_security or reconfigure it to allow%0awhatever word it is forbidding.  Some sites may be a
 ble to disable mod_security%0aby placing [@SecFilterEngine off@] in a ''.htaccess'' file.%0a%0aQ: I get the following message when attempting to upload an image, what do I do?%0a[-@@'''Warning''': move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 1929 is not allowed to access /home/onscolre/public_html/pmwikiuploads/Photos owned by uid 33 in '''/home/onscolre/public_html/pmwiki/scripts/upload.php''' on line '''198'''@@-]%0a%0a@@'''PmWiki can't process your request'''@@%0a%0a[-@@?cannot move uploaded file to /home/onscolre/public_html/pmwikiuploads/Photos/FoundationPupilsIn1958.jpeg@@-]%0a%0a[-@@We are sorry for any inconvenience.@@-]%0a%0aA:%0a
+time=1156527642

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Upgrades
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Upgrades	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Upgrades	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
+author=Pico
+csum=Added Q&A from thread: "Supplemental install; swapping versions during beta testing"
+host=12.33.45.37
+name=PmWiki.Upgrades
+post= Save
+rev=63
+targets=PmWiki.PmWiki,PmWiki.UpgradingFromPmWiki1,PmWiki.BackupAndRestore,PmWiki.LocalCustomizations,PmWiki.Troubleshooting,PmWiki.DocumentationIndex
+text=[[PmWiki]] is designed to make it easy to upgrade the PmWiki software without affecting your existing data files or installation.  For most upgrades, you simply copy the files in the new release over your existing installation.%0a%0a%25block bgcolor=#f7f7f7 color=black border='1px solid black' padding=5px%25 '''Note for PmWiki 1.0 sites:''' Upgrading from 1.0.x to 2.0 requires more than simply copying the 2.0 software over the 1.0 installation.  See [[Upgrading From PmWiki 1]] for more details.%0a%0aTo upgrade PmWiki: %0a%0a0. If you're upgrading to a new major release (a release where the second number changes, as in going from 0.5.27 to 0.6.0), then carefully read the [[PmWiki:ReleaseNotes]] before performing an upgrade to see if there are any significant changes or preparation tasks that must be handled before performing the upgrade. Upgrading from a beta version of 2.0 is quite easy, but taking a look at the 2.0 [[PmWiki:ReleaseNotes]] doesn't hurt.%0a%0a1. It's ''a
 lways'' a good idea to have a [[PmWiki/backup (And Restore)]] copy of your existing PmWiki installation before starting.  You can copy the entire directory containing your existing installation, or you can just make copies of the ''wiki.d/'' directory and any other local customization files you may have created (e.g., ''config.php'', ''localmap.txt'', etc.).%0a%0a2. Download the version of PmWiki that you want from http://www.pmichaud.com/pub/pmwiki.%0a%0a3. Extract the tar image using @@tar -xvzf ''tgzfile''@@, where ''tgzfile'' is the tar file you downloaded above.  This will create a @@pmwiki-x.y.z@@ directory with the new version of the software.%0a%0a4. Copy the files in @@pmwiki-x.y.z@@ over the files of your existing PmWiki installation.  For example, if your existing PmWiki installation is in a directory called ''pmwiki'', then one way to copy the new files over the existing ones is to enter the command:%0a%0a->cp -a pmwiki-x.y.z/. pmwiki%0a%0aNote that BSD systems w
 ill not not have the -a option as a command-line argument for ''cp'', but that's okay, since it's just shorthand for ''cp -dpR'', so use that instead of ''-a''.%0a%0aOn (some) [=FreeBSD=] servers and Mac OS X systems you need to use %0a%0a->[@cp -Rpv pmwiki-x.y.z/. pmwiki@]%0a%0a5. That's it!  As long as you didn't make any customizations to the ''pmwiki.php'' script or to the files in ''scripts/'', your PmWiki installation should continue to run correctly! ([[Local customizations]] should go in ''local/config.php'')%0a%0a'''Note''': Additional tips can be found on the [[Troubleshooting]] page.%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How can I test a new version of PmWiki on my wiki without changing the prior version used by visitors?%0aA: The easy way to do this is to install the new version in a separate%0adirectory, and for the new version set (in local/config.php):%0a[@%0a%0a    $WikiLibDirs = array(&$WikiDir,%0a      new PageStor
 e('/path/to/existing/wiki.d/{$FullName}'),%0a      new PageStore('wikilib.d/{$FullName}'));%0a%0a@]%0aThis lets you test the new version using existing page content%0awithout impacting the existing site or risking modification of%0athe pages.  (Of course, any recipes or local customizations have to%0abe installed in the new version as well.)%0a%0aThen, once you're comfortable that the new version seems to work%0aas well as the old, it's safe to upgrade the old version (and one%0aknows of any configuration or page changes that need to be made).
+time=1158936192

Added: trunk/oggdsf/website/wikilib.d/PmWiki.UpgradingFromPmWiki1
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.UpgradingFromPmWiki1	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.UpgradingFromPmWiki1	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.5 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.8 (KHTML, like Gecko) Safari/312.5
+author=jr
+csum=note use of Compat1x enties
+host=210.48.84.131
+name=PmWiki.UpgradingFromPmWiki1
+rev=33
+targets=PmWiki.WikiAdministrator,PmWiki.Upgrades,PmWiki.MailingLists,PmWiki.Installation,PmWiki.InitialSetupTasks,PmWiki.LocalCustomizations,PmWiki.CustomMarkup,PmWiki.WikiWord,PmWiki.DocumentationIndex
+text=This page gives suggestions for upgrading an existing PmWiki 1.x installation to use PmWiki 2.0.  In this page we assume that a site [[(wiki) administrator]] already has a site running using PmWiki version 1.x or earlier in a somewhat standard configuration, and wants to upgrade to the 2.0 software.%0a%0a->'''Important note:''' The normal PmWiki [[upgrade(s)]] procedure (i.e., copy the new software over the existing one) won't work for moving from 1.x to 2.0.  Either start over with a new installation, or use some of the conversion scenarios listed below.%0a%0aAs always, questions and requests for assistance can be posed to [[Mailing lists | pmwiki-users]].  Errors or problems with the methods below can be corrected here, or posted to the [[PITS:PITS |PmWiki Issue Tracking System]].%0a%0a!!!Method 1: Test conversion%0a%0aBecause of the substantial redesign of PmWiki for 2.0, converting an existing site to 2.0 is likely to cause a [[wiki administrator]] a fair amount of 
 apprehension.  The approach given here allows the administrator to install, configure, and test PmWiki 2.0 on an existing set of pages without risking an existing 1.x installation.%0a%0a'''Step 0:'''  It's always a very good idea to back up your existing PmWiki 1.x installation before doing anything else -- especially save the files in the ''local/'' and ''wiki.d/'' directories.%0a%0a'''Step 1:'''  [[Install(ation)]] PmWiki 2.0 into a new directory away from the existing 1.x installation.%0a%0a'''Step 2:'''  Briefly test the PmWiki 2.0 installation and make sure it is working properly -- i.e., edit and save a couple of pages.  Then, remove the pages you created (you can just remove the files from PmWiki 2.0's ''wiki.d/'' directory, or remove the ''wiki.d/'' directory altogether).%0a%0a'''Step 3:'''  Add the following lines to the ''local/config.php'' file in the 2.0 installation, replacing "[@/path/to/pmwiki1/wiki.d@]" below with the location of your PmWiki 1.x installation'
 s ''wiki.d/'' directory on disk.%0a    [=%0a    include_once("$FarmD/scripts/compat1x.php");%0a    UseV1WikiD("/path/to/pmwiki1/wiki.d");%0a    =]%0aFor example, my 2.0 test conversion uses:%0a    [=%0a    include_once("$FarmD/scripts/compat1x.php");%0a    UseV1WikiD("/home/pmichaud/pmwiki/wiki.d");%0a    =]%0a'''Step 4:'''  After making the above change, all of your existing pages should appear in the new 2.0 installation.  Furthermore, if you "edit page" on any of the existing pages, you should see that any PmWiki 1.x markups (links, etc.) have been converted to the new markup syntax.%0a%0aAny pages edited/saved by the 2.0 wiki installation are kept separate from the pages in the previous installation.  Thus you can safely experiment with editing and changing pages in the new site without affecting the existing 1.x site. %0a%0a'''Step 5:'''  Once you see that your existing pages are available in the 2.0 installation, you can then begin going through the remaining [[initial
  setup tasks]] for the 2.0 site to enable any [[local customizations]] you may want for your site.  Many local customizations (e.g. page layout templates) remain the same between 1.x and 2.0, others such as [[custom markup]] or [[Cookbook:Cookbook |cookbook recipes]] need to be converted to 2.0 as well.  %0a%0a'''Note:''' [[WikiWord]] links are disabled by default since Pmwiki version 2.1 beta2. So you may either enable WikiWord links by setting [@$LinkWikiWords = 1;@] in config.php, or convert your existing WikiWord links manually to bracketed links. To find those WikiWord links easier you can highlight them by setting in config.php%0a%0a       [=$HTMLStylesFmt['wikiword'] = "%0a       span.wikiword { background:yellow; }%0a       ";=] %0a%0a'''Step 6:'''  Continue configuring the new installation just as if you were setting up a new PmWiki site.  If you find PmWiki 1.x markups that aren't converted or convert incorrectly, be sure to enter a [[PITS:NewIssue |new PITS issue]
 ] so that we can improve the conversion script.%0a%0a'''Step 7:'''  If you're comfortable with the conversion and want to go ahead and convert all of the 1.x pages into 2.0 format, change the [@UseV1WikiD(...)@] call in ''local/config.php'' above to [@ConvertV1WikiD(...)@] instead, as in:%0a    [=%0a    include_once("$FarmD/scripts/compat1x.php");%0a    ConvertV1WikiD("/path/to/pmwiki1/wiki.d");%0a    =]%0aRunning the pmwiki.php script will then bring up some forms to allow you to bulk migrate some or all of your 1.x pages to 2.0 format.  After you've converted pages, you can then just eliminate these two lines from the configuration and your PmWiki 2.0 site will be running standalone.%0a%0aIf you have local customisations that require you to specify $Compat1x['/match/'] = 'replace'; entries so they are correctly converted, make sure these are defined ''before'' the call to ConvertV1WikiD.%0a%0aNote that there's nothing that requires you to convert all of the pages or get ri
 d of the 1.x ''wiki.d/'' directory -- PmWiki works just fine with it in place.  And it's good to have a backup.%0a%0a'''Step 8:''' Once you're comfortable that the PmWiki 2.0 site will meet your needs, you can then discontinue the 1.x site and just start using the 2.0 site.  Or, if you decide that 2.0 isn't for you, then the 1.x site is still intact and can continue to be used.%0a%0a'''Step 9:''' If your previous site had an ''uploads/'' directory, you'll probably want to copy it or move it into the new location.%0a%0a%25trail%25%3c%3c|[[PmWiki.Documentation Index]]|>>%0a
+time=1144892726

Added: trunk/oggdsf/website/wikilib.d/PmWiki.UploadVariables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.UploadVariables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.UploadVariables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.25 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
+author=jb
+csum=add $UploadPrefixQuota & $UploadDirQuota
+host=216.40.218.187
+name=PmWiki.UploadVariables
+rev=31
+targets=PmWiki.Variables,PmWiki.UploadsAdmin,Profiles.Jb
+text=%3c%3c|[[PmWiki.Variables]]|>>%0a%0a:$EnableUpload:The upload.php script is automatically included from stdconfig.php if the $EnableUpload variable is true in config.php.  Note that one may still need to set an upload password before users can upload (see [[UploadsAdmin]]).%0a%0a:$UploadDir:The directory where uploads are to be stored.  Defaults to ''uploads/'' in the pmwiki directory, but can be set to any location on the server.  This directory must be writable by the webserver process if uploading is to occur.%0a%0a:$UploadUrlFmt:The url of the directory given by $UploadDir. %0a%0a$IMapLinkFmt['Attach:'] %0a->The format of the upload link displayed when an attachment is present. No default is set. %0a%0a:$LinkUploadCreateFmt: The format of the upload link displayed when an attachment not present. Defaults to%0a      %3ca class='createlinktext' href='\$LinkUpload'>\$LinkText%3c/a>\\%0a      %3ca class='createlink' href='\$LinkUpload'>&nbsp;&Delta;%3c/a>");%0a%0a:$Uplo
 adPrefixFmt:Sets the prefix for uploaded files to allow attachments to be organized other than by groups.  Defaults to [@'/$Group'@] (uploads are organized per-group), but can be set to other values for sitewide or per-page attachments.%0a    $UploadPrefixFmt = '/$FullName';    # per-page attachments%0a    $UploadPrefixFmt = '';              # sitewide attachments%0a%0a:$EnableDirectDownload:When set to 1 (the default), links to attachments bypass PmWiki and come directly from the webserver.  Setting $EnableDirectDownload=0; causes requests for attachments to be obtained via [@?action=download@].  This allows PmWiki to protect attachments using a page's read permissions, but also increases the load on the server.%0a%0a:$EnableUploadVersions:When set to 1 (default is 0), uploading a file to a location where a file of the same name already exists causes the old version to be renamed to @@file.ext,timestamp@@ (instead of being overwritten). @@timestamp@@ is a Unix-style timesta
 mp.%0a%0a:$UploadNameChars:The set of characters allowed in upload names.  Defaults to [@"-\w. "@], which means alphanumerics, hyphens, underscores, dots, and spaces can be used in upload names, and everything else will be stripped.%0a    $UploadNameChars = "-\w. !=+";    # allow exclamations, equals, and plus%0a%0a:$UploadPrefixQuota:Overall size limit for groups, in the group configuration file (i.e., local/Group.php)%0a%0a:$UploadDirQuota:Overall size limit for all uploads.%0a%0a:$UploadMaxSize:Maximum size for uploading files (50000 octets by default)%0a%0a->[@Units are in bytes.%0a 100K: 100000;%0a  1MB: 1000000;%0a  1GB: 1000000000;%0a  1TB: 1000000000000;@]%0a%0a----%0aQuestion - What are "octets" in the [@$UploadMaxSize@] text above?  [[~jb|John Bittner]]
+time=1157766752

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Uploads
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Uploads	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Uploads	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=restore for distro
+host=24.1.26.255
+name=PmWiki.Uploads
+rev=73
+targets=PmWiki.PmWiki,PmWiki.UploadsAdmin,PmWiki.WikiGroup,PmWiki.Images,PmWiki.PageDirectives,PmWiki.WikiAdministrator,PmWiki.Passwords,PmWiki.PasswordsAdmin,PmWiki.DocumentationIndex
+text=%25audience%25 authors (intermediate)%0a%0a''Note: [[PmWiki]] is distributed with uploads disabled by default.  See [[Uploads Admin]] for information about how to enable and configure the upload feature.''%0a%0a!!![@Attach:@] Syntax%0a[[PmWiki]] can be configured to allow authors to upload and attach files to pages.  Each [[WikiGroup]] can have its own collection of named attachments that are shared among all pages in the group.  To add or link to an attachment, an author edits a page to include the markup "@@Attach:@@" followed by a name of an attachment (e.g., "@@[=Attach:resume.pdf=]@@").  When the page is displayed, the @@Attach:@@ markup becomes one of the following:%0a%0a* A link to the named attachment%0a* A link to a form whereby the author can specify a file to be uploaded and used as the new attachment%0a* If the attachment is an image file such as .gif, .jpg, or .png, then it is displayed as an [[image(s)]].%0a%0aTo prevent an image attachment from displaying
  as an image, place it in double brackets (e.g., [@[[Attach:image.jpg]]@]).%0a%0aTo have a link to an attachment appear without the "[@Attach:@]" at the beginning of the link, use [@[[(Attach:)file.ext]]@].%0a%0aTo link to attachments on another page or WikiGroup, use [@Attach:PageName/file.ext@] or [@Attach:Group.PageName/file.ext@]. %0a%0aTo link to an uploaded image from another group, you need to refer to a page within another group, not just the group itself. Thus, [@Attach:Group.SomePage/image_name.ext@]. Note, you must use the PageName, but that there is no requirement that the page actually exist.%0a%0a!!!Listing All Files For A Page%0aTo list all files that have been uploaded to the current page, enter the markup:%0a[[PmWiki/PageDirectives#attachlist | [@(:attachlist:)@] ]]%0a%0aThis will list all files, file size and a link to download the file on the page.%0a%0a!!!Upload Form / Upload Replacement%0aOne can go directly to the upload form by appending "?action=uploa
 d" to the URI for any page that has file uploads enabled by the [[Wiki Administrator]]. Replace a file by simply uploading a new version of the file with the same name. Be sure to clear your browser cache after replacing an upload. Otherwise, it may appear that the original upload is still on the server. If you put @@$EnableUploadVersions=1;@@ in you @@local/config.php@@, the old versions of the same files are renamed and not removed.%0a%0a!!!Type and Size Restrictions%0aFor security reasons, the upload feature is disabled when PmWiki is first installed; once enabled, uploads are generally restricted as to the types and sizes of files that may be uploaded to the server (see [[UploadsAdmin]]).  PmWiki's default configuration limits file sizes to 50 kilobytes and file extensions to common types such as ".gif", ".jpg", ".doc", ".txt", and ".pdf".  In addition, the administrator can configure the system to require an @@upload@@ password--see [[Passwords]] and [[PasswordsAdmin]].
 %0a%0aBy default the upload allows the following extensions:%0a   %0a   [@'gif','jpg','jpeg','png','bmp','ico','wbmp',          # images%0a   'mp3','au','wav',                                     # audio%0a   'mpg','mpeg','wmf','mov','qt','avi',                  # video%0a   'zip','gz','tgz','tar','rpm','hqx',                   # archives%0a   'doc','ppt','xls','exe','mdb',                        # MSOffice%0a   'pdf','psd','ps','ai','eps',                          # Adobe%0a   'htm','html','fla','swf',                             # web stuff%0a   'txt','rtf','exe','tex','dvi',''                      # misc@]%0a%0a!!!Removal%0aAt present uploaded files can only be deleted from the server by the [[wiki administrator]]. Any uploads-authorized user may over-write an existing file by uploading another of the same name and extension to the same location.%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I link to an uploaded file or image from
  another group?%0aA: Use [@Attach:Groupname./filename.ext@] .  Note the extra dot after the group name.%0a%0aQ: When I upload a file, how do I make the link look like "file.doc" instead of "Attach:file.doc"?%0aA: Use parentheses, as in [@[[(Attach:)file.doc]]@].  There is also a configuration change that can eliminate the [@Attach:@] -- see [[Cookbook:AttachLinks]].%0a%0aQ: Why can't I upload files of size more than 50kB to my newly installed PmWiki?%0aA: Out of the box PmWiki limits the size of files to be uploaded to 50kB. Add%0a%0a        $UploadMaxSize = 1000000; # limit upload file size to 1 megabyte%0a%0ato your ''config.php'' to increase the limit to 1MB (for example). See [[UploadsAdmin]]%0afor how to further customize limits.  Note that both PHP and webservers also place their own limits on the size of uploaded files.%0a%0aQ: Who does my upload exit unexpectedly with "Incomplete file received"?%0aA: You may be running out of space in a 'scratch' area, used either by
  PmWiki or by PHP.  On *nix, check that you have sufficient free space in /tmp and /var/tmp.%0a%0a
+time=1159206178

Added: trunk/oggdsf/website/wikilib.d/PmWiki.UploadsAdmin
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.UploadsAdmin	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.UploadsAdmin	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=remove top trail
+host=24.1.26.255
+name=PmWiki.UploadsAdmin
+rev=77
+targets=PmWiki.PmWiki,PmWiki.Uploads,PmWiki.WikiAdministrator,PmWiki.PasswordsAdmin,PmWiki.Passwords,PmWiki.PerGroupCustomizations,PmWiki.LocalCustomizations,Category.Administration,PmWiki.DocumentationIndex,PmWiki.WikiGroup,Profiles.Jb,Profiles.Pm
+text=(:title Uploads Administration:)%0a%0a[[PmWiki]] includes a script called ''upload.php'' that allows users to [[upload(s)]] files to the wiki server using a web browser.  Uploaded files (also called ''attachments'') can then be easily accessed using markup within wiki pages.  This page describes how to install and configure the upload feature.%0a%0a%0a!!Some notes about security%0a%0aPmWiki takes a somewhat paranoid stance%0awhen it comes to the uploads feature.  Thus, the default settings for%0auploads tend to try to restrict the feature as much as possible:%0a%0a* The upload function is disabled by default%0a* Even if you enable it, the function is password locked by default%0a* Even if you remove the password, you're restricted to uploading files with certain names and extensions%0a* The characters that may appear in upload filenames are (default) alphanumerics, hyphen, underscore, dot, and space.%0a* The maximum upload size is small (50K by default)%0a%0aThis way th
 e potential damage is limited until/unless the wiki%0aadministrator explicitly relaxes the restrictions.%0a%0aKeep in mind that letting users (anonymously!) upload files to your web server does entail some amount of risk.  The ''upload.php'' script has been designed to reduce the hazards, but [[wiki administrator]]s should be aware that the potential for vulnerabilities exist, and that misconfiguration of the upload utility could lead to unwanted consequences.%0a%0aBy default, authorized users are able to overwrite files that have already been uploaded, without the possibility of restoring the previous version of the file.  If you want to disallow users from being able to overwrite files that have already been uploaded, add the following line to ''config.php'':%0a%0a->[@$EnableUploadOverwrite = 0;@]%0a%0aAlternatively, an administrator can [[#upload_versions|keep older versions]] of uploads.%0a%0aAn administrator can also [[#direct_download|configure]] PmWiki so the password
  mechanism controls access to uploaded files.%0a%0a%0a!!Basic installation%0a%0aThe ''upload.php'' script is automatically included from ''stdconfig.php'' if the $EnableUpload variable is true in ''config.php''.  In addition, ''config.php'' can set the $UploadDir and $UploadUrlFmt variables to specify the local directory where uploaded files should be stored, and the URL that can be used to access that directory.  By default, $UploadDir and $UploadUrlFmt assume that uploads will be stored in a directory called ''uploads/'' within the current directory (usually the one containing ''pmwiki.php'').  In addition, ''config.php'' should also set a default upload password (see [[PasswordsAdmin]]).%0a%0aThus, a basic ''config.php'' for uploads might look like:%0a%0a->[@%0a%3c?php if (!defined('PmWiki')) exit();%0a##  Enable uploads and set a site-wide default upload password.%0a$EnableUpload = 1;%0a$DefaultPasswords['upload'] = crypt('secret');%0a@]%0a%0a'''Important''': do NOT crea
 te the uploads directory yet! See the next paragraph.%0a%0aYou may also need to explicitly set which filesystem directory will hold uploads and provide a URL that corresponds to that directory like:%0a%0a->[@%0a$UploadDir = "/home/john/public_html/uploads";%0a$UploadUrlFmt = "http://www.john.com/~john/uploads";%0a@]%0a%0aUploads can be configured site-wide, by-group, or by-page by changing $UploadPrefixFmt.  This determines whether all uploads go in one directory for the site, an individual directory for each group, or an individual directory for each page.  The default is to organize upload by group.%0a%0aFor site-wide uploads, use%0a%0a->[@$UploadPrefixFmt = '';@]%0a%0aTo organize uploads by page, use either of these:%0a->[@%0a$UploadPrefixFmt = '/$FullName';%0a$UploadPrefixFmt = '/$Group/$Name';%0a@]%0a%0a!!!The upload directory%0a%0aFor the upload feature to work properly, the directory given by [=$UploadDir=] must be writable by the web server process, and it usually mu
 st be in a location that is accessible to the web somewhere (e.g., in a subdirectory of ''public_html'').  Executing PmWiki with uploads enabled will prompt you with the set of steps required to create the uploads directory on your server (it differs from one server to the next). ''Note that you are likely to be required to explicitly create writable group- or page-specific subdirectories as well!''%0a%0a%0a!!!Uploading a file%0a%0aOnce the upload feature is enabled, users can access the upload form by adding "@@?action=upload@@" to the end of a normal PmWiki URL.  The user will be prompted for an upload password similar to the way other pages ask for passwords (see [[Passwords]] and [[PasswordsAdmin]] for information about setting passwords on pages, groups, and the entire site).%0a%0aAnother way to access the upload form to insert the markup "[@Attach:filename.ext@]" into an existing page, where @@filename.ext@@ is the name of a new file to be uploaded.  When the page is d
 isplayed, a '?-link' will be added to the end of the markup to take the author to the upload page. (See [[Uploads]] for syntax variations.)%0a%0aBy default, PmWiki will organize the uploaded files into separate subdirectories for each group.  This can be changed by modifying the $UploadPrefixFmt variable. See [[Cookbook:UploadGroups]] for details.%0a%0a%0a!! [[#upload_versions]] Versioning Uploaded Files%0a%0aPmWiki does not manage versioning of uploaded files by default. However, by setting $EnableUploadVersions=1; an administrator can have older versions of uploads preserved in the uploads directory along with the most recent version.%0a%0a%0a!!Restricting uploaded files for groups and pages%0a%0aUploads can be enabled only for specific groups or pages by using a [[per group customization(s)]].  Simply set @@$EnableUpload=1;@@ for those groups or pages where uploading is to be enabled; alternately, set @@$EnableUpload=1;@@ in the config.php file and then set @@$EnableUploa
 d=0;@@ in the per-group or per-page customization files where uploads are to be disabled.%0a%0a!!Restricting total upload size for a group or the whole wiki%0a%0aUploads can be restricted to an overall size limit for groups.  In the group configuration file (i.e., local/Group.php), add the line%0a%0a    $UploadPrefixQuota = 1024000;    # limit group uploads to 1000K%0a%0aThis will limit the total size of uploads for that group to 1000k --any upload that pushes the total over the limit will be rejected with an error message.  This value defaults to zero (unlimited).%0a%0aUploads can also be restricted to an overall size limit for all uploads.  Add the line%0a%0a    $UploadDirQuota = 10240000;    # limit total uploads to 10000K%0a%0aThis will limit the total size of uploads for the whole wiki to 10000k --any upload that pushes the total over the limit will be rejected with an error message.  This value defaults to zero (unlimited).%0a%0a%0a[[#restrictinguploadedfiles]]%0a!!Res
 tricting uploaded files type and size%0a%0aThe upload script performs a number of verifications on an uploaded file before storing it in the upload directory.  The basic verifications are described below.%0a:'''filenames''': the name for the uploaded file can contain only letters, digits, underscores, hyphens, spaces, and periods, and the name must begin and end with a letter or digit.  %0a:'''file extension''': only files with approved extensions such as "@@.gif@@", "@@.jpeg@@", "@@.doc@@", etc. are allowed to be uploaded to the web server.  This is vitally important for server security, since the web server might attempt to execute or specially process files with extensions like "@@.php@@", "@@.cgi@@", etc.  %0a:'''file size''': By default all uploads are limited to 50K bytes, as specified by the $UploadMaxSize variable.  Thus, to limit all uploads to 100K, simply specify a new value for $UploadMaxSize in ''config.php'':%0a%0a->[@$UploadMaxSize = 100000;@]%0a%0aHowever, ma
 ximum file sizes can also be specified for each type of file uploaded.  Thus, an administrator can restrict "@@.gif@@" and "@@.jpeg@@" files to 20K, "@@.doc@@" files to 200K, and all others to the size given by $UploadMaxSize.  The $UploadExtSize array is used to determine which file extensions are valid and the maximum upload size (in bytes) for each file type.  For example:%0a%0a->[@$UploadExtSize['gif'] = 20000; # limit .gif files to 20K@]%0a%0aSetting an entry to zero disables file uploads of that type altogether:%0a%0a->[@$UploadExtSize['zip'] = 0;     # disallow .zip files@]%0a%0a%0a[[#newuploadfiletypes]]%0a!!Adding new file types to permitted uploads%0a%0aTo add a new extension to the list of allowed upload types, add a line like the following to a [[local customization(s)]] file:%0a%0a->[@$UploadExts['ext'] = 'content-type';@]%0a%0awhere ''ext'' is the extension to be added, and ''content-type'' is the content-type (MIME type) to be used for files with that extensio
 n.  For example, to add the '[@dxf@]' extension with a Content-Type of '[@image/x-dxf@]', place the line%0a%0a->[@$UploadExts['dxf'] = 'image/x-dxf';@]%0a%0aEach entry in $UploadExts needs to be the extension and the%0amime-type associated with that extension, thus:%0a%0a->[@%0a$UploadExts = array(%0a  'gif' => 'image/gif',%0a  'jpeg' => 'image/jpeg',%0a  'jpg' => 'image/jpeg',%0a  'png' => 'image/png',%0a  'xxx' => 'yyyy/zzz'%0a)%0a@]%0a%0aFor the types that PmWiki already knows about it's not necessary%0ato repeat them here (the ''upload.php'' script adds PmWiki's defaults%0ato whatever the administrator supplies).%0a%0a%0a[[#otherfilesizelimits]]%0a!!Other file size limits%0a%0aThere are other factors involved that affect upload file sizes.  In Apache 2.0, there is a `LimitRequestBody directive that controls the maximum size of anything that is posted (including file uploads).  Apache has this defaulted to unlimited size.  However, some Linux distributions (e.g., Red Hat 
 Linux) limit postings to 512K so this may need to be changed or increased.  (Normally these settings are in an ''httpd.conf'' configuration file or in a file in ''/etc/httpd/conf.d''.)%0a%0aProblem noted on Red Hat 8.0/9.0 with Apache 2.0.x, the error "Requested content-length of 670955 is larger than the configured limit of 524288" was occurring under Apache and a "Page not found" would appear in the browser. Trying the above settings made no change with PHP, but on Red Hat 8.0/9.0 there is an additional PHP config file, /etc/httpd/conf.d/php.conf, and increasing the number on the line "`LimitRequestBody 524288" solves the issue.%0a%0aPHP itself has two limits on file uploads (usually located in /etc/php.ini).  The first is the @@upload_max_filesize@@ parameter, which is set to 2M by default.  The second is @@post_max_size@@, which is set to 6M by default.%0a%0aWith the variables in place--PmWiki's maximum file size, Apache's request-size limits, and the PHP file size param
 eters, the maximum uploaded file size will be the smallest of the three variables.%0a%0a!!! [[#direct_download]] Password protecting uploaded files%0aSetting a  read password for pages (and groups) will prevent an attached file from being seen or accessed through the page, but to prevent direct access to the file location (the uploads/ directory) one can do the following:%0a %0a* In local/config.php set $EnableDirectDownload=0;%0a* Deny public access to the uploads/ directory through moving it out of the html/ or public_html/ directory tree, or through a .htaccess file.%0a%0aSee [[Cookbook:SecureAttachments]].  %0a%0a%0a!!Other notes%0a%0a* If uploads doesn't seem to work, make sure that your PHP installation allows uploads.  The ''php.ini'' file (usually ''/etc/php.ini'' or ''/usr/local/lib/php.ini'') should have  %0a%0a->[@file_uploads = On@]%0a%0aNote that if you change this value, httpd must generally be restarted.  Another way to check if uploads are allowed by the serv
 er is to set $EnableDiag to 1 in ''config.php'', and set ?action=phpinfo on a URL. The "@@file_uploads@@" variable must have a value of 1 (if it says "@@no value@@", that means it's off).%0a%0a-%3cCategory: [[!Administration]]%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How do I disable uploading of a certain type of file?%0aA: Here's an example of what to add to your ''local/config.php'' file to disable uploading of .zip files:%0a%0a->[@$UploadExtSize['zip'] = 0;  # Disallow uploading .zip files.@]%0a%0a%0aQ: How do I attach uploads to individual pages or the entire site, instead of organizing them by [[wiki group]]?%0aA: Use the $UploadPrefixFmt variable (see also the Cookbook:UploadGroups recipe).%0a%0a->[@$UploadPrefixFmt = '/$FullName';  # per-page@]%0a->[@$UploadPrefixFmt = '';   # site-wide@]%0a%0aQ:For $UploadDirQuota - can you provide some units and numbers?  Is the specification in bytes or bits? What is the number for 100K? 1 Me
 g? 1 Gig? 1 Terabyte?  [[~jb]]%0aA: Units are in bytes.%0a%0a->[@100K: $UploadDirQuota =        100000;%0a 1MB: $UploadDirQuota =       1000000;%0a 1GB: $UploadDirQuota =    1000000000;%0a 1TB: $UploadDirQuota = 1000000000000;@][[~pm]]
+time=1156527822
+title=Uploads Administration

Added: trunk/oggdsf/website/wikilib.d/PmWiki.UrlApprovals
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.UrlApprovals	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.UrlApprovals	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta57 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+author=Pm
+charset=ISO-8859-1
+csum=Site --> SiteAdmin
+host=76.183.97.54
+name=PmWiki.UrlApprovals
+rev=59
+targets=SiteAdmin.ApprovedUrls,Site.AllRecentChanges,Profiles.XES,PmWiki.PerGroupCustomizations,PmWiki.Blocklist,PmWiki.Security,PmWiki.DocumentationIndex
+text=(:Summary:Require approval of Url links:)%0aThis page explains how to discourage "link spamming" on your wiki site using PmWiki's ''urlapprove.php'' script. This script is already included in PmWiki files, but not activated by default.%0a%0a%0a!! Using ''urlapprove.php''%0aOccasionally spammers may try to add large number of (sometimes hidden) `URLs to pages because they think it will improve their search engine rankings -- which it [[#nofollow |probably won't]].  The ''urlapprove.php'' script works against these spammers' purpose by%0a%0a* requiring approval of links to Internet sites before a link to them are created in the wiki, and%0a* allowing you to limit the number of unapproved links that may be added to a page.%0a%0aTo enable ''urlapprove.php'', add the following line to a configuration file:%0a%0a->[@include_once('scripts/urlapprove.php');@]%0a%0aBy default, unapproved links display what ever should be displayed normally (the URL or a text), but not linked and
  next to it a link [-%25blue%25(approve sites)%25%25-].%0aA click on the link will approve all unapproved `URLs on the page, but only if you are authorized to edit the ''SiteAdmin.ApprovedUrls'' page.  You may also pre-approve sites by by adding them to the [[SiteAdmin.ApprovedUrls]] page.%0a%0a%0a!!! Limiting unapproved urls per page%0aYou can limit the number of unapproved links per page. If the limit is exceeded, the page cannot be saved.  This is useful because spammers like to write long link lists, which is rare for normal authors.%0a%0aExample: To set the limit to 5 unapproved links, add the following line to a configuration file:%0a%0a->[@$UnapprovedLinkCountMax = 5;@]%0a->[@include_once('scripts/urlapprove.php');@]%0a%0aNote that $UnapprovedLinkCountMax must be set ''before'' including the ''urlapprove.php'' script.%0a%0a%0a!!! Handling of Unapproved Links%0aYou can also change the disapproval message defined in the $UnapprovedLinkFmt variable, for example:%0a%0a-> 
 [@%0ainclude_once('scripts/urlapprove.php');%0a$UnapprovedLinkFmt =%0a "[$[Link requires approval]]%3ca class='apprlink'%0a  href='\$PageUrl?action=approvesites'>$[(approve)]%3c/a>";%0a@]%0a%0a"Link requires approval" is whatever you want to see in place of the unapproved link and "(approve)" is the blue text. Using this feature may prove usefull if you want to always hide the unapproved link.%0a%0aIf you wish to totally forbid unapproved links you can use%0a%0a->[@$UnapprovedLinkFmt = "%3cb>external link not allowed%3c/b>";@]%0a%0a%0a!!! `SideBar caveat%0aPlease note that in general you need to go to the sidebar page in order to approve links in the sidebar. The reason for this is that the approve mechanism only approves links on the ''current'' page.%0a%0a%0a!!! Initial setup%0aAfter initial setup all existing links become unapproved. %0aTo find out which pages are affected one can use an RSS feed on [[Site/AllRecentChanges]]. %0aAll pages with unapproved links will show u
 p there. Please can someone explain this in more detail?%0a%0a%0a!! Technical tips%0a[[#whiteurls]]%0a!!! URL Whitelist%0aUrls can also be approved by adding them to a "white list", %0adefined in the variable @@$WhiteUrlPatterns@@, %0awhich is set in the ''local/config.php'' file.\\%0aTo add multiples urls, use the separator @@|@@ (vertical bar).  For example:%0a%0a-> [@%0a$WhiteUrlPatterns =%0a  "http://example.com/|http://example.net/|http://example.org/";%0a@]%0a%0aTo add all urls from, say New Zealand and Australia, use:%0a%0a-> [@%0a$WhiteUrlPatterns[] = 'http://[^/] \\.nz';%0a$WhiteUrlPatterns[] = 'http://[^/] \\.au';%0a@]%0a%0a%0a!!! Change Approved URLs page name%0aIf you want to change the default name of ''SiteAdmin.ApprovedUrls'', set the following in ''local/config.php'':%0a%0a->[@$ApprovedUrlPagesFmt = array('OtherGroup.OtherName');@]%0a%0a!!! Previewing the unapproved URL%0aTo see what link is to be approved without editing the page a tool tip can be displayed 
 when the cursor hovers over the [-%25blue%25(approve Links)%25%25-] link that displays the URL. e.g. [[http://uuu.example.com|Example]]%0a%0aAdd the following setting in your ''local/config.php'':%0a%0a-> [@%0a$UnapprovedLinkFmt =%0a  "\$LinkText%3ca class='apprlink' href='\$PageUrl?action=approvesites'%0a   title='\$LinkUrl'>$[(approve sites)]%3c/a>";%0a@]%0a%0a->Note that Safari insists on showing only the link on hover, not the "Title" -- I hacked this idea so that people on Safari (me!) can also see the link to be approved by creating a faked variable with my initials and adding it to the variables in the link.  Now when I want to approve sites, it shows me the site I'm about to approve in the link text.  You can make up your own variable, but make sure it's something PmWiki is unlikely to use.  --[[~XES]]%0a%0a-> [@$UnapprovedLinkFmt =%0a  "\$LinkText%3ca class='apprlink' href='\$PageUrl?action=approvesites&xes_url=\$LinkUrl'%0a   title='\$LinkUrl'>$[(approve sites)]%3c
 /a>";%0a@]%0a%0a%0a!! About rel='nofollow' [[#nofollow]]%0aBy default, PmWiki creates external links that are not followed by search engines.  %0aHere are release notes from pmwiki-2.0.beta20 (30-Jan-2005):%0a%0a->''First, the $UrlLinkFmt variable has been modified so that links to external urls automatically have a rel='nofollow' attribute added to them, to help combat wiki spam as described in [[http://googleblog.blogspot.com/2005/01/preventing-comment-spam.html]]. Site administrators can customize $UrlLinkFmt and $UnapprovedLinkFmt to supply or omit rel='nofollow' as appropriate.''%0a----%0aQ: Is it possible to, using [[PmWiki/Per Group Customizations]], use $UnapprovedLinkCountMax to apply only to a specific group or page, given the comment about it having to be set prior to including the script and the script being included in the maim ''config.php' which is processed first?%0aA:%0a%0a!! See Also%0a%0a* [[PmWiki/Blocklist]] - Blocking postings based on content or IP add
 ress%0a* [[PmWiki/Security]] - Securing your PmWIki%0a----%0a%25trail%25%3c%3c|[[Documentation Index]]|>>
+time=1182105959

Added: trunk/oggdsf/website/wikilib.d/PmWiki.Variables
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.Variables	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.Variables	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.2.0-beta6 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=add blocklist
+host=24.1.26.255
+name=PmWiki.Variables
+rev=49
+targets=PmWiki.LocalCustomizations,PmWiki.PageVariables,PmWiki.BasicVariables,PmWiki.Blocklist,PmWiki.DebugVariables,PmWiki.EditVariables,PmWiki.I18nVariables,PmWiki.LayoutVariables,PmWiki.LinkVariables,PmWiki.Notify,PmWiki.MailPosts,PmWiki.OtherVariables,PmWiki.PagelistVariables,PmWiki.PageLists,PmWiki.PathVariables,PmWiki.SecurityVariables,PmWiki.UploadVariables,PmWiki.Functions,PmWiki.DocumentationIndex
+text=%25audience%25 administrators (basic)%0a %0aThis page documents the variables available in PmWiki for [[local customizations]].  Much of this documentation is still incomplete but people are working on it now.  Feel free to add placeholders for variables you want to have documented if you don't know what the variable does.%0a%0aNote not to confuse these variables (set and used only in PHP) with ''[[PmWiki/page variables]]''.%0a%0aThe variables documentation is divided into several pages%0a* [[Basic Variables]] - core variables%0a* [[Blocklist]] - variables associated with blocklists%0a* [[Debug Variables]] - variables useful for debugging%0a* [[Edit Variables]] - variables used when editing pages%0a* [[I18n Variables]] - variables used for internationalization (i18n)%0a* [[Layout Variables]] - variables that control page layout%0a* [[Link Variables]] - variables that control the display of links in pages%0a* [[Notify]] - send mail when pages are modified (supersedes [[M
 ail Posts]])%0a* [[Other Variables]] - variables not yet classified%0a* [[Pagelist Variables]] - variables used with [[page lists]] and search results%0a* [[Path Variables]] - variables used to specify various locations on the server%0a* [[Security Variables]] - variables crucial for site security%0a* [[Upload Variables]] - variables used for uploads/attachments%0a%0aA complete index of documented variables is given below.%0a%0aIn general, variables with names ending in 'Fmt' (such as $PageLayoutFmt) have their values processed for $-variable substitutions prior to being output.  Thus strings such as [@{$Name}@] and [@{$PageUrl}@] are replaced with the name and URL of the page when the string is printed.%0a%0a!!See Also%0a%0a* [[PmWiki.Functions]]%0a* [[PmWiki.PageVariables]]%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a----%0a%0a[[#index]]%0a(:varindex:)
+time=1159595720

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WebFeeds
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WebFeeds	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WebFeeds	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.2.0-beta6 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
+author=jb
+csum=modify combined multiple feeds code to include all so users can copy/paste it
+host=216.40.219.52
+name=PmWiki.WebFeeds
+rev=27
+targets=PmWiki.WikiTrails,Site.AllRecentChanges,PmWiki.WikiGroup,PmWiki.Categories,PmWiki.PageLists,PmWiki.LocalCustomizations,PmWiki.DocumentationIndex
+text=%25audience%25 visitors (intermediate)%0aWeb feeds are a convenient mechanism to let visitors be notified of changes to a site.  Instead of repeatedly checking [=RecentChanges=] every day to see what is new, a visitor can use a [[news aggregator -> Wikipedia:Aggregator]] to quickly see what pages of interest have changed on a site.  Web feeds are commonly recognized by terms such as [[(Wikipedia:)RSS]], [[(Wikipedia:)Atom(_%2528standard%2529)]], and ''web syndication''.  They are also the foundation for podcasting.%0a%0aIn its simplest form, web feeds in PmWiki are built on [[WikiTrails]].  Using a feed action such as [@?action=rss@] or [@?action=atom@] on a trail generates a web feed (often called a "channel") where each page on the trail is an item in the feed.  Since the RecentChanges and [[{$SiteGroup}.AllRecentChanges]] pages are effectively trails, one can easily get an RSS feed for a group or site by simply adding [@?action=rss@] to the url for a RecentChanges pa
 ge.  For example, to get the site feed for pmwiki.org, one would use%0a%0a    http://www.pmwiki.org/wiki/Site/AllRecentChanges?action=rss%0a%0aAuthors can also create custom feeds by simply creating a wiki trail of the pages they want included in the feed.  Feeds can also be generated from [[groups -> WikiGroup]], [[categories]], and %25newwin%25[[Cookbook:Backlinks|backlinks]], and the order and number of items in the feed can be changed using options in the feed url.  Thus, one can obtain a feed for the ''Skins'' category (sorted with most recent items first) by using%0a%0a    http://www.pmwiki.org/wiki/Category/Skins?action=rss&order=-time%0a%0aPmWiki is able to generate feeds in many formats, including RSS 2.0 ([@?action=rss@]), Atom 1.0 ([@?action=atom@]), and RSS 1.0 ([@?action=rdf@]).  In addition, although it is not normally considered a web feed, PmWiki can generate metadata information using the Dublin Core Metadata extensions ([@?action=dc@]).%0a%0a!!How to read a
  PmWiki syndicated feed%0a%0a# You'll need a [[news aggregator -> Wikipedia:List_of_news_aggregators]], which is a piece of software designed to read news feeds.  Many different news aggregators are available.  Some run on your own computer, either on their own or as plugins for email clients, web browsers, or newsreaders.  Others are web applications that you can use from any Internet-connected computer.  Some are in between (technically web applications, but ones designed to run on your computer, not some remote server).  Get one that you like.%0a# Subscribe to the [[WikiTrail(s)]] you desire by supplying the feed url to the aggregator.  The feed url will be the name of a trail page with [@?action=rss@] or [@?action=atom@] added to the end of the url.%0a%0a!!Feed options%0a%0aAdd any of the following options to the end of a PmWiki web feed url to change its output (basically any [[pagelist->PageLists]] option is available for web feeds):%0a%0a:?count=''n'': Limit feed to '
 'n'' items%0a:?order=-time : Display most recently changed items first%0a:?trail=''page'': Obtain items from trail on ''page''%0a:?group=''group'': Limit feed to pages in ''group''%0a:?name=''name'': Limit feed to pages with specific ''name''%0a:?link=''page'': Create feed from pages linked to ''page''%0a:?list=normal: Exclude things like RecentChanges, AllRecentChanges, etc.%0a%0a%25audience%25 authors (intermediate)%0a!!Configure PmWiki for feeds%0a%0aThis section describes how to syndicate portions of a wiki to appear in a web feed.  It does not describe how to display a web feed within a wiki page -- for that, see Cookbook:RssFeedDisplay.%0a%0aTo enable web feed generation for a site, add one or more of the following to a [[local customization(s)]] file:%0a%0a->[@%0aif ($action == 'rss') include_once('scripts/feeds.php');%0aif ($action == 'atom') include_once('scripts/feeds.php');%0aif ($action == 'rdf') include_once('scripts/feeds.php');%0aif ($action == 'dc') include_o
 nce('scripts/feeds.php');%0a@]%0a%0aor you can combine multiple feeds into a single expression using "||" to separate each feed type.  For example, if you want to enable RSS and Atom feeds you would use%0a%0a->[@%0aif ($action == 'rss'  ||%0a    $action == 'atom' ||%0a    $action == 'rdf'  ||%0a    $action == 'dc') include_once("$FarmD/scripts/feeds.php");%0a@]%0a%0a!!Configure feed content%0aWeb feeds are highly configurable, new elements can be easily added to feeds via the $FeedFmt array. Elements in $FeedFmt look like%0a%0a[@$FeedFmt['atom']['feed']['rights'] = 'All Rights Reserved';@]%0a%0awhere the first index corresponds to the action (?action=atom), the second index indicates a per-feed or per-item element, and%0athe third index is the name of the element being generated. The above setting would therefore generate a "%3crights>All Rights Reserved%3c/rights>" in the feed for ?action=atom.  If the value of an entry begins with a '%3c', then feeds.php doesn't automatica
 lly add the tag around it. Elements can also be callable functions which are called to generate the appropriate output.%0a%0a!!See Also%0a%0a* [[Cookbook:FeedLinks]] - Add HTML %3chead> links for auto-discovery of your feeds.%0a* [[WikiTrails]]%0a* Wikipedia:Web_feed, Wikipedia:Web_syndication, Wikipedia:RSS_%2528file_format%2529, Wikipedia:Atom_%2528standard%2529%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a>>faq%3c%3c [[#faq]]%0a%0aQ: How can I use the RSS %3cenclosure> tag for podcasting?%0a%0aA: For podcasting of mp3 files, simply attach an mp3 file to the page%0awith the same name as the page (i.e., for a page named Podcast.Episode4,%0aone would attach to that page a file named "Episode4.mp3").  The%0afile is automatically picked up by ?action=rss and used as an%0aenclosure.%0a%0aThe set of potential enclosures is given by the $RSSEnclosureFmt%0aarray, thus%0a%0a->[@$RSSEnclosureFmt = array('{$Name}.mp3', '{$Name}.wma', '{$Name}.ogg');@]%0a%0aallows podcasting in
  mp3, wma, and ogg formats.%0a%0a%0aQ: How to add "summary" to the title in a rss feed (ie. with [@?action=rss@])?%0a%0aA: Add this line in you [@local/config.php@]%0a%0a->[@$FeedFmt['rss']['item']['title'] = '{$Group} / {$Title} : $LastModifiedSummary';@]%0a%0aQ: How to add feed image?%0a%0aA: Add the following to ''local/config.php'' (this example is for [@?action=rss@]):%0a%0a->[@%0a$FeedFmt['rss']['feed']['image'] =%0a"%3ctitle>Logo title%3c/title>%0a %3clink>http://www.example.com/%3c/link>%0a %3curl>http://www.example.com/images/logo.gif%3c/url>%0a %3cwidth>120%3c/width>%0a %3cheight>60%3c/height>";%0a@]%0a%0aQ: How do I insert RSS news feeds into PmWiki pages?%0a%0aA: See [[Cookbook:RssFeedDisplay]].%0a%0aQ: How can I specify default feed options in a configuration file instead of always placing them in the url?%0aA: For example, if you want [@?action=rss@] to default to [@?action=rss&group=News&order=-time&count=10@], try the following in a [[local customization(s)]]
  file:%0a%0a->[@%0a   if ($action == 'rss')%0a     SDVA($_REQUEST, array(%0a       'group' => 'News',%0a       'order' => '-time',%0a       'count' => 10));%0a@]%0a
+time=1159482669

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiAdministrator
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiAdministrator	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiAdministrator	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.3) Gecko/20060425 SUSE/1.5.0.3-7 Firefox/1.5.0.3
+author=Pm
+csum=remove category from distributed doc, fix trail link
+host=24.1.26.255
+name=PmWiki.WikiAdministrator
+rev=6
+targets=PmWiki.Installation,PmWiki.InitialSetupTasks,PmWiki.DocumentationIndex,PmWiki.Audiences
+text=A WikiAdministrator is a person (or persons) who installs, configures, and administers a PmWiki system for authors and site visitors.  PmWiki has been designed to make the [[installation]] and [[initial setup tasks]] as easy as possible for people who do not have a lot of knowledge about HTML, PHP, or even web server software.  At the same time, PmWiki is designed to be flexible enough so that someone with just a little bit of knowledge about HTML and PHP can customize PmWiki to their specific needs.%0a%0aSee [[PmWiki.DocumentationIndex]] for pages about administering PmWiki, and [[PmWiki.Audiences]] for more details of PmWiki's target audiences.%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>
+time=1154901755

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiFarmTerminology
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiFarmTerminology	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiFarmTerminology	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.3 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
+author=Susan
+csum=Added cross ref to PmWiki:Glossary
+ctime=1142751483
+host=70.50.209.203
+name=PmWiki.WikiFarmTerminology
+rev=19
+targets=PmWiki.Glossary,Category.WikiFarms
+text=%25audience%25 administrators (intermediate)%0aThere are many ways to configure [[PmWiki:WikiFarms]], and some of the documentation uses different terminology to describe the same things. This page attempts to explain the terminology.%0a%0aFor terms not related to farms, see [[Glossary]].%0a%0a!!Why is this page needed?%0a* to provide a place to find the preferred terminology with definitions%0a* to explain where the term "farm" came from%0a* to list various terms that have been deprecated but still exist in the docs%0a* to suggest alternate terms for the deprecated ones%0a%0a%0a!!The origins of WikiFarms%0aThe term WikiFarm is based on the computing term "server farm", which is a collection of servers that use a common infrastructure.  A wiki farm is nothing more than multiple wikis that share the same installation of the PmWiki software.%0a%0aSome recipe and documentation authors, however,  began writing about WikiFarms using agricultural terms such as "field", "farme
 r", "barn", "crop", and "tractor".  In some cases these terms made the documentation more confusing.  It is suggested that documentation authors avoid the  agricultural terms, as tempting as they may be, and keep in mind that a wiki in a wiki farm is like a server in a server farm.%0a%0a%0a!!Wikis and components in a WikiFarm%0aAll of the wikis in a farm are more or less the same, except the "home wiki" is a wiki that is located in the same directory as the PmWiki software.  The home wiki needs special consideration because it holds the components that are shared by or affect the operation of all the wikis in the farm. In particular:%0a*the ''scripts/'' directory%0a*the ''cookbook/'' directory%0a*the ''pub/'' directory%0a*the ''wikilib.d/'' directory%0a%0a%0aIt is possible to move the PmWiki software outside of the web document tree, but the ''pub/'' directory needs to be in a web-servable directory (one that can be accessed by a URL).%0a%0aAuthors writing about complex farm
  setups often have difficulty describing the components and their locations. However, it is probably not necessary or desirable to coin new terms for the components and their locations.%0a%0a%0a!! [[#suggested_terms]] Suggested terms%0a%0a:WikiFarm: An installation where one copy of PmWiki is configured to run multiple wikis.  Analogous to the computing phrase "server farm".  The wikis in a farm can be configured farm-wide (using the farm's ''local/farmconfig.php'') or individually (using the wiki's ''local/config.php'').%0a:Wiki: A site with it's own URL and ''wiki.d/'' directory. All of the wikis in a wiki farm are simply called wikis.%0a:Home wiki:A wiki in a farm that's located in the same directory as the PmWiki software and therefore shares the farm's ''cookbook/'' and ''pub/'' directories. If you start with a stand-alone installation and add a wiki, the original wiki becomes a home wiki.%0a:Farm-wide: Something available to or affecting all wikis in the farm.  Typical
 ly this means modifying the ''farmconfig.php'' file or the contents of the farm's cookbook/ or pub/ directories.%0a:Local: Something available to or affecting a specific wiki.  Typically this means modifying the wiki's ''local/config.php'' file or the contents of the wiki's ''cookbook/'' or ''pub/'' directories.%0a%0a:PmWiki {-engine-} : The software that makes PmWiki work, as opposed to the content of the wiki that readers see.%0a:PmWiki {-installation-} directory: The directory PmWiki is installed to. It contains pmwiki.php and its subdirectory scripts/, which is used by all the wikis in the WikiFarm. {-If you do a standard, single install of PmWiki, it goes into this directory.-}%0a%0a%0a!!Ambiguous terms%0a%0a:Installation directory: Installation of what? Some authors have used this to mean the directory that contains most of the shared components on a wiki farm. Others use it to mean a directory that has a complete standalone installation of PmWiki that is not part of a
  farm. Use PmWiki directory instead.%0a:PmWiki installation: This is sometimes used to indicate a process, sometimes used to mean a single wiki in a farm, and sometimes refers only to the shared components of a farm.%0a%0a%0a!!Deprecated terms that should not be used%0a%0aThese terms still exist in the documentation (pending revisions), and will live forever in the PmWiki-Users list archive.%0a%0a:farm directory: The directory in which the home wiki lives or a directory where the shared components are stored. Use PmWiki directory instead.%0a:field: Any wiki in a farm which is '''not''' the home wiki.%0a:farm administrator: An administrator who has access to all of the wikis in a farm, particularly the home wiki. Use administrator instead.%0a:field administrator: An administrator who has access to one or more wikis in a farm, but '''not''' the home wiki. Use administrator instead.%0a:barn: The place where common components are stored. Use PmWiki directory instead.%0a:crop: Pa
 ckaged content and customizations that can be added to a wiki. See [[Cookbook:ListOfBundles]] for similar ideas. Use component bundles instead.%0a:tractor: The PmWiki engine or ''pmwiki.php'' itself. Use PmWiki instead.%0a%0a----%0aCategories: [[!WikiFarms]]%0a
+time=1143234494

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiFarms
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiFarms	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiFarms	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.22 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=adjust links to be local instead of all pointing to pmwiki.org
+ctime=1142482306
+host=24.1.26.255
+name=PmWiki.WikiFarms
+rev=33
+targets=PmWiki.WikiFarms,PmWiki.Installation,PmWiki.WikiGroups,PmWiki.LocalCustomizations,PmWiki.WikiFarmTerminology,PmWiki.WikiFarmsAdvanced,PmWiki.DocumentationIndex
+text=%25audience%25 administrators (intermediate)%0aA [[WikiFarm(s)]] is a collection of two or more wikis running on the same web server and sharing a set of common components. The term is based on the computing phrase "server farm".%0a%0aThis page provides some background information about WikiFarms and describes how to turn a "normal" configuration into a farm by adding a wiki.  There are many ways to configure wiki farms; this page describes only one, in an effort make it as simple as possible for the administrator who is creating a farm for the first time.%0a%0a!!Why use a farm?%0aThe primary motivation for using a wiki farm is to reduce the amount of administrative work involved in managing several wikis. In a farm, most of the PmWiki code is stored in one place and is shared by all the wikis. An administrator can (for example) upgrade to a new version of PmWiki on every wiki in the farm by simply updating the shared components in a single location.%0a%0aFrom a reader'
 s point of view, each wiki in a farm is completely independent, and appears as a separate web site. Each wiki in a farm:%0a*has its own URL, and the URLs can be in different domains%0a*can have its own look and feel by using different skins%0a*can have its own add-ons or "recipes" from the [[(Cookbook:)Cookbook(Basics)]]%0a*can have its own administrator responsible for local configuration%0a%0a!!Why not to use a farm%0aBecause the wikis in a farm are all independent, it is difficult (but not impossible) to provide services that require access to more than one wiki. For example, the PmWiki search function can only search within one wiki. Using a farm as a way of subdividing related content is generally a bad idea. A much better way to subdivide content is to use [[(PmWiki:)WikiGroups]].%0a%0a!!I still can't decide if I need a farm ...%0aThe good news is that you don't have to decide in advance. In fact, the recommended procedure is to first do a "normal" or single [[installa
 tion]] of PmWiki. Use it for a while. Create pages and edit them. Get to know how to add recipes. Be sure to try out [[WikiGroups]] (they may be all you need).%0a%0aOnce you have decided that you need another wiki, you have two basic choices:%0a#Do a complete [[installation]] of PmWiki in a new directory. This gives you two totally independent wikis that are completely self-contained. This is '''not''' a wiki farm.%0a#Create a wiki farm using your existing wiki as the "home wiki" where most of the shared PmWiki components will live.%0a%0aChoice number 1 can be a good choice for several reasons:%0a*it is not a wiki farm, and requires no additional administrative knowledge - it's just two installations%0a*if you decide to move one of the wikis to another server, you can simply copy the wiki directory structure to the second server, and it will work (assuming there is a web server and PHP in place).%0a*you can run different versions of PmWiki on each wiki (good for testing new 
 versions)%0a*no matter how badly you mess up one installation, it doesn't affect the other%0a%0aIf you choose to create a wiki farm, then read on ...%0a%0a!!Prerequisites%0aBefore you create a farm, make sure that:%0a*you have a working installation of PmWiki ready to become the home wiki for your farm%0a*all of the wikis in your farm will be on the same web server%0a*each wiki will have a unique URL, such as http://www.example.com/wiki1/, http://www.example.com/wiki2/, http://another.example.com/wiki1/ and so on.%0a%0a!!Creating the home wiki%0aYou do have a working installation of PmWiki at this point, don't you? That's good, because your existing wiki is about to become the home wiki of your farm.%0a%0aIn the directory that contains your existing wiki, create the file ''local/farmconfig.php''. This file is used to hold any [[local customizations]] that apply across the whole farm. For example, you could assign an admin password in ''farmconfig.php'' that will be used by a
 ll of the wikis in your farm.%0a%0aIf the URL used to access your existing wiki is http://www.example.com/pmwiki/ then a minimal ''farmconfig.php'' file would look like this:%0a%0a    [@%3c?php if (!defined('PmWiki')) exit();%0a      $FarmPubDirUrl = 'http://www.example.com/pmwiki/pub';@]%0a%0aThis loads the variable $FarmPubDirUrl with the URL location of your home wiki's ''pub/'' directory. All of the wikis in your farm share this ''pub/'' directory. The ''pub/'' directory holds skin definitions and GUI-edit buttons to be shared by all the wikis in the farm.%0a%0aAmazing as it may sound, this completes all of the changes you need to make in order to turn your existing wiki into the home wiki of your farm.%0a%0a!!Creating an additional wiki in your farm%0a1. Create a directory to hold the new wiki. This directory must be web-accessible, just like the directory that holds your home wiki.%0a%0a2. Create a file called ''index.php'' in the directory with the following contents:
 %0a%0a    %3c?php include([='=]''path/to/pmwiki.php''');%0a%0aThis allows your new wiki to share the PmWiki code stored in your home wiki. The ''[@path/to/pmwiki.php@]'' is the file path to ''pmwiki.php'' in your home wiki. Use an absolute file path ([@/home/username/pmwiki/pmwiki.php@]) or a relative file path ([@../pmwiki/pmwiki.php@]). Do not use a url path - there should not be an '[@http://@]' in it anywhere. For a web server running under Windows, you need to use a complete file path as in [@C:/Apache Group/Apache2/www/mynewwiki/@].%0a%0a3. Open a web browser and browse the URL of the new wiki.  This will be a web address starting with '[@http://@]'.  PmWiki will attempt to automatically create a writable ''wiki.d/'' directory where the wiki's pages will be stored.  If you see an error message, follow the instructions.  If you choose the option for a "slightly more secure installation" be sure to execute both commands.%0a%0aYour new wiki is now set up, and your farm no
 w contains 2 wikis. To add more wikis, just repeat these 3 steps.%0a%0a%0a!!Customization%0aEach wiki in a farm inherits the settings stored in ''farmconfig.php''. Do any customization that you want to apply farm-wide (to all the wikis) in ''farmconfig.php''.%0a%0aCreate a ''local/'' directory within each wiki's directory to hold [[local customizations]] that apply only to that wiki. Farm-wide customizations are processed before the individual wiki local customizations.%0a%0aThe PmWiki variable ''$FarmD'' points to the directory in which pmwiki.php is installed, and your home wiki, and it is used as a prefix to allow the other wikis to share PmWiki components. For example:%0a*''$FarmD/scripts/'' points to the shared ''scripts/'' directory%0a*''$FarmD/pub/'' points to the shared ''pub/'' directory%0a*''$FarmD/cookbook/'' points to the shared ''cookbook/'' directory%0a%0a!!Notes%0a*The terminology used to describe wiki farms is not used consistently. See [[WikiFarmTerminology]
 ] for more info.%0a*It is important to remember that not all of the recipes in the Cookbook have been written for or tested with farms. Be sure to look for instructions on how to use a recipe on a farm.%0a*There are many, many more things you can do with farms. Some are described on [[WikiFarmsAdvanced]] which also contains links to step-by-step examples of setting up a farm.%0a%0a%25trail%25 %3c%3c|[[DocumentationIndex]]|>>
+time=1157561989

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiGroup
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiGroup	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiGroup	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta13 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=added faq for creating new groups
+host=24.1.26.255
+keywords=trailing dot, trailing slash, default group
+name=PmWiki.WikiGroup
+rev=67
+targets=Main.WikiSandbox,Main.HomePage,Profiles.Pm,PmWiki.MailingLists,PmWiki.Links,PmWiki.CreatingNewPages,PmWiki.PmWiki,Site.Site,Site.AllRecentChanges,PmWiki.GroupHeaders,PmWiki.Passwords,PmWiki.WikiAdministrator,PmWiki.LocalCustomizations,PmWiki.PerGroupCustomizations,PmWiki.DocumentationIndex
+text=%25audience%25 authors (basic)%0a(:keywords trailing dot, trailing slash, default group:)%0aPmWiki pages are organized into groups of related pages.  This feature was added to PmWiki to allow authors to create their own ''wiki spaces'' of specialized content on their own, without having to become, or rely on, wiki administrators.  See [[~Pm]]'s [[http://pmichaud.com/pipermail/pmwiki-users/2006-March/024838.html|post]] to the pmwiki-users [[mailing list(s)]].%0a%0aBy default, page [[links]] are between pages of the same group; to create a link to a page in another group, add the name of the other group and a dot or slash to the page name.  For example, links to `Main/WikiSandbox could be written as:%0a%0a(:markup class=horiz:)%0a*[[Main.WikiSandbox]]%0a*[[Main/WikiSandbox]]%0a*[[(Main.Wiki)Sandbox]]%0a*[[Main.WikiSandbox | link text]]%0a(:markupend:)%0a%0aTo link to the default home page of a group (discussed [[#groupdefaultpage|below]]), the name of the page can be omit
 ted, like this:%0a%0a(:markup class=horiz:)%0a*[[Main.]]%0a*[[Main/]]%0a(:markupend:)%0a%0a!! Creating groups%0aCreating a new group is as easy as [[creating new pages]]; simply edit an existing page to include a [[link(s)]] to the new group's default home page  (or any page in the new group) then click on the '?' to edit the page. As a rule, group names must start with a letter (but this can be changed by the wiki administrator).%0a%0aFor example, to make a default page in the group Foo, create a link to [=[[Foo/]]=] (or [=[[Foo.]]=]).  To make a page called Bar in the group Foo, create a link to [=[[Foo/Bar]]=] and follow the link to edit that page.%0a%0a!!Groups in a standard PmWiki distribution%0a* [[Main]]: The default group. On many wikis, it contains most of the author-contributed content. Main.HomePage and Main.WikiSandbox come pre-installed.%0a* [[PmWiki]]: An edit-protected group that contains PmWiki documentation and help pages.%0a* [[Site]]: Holds a variety of ut
 ility and configuration pages used by PmWiki, including `SideBar, Search, Preferences, `AllRecentChanges, `ApprovedUrls, and Blocklist.%0a%0aTo list all the groups in a site, try searching for "[@fmt=group@]".%0a%0a!! Special Pages in a Group%0aBy default, the RecentChanges page of each group shows only the pages that have changed within that group; the [[Site.AllRecentChanges]] page shows all pages that have changed in all groups.%0a%0aEach group can also have [[GroupHeader(s)]] or `GroupFooter pages that contain text to be automatically prepended or appended to every page in the group.  A group can also have a `GroupAttributes page that defines attributes (read and edit passwords) shared by all pages within the group.  %0a%0aEach page can also have its own individual read/edit password that overrides the group passwords (see [[Passwords]]).%0a%0aFinally, [[wiki administrator]]s can set [[local customizations]] on a per-group basis--see [[PerGroupCustomizations]].%0a%0a[[#g
 roupdefaultpage]]%0a!! Group's default page%0a%0aThe default "start page" for a group is a page whose name is: (1) the same as the group (Foo/Foo), (2) HomePage (Foo/HomePage), or (3) a name that the administrator has assigned to the [={$DefaultName}=] variable in the configuration.php file.  (Note, on this site, the value of [={$DefaultName}=] is `{$DefaultName} and, thus, the default home page would be `Foo/{$DefaultName}.   %0a%0aAs noted above, when linking to the default home page, authors can omit the page name and simply identify the group followed by a dot ([=[[Foo.]]=]) or forward slash ([=[[Foo/]]=]).%0a%0aNote the trailing dot (or trailing forward slash) is required to ensure that the link unambiguously points to the identified group.  If the dot or slash is omitted, the link can end up being interpreted as pointing to an existing (or new) page in the current group (if the group, or its default home page, do not exist).  This ''trailing dot'' markup was added in v
 ersion 2.1.7%0a%0a!! Subgroups? Subpages?%0aNo, PmWiki does not have subpages.  Pm's reasons for not having subgroups are described at [[PmWiki:HierarchicalGroups]], but it comes down to not having a good page linking syntax.  If you create a link or pagename like [@[[A.B.C]]@] PmWiki doesn't think of "B.C" as being in group "A", it instead thinks of "C" as being in group "AB", which is a separate group from "A".  Wiki administrators can look at [[Cookbook:SubpageMarkup]] and [[Cookbook:IncludeWithEdit]] for recipes that may be of some help with developing subgroups or subpages.%0a%0a!!Restricting the creation of new groups%0aYou can set PmWiki's $GroupPattern variable to only accept the group names you want to define. For example, to limit pages to the "PmWiki", "Main", "Profiles", and "Example" groups, add the following to local/config.php:%0a%0a   $GroupPattern = '(?:Site|PmWiki|Main|Profiles|Example)';%0a%0aWith this setting, only the listed groups will be considered val
 id WikiGroups. You can add more groups to the list by placing additional group names separated by pipes (|).%0a%0aSee other solutions to this at [[Cookbook:LimitWikiGroups]]%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0aQ: How can I get rid of the 'Main' group in urls for pages pointing to Main?%0a%0aA: See [[Cookbook:GetRidOfMain]].%0a%0a%0aQ: How can I limit the creation of new groups?%0a%0aA: See [[Cookbook:LimitWikiGroups]].%0a%0a
+time=1160078524

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiGroups
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiGroups	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiGroups	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,9 @@
+version=pmwiki-2.0.devel27
+newline=²
+text=(:redirect WikiGroup:)
+time=1101494438
+author=EvanProdromou
+name=PmWiki.WikiGroups
+host=24.1.28.47
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0
+rev=2

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiPage
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiPage	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiPage	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.3 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
+author=Holo
+csum=oops, sorry...
+host=195.98.173.2
+name=PmWiki.WikiPage
+post= Save
+rev=14
+targets=PmWiki.WikiStructure
+text=A WikiPage is simply the basic building block of a WikiWikiWeb that contains text and images. See [[WikiStructure]]s and WikiWikiWeb for more information.%0a%0a%25trail%25 %3c%3c|PmWiki.DocumentationIndex|>>%0a%0a%0a%0a
+time=1143114137

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiSandbox
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiSandbox	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiSandbox	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,9 @@
+version=pmwiki-2.1.beta1 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5
+author=floozy
+host=62.203.17.156
+name=PmWiki.WikiSandbox
+rev=5
+targets=
+text=(:redirect Main.WikiSandbox:)%0a
+time=1132340099

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiStructure
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiStructure	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiStructure	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5
+author=Pm
+csum=Added categories as structural mechanism
+host=24.1.26.255
+name=PmWiki.WikiStructure
+post= Save
+rev=32
+targets=PmWiki.WikiPage,PmWiki.WikiWord,PmWiki.WikiGroup,PmWiki.Links,PmWiki.WikiTrails,PmWiki.Categories,PmWiki.DocumentationIndex
+text=Authors have a range of options to choose from when organizing a collection of [[wiki page]]s. Used in combination, these give a lot of flexibility.%0a%0a:[[WikiWord]]:The most powerful organizing principle is the author's choice of page names. When a search returns a list of pages, their names need to be clear enough to guide a visitor to the right place.%0a%0a:[[WikiPage]]:A page with text (and images), where the text can contain for instance [[WikiWord]]s that automatically becomes a link to another WikiPage.%0a%0a:[[WikiGroup]]:PmWiki requires every page to be a member of a group. A group is like a wiki within a wiki; it can have its own presentation look, security controls and navigation aids. With default configuration, [[WikiWord]]s are only searched inside the current group, and you use either [@OtherGroup/MyWikiWord@] or [@OtherGroup.MyWikiWord@] to refer to pages in other groups (see [[Links]]).%0a%0a:[[WikiTrails]]:A collection of pages, either in the same gr
 oup or across multiple groups, can be designated as a trail. A visitor can move from stop to stop by clicking on ''next'' and ''previous'' links.%0a%0a:[[Categories]]:Individual wiki pages can also be grouped by having tags and links to a common "category" page; we say that any pages that link to a common page are in a "category" defined by that page.  PmWiki uses the [@[[!category]]@] markup as a shorthand to place a page into a category with other pages containing the same markup.%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>
+time=1142123534

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiStyleExamples
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiStyleExamples	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiStyleExamples	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Opera/9.01 (Windows NT 5.1; U; en)
+author=
+csum=
+host=87.202.213.77
+name=PmWiki.WikiStyleExamples
+rev=164
+targets=PmWiki.WikiStyles,PmWiki.DocumentationIndex
+text=%25trail%25 %3c%3c|[[DocumentationIndex]]|>>%0a%0aPmWiki uses [[WikiStyles]] for styling text with color and other attributes.  PmWiki 2.0 introduced the ability to control the styling further and to even place styles on blocks.%0a%0aA  style is specified within a pair of %25-signs and styles the text that follows, as in:%0a%0a(:markup:) [=%0aThis text is %25color=red%25 red, %25color=blue%25 blue, %25%25 and normal (black).%0a=]%0a%0aThere are a wide number of available style properties, borrowed primarily from HTML and CSS.  In addition, an author can define a style "shortcut" by using the [@define=@] property.  For example, to define a style of [@%25red%25@], one can use:%0a%0a(:markup:) [=%0a%25color=red define=mystyle%25%0aHere is some %25mystyle%25 red text created using a style shortcut.%0a=]%0a%0aShortcuts can be combined with other styles, including other shortcuts:%0a%0a(:markup:) [=%0a%25color=red define=lovelyred%25%0a%25bgcolor=yellow define=likegrapefruit%
 25%0a%0a%25red%25 This text is red, %25red bgcolor=#ccc%25 red on a grey background, and %25lovelyred likegrapefruit%25 red on a yellow background.  %0a=]%0a%0aSo far, this is all basically the same as what was available in PmWiki 1.0.  PmWiki 2.0 includes the capability to style blocks, by using the [@apply=@] style property.  Specifying [@apply=block@] in a `WikiStyle will cause that style to be applied to the entire block, instead of just the text that follows:%0a%0a(:markup:) [=%0aThis entire block %25apply=block bgcolor=yellow%25 has a yellow background, even though the `WikiStyle appears in the middle of the line.  %25bgcolor=pink%25 Other inline (non-block) WikiStyles can appear in the middle of the line,%25%25 as before.%0a=]%0a%0aThis means it's now possible to do right-aligned and centered text:%0a%0a(:markup:) [=%0a%25block text-align=right%25 The text of this paragraph is right-aligned. %0a%0a%25block text-align=center%25 The text of this paragraph is centered.  
 %0a=]%0a%0a%0aIn fact, PmWiki predefines [@%25right%25@] and [@%25center%25@] style shortcuts so that you can do this more simply:%0a%0a(:markup:) [=%0a%25right%25 This is right-aligned.%0a%0a%25center%25 This is centered.%0a=]%0a%0aAuthors can define their own custom styles:%0a%0a(:markup:) [=%0a%25block bgcolor=#fdf define=Pm%25%0a%25center bgcolor=#dfd border='3px dotted green' define=goofy%25%0a%25right bgcolor=#ffffcc border='1px dotted red' padding=5px define=rediguana%25%0a%25define=strike text-decoration=line-through%25%0a%0a%25Pm%25 Any text that is on a light purple background is a comment from "Pm".%0a%0a%25goofy%25 Here's some text from Goofy.%0a%0a%25rediguana%25 bla bla by rediguana!%0a%0a%25goofy%25Hello, I am %25strike%25upset%25%25 %25strike%25disheartened%25%25 happy to meet you.%0a=]%0a%0aStyles can be applied to almost any kind of block:%0a%0a(:markup:) [=%0a* %25block bgcolor=yellow%25 Here is a list item%0a* Here's another list item%0a%0a* Here's more o
 f a list%0a%0a# A new list%0a=]%0a%0aIn particular, this means that outlines are now possible using the predefined [@%25ROMAN%25@], [@%25roman%25@], [@%25ALPHA%25@], and [@%25alpha%25@] list-block styles.  The style has to be specified on the first item in the list (and we may develop an alternate syntax for this sort of ordered list):%0a%0a(:markup:) [=%0a# %25ROMAN%25 Top level%0a## %25ALPHA%25 second-level%0a## second-level%0a## second-level%0a### third-level%0a### third-level%0a## second-level%0a### third-level%0a#### %25alpha%25 fourth-level%0a##### %25roman%25 fifth-level%0a##### fifth-level%0a#### fourth-level%0a# top-level%0a# top-level%0a=]%0a%0a[[WikiStyles]] can be combined with CSS stylesheets to do this automatically -- see [[Cookbook:OutlineLists]].%0a%0a%0a!! Q & A%0a%0a!!! How do I get a block of preformatted text?%0a%0aUse something similar to this (assuming you want markup within the block to be interpreted as wiki markup and URIs to be recognized).%0a%0a(:
 markup:)%0a>>white-space=pre%3c%3c%0aThis block of text is ''preformatted'', see all   the   white-space%0aand   linebreaks%0aare preserverd. Links such as [[wiki styles]] etc still work.%0a>>%3c%3c%0a(:markupend:)%0a%0a!!! How do I get a block of preformatted text with a colored background and a border?%0a%0aUse something similar to this (note that wiki markup etc is not recognized within the block):%0a%0a(:markup:)%0a%25block bgcolor=#f0f9ff border='1px solid gray' padding=5px%25[@%0aip access-list extended example-acl%0aremark ** This is an example acl **%0adeny ip any host 10.0.0.1%0apermit ip any any%0a@]%0a(:markupend:)%0a%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>
+time=1155987876

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiStyles
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiStyles	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiStyles	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
+author=Roman
+csum=added tip
+host=81.30.250.172
+name=PmWiki.WikiStyles
+post= Save
+rev=127
+targets=PmWiki.WikiStyles,PmWiki.WikiWord,PmWiki.GroupHeaders,PmWiki.WikiAdministrator,PmWiki.LocalCustomizations,PmWiki.CustomWikiStyles,PmWiki.WikiStyleExamples,PmWiki.DocumentationIndex
+text=%25audience%25 authors (basic)%0a!! Wikistyle basics%0a%0a[[WikiStyles]] allow authors to modify the color and other styling attributes of a page's contents.  A wikistyle is written using percent-signs, as in [@%25red%25@] or [@%25bgcolor=blue%25@].%0a%0aThe most basic use of wikistyles is to change text attributes such as color, background color, and font.  PmWiki defines several wikistyles for changing the text color to [=%25black%25, %25white%25, %25red%25, %25yellow%25, %25blue%25, %25gray%25, %25silver%25, %25maroon%25, %25green%25, %25navy%25, and %25purple%25=].%0a%0a(:markup:) [=%0aThe basket contains %25red%25 apples, %25blue%25 blueberries, %25purple%25 eggplant, %25green%25 limes, %25%25 and more.%0a=]%0a%0aFor colors other than the predefined colors, use the [@%25color=...%25@] wikistyle.  (Note: RGB colors (#rrggbb) should always be specified with lowercase letters to avoid [[WikiWord]] conflicts.)%0a%0a(:markup:) [=%0aI'd like to have some %25color=#ff7f00
 %25 tangerines%25%25,  too!%0a=]%0a%0aTo change the background color, use [@%25bgcolor=...%25@] as a wikistyle:%0a%0a(:markup:) [=%0aThis sentence contains %25bgcolor=green yellow%25 yellow text on a green background. =]%0a%0aSee [[PmWiki:WikiStyleColors]] for more color help.%0a%0a!! Scopes%0a%0aWikistyles can also specify a ''scope''; with no scope, the style is applied to any text that follows up to the next wikistyle specification or the end of the paragraph, whichever comes first.  Including a scope changes the specification to apply to the whole paragraph ([@%25p ...%25@]), an entire list ([@%25list ...%25@]), an item within a list ([@%25item ...%25@]), or any block ([@%25block ...%25@]).  Those scopes are predefined shortcuts for the "apply=" attribute, which is discussed  [[#apply_to_blocks|below]].%0a%0a(:markup:) [=%0a%25p bgcolor=#ffeeee%25 The wikistyle specification at the beginning of this line applies to the entire paragraph, even if there are %25blue%25 other
  wikistyle specifications %25%25 in the middle of the paragraph.%0a=]%0a%0aThe [@>>style%3c%3c@] block can be used to apply a wikistyle to a large block of items.  The style is applied until the next [@>>%3c%3c@] is encountered.%0a%0a(:markup:) [=%0a>>blue font-style=italic bgcolor=#ffffcc%3c%3c%0aEverything after the above line is styled with blue italic text,%0a%0aThis includes%0a    preformatted text%0a* lists%0a-> indented items%0a>>%3c%3c%0a=]%0a%0a!! Wikistyle attributes%0a%0aThe style attributes recognized within a wikistyle specification are:%0a%0a    ------------ CSS -------------          --HTML--%0a    color               bgcolor             class %0a    background-color    margin              id%0a    text-align          padding             hspace%0a    text-decoration     border              vspace%0a    font-size           float               target%0a    font-family         list-style          rel%0a    font-weight         width*              accesskey%0a    f
 ont-style          height*             value%0a    display%0a%0a    Special: define, apply%0a%0aThe attributes in the first two columns correspond to the ''[[cascading style sheet -> http://www.blooberry.com/indexdot/css/propindex/all.htm]]'' (CSS) properties of the same name.  The attributes in the last column apply only to specific items:%0a%0a* [@class=@] and [@id=@] assign a CSS class or identifier to an HTML element%0a* [@target=name@] opens links that follow in a browser window called "name"%0a* [@rel=name@] in a link identifies the relationship of a target page%0a* [@accesskey=x@] uses 'x' as a shortcut key for the link that follows%0a* [@value=9@] sets the number of the current ordered list item%0a%0a[=*=] The width and height attributes have asterisks because they are handled specially for %3cimg .../> tags.  If used by themselves (i.e., without anything providing an "apply=" parameter to the wikistyle), then they set the 'width=' and 'height=' attributes of any %3c
 img ... /> tags that follow. Otherwise, they set the 'width:' and 'height:' properties of the element being styled.%0a%0a%0a!! Applying wikistyles to blocks [[#apply_to_blocks]]%0a%0aNormally a wikistyle applies to a span of (inline) text, but%0athe apply= attribute allows a style to be applied to something%0aelse.  The predefined apply= values are:%0a%0a||border=1 cellpadding=3 cellspacing=0%0a||apply=img ||apply the style to any image that follows|| ||%0a||apply=p ||apply the style to the current paragraph||* ||%0a||apply=pre ||apply the style to the current preformatted text|| ||%0a||apply=list ||apply the style to the current list||* ||%0a||apply=item ||apply the style to the current list item||* ||%0a||apply=div ||apply the style to the current div|| ||%0a||apply=block ||apply the style to the current block,\\%0awhether it's a paragraph, list, list item,\\%0aheading, or division.||* ||%0a%0aThe starred items also have wikistyle shortcuts already defined,%0athus [@%25p c
 olor=blue%25@] is the same as [@%25apply=p color=blue%25@], and%0a[@%25list ROMAN%25@] is the same as [@%25apply=list list-style=upper-roman%25@].%0a%0aSome wikistyle shortcuts also make use of apply, thus [@%25right%25@]%0ais a shortcut for [@%25text-align=right apply=block%25@].%0a%0aAn applied wikistyle will only take effect if it's on the%0aline that starts the thing it's supposed to modify.  In other%0awords, a wikistyle in the third markup line of a paragraph%0acan't change the attributes of the paragraph:%0a%0a(:markup:) [=%0ahere is some text in%0aa paragraph and if%0awe try to %25apply=p color=blue%25 change%0athe color of the paragraph in the middle%0ait won't work because the style comes%0aafter the paragraph has already been started.=]%0a%0a(:markup:) [=%0aHowever, this %25p color=red%25 paragraph%0a''will'' be in red because its block style does%0aoccur in the first line of its text.=]%0a%0a(:markup:) [=%0a* Here's a list item%0a* %25list red%25 Oops, too late t
 o affect the list!=]%0a%0a%0a!! Enabling Styles%0aStyles not listed above can be enabled by a PMWiki Adminstrator by modifying the local/config.php file.  For instance to enable the "line-height" style attribute add the line %0a%0a    $WikiStyleCSS[] = 'line-height';%0a%0ato the local/config.php file.%0a%0a!! Custom style shortcuts%0a%0aThe [@define=@] attribute can be used to assign a shorthand name to any wikistyle specification.  This shorthand name can then be reused in later wikistyle specifications.%0a%0a(:markup:) [=%0a%25define=box block bgcolor=#ddddff border="2px dotted blue"%25%0a%0a%25box%25 [@%0a$ echo "Hello world"%0aHello World%0a$ exit%0a@]%0a%0a%25box font-weight=bold color=green%25 [@%0a$ echo "I said, HELLO"%0a@]=]%0a%0a'''Tip:'''  It's often a good idea to put common style definitions into [[Group Header(s)]] pages so that they can be shared among multiple pages in a group.  Or, the [[wiki administrator]] can predefine styles site-wide as a [[local custom
 ization(s)]] (see [[CustomWikiStyles]]).%0a%0a'''Tip:''' Use custom style definitions to associate meanings with text instead of just colors.  For example, if warnings are to be displayed as green text, set [@%25define=warn green%25@] and then use [@%25warn%25@] instead of [@%25green%25@] in the document.  Then, if you later decide that warnings should be styled differently, it's much easier to change the (one) definition than many occurrences of [@%25green%25@] in the text.%0a%0a'''Tip:''' Any undefined WikiStyle is automatically treated as a request for a class, thus [@%25pre%25@] is the same as saying [@%25class=pre%25@].%0a%0a!![[#predefined]] Predefined style shortcuts%0a%0aPmWiki defines a number of style shortcuts.%0a%0a* Text colors: black, white, red, yellow, blue, gray, silver, maroon, green, navy, purple  (shortcut for [@%25color=...%25@])%0a* Justification: [@%25center%25@] and [@%25right%25@]%0a* Images and boxes%0a** Floating left or right: [@%25rfloat%25@] and
  [@%25lfloat%25@]%0a** Framed items: [@%25frame%25@], [@%25rframe%25@], and [@%25lframe%25@]%0a** Thumbnail sizing: [@%25thumb%25@]%0a* Open link in new window: [@%25newwin%25@]  (shortcut for [@%25target=_blank%25@])%0a* Comments: [@%25comment%25@] (shortcut for [@%25display=none%25@])%0a* Ordered lists: [@%25decimal%25@], [@%25roman%25@], [@%25ROMAN%25@], [@%25alpha%25@], [@%25ALPHA%25@] (see also Cookbook:OutlineLists)%0a%0a!! Examples%0a%0a[[WikiStyleExamples]] contains a number of examples of ways to use wikistyles in pages.%0a%0a!! Known Issues%0a* Percents in style definitions (like: [@%25block width=50%25 %25@]) require the use of "pct" instead of "%25".%0a%0a!!See Also%0a[[PmWiki/Custom Wiki Styles]]%0a%0a%25trail%25 %3c%3c|[[Documentation Index]]|>>%0a%0a>>faq%3c%3c [[#faq]]%0a%0aQ:  Some of my colors aren't working!  For example, [@%25color=#AAAAAA%25@] works, but [@%25color=#AA3333%25@] doesn't work.  What's wrong?%0a%0aA:  Be sure to use lowercase letters for rg
 b hex colors, otherwise PmWiki may mistake the color value for a [[WikiWord]].%0a%0a
+time=1158850552

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiTrails
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiTrails	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiTrails	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.14 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=remove top trail
+host=24.1.26.255
+name=PmWiki.WikiTrails
+rev=84
+targets=PmWiki.GroupHeaders,PmWiki.WikiStyles,PmWiki.GroupHeader,PmWiki.DocumentationIndex
+text=%25audience%25 authors (basic)%0aThe WikiTrails feature allows wiki authors to create "trails" through sequences of pages in the wiki.%0a%0a!!Creating a trail%0a%0aBefore you can use a trail through a group of pages, you have to create a "trail index" on a separate page, which we will call the "trail index page". On that trail index page, you simply create a numbered or bulleted list of links. (So every numbered or bulleted list of links implicitly creates a trail.) It is important that each page name (link) be the first item following each bullet.%0a%0aAn example trail index page: a list like%0a%0a    [@%0a    * [[TrailPage1]]%0a    * Some text. (This won't be in the trail.)%0a    * [[TrailPage2]]%0a    ** [[TrailPage3]]%0a    ** [[TrailPage4]] some other text [[IrrelevantWikiPage]]%0a    ** Yet some other text. [[AnotherIrrelevantWikiPage]]. (This won't be in the trail.)%0a    ** %25center%25[[would-beTrailPage]] (This won't be in the trail.)%0a    @]%0a%0acreates the
  following "wikitrail":%0a%0a[= TrailPage1 %3c-> TrailPage2 %3c-> TrailPage3 %3c-> TrailPage4 =]%0a%0aObservations:%0a%0a# In general, indentation levels in the page list don't matter -- trails are a linear sequence of pages.%0a# A page is part of the trail only if the page link immediately follows the list markup.%0a%0a!!Using the trail%0a%0aWhat makes a trail "work" is adding ''trail markup'' on the pages in the trail (i.e. the pages that are listed in the bullet/numbered list on the trail index page).%0a%0aTo build a trail, add  ''trail markup'' like [@%3c%3c|[[TrailIndexPage]]|>>@] to a page, where `TrailIndexPage is the page, described above, containing the bulleted list of pages in the trail.  PmWiki will display the trail markup with links to any previous and next pages in the trail. %0a%0aThe trail markup can be placed anywhere in a page, and a page can contain multiple trail markups.  If you are adding a trail to every page in a group, consider setting the trail mar
 kup in the [[Group Headers | GroupHeader]] or GroupFooter pages instead of on every individual page in your group.%0a%0aPmWiki defines 2 trail markups:%0a%0a* [@%3c%3c|[[TrailIndexPage]]|>>@] displays as "[=%3c%3c PreviousPage | TrailIndexPage | NextPage >>=]".%0a%0a* [@%3c|[[TrailIndexPage]]|>@] displays as "[=%3c PreviousPage | TrailIndexPage | NextPage >=]", except the appropriate arrow is omitted at the beginning and end of the trail.%0a%0a!!Path trail %0a%0a[@^|[[TrailIndexPage]]|^@] treats the list levels as a hierarchy and displays the "path" to reach the current page (i.e., a "breadcrumb" trail).  In the example trail above, the markup [@^|TrailIndexPage|^@] on [@TrailPage4@] would display as "[=TrailIndexPage | TrailPage2 | TrailPage4=]".%0a%0aWiki administrators can change the trail separator of the "path" trail ( [@^|[[TrailIndexPage]]|^@] ) from the default | by setting the variable $TrailPathSep in the ''config.php'' file. For instance $TrailPathSep = ' > '; wil
 l output "[=TrailIndexPage > TrailPage2 > TrailPage4=]".%0a%0a!!Circular trails%0a%0aTypically, a trail is a linear list with a first and a last page. However, the trail can be made "circular" by repeating the first page as the last item in the trail index:%0a%0a    [@%0a    * [[TrailPage1]]%0a    * [[TrailPage2]]%0a    ...%0a    * [[TrailPageN]]%0a    * [[TrailPage1]]%0a    @]%0a%0aIf the trail index page is intended to be read by others, the last item can be made invisible using [@%25item comment%25@]:%0a%0a    [@%0a    * [[TrailPage1]]%0a    * [[TrailPage2]]%0a    ...%0a    * [[TrailPageN]]%0a    * [[TrailPage1]] %25item comment%25%0a    @]%0a%0a!! Cross Group Trails%0a%0aTrail pages on both sides of group boundaries must be fully qualified with group names.%0a%0a%0a!!Other notes%0a%0aThe [@%25trail%25@] markup that is used in many of PmWiki's documentation pages is just a [[WikiStyle(s)]] that creates a grey background, and is not required for WikiTrails to work. It's de
 fined in the [[PmWiki.GroupHeader]] page.%0a%0aTo get it to work, you must create the index page for the trail and the trail pages as stated above. Then you must define the wikistyle you want in the groupheader of the group you want it to appear in. Then you must refer or call to it with the [@%25trail%25@] markup from the trail pages.%0a%0a%25trail%25%3c%3c|[[DocumentationIndex]]|>>
+time=1156528553

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiWikiWeb
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiWikiWeb	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiWikiWeb	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
+author=Anno
+csum=restored
+host=85.125.177.30
+name=PmWiki.WikiWikiWeb
+rev=33
+targets=PmWiki.Links,PmWiki.TextFormattingRules,Site.AllRecentChanges,PmWiki.BasicEditing,Main.WikiSandbox
+text='''WikiWikiWeb''' is an "open-editing" system where the emphasis is on the authoring and collaboration of documents rather than the simple browsing or viewing of them. The name "wiki" is based on the Hawaiian term "wiki wiki", meaning "quick" or "super-fast". The basic concept of a WikiWikiWeb (or "wiki") is that (almost) anyone can edit any page. While at first this sounds like a recipe for complete anarchy, the truth is that sites using this system have developed surprisingly complex and rich communities for online collaboration and communication.  Yes, it's possible for someone to go and destroy everything on a page, but it doesn't seem to happen often.  And, many systems (including this one) have built-in mechanisms to restore content that has been defaced or destroyed.%0a%0a''The point of the system is to simply make it as quick, easy and rewarding as possible to create or edit online content.''%0a%0aUsing any standard Web browser, a person can edit (almost) any pa
 ge on the system using relatively simple [[text formatting rules]].  [[Links | Creating a link]] to a new or existing page simply involves putting the word or phrase that will be your link text inside of [=[[double square brackets]]=] to reference and serve as a title for the target page. In the process of creating the link you're ''creating the new page'', if it doesn't already exist.  On some sites, a link can also be created by entering a WikiWord--a word consisting of two or more capitalized words joined together.%0a%0aIt's not even necessary to learn all of the formatting rules; others will often come in and reformat things for you.  After all, anyone can edit!  '''You''' can see some of the [[({$SiteGroup}.All) recent changes]] that others have posted to this site.%0a%0aTo learn more about adding pages to this Wiki site, see [[basic editing]], then try editing pages in the [[Main/WikiSandbox]].%0a%0aIf you want to learn more about the WikiWikiWeb concept, try some of t
 hese Web sites:%0a%0a* Wiki:WikiWikiWeb -- The original WikiWikiWeb%0a* Meatball:WhyWikiWorks -- how and why Wiki works%0a* Meatball:SoftSecurity -- how open editing can result in good Web sites%0a* [[http://www.emacswiki.org/cgi-bin/community/CategoryWiki|Wiki]] on [[http://www.emacswiki.org/cgi-bin/community/SiteMap|CommunityWiki]]%0a* [[http://en.wikipedia.org/wiki/Wiki#Key_characteristics|WikiFeatures]] -- for info on features in wikis and how to use them%0a* Wikipedia:Why_Wikipedia_is_so_great -- how and why the biggest wiki in the world made a comprehensive free-content encyclopedia%0a* [[http://wikitravel.org/en/article/Wikitravel:WikiWiki | Wikitravel:WikiWiki]] -- another introduction to wikis, on another exemplary site%0a%0aOr, send email to Patrick Michaud at mailto:pmichaud at pobox.com.%0a
+time=1142071547

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiWord
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiWord	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiWord	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5
+author=Pm
+csum=fixed di link
+host=24.1.26.255
+name=PmWiki.WikiWord
+rev=20
+targets=PmWiki.WikiWikiWeb,PmWiki.Links,PmWiki.DocumentationIndex
+text=!!Definition and use as Page Titles%0aA WikiWord is a set of two or more words run together, where the first letter of each word is capitalized. This syntax is also sometimes referred to as "mixed case" or "camel case". WikiWords are used as '''page titles''' in a [[WikiWikiWeb]].  %0a%0a!!Use as links%0aIn some wikis, you can string any sequence of words together, capitalizing the first letter of each word, to make a valid WikiWord '''link'''. In such PmWiki installations, WikiWords surrounded by [=[=...=]=] or preceded by a backquote (`) are not turned into links: %0a%0a%0a(:linkwikiwords:)%0a(:markup:)[@LikeThis compared to `LikeThis or even [=LikeThis=]@]%0a(:nolinkwikiwords:)%0a%0aSee [[Links]] for information about `PmWiki's rules for forming links and forming page titles.%0a%0a!!!!Enabling WikiWord links%0aWikiWord links are disabled by default since Pmwiki version 2.1 beta2. To enable WikiWord links you need to  set in ''config.php'' %0a%0a       [@$LinkWikiWord
 s = 1;@]  %0a%0aIf you want to display links to non-existent pages without decoration, place the following lines in ''pub/css/local.css'': %0a%0a    [=span.wikiword a.createlink { display:none; }%0a    span.wikiword a.createlinktext %0a      { border-bottom:none; text-decoration:none; color:inherit; }=]%0a %0a!!!!Finding WikiWord links%0aIf you upgraded from an earlier version and want to convert WikiWord links to standard [[links]], the following will help to find those WikiWord links easier by highlighting them. Set in ''config.php'':%0a%0a       [=$HTMLStylesFmt['wikiword'] = "%0a        span.wikiword { background:yellow; }%0a       ";=] %0a%0aOther descriptions of WikiWords are available from [[Wiki:WikiWord]] and [[Wikipedia:WikiWord]].%0a%0a%25trail%25%3c%3c|[[Documentation Index]]|>>
+time=1142197918

Added: trunk/oggdsf/website/wikilib.d/PmWiki.WikiWords
===================================================================
--- trunk/oggdsf/website/wikilib.d/PmWiki.WikiWords	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/PmWiki.WikiWords	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.0.devel13
+newline=²
+time=1098284663
+text=(:redirect WikiWord:)
+author=Pm
+name=PmWiki.WikiWords
+host=24.1.28.47
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1
+rev=2
+targets=

Added: trunk/oggdsf/website/wikilib.d/Site.AuthForm
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.AuthForm	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.AuthForm	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta17 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5
+author=Pm
+excerpt=%3cp>%3cstrong>Password required%3c/strong>%0a%3c/p>%0a%3cpre> * Name/password not recognized%0a%3c/pre>%0a%3cp class='vspace'>%3c/p>%3cform action='/wiki/Site/AuthForm?action=edit' method='post' %0a    name='authform'>$PostVars%0a%3cpre> Name: %3cinput type='text' name='authid' />%3cbr /> Password: %3cinput type='password' name='authpw' />%0a%3c/pre>%3cp>%3cinput type='submit' value='OK' />%0a%3c/p>%3c/form>%0a
+host=24.1.26.255
+name=Site.AuthForm
+rev=11
+targets=
+text='''$[Password required]'''%0a(:messages:)%0a(:if enabled InvalidLogin:)* $[Name/password not recognized]%0a(:if:)%0a(:input auth_form:)%0a(:if enabled EnableAuthUser:)$[Name]: (:input text name=authid:)\\%0a(:if:)$[Password]: (:input password name=authpw:)%0a(:input submit value='OK':)%0a(:input end:)%0a
+time=1135895744

Added: trunk/oggdsf/website/wikilib.d/Site.AuthUser
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.AuthUser	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.AuthUser	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,8 @@
+version=pmwiki-2.2.0-beta57 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2
+charset=ISO-8859-1
+name=Site.AuthUser
+passwdattr=*
+passwdedit=*
+text=(:redirect SiteAdmin.AuthUser:)%0a
+time=1000000000

Added: trunk/oggdsf/website/wikilib.d/Site.EditForm
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.EditForm	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.EditForm	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=
+host=24.1.26.255
+name=Site.EditForm
+rev=49
+targets=
+text=!!$[Editing {*$FullName}] %25block class=wikiaction%25%0a(:messages:)%0a(:div id='wikiedit':)%0a(:input e_form:)[[#top]](:e_guibuttons:)\\%0a(:input e_textarea:)\\%0a$[Summary]: (:input e_changesummary:)\\%0a$[Author]: (:input e_author:) (:input e_minorcheckbox:) $[This is a minor edit]\\%0a(:input e_savebutton:) (:input e_saveeditbutton:) (:input e_savedraftbutton:) (:input e_previewbutton:) (:input e_cancelbutton:)%0a(:input end:)%0a(:divend:)%0a(:include $[{$SiteGroup}/EditQuickReference]:)%0a(:if e_preview:)%0a!!$[Preview {*$FullName}]%0a'''$[Page is unsaved]'''%0a(:e_preview:)%0a----%0a'''$[End of preview -- remember to save]'''\\%0a[[#top | $[Top] ]]%0a(:if:)%0a
+time=1159033698

Added: trunk/oggdsf/website/wikilib.d/Site.EditQuickReference
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.EditQuickReference	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.EditQuickReference	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.12 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
+author=Simon
+csum=move class to end so CSS file can override local styles, bgcolor requires color
+host=203.97.214.12
+name=Site.EditQuickReference
+rev=33
+targets=PmWiki.BasicEditing,PmWiki.TextFormattingRules,PmWiki.DocumentationIndex,PmWiki.Tables,PmWiki.TableDirectives
+text=(:table width='100%25' cellspacing='0' cellpadding='0' style='font-size:12px; font-family:Arial; padding:2px; border:1px solid #cccccc;' bgcolor=#f9f9f9 color=black class='quickref' :)%0a(:cellnr:)%0a%25target=_blank%25 [[PmWiki/Basic Editing]] - [[PmWiki/Text Formatting Rules]] - [[PmWiki/Documentation Index]]%0a(:cell align=right:)%0a%25target=_blank%25 '''Tables:''' [[PmWiki/Tables | Simple ]] - [[PmWiki/TableDirectives | Advanced ]]%0a(:cellnr:)%0a-%3c'''Paragraphs:''' for a new paragraph, use a blank line;%0a(:cell align=right:)%0a'''Line break:''' '''[=\\=]''' or '''[=[[%3c%3c]]=]'''%0a(:cellnr:)%0a->'''[=->=]''' to indent text, '''[=-%3c=]''' hanging text %0a(:cell align=right:)%0a'''Join line:''' '''\'''%0a(:cellnr colspan='2':)%0a-%3c'''Lists:''' '''*''' for bulleted, '''#''' for numbered, ''':'''term''':'''definition for definition lists%0a-%3c'''Emphasis:''' '''[=''=]'''italics'''[=''=]''', '''[='''=]'''bold'''[='''=]''', '''[='''''=]'''bold italics'''[='''''
 =]''', '''[=@@=]'''typewriter'''[=@@=]''' @@(monospaced)@@%0a-%3c'''References:''' '''[=[[=]'''another page'''[=]]=]''', '''[=[[=]'''[=http://www.example.com=]'''[=]]=]''', '''[=[[=]'''another page '''[=|=]''' link text'''[=]]=]''', '''[=[[#=]'''anchor'''[=]]=]'''%0a-%3c'''Groups:''' [=[[Group/Page]] displays Page, [[Group.Page]] displays Group.Page, [[Group(.Page)]] displays Group=]%0a(:cellnr:)%0a-%3c'''Separators:''' '''!!''', '''!!!''' for headings, '''[=----=]''' for horizontal line%0a(:cell align=right:)%0a'''Prevent formatting:''' '''[=[==]'''...'''[==]=]'''%0a(:cellnr:)%0a-%3c'''Other:''' '''[=[+=]'''big'''[=+]=]''', '''[=[++=]'''bigger'''[=++]=]''', '''[=[-=]'''small'''[=-]=]''', '''[=[--=]'''smaller'''[=--]=]''', '''[='^=]'''superscript'''[=^'=]''', '''[='_=]'''subscript'''[=_'=]''', '''[={+=]'''inserted'''[=+}=]''', '''[={-=]'''deleted'''[=-}=]'''%0a(:cell align=right:)%0a'''Preformatted block:''' '''[=[@=]'''...'''[=@]=]'''%0a(:tableend:)
+time=1155204205

Added: trunk/oggdsf/website/wikilib.d/Site.GroupAttributes
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.GroupAttributes	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.GroupAttributes	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,3 @@
+name=Site.GroupAttributes
+passwdedit=@lock
+passwdattr=@lock

Added: trunk/oggdsf/website/wikilib.d/Site.PageActions
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.PageActions	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.PageActions	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=restore for distribution
+host=24.1.26.255
+name=Site.PageActions
+rev=30
+targets=Site.PageActions
+text=* %25item              class=browse    accesskey='$[ak_view]'%25[[{*$FullName} | $[View] ]]%0a* %25item rel=nofollow class=edit      accesskey='$[ak_edit]'%25[[{*$FullName}?action=edit | $[Edit] ]]%0a* %25item rel=nofollow class=diff      accesskey='$[ak_history]'%25[[{*$FullName}?action=diff | $[History] ]]%0a(:if auth upload:)%0a* %25item rel=nofollow class=upload    accesskey='$[ak_attach]'%25[[{*$FullName}?action=upload | $[Attach] ]]%0a(:if:)%0a* %25item rel=nofollow class=print     accesskey='$[ak_print]'%25[[{*$FullName}?action=print | $[Print] ]]%0a
+time=1159201205

Added: trunk/oggdsf/website/wikilib.d/Site.PageListTemplates
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.PageListTemplates	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.PageListTemplates	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.2.0-beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.9) Gecko/20060911 SUSE/1.5.0.9-0.2 Firefox/1.5.0.9
+author=Pm
+csum=revert to placing search in pagelist
+ctime=1135725585
+host=76.183.97.54
+name=Site.PageListTemplates
+rev=36
+targets=Site.LocalTemplates,PmWiki.PageLists,PmWiki.PageVariables,PmWiki.PageTextVariables,PmWiki.ConditionalMarkup
+text=This page contains "templates" for PmWiki's [@(:pagelist:)@] directive.  The [[Site.LocalTemplates]] page can be created and used to store pagelist templates that are local to a site.%0a%0a!!!Brief Syntax Explanation:%0a%0aSee also: [[PmWiki/PageLists]], [[PmWiki/Page Variables]], [[PmWiki/Page Text Variables]], [[PmWiki/Conditional Markup]], and [[Cookbook:PagelistTemplateSamples]].%0a%0aUse with page variables:%0a   =   current item%0a   %3c   previous item%0a   >   next item%0a%0aConditionals used to structure pagelist output:%0a   [@(:if equal {%3c$Group}:)@]               At beginning of list%0a   [@(:if equal {>$Group}:)@]               At end of list%0a   [@(:if ! equal {=$Group} {%3c$Group}:)@]   First item in group%0a   [@(:if ! equal {=$Group} {>$Group}:)@]   Last item in group%0a%0a%0a----%0a!!!fmt=#default%0a%0aThe default template for pagelists when [@fmt=@] isn't specified.%0a%0a[@%0a[[#default]]%0a(:template first {=$Group}:)%0a%0a:[[{=$Group}/]] /:%0a(:t
 emplate each:)%0a: :[[{=$Group}/{=$Name}]]%0a[[#defaultend]]%0a@]%0a%0a----%0a!!!fmt=#bygroup%0a%0aDisplay pages by group/name.%0a%0a[@%0a[[#bygroup]]%0a(:template first {=$Group}:)%0a%0a:[[{=$Group}/]] /:%0a(:template each:)%0a: :[[{=$Group}/{=$Name}]]%0a[[#bygroupend]]%0a@]%0a%0a----%0a!!!fmt=#simple%0a%0aA simple bullet list of page names.%0a%0a[@%0a[[#simple]]%0a* [[{=$FullName}]]%0a[[#simpleend]]%0a@]%0a%0a----%0a!!!fmt=#title%0a%0aA simple bullet list of page titles. %0a%0a[@%0a[[#title]]%0a(:template defaults order=title:)%0a* [[{=$FullName}|+]]%0a[[#titleend]]%0a@]%0a%0a----%0a!!!fmt=#titlespaced%0a%0aOutputs wiki page titles with spaces between the words in the title.%0a%0a[@%0a[[#titlespaced]]%0a(:template defaults order=title:)%0a* [[{=$FullName}|{=$Titlespaced}]]%0a[[#titlespacedend]]%0a@]%0a%0a----%0a!!!fmt=#group%0a%0aA bullet list of groups.%0a%0a[@%0a[[#group]]%0a(:template first {=$Group}:)%0a* [[{=$Group}/]]%0a[[#groupend]]%0a@]%0a%0a%0a----%0a!!!fmt=#inclu
 de%0a%0aConcatenate the text of pages in the list.  (Note, this can be an expensive operation!)%0a%0a[@%0a[[#include]]%0a(:include {=$FullName} self=0:)%0a[[#includeend]]%0a@]%0a%0a%0a----%0a!!!fmt=#includefaq%0a%0aInclude just the #faq sections from pages in the list.  (This can also be expensive,%0aespecially if the list includes pages that don't have the [@[[#faq]]@] anchor!)%0a%0a[@%0a[[#includefaq]]%0a!![[{=$FullName}|+]]%0a>>faq%3c%3c%0a(:include {=$FullName}#faq#faqend self=0:)%0a>>%3c%3c%0a[[#includefaqend]]%0a@]%0a%0a----%0a!!!fmt=#description%0a%0aList pages and append the page's description if it exists.%0a%0a[@%0a[[#description]]%0a*[[{=$FullName}|+]]%0a(:if ! equal {=$Description} '':)%0a->'-''description:'' {=$Description}-'%0a(:if:)%0a[[#descriptionend]]%0a@]%0a%0a----%0a!!!fmt=#simplename%0a%0aSimple bullet list of page names, without the Group name. %0a%0a[@%0a[[#simplename]]%0a* [[({=$Group}/){=$Name}]]%0a[[#simplenameend]]%0a@]%0a%0a----%0a!!!fmt=#simplena
 mespaced%0a%0aSimple bullet list of spaced page names, without the Group name. %0a%0a[@%0a[[#simplenamespaced]]%0a* [[({=$Group}/){=$Namespaced}]]%0a[[#simplenamespacedend]]%0a@]%0a
+time=1174659257

Added: trunk/oggdsf/website/wikilib.d/Site.PageNotFound
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.PageNotFound	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.PageNotFound	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=Fix page variables
+host=24.1.26.255
+name=Site.PageNotFound
+rev=38
+targets=Site.PageNotFound
+text=(:nolinkwikiwords:)%0a(:if name {$SiteGroup}.PageNotFound:)%0a-> %25green font-style:italic%25 This page contains the text to be displayed when PmWiki is unable to locate a requested page.  Administrators can edit this page to change the message.%0a(:if:)%0a%0a(:if !group Category:)The page "{$RequestedPage}" doesn't exist.  %0a(:if auth edit:)%25rel=nofollow%25 ([[{*$FullName}?action=edit | Create {*$FullName}]]) %0a(:if:)%0a%0a
+time=1159026549

Added: trunk/oggdsf/website/wikilib.d/Site.Preferences
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.Preferences	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.Preferences	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.beta38 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.7.12) Gecko/20050915
+author=HaganFox
+csum=Uncerscores
+host=216.161.175.221
+name=Site.Preferences
+rev=22
+targets=PmWiki.AccessKeys,Site.Preferences
+text=These define various default site preferences, including [[PmWiki/access keys]] and component sizes.%0a%0a  [=%0a  # Access keys - hold Alt (Windows) or Control (Mac) and %0a  # tap the indicated key on your keyboard to trigger the %0a  # corresponding action.%0a  'ak_edit'          => 'e',     # edit page%0a  'ak_history'       => 'h',     # page history%0a  'ak_recentchanges' => 'c',     # Recent Changes%0a  'ak_save'          => 's',     # save page%0a  'ak_saveedit'      => 'u',     # save and keep editing%0a  'ak_preview'       => 'p',     # preview page%0a  'ak_em'            => 'i',     # emphasized text (italic)%0a  'ak_strong'        => 'b',     # strong text (bold)%0a%0a  # Editing components%0a  'e_rows' => '20',              # rows in edit textarea%0a  'e_cols' => '70',              # columns in edit textarea%0a  'Site.EditForm' => 'Site.EditForm' # location of EditForm%0a  =]%0a%0aIf you'd like to customize these preferences, to create personal user (browse
 r) preferences, make a copy of this page somewhere, preferably as @@Profiles.''%25green%25insert_your_name_here%25%25''-Preferences@@, edit that page with your new preferred settings,%0aand then select [[{$FullName}?setprefs={$FullName} | Set Preferences of this Page]] on the page containing your newly created settings. %0aThis sets a cookie on your browser which tells PmWiki where to find your personal preference settings.%0a%0aTo unset this cookie and revert to PmWiki's default preferences,%0aselect [[{$Name}?setprefs=| Revert to PmWiki Default Preferences]].%0a%0aSee also [[Cookbook:UserConfigurations]] about how to customise the edit form for personal use.%0a%0a
+time=1142147708

Added: trunk/oggdsf/website/wikilib.d/Site.Search
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.Search	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.Search	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.11 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418 (KHTML, like Gecko) Safari/417.9.3
+author=Pico
+csum=Spelled out the available parameters.
+host=66.108.51.56
+name=Site.Search
+rev=9
+targets=PmWiki.PageLists
+text=(:searchbox:)%0a%0a(:searchresults:)%0a%0aA search for more than one word will find pages that contain all of the words.%0aUse quotation marks to search for a phrase.  Also use quotes for text with punctuation or special characters.%0a%0aTo limit your search to a single group, enter the group name followed by a slash at the beginning of the search string (e.g., "[=PmWiki/=]" or "Main/").  To list all pages, enter a slash for the search.  %0a%0a!![-Search examples-]%0a %0a||border='0' cellspacing='0' width='100%25' cellpadding='0'%0a||'''Enter'''    ||'''To find pages containing''' ||%0a||apple pie      ||both 'apple' and 'pie' ||%0a||"apple pie"    ||the phrase 'apple pie' ||%0a||pmwiki/apple   ||'apple' in the [=PmWiki=] group ||%0a||"pmwiki/apple" ||the phrase 'pmwiki/apple' in all groups ||%0a||apple -pie     ||'apple', omitting those containing 'pie' ||%0a||food -"apple pie" ||'food', omitting those containing 'apple pie' ||%0a||apple "-pie"   ||the words 'apple' an
 d '-pie' ||%0a||apple - pie    ||'apple', '-', and 'pie' ||%0a||"pie:"         ||the word 'pie' with a colon ||%0a||"pie=tasty"    ||the phrase 'pie=tasty' ||%0a%0aSome special characters need to be enclosed in quotes, including the colon (:), equals sign (=), single quote (') and double quote(").%0a%0aFor advanced searches, [[PmWiki/PageLists]] parameters (count, group, fmt, link, list, order, and trail) can be entered together with the search string.
+time=1150243657

Added: trunk/oggdsf/website/wikilib.d/Site.SideBar
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.SideBar	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.SideBar	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,5 @@
+version=pmwiki-2.0.beta55 ordered=1 urlencoded=1
+name=Site.SideBar
+passwdedit=@_site_edit
+text=* [[Main/HomePage]]%0a* [[Main/WikiSandbox]]%0a%0a%25sidehead%25 [[PmWiki/PmWiki]]%0a* [[PmWiki/Initial Setup Tasks]]  %0a* [[PmWiki/Basic Editing]]%0a* [[PmWiki/Documentation Index]]%0a* [[PmWiki/FAQ | PmWiki FAQ ]]%0a* [[PmWiki/PmWikiPhilosophy]]%0a* [[PmWiki/Release Notes]]%0a* [[PmWiki/ChangeLog]]%0a%0a%25sidehead%25 [[http://www.pmwiki.org | pmwiki.org ]]%0a* [[Cookbook:CookbookBasics | Cookbook (addons) ]]%0a* [[Cookbook:Skins | Skins (themes) ]]%0a* [[PITS:PITS | PITS (issue tracking) ]]%0a* [[PmWiki/Mailing Lists]]%0a%0a%25right%25 [-[[Site.SideBar?action=edit | edit SideBar]]-]
+time=1125550800

Added: trunk/oggdsf/website/wikilib.d/Site.Site
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.Site	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.Site	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,11 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
+author=Simon
+csum=
+host=202.37.32.2
+name=Site.Site
+rev=20
+targets=PmWiki.PasswordsAdmin,Site.SideBar,Site.EditForm,Site.PageActions,Site.PageNotFound,Site.PageListTemplates,Site.Preferences,Site.AuthForm,PmWiki.Passwords,Site.AuthUser,Site.InterMap,PmWiki.InterMap,Site.EditQuickReference,Site.UploadQuickReference
+text=(:title Site Administration:)%0aHere you find some links to Site configuration pages. Add links to other pages you may need for your site's configuration here, as necessary. Some links may only apply to certain configurations or skins.%0a%0a'''Note to new administrators''': All pages in the 'Site' group (except Site.SideBar) are locked for editing as the default. Site.SideBar is locked with the site-wide edit password, if one is set.  In order to edit any other page in this group you need to create in local/config.php a sitewide '''admin''' password (see [[PmWiki.PasswordsAdmin]]). Then you can edit pages and change the access protection of individual pages  by changing the page attributes with [@?action=attr@].%0a %0a!!Configuration & Menu Pages%0a* [[SideBar]] - Default SideBar contents%0a* [[EditForm]] - Template to create your own edit page layout.%0a* [[PageActions]] - Contains the 'action' links (like Browse, Edit, History, etc.), to be placed at the top of the pa
 ge%0a* [[PageNotFound]] - Template shown if a page is not found.%0a* [[PageListTemplates]] - Contains templates for [@(:pagelist:)@] output.%0a* [[Preferences]] - Template to set access key and other configurations%0a* [[AuthForm]] - form displayed when requesting a [[PmWiki/password(s)]] or username/password%0a* [[AuthUser]] - configuration of identity-based authorization%0a* [[InterMap]] - configure '[[PmWiki/InterMap]]' links to other wikis%0a%0a* [[EditQuickReference]] - quick reference for editing pages%0a* [[UploadQuickReference]] - quick reference for uploading pages%0a%0a
+time=1158278036
+title=Site Administration

Added: trunk/oggdsf/website/wikilib.d/Site.UploadQuickReference
===================================================================
--- trunk/oggdsf/website/wikilib.d/Site.UploadQuickReference	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/Site.UploadQuickReference	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,10 @@
+version=pmwiki-2.1.26 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.6) Gecko/20060728 SUSE/1.5.0.6-1.3 Firefox/1.5.0.6
+author=Pm
+csum=
+host=24.1.26.255
+name=Site.UploadQuickReference
+rev=15
+targets=PmWiki.Uploads,Site.UploadQuickReference
+text=>>class='quickref' color=#000000 bgcolor=#f9f9f9 font-family='Arial,sans-serif' font-size=12px padding=2px border='1px solid #cccccc'%3c%3c%0a'''%25newwin%25[[PmWiki/Uploads]]'''\\%0a1. Use the "Browse" button above to find the "File to upload" on your local computer.%0a%0a2. For the "Name attachment as:" field, enter the name you prefer the file to have once it has been uploaded to the site. This can be the same as its filename on your source disk ''or it can be different'', but make sure it has the correct file extension.%0a%0a3. Press "$[Upload]" to upload the file.%0a%0a4. To refer to an attachment within a wiki page in this {$Group} `WikiGroup, simply enter @@[=Attach:=]''filename.ext''@@ in the page text.%0a%0a5. After uploading, you can %0a**[[{*$Name}?action=browse | View the {*$Name} page]] or%0a** [[{*$Name}?action=edit | Edit the {*$Name} page]] or%0a**Scroll down to view the list of files that have been uploaded to the {*$Group} `WikiGroup.%0a>>%3c%3c%0a%0a-
 ---%0a%0a!!Existing uploads%0a%0a(:attachlist:)
+time=1159033587

Added: trunk/oggdsf/website/wikilib.d/SiteAdmin.AuthList
===================================================================
--- trunk/oggdsf/website/wikilib.d/SiteAdmin.AuthList	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/SiteAdmin.AuthList	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,12 @@
+version=pmwiki-2.2.0-beta64 ordered=1 urlencoded=1
+agent=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8) Gecko/20071022 Ubuntu/7.10 (gutsy) Firefox/2.0.0.8
+author=Pm
+charset=ISO-8859-1
+csum=
+ctime=1180200570
+host=76.183.97.54
+name=SiteAdmin.AuthList
+rev=28
+targets=SiteAdmin.AuthList
+text=This page displays the permissions settings for pages that have permissions set.  Fields that say "(protected)" mean that you may need to [[{*$FullName}?action=login | log in]] (e.g., with an administrative password) in order to view them.%0a%0a(:pagelist fmt=#authlist request=1:)%0a%0a(:if false:)%0a[@%0a[[#authlist]]%0a(:template defaults passwd=?* list=all:)%0a(:template first:)%0a|| class='indent authlist' cellspacing=0 cellpadding=0%0a(:template first {=$Group}:)%0a%0a'''{=$Group}:'''%0a%0a(:if exists {=$Group}.GroupAttributes:)%0a{=$Group}.GroupAttributes %0a[- [[{=$Group}.GroupAttributes | (view)]] -]%0a[- [[{=$Group}.GroupAttributes?action=attr | (attr)]] -] :%0a||read    ||{{=$Group}.GroupAttributes$PasswdRead}   ||%0a||edit    ||{{=$Group}.GroupAttributes$PasswdEdit}   ||%0a||attr    ||{{=$Group}.GroupAttributes$PasswdAttr}   ||%0a||upload&nbsp;&nbsp;&nbsp; ||{{=$Group}.GroupAttributes$PasswdUpload} ||%0a(:if:)%0a(:template each:)%0a%0a(:if ! equal {=$Name} Gr
 oupAttributes :)%0a{=$FullName}%0a[- [[{=$FullName} | (view) ]] -]%0a[- [[{=$FullName}?action=attr | (attr) ]] -] :%0a||read    ||{=$PasswdRead} ||%0a||edit    ||{=$PasswdEdit} ||%0a||attr    ||{=$PasswdAttr} ||%0a||upload&nbsp;&nbsp;&nbsp; ||{=$PasswdUpload} ||%0a(:if:)%0a(:template last:)%0a%0aDisplayed {$$PageCount} pages.%0a[[#authlistend]]%0a%0a@]
+time=1195064732

Added: trunk/oggdsf/website/wikilib.d/SiteAdmin.AuthUser
===================================================================
--- trunk/oggdsf/website/wikilib.d/SiteAdmin.AuthUser	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/SiteAdmin.AuthUser	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,5 @@
+version=pmwiki-2.1.beta34 ordered=1 urlencoded=1
+name=Site.AuthUser
+targets=PmWiki.AuthUser,PmWiki.LocalCustomizations,PmWiki.Passwords
+text=(:nolinkwikiwords:)%0aThis is the default configuration page for PmWiki's identity-based authorizations (aka "authuser.php").  See [[PmWiki.AuthUser]] for instructions.%0a%0a(:if enabled EnableAuthUser:)%0aThis site appears to have the authuser extensions enabled.%0a(:if !enabled EnableAuthUser:)%0aAt present this site doesn't appear to have the authuser extensions enabled.  To enable them, add the line [@include_once("$FarmD/scripts/authuser.php");@] to your ''local/config.php'' file.  (See [[PmWiki.LocalCustomizations]].)%0a(:if:)%0a%0a!! Login accounts%0a%0aSpecify login accounts in the form "@@[=username: (:=]encrypt ''password'':)@@":%0a%0a    # Examples:%0a    # alice: [=(:=]encrypt wonderland:)%0a    # bob: [=(:=]encrypt builder:)%0a%0aNote that the passwords will be encrypted when the page is saved, so that the result will look something like:%0a%0a    # alice: $1$0gcdAN1a$HTdEAXyYYo8Hc9/Xv30Yz1%0a    # bob: $1$wSP2R80i$sJ593ERCmTtjm3Fk26HCV1%0a%0aTo authorize s
 pecific login accounts for pages and groups, use "[@id:username@]" as a password in [@?action=attr@] or $DefaultPasswords (see [[PmWiki.Passwords]]).  Use "[@id:*@]" to mean "any logged-in user".%0a%0a!! Authorization groups%0a%0aAuthorization groups are specified with a leading "@" sign.  Define either the login accounts belonging to a group or the groups for a login account:%0a%0a    # @writers: alice, bob  %0a    # carol: @editors, @writers%0a    # @admins: alice, dave%0a%0aThen use "[@@group@]" as a password in [@?action=attr@] or $DefaultPasswords.%0a%0a!! Login accounts from external sources%0a%0aObtaining login accounts from external sources (uncomment out appropriate line(s)):%0a%0a    # htpasswd: /filesystem/path/to/.htpasswd%0a    # ldap: ldap://ldap.example.com/ou=People,o=example?uid?sub%0a    # mysql: mysql://[username:password]@localhost/db/table?user,passwd%0a%0a
+time=1000000000

Added: trunk/oggdsf/website/wikilib.d/SiteAdmin.GroupAttributes
===================================================================
--- trunk/oggdsf/website/wikilib.d/SiteAdmin.GroupAttributes	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/SiteAdmin.GroupAttributes	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,4 @@
+name=Site.GroupAttributes
+passwdread=@lock
+passwdedit=@lock
+passwdattr=@lock

Added: trunk/oggdsf/website/wikilib.d/SiteAdmin.Status
===================================================================
--- trunk/oggdsf/website/wikilib.d/SiteAdmin.Status	                        (rev 0)
+++ trunk/oggdsf/website/wikilib.d/SiteAdmin.Status	2008-04-28 00:13:04 UTC (rev 14803)
@@ -0,0 +1,3 @@
+version=pmwiki-2.2.0-beta57 ordered=1 urlencoded=1
+name=SiteAdmin.Status
+text=(:comment Any local edits to this page may be lost!:)%0a%0aThis site is running {$Version} (VersionNum={$VersionNum}).%0a



More information about the commits mailing list