[www] r966 - in trunk/svn.matroska.org: . WebSVN WebSVN/cache WebSVN/include WebSVN/languages WebSVN/templates WebSVN/templates/BlueGrey WebSVN/templates/Standard WebSVN/templates/Zinn
[email protected] Wed, 3 Aug 2005 02:50:48 +0400 (MSD)
| Newsgroups | gmane.comp.multimedia.matroska.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: robux4
Date: 2005-08-03 02:50:12 +0400 (Wed, 03 Aug 2005)
New Revision: 966
Added:
trunk/svn.matroska.org/WebSVN/
trunk/svn.matroska.org/WebSVN/blame.php
trunk/svn.matroska.org/WebSVN/cache/
trunk/svn.matroska.org/WebSVN/cache/tmp
trunk/svn.matroska.org/WebSVN/changes.txt
trunk/svn.matroska.org/WebSVN/comp.php
trunk/svn.matroska.org/WebSVN/diff.php
trunk/svn.matroska.org/WebSVN/dl.php
trunk/svn.matroska.org/WebSVN/filedetails.php
trunk/svn.matroska.org/WebSVN/form.php
trunk/svn.matroska.org/WebSVN/include/
trunk/svn.matroska.org/WebSVN/include/bugtraq.inc
trunk/svn.matroska.org/WebSVN/include/command.inc
trunk/svn.matroska.org/WebSVN/include/config.inc
trunk/svn.matroska.org/WebSVN/include/configclass.inc
trunk/svn.matroska.org/WebSVN/include/feedcreator.class.php
trunk/svn.matroska.org/WebSVN/include/setup.inc
trunk/svn.matroska.org/WebSVN/include/svnlook.inc
trunk/svn.matroska.org/WebSVN/include/template.inc
trunk/svn.matroska.org/WebSVN/include/utils.inc
trunk/svn.matroska.org/WebSVN/include/version.inc
trunk/svn.matroska.org/WebSVN/index.php
trunk/svn.matroska.org/WebSVN/install.txt
trunk/svn.matroska.org/WebSVN/languages/
trunk/svn.matroska.org/WebSVN/languages/english.inc
trunk/svn.matroska.org/WebSVN/languages/french.inc
trunk/svn.matroska.org/WebSVN/languages/german.inc
trunk/svn.matroska.org/WebSVN/languages/japanese-euc.inc
trunk/svn.matroska.org/WebSVN/languages/japanese-jis.inc
trunk/svn.matroska.org/WebSVN/languages/japanese-sjis.inc
trunk/svn.matroska.org/WebSVN/languages/japanese-utf8.inc
trunk/svn.matroska.org/WebSVN/languages/korean-euc.inc
trunk/svn.matroska.org/WebSVN/languages/korean-utf8.inc
trunk/svn.matroska.org/WebSVN/languages/portuguese.inc
trunk/svn.matroska.org/WebSVN/languages/russian.inc
trunk/svn.matroska.org/WebSVN/languages/spanish.inc
trunk/svn.matroska.org/WebSVN/languages/swedish.inc
trunk/svn.matroska.org/WebSVN/languages/tchinese-utf8.inc
trunk/svn.matroska.org/WebSVN/languages/tchinese.inc
trunk/svn.matroska.org/WebSVN/licence.txt
trunk/svn.matroska.org/WebSVN/listing.php
trunk/svn.matroska.org/WebSVN/log.php
trunk/svn.matroska.org/WebSVN/rss.php
trunk/svn.matroska.org/WebSVN/temp/
trunk/svn.matroska.org/WebSVN/templates.txt
trunk/svn.matroska.org/WebSVN/templates/
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/blame.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/compare.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/diff.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/directory.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/e-node.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/filec.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fileh.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/files.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/folder.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/footer.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/header.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/i-node.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/index.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/l-node.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/log.tmpl
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/png.js
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/repo.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/styles.css
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/subversion.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/t-node.png
trunk/svn.matroska.org/WebSVN/templates/BlueGrey/xml.gif
trunk/svn.matroska.org/WebSVN/templates/Standard/
trunk/svn.matroska.org/WebSVN/templates/Standard/blame.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/compare.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/diff.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/directory.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/file.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/footer.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/header.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/index.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/log.tmpl
trunk/svn.matroska.org/WebSVN/templates/Standard/styles.css
trunk/svn.matroska.org/WebSVN/templates/Standard/xml.gif
trunk/svn.matroska.org/WebSVN/templates/Zinn/
trunk/svn.matroska.org/WebSVN/templates/Zinn/blame.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/compare.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/diff.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/directory.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/file.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/footer.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/header.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/index.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/log.tmpl
trunk/svn.matroska.org/WebSVN/templates/Zinn/styles.css
trunk/svn.matroska.org/WebSVN/wsvn.php
Log:
add WebSVN feature to our repositories
Added: trunk/svn.matroska.org/WebSVN/blame.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/blame.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/blame.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,125 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// blame.php
+//
+// Show the blame information of a file.
+//
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require_once("include/utils.inc");
+require_once("include/template.inc");
+
+$vars["action"] = $lang["BLAME"];
+
+$svnrep = new SVNRepository($rep->path);
+
+// If there's no revision info, go to the lastest revision for this path
+$history = $svnrep->getHistory($path);
+$youngest = $history[0]["rev"];
+
+if (empty($rev))
+ $rev = $youngest;
+
+if ($path{0} != "/")
+ $ppath = "/".$path;
+else
+ $ppath = $path;
+
+// Find the parent path (or the whole path if it's already a directory)
+$pos = strrpos($ppath, "/");
+$parent = substr($ppath, 0, $pos + 1);
+
+$vars["repname"] = $rep->name;
+$vars["rev"] = $rev;
+$vars["path"] = $ppath;
+
+createDirLinks($rep, $ppath, $rev, $showchanged);
+
+$listing = array();
+
+// Get the contents of the file
+$tfname = tempnam("temp", "");
+$svnrep->getFileContents($path, $tfname, $rev);
+
+$filecache = array();
+
+if ($file = fopen($tfname, "r"))
+{
+ // Get the blame info
+ $tbname = tempnam("temp", "");
+ $svnrep->getBlameDetails($path, $tbname, $rev);
+
+ $ent = true;
+ if ((strrchr($path, ".") == '.php') || ($config->useEnscript))
+ $ent = false;
+
+ if ($blame = fopen($tbname, "r"))
+ {
+ // Create an array of version/author/line
+
+ $index = 0;
+
+ while (!feof($blame) && !feof($file))
+ {
+ $blameline = fgets($blame);
+
+ if ($blameline != "")
+ {
+ list($revision, $author) = sscanf($blameline, "%d %s");
+
+ $listing[$index]["lineno"] = $index + 1;
+
+ $url = $config->getURL($rep, $parent, "dir");
+ $listing[$index]["revision"] = "<a href=\"${url}rev=$revision&sc=1\">$revision</a>";
+
+ $listing[$index]["author"] = $author;
+
+ if ($ent)
+ $line = replaceEntities(rtrim(fgets($file)));
+ else
+ $line = rtrim(fgets($file));
+
+ $listing[$index]["line"] = hardspace($line);
+
+ if (trim($listing[$index]["line"]) == "")
+ $listing[$index]["line"] = " ";
+
+ $index++;
+ }
+ }
+
+ fclose($blame);
+ }
+
+ fclose($file);
+}
+
+unlink($tfname);
+unlink($tbname);
+
+$vars["version"] = $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."blame.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/cache/tmp
===================================================================
--- trunk/svn.matroska.org/WebSVN/cache/tmp 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/cache/tmp 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1 @@
+This file is here so that the directory gets included in the ZIP files
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/changes.txt
===================================================================
--- trunk/svn.matroska.org/WebSVN/changes.txt 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/changes.txt 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,312 @@
+CHANGES
+
+FIX: Accented characters weren't shown correctly in the directory comparison
+ view.
+
+1.61
+
+NEW: Multibyte encodings are considered when urlencoding path names
+
+CHANGE: The listing view will now always show the revision asked for
+ (HEAD by default), but the log message will show the log
+ string for the latest modification to the current directory).
+ This means the the parent directory structure won't change as you
+ browse through old directories.
+
+FIX: A bug prevented downloading of tarballs from working
+
+1.60
+
+NEW: Directory displays are now shown in tree view (so that it's harder
+ to get lost). Many thanks to Brent Lu for this excellent patch.
+ The prettiest result are available in the BlueGrey scheme.
+NEW: Comparison of entire directories
+NEW: Tarballs of directories may now be downloaded.
+ Set $config->allowdownload(); in config.inc to allow this.
+NEW: New style 'Zinn' based on the templates created for
+ http://www.projectzinn.org/. Thanks to Justin Doran.
+NEW: File delivery now looks at the defined Mime-Type. Thanks to
+ Peter Valdemar Mørch for this patch.
+NEW: Various configuration options may now be applied on a per project
+ basis. Look in distconfig for instructions.
+NEW: Support for using 'bugtraq' properties when display log entries.
+ See http://svn.collab.net/repos/tortoisesvn/trunk/doc/issuetrackers.txt
+NEW: Traditional Chinese translation
+NEW: Spanish translation
+
+CHANGE: Style information removed from RSS feed
+CHANGE: Changed files are now hidden by defaut (since the directory
+ comparison link is far more useful)
+
+FIX: File listing were't being shown with the correct accented characters
+ under windows.
+FIX: File listing sometimes failed when there were spaces in the filename
+FIX: Some setups wouldn't allow diff generations with enscript
+ enabled.
+FIX: Filenames are URL encoded correctly before calling svn file:///
+FIX: Keywords weren't expanded in file view when enscript was disabled
+
+1.51
+
+NEW: Korean translation
+NEW: Russian translation
+
+FIX: Repositories may now have spaces in their path (eg: c:\my reps)
+FIX: Diff now works when the file name has changed between versions
+FIX: RSS feed now generates Content-Type header for XML so that IE can display
+ the contents
+FIX: Diff and Blame didn't work properly for php files when enscript wasn't used
+FIX: Use svn --non-interactive to ensure that svn doesn't prompt WebSVN for input
+FIX: Corrections to the French translation
+FIX: Display an explanatory message when the user hasn't configured any
+ repository paths
+FIX: When using Multiviews, change to the WebSVN directory before executing
+ commands so that tempnam works. This used to cause problems on some
+ systems when running diff and blame.
+
+1.50
+
+Notes: Before installing this version you should delete all the existing
+ cache files.
+
+ wsvn.php has changed. You should redo any appropriate configuration
+ changes inside this file.
+
+NEW: Blame information for a file can now be viewed
+NEW: The cached files are now compressed
+NEW: The project selection box shows the current project by default
+NEW: Swedish translation
+NEW: Japanese translation
+NEW: The install file explains how to set up permission based repository
+ access such that access via the web interface is the same as access
+ via a client (assuming Apache2).
+NEW: SVN keywords are now expanded in file listings
+
+CHANGE: The extraction of the directory listings is now accomplished using
+ the svn command via file:/// access rather than svnlook. This has
+ the advantage of being non-recursive, and thereby eliminates the need
+ for caching the entire directory listing, and is much quicker on
+ complex direcory structures. No more 50Mb directory caches!
+
+FIX: Deleted directories are now viewable.
+FIX: SHOWALL was being redefined in the language files
+FIX: The directory listing view sometimes showed [lang:DELETEDFILES
+FIX: Under Windows, links in the RSS output would start with "\" if WebSVN
+ was installed in the server's root directory.
+FIX: Sed wouldn't work under all versions of Windows due to the use of single
+ quotes around the paramters
+FIX: Improved character encoding support for log messages etc.
+FIX: Paths passed by URL are encoded
+FIX: Generated HTML code is strictly 4.01
+
+1.40
+
+NEW: RSS feed support (thanks to Lübbe Onken for his work on this)
+NEW: Translatations for French and Portuguese
+NEW: .exe is recognised by default as having content-type
+ application/x-msdownload
+NEW: Recognised links are now 'linkified' in the log messages
+NEW: Tabs in file/diff listings are now expanded by a user
+ configurable number of spaces.
+NEW: WebSVN URLs now access the repository by name rather than number.
+ This means that bookmarks will stay the same when new projects
+ are added. The old behaviour can be configured in config.inc.
+
+FIX: Removed the revision 0 that has appeared since the previous version
+FIX: Repositories were not sorted alphabetically when using ParentPath
+FIX: The PNG support script needed for IE (and the BlueGrey scheme) is
+ now only loaded with IE
+
+1.39
+
+CHANGE: In the human-readable date strings, display up to 119 minutes,
+ 47 hours, 13 days or 23 months before moving up to the next
+ quantity, like ViewCVS.
+
+FIX: Links followed after viewing the contents of a file go to the
+ revision of the repository previously being viewed
+FIX: Paths with spaces are now correctly showed in the log view
+FIX: Blank lines in the diff output are set to so the browser
+ won't compress them
+FIX: A blank author field is set to an cell.
+FIX: A year is 365 days, not 356.
+FIX: Base ages correctly upon GMT
+FIX: The diff output did not escape html entities when enscript was
+ enabled and the file extension was not recognised for enscript.
+FIX: distconfig.inc has a few minor errors in the examples.
+FIX: It wasn't possible to call ParentPath multiple times
+
+1.38
+
+NEW: Templates can now define icons for particular file types
+ (see BlueGrey scheme for an example)
+NEW: Display of PHP files with syntax highlighting
+NEW: Improve site navigation with links to each directory level on all
+ pages.
+
+1.37
+
+NEW: Display a message when there are no results found
+
+CHANGE: Aesthetic changes to the BlueGrey scheme
+CHANGE: Sort entries more naturally
+
+FIX: Really make sure that we redirect to the right place when using the
+ drop-down box to select projects.
+FIX: Nested [webtest]'s didn't always work
+FIX: Fixed use of "standard" and "Standard", which caused problems on
+ non-windows machines
+
+1.36
+
+NEW: Log message search feature
+NEW: Diff display tries to display changed lines as changed, rather than
+ showing the line deleted then added.
+
+FIX: Problem surrounding the quoting of commands and command line arguments
+ on Windows machines.
+
+1.35
+
+NEW: You can now specify a list of file types (extensions) for files which
+ should be delivered to the user in a GZIP'd archive rather than
+ displayed as ASCII in the browser window.
+
+CHANGE: Files delived with a MIME Content type are now sent as "inline".
+ The browser will try to display them in the browser window, offering
+ a save box only if they can't be displayed in this mannor.
+
+FIX: Detect use of the HTTPS protocol when using the drop-down box to
+ select projects. (-- FIX INCORRECT. USE v1.36 -- )
+FIX: The PNGs in the BlueGrey style are now transparent under Internet
+ Explorer 5.5 and higher.
+
+1.34
+
+NEW: Support for switching between projects using a drop-down box control
+ (MultiViews users - note that wsvn.php has been changed)
+NEW: Sort the repositories alphabetically when using parentPath
+NEW: Better support for internationalisation
+ (Template writers: Please note the use of the new variable 'charset')
+NEW: More useful info in browser titles with the standard templates
+
+FIX: Accented characters should now be displayed correctly (I hope).
+FIX: HTML files now display correcly on all machines
+FIX: Removed spurious BRs from the file listings
+
+1.33
+
+There are a few changes to the config file in this release. Copy
+distconfig.inc to config.inc and redo any configuration changes that you
+had made.
+
+NEW: Recognised non-text files are now delivered to the user as attachments.
+ The list of files types to be sent back to the user (rather than displayed
+ using WebSVN) is user configurable.
+NEW: File comparisons are now colourised based on the file extension
+
+CHANGE: Only the Enscript file extensions that the user wishes to override are
+ now listed in the config file.
+
+1.32
+
+FIX: Links no longer functionned correctly when used in basic
+ (non-multiviews) mode.
+FIX: Stop diff from comparing space changes
+
+1.31
+
+FIX: Directory view had disappeared!
+FIX: Included missing file setup.inc
+FIX: Handle spaces in filenames
+
+1.30
+
+There are a few changes to the config file in this release. Copy
+distconfig.inc to config.inc and redo any configuration changes that you
+had made.
+
+NEW: MultiViews support. You can now set up WebSVN to access the
+ repositories using a URL such as:
+
+ http://server/wsvn/repname/path/to/rep
+
+NEW: Colourisation support using Enscript
+NEW: [websvn-test] function can now be nested
+NEW: locwebsvnhttp variable added in template system
+NEW: Bluegrey scheme now has show/hide changed link
+
+FIX: Possible security hole with abuse of popen
+FIX: WebSVN should now function correctly (again) on non windows servers.
+FIX: First character of diff listing was missing
+
+1.20
+
+NEW: Comprehensive templating solution
+NEW: Show the age of a revision in the log view
+
+CHANGE: The youngest revision of the current directory is now shown by
+ default (as opposed to the head revision of the entire repository.
+ This means that clicking on a directory will show the lastest
+ changes associated with it. A specific revision can still be
+ selected from a log view
+CHANGE: Only show the leaf name when viewing directory contents
+
+FIX: Fixed error concerning use of pclose
+
+1.10/1.10a
+
+There are a few changes to the config file in this release. Copy
+distconfig.inc to config.inc and redo any configuration changes that you
+had made.
+
+NEW: WebSVN now caches information on the repositories. Once a revision
+ has been viewed subsequent revisions use the cached infomation to
+ display the directory structure. This significantly improves the
+ browsing speed.
+NEW: German language file (thanks to Stephan Stapel)
+
+1.04/1.04a
+
+Please note that the config file is now stored in include/
+
+FIX: Directories in the log view lacked their trailing slashes.
+FIX: Diff is now far more efficient with Apache's memory,
+ and shows the corrrect line numbers.
+FIX: setDiffPath now works.
+FIX: Bug introduced in 1.03 whereby the revision number always showed '1'
+ corrected.
+
+Note that you can't view logs with 1.04! Use 1.04a.
+
+1.03
+
+Note that the config.inc file has completely changed in this release, in
+order to make it more "future proof" and resiliant. You'll need to copy
+distconfig.inc to config.inc redo the appropriate changes are described.
+
+NEW: A 'ParentPath' can now be specified, rather than having to specify the
+ directories by hand.
+
+FIX: Rewrite of the file list code. Should now be quite a bit faster
+FIX: Use a more memory efficient algorithm to list file contents
+FIX: Spaces in Windows path to svnlook and diff are now handled properly
+FIX: Calls to external commands such as svnlook no longer require Windows
+ style line endings.
+
+1.02
+
+NEW: Improved command handling to report returned errors. Considerably helps
+ initial installation problems.
+NEW: Show the author of each revision in the log view
+
+FIX: Removed the spurious   that some people were seeing
+
+1.01 (5 Feb 2004)
+
+FIX: Files with HTML content are now shown correcty
+FIX: The diff output had the revision lables the wrong way round
+
+1.00 (4 Feb 2004)
+
+First Public Release
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/comp.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/comp.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/comp.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,347 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// comp.php
+//
+// Compare two paths using "svn diff"
+//
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require_once("include/utils.inc");
+require_once("include/template.inc");
+
+$svnrep = new SVNRepository($rep->path);
+
+function checkRevision($rev)
+{
+ if (is_numeric($rev) && ((int)$rev > 0))
+ return $rev;
+
+ $rev = strtoupper($rev);
+
+ switch($rev)
+ {
+ case "HEAD":
+ case "PREV":
+ case "COMMITTED":
+ return $rev;
+ }
+
+ return "HEAD";
+}
+
+$svnrep = new SVNRepository($rep->path);
+
+// Retrieve the request information
+$path1 = @$_REQUEST["compare"][0];
+$path2 = @$_REQUEST["compare"][1];
+$rev1 = @$_REQUEST["compare_rev"][0];
+$rev2 = @$_REQUEST["compare_rev"][1];
+
+// Some page links put the revision with the path...
+if (strpos($path1, "@")) list($path1, $rev1) = explode("@", $path1);
+if (strpos($path2, "@")) list($path2, $rev2) = explode("@", $path2);
+
+$rev1 = checkRevision($rev1);
+$rev2 = checkRevision($rev2);
+
+// Choose a sensible comparison order unless told not to
+if (!@$_REQUEST["manualorder"] && is_numeric($rev1) && is_numeric($rev2))
+{
+ if ($rev1 > $rev2)
+ {
+ $temppath = $path1;
+ $temprev = $rev1;
+
+ $path1 = $path2;
+ $rev1 = $rev2;
+
+ $path2 = $temppath;
+ $rev2 = $temprev;
+ }
+}
+
+$url = $config->getURL($rep, "", "comp");
+$vars["revlink"] = "<a href=\"${url}compare%5B%5D=".urlencode($path2)."@$rev2&compare%5B%5D=".urlencode($path1)."@$rev1&manualorder=1\">${lang["REVCOMP"]}</a>";
+
+if ($rev1 == 0) $rev1 = "HEAD";
+if ($rev2 == 0) $rev2 = "HEAD";
+
+$vars["repname"] = $rep->name;
+$vars["action"] = $lang["PATHCOMPARISON"];
+$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">";
+$vars["compare_path1input"] = "<input type=\"text\" size=\"40\" name=\"compare[0]\" value=\"$path1\">";
+$vars["compare_rev1input"] = "<input type=\"text\" size=\"5\" name=\"compare_rev[0]\" value=\"$rev1\">";
+$vars["compare_path2input"] = "<input type=\"text\" size=\"40\" name=\"compare[1]\" value=\"$path2\">";
+$vars["compare_rev2input"] = "<input type=\"text\" size=\"5\" name=\"compare_rev[1]\" value=\"$rev2\">";
+$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREPATHS"]}\">";
+$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\"><input type=\"hidden\" name=\"manualorder\" value=\"1\"><input type=\"hidden\" name=\"sc\" value=\"$showchanged\"></form>";
+
+$vars["path1"] = $path1;
+$vars["path2"] = $path2;
+
+$vars["rev1"] = $rev1;
+$vars["rev2"] = $rev2;
+
+$noinput = empty($path1) || empty($path2);
+$listing = array();
+
+// Generate the diff listing
+$path1 = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $svnrep->repPath.$path1));
+$path2 = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $svnrep->repPath.$path2));
+
+$debug = false;
+
+if (!$noinput)
+{
+ $rawcmd = $config->svn." diff -r$rev1:$rev2 ".quote("file:///".$path1)." ".quote("file:///".$path2);
+ $cmd = quoteCommand($rawcmd, true);
+ if ($debug) echo "$cmd\n";
+}
+
+function clearVars()
+{
+ global $listing, $index;
+
+ $listing[$index]["newpath"] = null;
+ $listing[$index]["endpath"] = null;
+ $listing[$index]["info"] = null;
+ $listing[$index]["diffclass"] = null;
+ $listing[$index]["difflines"] = null;
+ $listing[$index]["enddifflines"] = null;
+ $listing[$index]["properties"] = null;
+}
+
+$vars["success"] = false;
+
+if (!$noinput)
+{
+ if ($diff = popen($cmd, "r"))
+ {
+ $index = 0;
+ $indiff = false;
+ $indiffproper = false;
+ $getLine = true;
+ $node = null;
+
+ $vars["success"] = true;
+
+ while (!feof($diff))
+ {
+ if ($getLine)
+ $line = fgets($diff);
+
+ clearVars();
+ $getLine = true;
+ if ($debug) print "Line = '$line'<br>" ;
+ if ($indiff)
+ {
+ // If we're in a diff proper, just set up the line
+ if ($indiffproper)
+ {
+ if ($line[0] == " " || $line[0] == "+" || $line[0] == "-")
+ {
+ switch ($line[0])
+ {
+ case " ":
+ $listing[$index]["diffclass"] = "diff";
+ $subline = replaceEntities(rtrim(substr($line, 1)));
+ if (empty($subline)) $subline = " ";
+ $listing[$index++]["line"] = $subline;
+ if ($debug) print "Including as diff: $subline<br>";
+ break;
+
+ case "+":
+ $listing[$index]["diffclass"] = "diffadded";
+ $subline = replaceEntities(rtrim(substr($line, 1)));
+ if (empty($subline)) $subline = " ";
+ $listing[$index++]["line"] = $subline;
+ if ($debug) print "Including as added: $subline<br>";
+ break;
+
+ case "-":
+ $listing[$index]["diffclass"] = "diffdeleted";
+ $subline = replaceEntities(rtrim(substr($line, 1)));
+ if (empty($subline)) $subline = " ";
+ $listing[$index++]["line"] = $subline;
+ if ($debug) print "Including as removed: $subline<br>";
+ break;
+ }
+
+ continue;
+ }
+ else
+ {
+ $indiffproper = false;
+ $listing[$index++]["enddifflines"] = true;
+ $getLine = false;
+ if ($debug) print "Ending lines<br>";
+ continue;
+ }
+ }
+
+ // Check for the start of a new diff area
+ if (!strncmp($line, "@@", 2))
+ {
+ $pos = strpos($line, "+");
+ $posline = substr($line, $pos);
+ sscanf($posline, "+%d,%d", $sline, $eline);
+ if ($debug) print "sline = '$sline', eline = '$eline'<br>";
+ // Check that this isn't a file deletion
+ if ($sline == 0 && $eline == 0)
+ {
+ $line = fgets($diff);
+ if ($debug) print "Ignoring: $line<br>" ;
+ while ($line[0] == " " || $line[0] == "+" || $line[0] == "-")
+ {
+ $line = fgets($diff);
+ if ($debug) print "Ignoring: $line<br>" ;
+ }
+
+ $getLine = false;
+ if ($debug) print "Unignoring previous - marking as deleted<b>";
+ $listing[$index++]["info"] = $lang["FILEDELETED"];
+ }
+ else
+ {
+ $listing[$index++]["difflines"] = $line;
+ $indiffproper = true;
+ }
+
+ continue;
+ }
+ else
+ {
+ $indiff = false;
+ if ($debug) print "Ending diff";
+ }
+ }
+
+ // Check for a new node entry
+ if (strncmp(trim($line), "Index: ", 7) == 0)
+ {
+ // End the current node
+ if ($node)
+ {
+ $listing[$index++]["endpath"] = true;
+ clearVars();
+ }
+
+ $node = trim($line);
+ $node = substr($node, 7);
+
+ $listing[$index]["newpath"] = $node;
+ if ($debug) echo "Creating node $node<br>";
+
+ // Skip past the line of ='s
+ $line = fgets($diff);
+ if ($debug) print "Skipping: $line<br>" ;
+
+ // Check for a file addition
+ $line = fgets($diff);
+ if ($debug) print "Examining: $line<br>" ;
+ if (strpos($line, "(revision 0)"))
+ $listing[$index]["info"] = $lang["FILEADDED"];
+
+ if (strncmp(trim($line), "Cannot display:", 15) == 0)
+ {
+ $index++;
+ clearVars();
+ $listing[$index++]["info"] = $line;
+ continue;
+ }
+
+ // Skip second file info
+ $line = fgets($diff);
+ if ($debug) print "Skipping: $line<br>" ;
+
+ $indiff = true;
+ $index++;
+
+ continue;
+ }
+
+ if (strncmp(trim($line), "Property changes on: ", 21) == 0)
+ {
+ $propnode = trim($line);
+ $propnode = substr($propnode, 21);
+
+ if ($debug) print "Properties on $propnode (cur node $ $node)";
+ if ($propnode != $node)
+ {
+ if ($node)
+ {
+ $listing[$index++]["endpath"] = true;
+ clearVars();
+ }
+
+ $node = $propnode;
+
+ $listing[$index++]["newpath"] = $node;
+ clearVars();
+ }
+
+ $listing[$index++]["properties"] = true;
+ clearVars();
+ if ($debug) echo "Creating node $node<br>";
+
+ // Skip the row of underscores
+ $line = fgets($diff);
+ if ($debug) print "Skipping: $line<br>" ;
+
+ while ($line = trim(fgets($diff)))
+ {
+ $listing[$index++]["info"] = $line;
+ clearVars();
+ }
+
+ continue;
+ }
+
+ // Check for error messages
+ if (strncmp(trim($line), "svn: ", 5) == 0)
+ {
+ $listing[$index++]["info"] = urldecode($line);
+ $vars["success"] = false;
+ continue;
+ }
+
+ $listing[$index++]["info"] = $line;
+
+ }
+
+ if ($node)
+ {
+ clearVars();
+ $listing[$index++]["endpath"] = true;
+ }
+
+ if ($debug) print_r($listing);
+ }
+}
+
+$vars["version"] = $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."compare.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+
+?>
Added: trunk/svn.matroska.org/WebSVN/diff.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/diff.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/diff.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,352 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// diff.php
+//
+// Show the differences between 2 revisions of a file.
+//
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require_once("include/utils.inc");
+require_once("include/template.inc");
+
+$context = 5;
+
+$vars["action"] = $lang["DIFF"];
+$all = (@$_REQUEST["all"] == 1)?1:0;
+
+// Make sure that we have a repository
+if (!isset($rep))
+{
+ echo $lang["NOREP"];
+ exit;
+}
+
+$svnrep = new SVNRepository($rep->path);
+
+// If there's no revision info, go to the lastest revision for this path
+$history = $svnrep->getHistory($path);
+$youngest = $history[0]["rev"];
+
+if (empty($rev))
+ $rev = $youngest;
+
+$history = $svnrep->getHistory($path, $rev);
+
+if ($path{0} != "/")
+ $ppath = "/".$path;
+else
+ $ppath = $path;
+
+$prevrev = @$history[1]["rev"];
+
+$vars["repname"] = $rep->name;
+$vars["rev"] = $rev;
+$vars["path"] = $ppath;
+$vars["prevrev"] = $prevrev;
+
+$vars["rev1"] = $history[0]["rev"];
+$vars["rev2"] = $prevrev;
+
+createDirLinks($rep, $ppath, $rev, $showchanged);
+
+$listing = array();
+
+if ($prevrev)
+{
+ $url = $config->getURL($rep, $path, "diff");
+
+ if (!$all)
+ {
+ $vars["showalllink"] = "<a href=\"${url}rev=$rev&sc=$showchanged&all=1\">${lang["SHOWENTIREFILE"]}</a>";
+ $vars["showcompactlink"] = "";
+ }
+ else
+ {
+ $vars["showcompactlink"] = "<a href=\"${url}rev=$rev&sc=$showchanged&all=0\">${lang["SHOWCOMPACT"]}</a>";
+ $vars["showalllink"] = "";
+ }
+
+ // Get the contents of the two files
+ $newtname = tempnam("temp", "");
+ $new = $svnrep->getFileContents($history[0]["path"], $newtname, $history[0]["rev"]);
+
+ $oldtname = tempnam("temp", "");
+ $old = $svnrep->getFileContents($history[1]["path"], $oldtname, $history[1]["rev"]);
+
+ $ent = true;
+ if ((strrchr($path, ".") == '.php') || ($config->useEnscript))
+ $ent = false;
+
+ $file1cache = array();
+
+ if ($all)
+ $context = 1; // Setting the context to 0 makes diff generate the wrong line numbers!
+
+ // Open a pipe to the diff command with $context lines of context
+
+ $cmd = quoteCommand($config->diff." --ignore-all-space -U $context $oldtname $newtname", false);
+
+ if ($all)
+ {
+ $ofile = fopen($oldtname, "r");
+ $nfile = fopen($newtname, "r");
+ }
+
+ if ($diff = popen($cmd, "r"))
+ {
+ // Ignore the 3 header lines
+ $line = fgets($diff);
+ $line = fgets($diff);
+
+ // Get the first real line
+ $line = fgets($diff);
+
+ $index = 0;
+ $listing = array();
+
+ $curoline = 1;
+ $curnline = 1;
+
+ while (!feof($diff))
+ {
+ // Get the first line of this range
+ sscanf($line, "@@ -%d", $oline);
+
+ $line = substr($line, strpos($line, "+"));
+ sscanf($line, "+%d", $nline);
+
+ if ($all)
+ {
+ while ($curoline < $oline || $curnline < $nline)
+ {
+ $listing[$index]["rev1diffclass"] = "diff";
+ $listing[$index]["rev2diffclass"] = "diff";
+
+ if ($curoline < $oline)
+ {
+ $nl = fgets($ofile);
+
+ if ($ent)
+ $line = replaceEntities(rtrim($nl));
+ else
+ $line = rtrim($nl);
+
+ $listing[$index]["rev1line"] = hardspace($line);
+
+ $curoline++;
+ }
+ else
+ $listing[$index]["rev1line"] = " ";
+
+ if ($curnline < $nline)
+ {
+ $nl = fgets($nfile);
+
+ if ($ent)
+ $line = replaceEntities(rtrim($nl));
+ else
+ $line = rtrim($nl);
+
+ $listing[$index]["rev1line"] = hardspace($line);
+ $curnline++;
+ }
+ else
+ $listing[$index]["rev2line"] = " ";
+
+ $listing[$index]["rev1lineno"] = 0;
+ $listing[$index]["rev2lineno"] = 0;
+
+ $index++;
+ }
+ }
+ else
+ {
+ // Output the line numbers
+ $listing[$index]["rev1lineno"] = "$oline";
+ $listing[$index]["rev2lineno"] = "$nline";
+ $index++;
+ }
+
+ $fin = false;
+ while (!feof($diff) && !$fin)
+ {
+ $listing[$index]["rev1lineno"] = 0;
+ $listing[$index]["rev2lineno"] = 0;
+
+ $line = fgets($diff);
+ if (!strncmp($line, "@@", 2))
+ {
+ $fin = true;
+ }
+ else
+ {
+ $mod = $line{0};
+
+ if ($ent)
+ $line = replaceEntities(rtrim(substr($line, 1)));
+ else
+ $line = rtrim(substr($line, 1));
+
+ $listing[$index]["rev1line"] = hardspace($line);
+
+ $text = hardspace($line);
+ if ($text == "") $text = " ";
+
+ switch ($mod)
+ {
+ case "-":
+ $listing[$index]["rev1diffclass"] = "diffdeleted";
+ $listing[$index]["rev2diffclass"] = "diff";
+
+ $listing[$index]["rev1line"] = $text;
+ $listing[$index]["rev2line"] = " ";
+
+ if ($all)
+ {
+ fgets($ofile);
+ $curoline++;
+ }
+
+ break;
+
+ case "+":
+
+ // Try to mark "changed" line sensibly
+ if (!empty($listing[$index-1]) && empty($listing[$index-1]["rev1lineno"]) && $listing[$index-1]["rev1diffclass"] == "diffdeleted" && $listing[$index-1]["rev2diffclass"] == "diff")
+ {
+ $i = $index - 1;
+ while (!empty($listing[$i-1]) && empty($listing[$i-1]["rev1lineno"]) && $listing[$i-1]["rev1diffclass"] == "diffdeleted" && $listing[$i-1]["rev2diffclass"] == "diff")
+ $i--;
+
+ $listing[$i]["rev1diffclass"] = "diffchanged";
+ $listing[$i]["rev2diffclass"] = "diffchanged";
+ $listing[$i]["rev2line"] = $text;
+
+ if ($all)
+ {
+ fgets($nfile);
+ $curnline++;
+ }
+
+ // Don't increment the current index count
+ $index--;
+ }
+ else
+ {
+ $listing[$index]["rev1diffclass"] = "diff";
+ $listing[$index]["rev2diffclass"] = "diffadded";
+
+ $listing[$index]["rev1line"] = " ";
+ $listing[$index]["rev2line"] = $text;
+
+ if ($all)
+ {
+ fgets($nfile);
+ $curnline++;
+ }
+ }
+ break;
+
+ default:
+ $listing[$index]["rev1diffclass"] = "diff";
+ $listing[$index]["rev2diffclass"] = "diff";
+
+ $listing[$index]["rev1line"] = $text;
+ $listing[$index]["rev2line"] = $text;
+
+ if ($all)
+ {
+ fgets($ofile);
+ fgets($nfile);
+ $curoline++;
+ $curnline++;
+ }
+
+ break;
+ }
+ }
+
+ if (!$fin)
+ $index++;
+ }
+ }
+
+ // Output the rest of the files
+ if ($all)
+ {
+ while (!feof($ofile) || !feof($nfile))
+ {
+ $listing[$index]["rev1diffclass"] = "diff";
+ $listing[$index]["rev2diffclass"] = "diff";
+
+ if ($ent)
+ $line = replaceEntities(rtrim(fgets($ofile)));
+ else
+ $line = rtrim(fgets($ofile));
+
+ if (!feof($ofile))
+ $listing[$index]["rev1line"] = hardspace($line);
+ else
+ $listing[$index]["rev1line"] = " ";
+
+ if ($ent)
+ $line = replaceEntities(rtrim(fgets($nfile)));
+ else
+ $line = rtrim(fgets($nfile));
+
+ if (!feof($nfile))
+ $listing[$index]["rev2line"] = hardspace($line);
+ else
+ $listing[$index]["rev2line"] = " ";
+
+ $listing[$index]["rev1lineno"] = 0;
+ $listing[$index]["rev2lineno"] = 0;
+
+ $index++;
+ }
+ }
+
+ pclose($diff);
+ }
+
+ if ($all)
+ {
+ fclose($ofile);
+ fclose($nfile);
+ }
+
+ // Remove our temporary files
+ unlink($oldtname);
+ unlink($newtname);
+}
+else
+{
+ $vars["noprev"] = 1;
+}
+
+$vars["version"] = $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."diff.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/dl.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/dl.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/dl.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,104 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// dl.php
+//
+// Create gz/tar files of the requested item
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require_once("include/utils.inc");
+
+// Make sure that this operation is allowed
+
+if (!$rep->getAllowDownload())
+ exit;
+
+$svnrep = new SVNRepository($rep->path);
+
+if ($path{0} != "/")
+ $ppath = "/".$path;
+else
+ $ppath = $path;
+
+// If there's no revision info, go to the lastest revision for this path
+$history = $svnrep->getHistory($path);
+$youngest = $history[0]["rev"];
+
+if (empty($rev))
+ $rev = $youngest;
+
+// Create a temporary directory. Here we have an unavoidable but highly
+// unlikely to occure race condition
+
+$tmpname = tempnam("temp", "wsvn");
+unlink($tmpname);
+if (mkdir($tmpname))
+{
+ // Get the name of the directory being archived
+ $arcname = substr($path, 0, -1);
+ $arcname = basename($arcname);
+ if (empty($arcname))
+ $arcname = $rep->name;
+
+ $svnrep->exportDirectory($path, $tmpname.DIRECTORY_SEPARATOR.$arcname, $rev);
+
+ // Create the tar file
+ chdir($tmpname);
+ exec($config->tar." -cf $arcname.tar $arcname");
+
+ // ZIP it up
+ exec($config->gzip." $arcname.tar");
+ $size = filesize("$arcname.tar.gz");
+
+ // Give the file to the browser
+
+ if ($fp = @fopen("$arcname.tar.gz","rb"))
+ {
+ header("Content-Type: application/x-gzip");
+ header("Content-Length: $size");
+ header("Content-Disposition: attachment; filename=$arcname.tar.gz");
+ @fpassthru($fp);
+ }
+ else
+ {
+ print "Unable to open file $arcname.tar.gz";
+ }
+
+ fclose($fp);
+
+ chdir("..");
+
+ // Delete the directory. Why doesn't PHP have a generic recursive directory
+ // deletion command? It's stupid.
+
+ if ($config->serverIsWindows)
+ {
+ $cmd = quoteCommand("rmdir /S /Q ".quote($tmpname), false);
+ }
+ else
+ {
+ $cmd = quoteCommand("rm -rf ".quote($tmpname), false);
+ }
+
+ @exec($cmd);
+}
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/filedetails.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/filedetails.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/filedetails.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,148 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// filedetails.php
+//
+// Simply lists the contents of a file
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require_once("include/utils.inc");
+require_once("include/template.inc");
+
+// Make sure that we have a repository
+if (!isset($rep))
+{
+ echo $lang["NOREP"];
+ exit;
+}
+
+$svnrep = new SVNRepository($rep->path);
+
+if ($path{0} != "/")
+ $ppath = "/".$path;
+else
+ $ppath = $path;
+
+$passrev = $rev;
+
+// If there's no revision info, go to the lastest revision for this path
+$history = $svnrep->getHistory($path);
+$youngest = $history[0]["rev"];
+
+if (empty($rev))
+ $rev = $youngest;
+
+$extn = strrchr($path, ".");
+
+// Check to see if the user has requested that this type be zipped and sent
+// to the browser as an attachment
+
+if (in_array($extn, $zipped))
+{
+ $base = basename($path);
+ header("Content-Type: application/x-gzip");
+ header("Content-Disposition: attachment; filename=".urlencode($base).".gz");
+
+ // Get the file contents and pipe into gzip. All this without creating
+ // a temporary file. Damn clever.
+ $svnrep->getFileContents($path, "", $rev, "| ".$config->gzip." -n -f");
+
+ exit;
+}
+
+// Check to see if we should serve it with a particular content-type.
+// The content-type could come from an svn:mime-type property on the
+// file, or from the $contentType array in setup.inc.
+
+if (!$rep->getIgnoreSvnMimeTypes())
+{
+ $svnMimeType = $svnrep->getProperty($path, 'svn:mime-type', $rev);
+}
+
+if (!$rep->getIgnoreWebSVNContentTypes())
+{
+ $setupContentType = @$contentType[$extn];
+}
+
+// Use this set of priorities when establishing what content-type to
+// actually use.
+
+if (!empty($svnMimeType) && $svnMimeType != 'application/octet-stream')
+{
+ $cont = $svnMimeType;
+}
+else if (!empty($setupContentType))
+{
+ $cont = $setupContentType;
+}
+else if (!empty($svnMimeType))
+{
+ // It now is equal to application/octet-stream due to logic
+ // above....
+ $cont = $svnMimeType;
+}
+
+// If there's a MIME type associated with this format, then we deliver it
+// with this information
+
+if (!empty($cont))
+{
+ $base = basename($path);
+
+ header("Content-Type: $cont");
+ //header("Content-Length: $size");
+ header("Content-Disposition: inline; filename=".urlencode($base));
+
+ $svnrep->getFileContents($path, "", $rev);
+
+ exit;
+}
+
+// There's no associated MIME type. Show the file using WebSVN.
+
+$url = $config->getURL($rep, $path, "file");
+
+if ($rev != $youngest)
+ $vars["goyoungestlink"] = "<a href=\"${url}sc=1\">${lang["GOYOUNGEST"]}</a>";
+else
+ $vars["goyoungestlink"] = "";
+
+$vars["action"] = "";
+$vars["repname"] = $rep->name;
+$vars["rev"] = $rev;
+$vars["path"] = $ppath;
+
+createDirLinks($rep, $ppath, $passrev, $showchanged);
+
+$url = $config->getURL($rep, $path, "diff");
+$vars["prevdifflink"] = "<a href=\"${url}rev=$passrev&sc=$showchanged\">${lang["DIFFPREV"]}</a>";
+
+$url = $config->getURL($rep, $path, "blame");
+$vars["blamelink"] = "<a href=\"${url}rev=$passrev&sc=$showchanged\">${lang["BLAME"]}</a>";
+
+$listing = array ();
+
+$vars["version"] = $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."file.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/form.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/form.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/form.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,59 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// form.php
+//
+// Handling of WebSVN forms
+
+require_once("include/setup.inc");
+require_once("include/utils.inc");
+
+// Generic redirect handling
+
+function redirect($loc)
+{
+ $url= getFullURL($loc);
+
+ header("Location: $url");
+ echo "<html><script language=\"JavaScript\" type=\"text/JavaScript\">window.location = \"$url\"</script></html>";
+}
+
+// Handle project selection
+
+if (@$_REQUEST["selectproj"])
+{
+ $basedir = dirname($_SERVER["PHP_SELF"]);
+ if ($basedir != "" && $basedir != DIRECTORY_SEPARATOR && $basedir != "\\" && $basedir != "/" )
+ $basedir .= "/";
+ else
+ $basedir = "/";
+
+ $url = $config->getURL($rep, "/", "dir");
+ $url = html_entity_decode($url);
+
+ if ($config->multiViews)
+ redirect($url."sc=$showchanged");
+ else
+ redirect($basedir.$url."sc=$showchanged");
+}
+
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/include/bugtraq.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/bugtraq.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/bugtraq.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,124 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// bugtraq.inc
+//
+// Functions for accessing the bugtraq properties and replacing issue IDs
+// with URLs.
+//
+// For more information about bugtraq, see
+// http://svn.collab.net/repos/tortoisesvn/trunk/doc/issuetrackers.txt
+
+class Bugtraq
+{
+ var $msgstring;
+ var $urlstring;
+
+ var $firstPart;
+ var $firstPartLen;
+ var $lastPart;
+ var $lastPartLen;
+
+ var $propsfound = false;
+
+ function Bugtraq($rep, $svnrep, $path)
+ {
+ global $config;
+
+ if ($rep->getBugtraq())
+ {
+ $pos = strrpos($path, "/");
+ $parent = substr($path, 0, $pos + 1);
+
+ while ((empty($this->msgstring) || empty($this->urlstring)) && (strpos($parent, "/") !== false))
+ {
+ if (empty($this->msgstring)) $this->msgstring = $svnrep->getProperty($parent, 'bugtraq:message');
+ if (empty($this->urlstring)) $this->urlstring = $svnrep->getProperty($parent, 'bugtraq:url');
+
+ $parent = substr($parent, 0, -1); // Remove the trailing slash
+ $pos = strrpos($parent, "/"); // Find the last trailing slash
+ $parent = substr($parent, 0, $pos + 1); // Find the previous parent directory
+ }
+
+ if (!empty($this->msgstring) && !empty($this->urlstring))
+ {
+ $this->msgstring = trim($this->msgstring);
+ $this->urlstring = trim($this->urlstring);
+
+ if (($bugidpos = strpos($this->msgstring, "%BUGID%")) !== false && strpos($this->urlstring, "%BUGID%") !== false)
+ {
+ // Get the textual parts of the message string for comparison purposes
+ $this->firstPart = substr($this->msgstring, 0, $bugidpos);
+ $this->firstPartLen = strlen($this->firstPart);
+ $this->lastPart = substr($this->msgstring, $bugidpos + 7);
+ $this->lastPartLen = strlen($this->lastPart);
+ }
+
+ $this->propsfound = true;
+ }
+ }
+ }
+
+ function replaceIDs($message)
+ {
+ if ($this->propsfound)
+ {
+ $logmsg = "";
+ $message = rtrim($message);
+
+ // Just compare the last line
+ if ($offset = strrpos($message, "\n"))
+ {
+ $logmsg = substr($message, 0, $offset + 1);
+ $lastLine = substr($message, $offset + 1);
+ }
+ else
+ $lastLine = $message;
+
+ // Make sure that our line really is an issue tracker message
+ if (((strncmp($lastLine, $this->firstPart, $this->firstPartLen) == 0) || (($offset !== false) && ($logmsg == ""))) &&
+ strcmp(substr($lastLine, -$this->lastPartLen, $this->lastPartLen), $this->lastPart) == 0)
+ {
+ // Get the issues list
+ if ($this->lastPartLen > 0)
+ $issues = substr($lastLine, $this->firstPartLen, -$this->lastPartLen);
+ else
+ $issues = substr($lastLine, $this->firstPartLen);
+
+ // Add each reference to the first part of the line
+ $line = $this->firstPart;
+ while ($pos = strpos($issues, ","))
+ {
+ $issue = trim(substr($issues, 0, $pos));
+ $issues = substr($issues, $pos + 1);
+
+ $line .= "<a href=\"".str_replace("%BUGID%", $issue, $this->urlstring)."\">$issue</a>, ";
+ }
+ $line .= "<a href=\"".str_replace("%BUGID%", trim($issues), $this->urlstring)."\">".trim($issues)."</a>".$this->lastPart;
+
+ return $logmsg.$line;
+ }
+ }
+
+ return $message;
+ }
+}
+?>
Added: trunk/svn.matroska.org/WebSVN/include/command.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/command.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/command.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,153 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// command.inc
+//
+// External command handling
+
+function replaceEntities($str)
+{
+ global $config;
+
+ if (version_compare(phpversion(), "4.1.0", "<"))
+ $str = htmlentities($str);
+ else
+ $str = htmlentities($str, ENT_COMPAT, $config->outputEnc);
+
+ return $str;
+}
+
+function transChars($str, $doEnt = true)
+{
+ global $config;
+
+ // Try to convert the messages based on the locale information
+ if ($config->inputEnc && $config->outputEnc)
+ {
+ if (function_exists("iconv"))
+ {
+ $output = @iconv($config->inputEnc, $config->outputEnc, $str);
+ if (!empty($output))
+ $str = $output;
+ }
+ }
+
+ if ($doEnt) $str = replaceEntities($str);
+
+ return $str;
+}
+
+function transArray($arr)
+{
+ global $config;
+
+ $narr = array();
+
+ foreach ($arr as $key => $value)
+ {
+ // Try to convert the messages based on the locale information
+ if ($config->inputEnc && $config->outputEnc)
+ {
+ if (function_exists("iconv"))
+ {
+ $output = @iconv($config->inputEnc, $config->outputEnc, $value);
+ if (!empty($output))
+ $value = $output;
+ }
+ }
+
+ $narr[$key] = replaceEntities(rtrim($value));
+ }
+
+ return $narr;
+}
+
+function quoteCommand($cmd, $redirecterr)
+{
+ global $config;
+
+ if ($redirecterr)
+ $cmd .= " 2>&1";
+
+ // On Windows machines, the whole line needs quotes round it so that it's
+ // passed to cmd.exe correctly
+
+ if ($config->serverIsWindows)
+ $cmd = "\"$cmd\"";
+
+ return $cmd;
+}
+
+function runCommand($cmd, $mayReturnNothing = false)
+{
+ global $lang;
+
+ $output = array ();
+ $err = false;
+
+ $c = quoteCommand($cmd, false);
+
+ // Try to run the command normally
+ if ($handle = popen($c, "r"))
+ {
+ $firstline = true;
+ while (!feof($handle))
+ {
+ $line = fgets($handle);
+ if ($firstline && $line == "" && !$mayReturnNothing)
+ {
+ $err = true;
+ }
+ $firstline = false;
+ $output[] = transChars(rtrim($line));
+ }
+
+ pclose($handle);
+ if (!$err)
+ return $output;
+ }
+
+ echo "${lang["BADCMD"]}: <i><b>$cmd</b></i><br>";
+
+ // Rerun the command, this time grabbing the error information
+
+ $c = quoteCommand($cmd, true);
+
+ $output = transChars(shell_exec($c));
+ if (!empty($output)) print "<p>".nl2br($output);
+ exit;
+}
+
+// quote
+//
+// Quote a string to send to the command line
+
+function quote($str)
+{
+ global $config;
+
+ if ($config->serverIsWindows)
+ return "\"$str\"";
+ else
+ return escapeshellarg($str);
+}
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/include/config.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/config.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/config.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,238 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// config.inc
+//
+// Configuration parameters
+
+// --- FOLLOW THE INSTRUCTIONS BELOW TO CONFIGURE YOUR SETUP ---
+
+// --- PLATFORM CONFIGURATION ---
+
+// Uncomment the next line if your running a windows server
+//
+// $config->setServerIsWindows();
+
+// Configure these lines if your commands aren't on your path.
+//
+$config->setSVNCommandPath("/usr/local/bin/");
+$config->setDiffPath("/usr/bin/");
+
+// For syntax colouring, if option enabled...
+// $config->setEnscriptPath("Path/to/enscript/command/");
+// $config->setSedPath("Path/to/sed/command/");
+
+// For delivered tarballs, if option enabled...
+// $config->setTarPath("Path/to/tar/command/");
+
+// For delivered GZIP'd files and tarballs, if option enabled...
+// $config->setGZipPath("Path/to/gzip/command/");
+
+// --- REPOSITORY SETUP ---
+
+// There are 2 methods for defining the repositiories available on the system. Either you list
+// them by hand, in which case you can give each one the name of your choice, or you use the
+// parent path function, in which case the name of the directory is used as the repository name.
+//
+// To configure the repositories by hand, copy the line below, uncomment it and replace the name and path
+//
+$config->addRepository("Matroska Website", "/svn/www");
+$config->addRepository("Matroska Sources", "/svn/matroska");
+//
+// To use the parent path method, uncomment the newt line and and replace the path with your one. You
+// can call the function several times if you have several parent paths.
+//
+// $config->parentPath("Path/to/parent (e.g. c:\\svn)");
+
+// --- LOOK AND FEEL ---
+//
+// Uncomment ONLY the display file that you want.
+
+$config->setTemplatePath("$locwebsvnreal/templates/Standard/");
+// $config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/");
+// $config->setTemplatePath("$locwebsvnreal/templates/Zinn/");
+
+// --- LANGUAGE SETUP ---
+
+// Uncomment ONLY the language file which you want. If you want English then don't do anything here.
+//
+// include("languages/german.inc");
+// include("languages/french.inc");
+// include("languages/spanish.inc");
+// include("languages/portuguese.inc");
+// include("languages/swedish.inc");
+
+// include("languages/japanese-euc.inc"); // (Almost Unix/Linux/BSD)
+// include("languages/japanese-jis.inc"); // (ISO-2022-JP)
+// include("languages/japanese-sjis.inc"); // (Windows)
+// include("languages/japanese-utf8.inc"); // (FedoraCore/Max OS X/BeOS)
+
+// include("languages/korean-euc.inc");
+// include("languages/korean-utf8.inc");
+
+// include("languages/tchinese.inc");
+// include("languages/tchinese-utf8.inc");
+
+// By default, WebSVN tries to use the iconv module (if enabled) to convert log messages from your
+// system's character set to you default output encoding. If you find that your log messages aren't
+// displayed correctly then you'll need to change the values here.
+
+// $config->setInputEncoding("iso-8859-1"); // Encoding of log messages returned by svnlook on your system
+// $config->setOutputEncoding("iso-8859-1"); // Encoding of resulting web page
+$config->setOutputEncoding("utf8"); // Encoding of resulting web page
+
+// Note for Windows users: To enable iconv you'll need to enable the extension in your php.ini file
+// AND copy iconv.dll (not php_iconv.dll) to your Windows system folder. In most cases the correct
+// encoding is set when you call $config->setServerIsWindows();.
+
+// Note for *nix users. You'll need to have iconv compiled into your binary. The default input and
+// output encodings are taken from your locale informations. Override these if they aren't correct.
+
+// --- MULTIVIEWS ---
+
+// Uncomment this line if you want to use MultiView to access the repository by, for example:
+//
+// http://servername/wsvn/repname/path/in/repository
+//
+// Note: The websvn directory will need to have Multiviews turned on in Apache, and you'll need to configure
+// wsvn.php
+
+$config->useMultiViews();
+
+// --- FILE CONTENT ---
+//
+// You may wish certain file types to be GZIP'd and delieved to the user when clicked apon.
+// This is useful for binary files and the like that don't display well in a browser window!
+// Copy, uncomment and modify this line for each extension to which this rule should apply.
+// (Don't forget the . before the extension. You don't need an index between the []'s).
+// If you'd rather that the files were delivered uncompressed with the associated MIME type,
+// then read below.
+//
+// $zipped[] = ".dll";
+
+// Subversion controlled files have an svn:mime-type property that can
+// be set on a file indicating its mime type. By default binary files
+// are set to the generic appcliation/octet-stream, and other files
+// don't have it set at all. WebSVN also has a built-in list of
+// associations from file extension to MIME content type. (You can
+// view this list in setup.inc).
+//
+// Determining the content-type: By default, if the svn:mime-type
+// property exists and is different from application/octet-stream, it
+// is used. Otherwise, if the built-in list has a contentType entry
+// for the extension of the file, that is used. Otherwise, if the
+// svn:mime-type property exists has the generic binary value of
+// application/octet-stream, the file will be served as a binary
+// file. Otherwise, the file will be brought up as ASCII text in the
+// browser window (although this text may optionally be colourised.
+// See below).
+//
+// Uncomment this if you want to ignore any svn:mime-type property on your
+// files.
+//
+// $config->ignoreSvnMimeTypes();
+//
+// Uncomment this if you want skip WebSVN's custom mime-type handling
+//
+// $config->ignoreWebSVNContentTypes();
+//
+// Following the examples below, you can add new associations, modify
+// the default ones or even delete them entirely (to show them in
+// ASCII via WebSVN).
+
+// $contentType[".c"] = "plain/text"; // Create a new association
+// $contentType[".doc"] = "plain/text"; // Modify an existing one
+// unset($contentType[".m"] // Remove a default association
+
+// --- TARBALLS ---
+
+// You need tar and gzip installed on your system. Set the paths above if necessary
+//
+// Uncomment the line below to offer a tarball download option across all your
+// repositories.
+//
+$config->allowDownload();
+//
+// To change the global option for individual repositories, uncomment and replicate
+// the required line below (replacing 'myrep' for the name of the repository to be changed).
+
+// $config->findRepository("myrep")->allowDownload(); // Specifically allow downloading for 'myrep'
+// $config->findRepository("myrep")->disallowDownload(); // Specifically disallow downloading for 'myrep'
+
+// --- COLOURISATION ---
+
+// Uncomment this line if you want to use Enscript to colourise your file listings
+//
+// You'll need Enscript version 1.6 or higher AND Sed installed to use this feature.
+// Set the path above.
+//
+$config->useEnscript();
+
+// Enscript need to be told what the contents of a file are so that it can be colourised
+// correctly. WebSVN includes a predefined list of mappings from file extension to Enscript
+// file type (viewable in setup.inc).
+//
+// Here you should add and other extensions not already listed or redefine the default ones. eg:
+//
+// $extEnscript[".pas"] = "pascal";
+
+// --- RSSFEED ---
+
+// Uncomment this line if you wish to hide the RSS feed links across all repositories
+//
+// $config->hideRSS();
+//
+// To change the global option for individual repositories, uncomment and replicate
+// the required line below (replacing 'myrep' for the name of the repository to be changed).
+
+// $config->findRepository("myrep")->hideRSS(); // Specifically hide RSS links for 'myrep'
+// $config->findRepository("myrep")->showRSS(); // Specifically show RSS links for 'myrep'
+
+// --- BUGTRAQ ---
+
+// Uncomment this line if you wish to use bugtraq: properties to show links to your BugTracker
+// from the log messages.
+//
+// $config->useBugtraqProperties();
+//
+// To change the global option for individual repositories, uncomment and replicate
+// the required line below (replacing 'myrep' for the name of the repository to be changed).
+
+// $config->findRepository("myrep")->useBugtraqProperties(); // Specifically use bugtraq properties for 'myrep'
+// $config->findRepository("myrep")->ignoreBugtraqProperties(); // Specifically ignore bugtraq properties for 'myrep'
+
+// --- MISCELLANOUS ---
+
+// Uncomment this if you don't have the right to use it. Be warned that you may need it however!
+set_time_limit(0);
+
+// Comment this line to turn off caching of repo information. This will slow down your browsing.
+$config->setCachingOn();
+
+// Number of spaces to expand tabs to in diff/listing view across all repositories
+
+$config->expandTabsBy(2);
+
+// To change the global option for individual repositories, uncomment and replicate
+// the required line below (replacing 'myrep' for the name of the repository to be changed).
+
+// $config->findRepository("myrep")->expandTabsBy(3); // Expand Tabs by 3 for repository 'myrep'
+?>
Added: trunk/svn.matroska.org/WebSVN/include/configclass.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/configclass.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/configclass.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,580 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// configclass.inc
+//
+// General class for handling configuration options
+
+require("include/command.inc");
+require("include/version.inc");
+
+// Auxillary function used to sort repositories by name
+
+function cmpReps($a, $b)
+{
+ return strcasecmp($a->name, $b->name);
+}
+
+// A Repository configuration class
+
+Class Repository
+{
+ var $name;
+ var $path;
+
+ // Local configuration options must start off unset
+
+ var $allowDownload;
+ var $rss;
+ var $spaces;
+ var $ignoreSvnMimeTypes;
+ var $ignoreWebSVNContentTypes;
+ var $bugtraq;
+
+ function Repository($name, $path)
+ {
+ $this->name = $name;
+ $this->path = $path;
+ }
+
+ // Local configuration accessors
+
+ // RSS Feed
+
+ function hideRSS()
+ {
+ $this->rss = false;
+ }
+
+ function showRSS()
+ {
+ $this->rss = true;
+ }
+
+ function getHideRSS()
+ {
+ global $config;
+
+ if (isset($this->rss))
+ return $this->rss;
+
+ return $config->rss;
+ }
+
+ // Download
+
+ function allowDownload()
+ {
+ $this->allowDownload = true;
+ }
+
+ function disallowDownload()
+ {
+ $this->allowDownload = false;
+ }
+
+ function getAllowDownload()
+ {
+ global $config;
+
+ if (isset($this->allowDownload))
+ return $this->allowDownload;
+
+ return $config->allowDownload;
+ }
+
+ // Tab expansion
+
+ function expandTabsBy($sp)
+ {
+ $this->spaces = $sp;
+ }
+
+ function getExpandTabsBy()
+ {
+ global $config;
+
+ if (isset($this->spaces))
+ return $this->spaces;
+
+ return $config->spaces;
+ }
+
+ // Mime Type Handing
+
+ function ignoreSvnMimeTypes()
+ {
+ $this->ignoreSvnMimeTypes = true;
+ }
+
+ function useSvnMimeTypes()
+ {
+ $this->ignoreSvnMimeTypes = false;
+ }
+
+ function getIgnoreSvnMimeTypes()
+ {
+ global $config;
+
+ if (isset($this->ignoreSvnMimeTypes))
+ return $this->ignoreSvnMimeTypes;
+
+ return $config->ignoreSvnMimeTypes;
+ }
+
+ function ignoreWebSVNContentTypes()
+ {
+ $this->ignoreWebSVNContentTypes = true;
+ }
+
+ function useWebSVNContentTypes()
+ {
+ $this->ignoreWebSVNContentTypes = false;
+ }
+
+ function getIgnoreWebSVNContentTypes()
+ {
+ global $config;
+
+ if (isset($this->ignoreWebSVNContentTypes))
+ return $this->ignoreWebSVNContentTypes;
+
+ return $config->ignoreWebSVNContentTypes;
+ }
+
+ // Issue Tracking
+
+ function useBugtraqProperties()
+ {
+ $this->bugtraq = true;
+ }
+
+ function ignoreBugtraqProperties()
+ {
+ $this->bugtraq = false;
+ }
+
+ function getBugtraq()
+ {
+ global $config;
+
+ if (isset($this->bugtraq))
+ return $this->bugtraq;
+
+ return $config->bugtraq;
+ }
+}
+
+// The general configuration class
+
+Class Config
+{
+ // Tool path locations
+
+ var $svnlook = "svnlook";
+ var $svn = "svn --non-interactive";
+ var $diff = "diff";
+ var $enscript ="enscript";
+ var $sed = "sed";
+ var $gzip = "gzip";
+ var $tar = "tar";
+
+ // Other configuration items
+
+ var $serverIsWindows = false;
+ var $cacheResults = false;
+ var $multiViews = false;
+ var $useEnscript = false;
+ var $allowDownload = false;
+ var $rss = true;
+ var $spaces = 8;
+ var $bugtraq = false;
+
+ var $templatePath = "./templates/Standard/";
+
+ var $ignoreSvnMimeTypes = false;
+ var $ignoreWebSVNContentTypes = false;
+
+ // Default character encodings
+ var $inputEnc = "";
+ var $outputEnc;
+
+ var $quote = "'";
+
+ var $_repositories;
+
+ function Config()
+ {
+ $this->setOutputEncoding("ISO-8859-1");
+ }
+
+ function addRepository($name, $path)
+ {
+ if (($path{strlen($path) - 1} == DIRECTORY_SEPARATOR) ||
+ ($path{strlen($path) - 1} == "/"))
+ $path = substr($path, 0, -1);
+
+ $this->_repositories[] = new Repository($name, $path);
+ }
+
+ function getRepository($rep)
+ {
+ return $this->_repositories[$rep];
+ }
+
+ function getRepositories()
+ {
+ return $this->_repositories;
+ }
+
+ function findRepository($name)
+ {
+ foreach ($this->_repositories as $index => $rep)
+ {
+ if (strcasecmp($rep->name, $name) == 0)
+ return $rep;
+ }
+ return null;
+ }
+
+ // setServerIsWindows
+ //
+ // The server is running on Windows
+
+ function setServerIsWindows()
+ {
+ $this->serverIsWindows = true;
+
+ // Try to set the input encoding intelligently
+
+ $cp = 0;
+ if ($cp = @shell_exec("CHCP"))
+ {
+ $cp = trim(substr($cp, strpos($cp, ":") + 1));
+ settype($sp, "integer");
+ }
+
+ // Use the most sensible default value if that failed
+ if ($cp == 0) $cp = 850;
+
+ $this->setInputEncoding("CP$cp");
+
+ // On Windows machines, use double quotes around command line parameters
+
+ $this->quote = '"';
+ }
+
+ // setCachingOn
+ //
+ // Set result caching on
+
+ function setCachingOn()
+ {
+ $this->cacheResults = true;
+ }
+
+ // useMultiViews
+ //
+ // Use MultiViews to access the repository
+
+ function useMultiViews()
+ {
+ $this->multiViews = true;
+ }
+
+ // useEnscript
+ //
+ // Use Enscript to colourise listings
+
+ function useEnscript()
+ {
+ $this->useEnscript = true;
+ }
+
+ // offerRSS
+ //
+ // Use Enscript to colourise listings
+
+ function hideRSS()
+ {
+ $this->rss = false;
+ }
+
+ // allowDownload
+ //
+ // Allow download of tarballs
+
+ function allowDownload()
+ {
+ global $vars;
+
+ $this->allowDownload = true;
+ }
+
+ // getURL
+ //
+ // Get the URL to a path name based on the current config
+
+ function getURL($rep, $path, $op)
+ {
+ $base = $_SERVER["SCRIPT_NAME"];
+
+ if ($this->multiViews)
+ {
+ // Remove the .php
+ $base = substr($base, 0, -4);
+
+ if ($path && $path{0} != "/") $path = "/".$path;
+
+ $url = $base;
+
+ if ($rep != -1)
+ {
+ $url .= "/".$rep->name.$path;
+
+ if ($op != "dir")
+ $url .= "?op=$op&";
+ else
+ $url .= "?";
+ }
+
+ return $url;
+ }
+ else
+ {
+ switch ($op)
+ {
+ case "dir":
+ $fname = "listing.php";
+ break;
+
+ case "file":
+ $fname = "filedetails.php";
+ break;
+
+ case "log":
+ $fname = "log.php";
+ break;
+
+ case "diff":
+ $fname = "diff.php";
+ break;
+
+ case "blame":
+ $fname = "blame.php";
+ break;
+
+ case "form":
+ $fname = "form.php";
+ break;
+
+ case "rss":
+ $fname = "rss.php";
+ break;
+
+ case "dl":
+ $fname = "dl.php";
+ break;
+
+ case "comp":
+ $fname = "comp.php";
+ break;
+ }
+
+ if ($rep == -1)
+ return $fname."?path=".urlencode($path)."&";
+ else
+ return $fname."?repname=".$rep->name."&path=".urlencode($path)."&";
+ }
+ }
+
+ // setPath
+ //
+ // Set the location of the given path
+
+ function setPath(&$var, $path, $name)
+ {
+ $lastchar = $path{strlen($path) - 1};
+ $isDir = ($lastchar == DIRECTORY_SEPARATOR ||
+ $lastchar == "/" ||
+ $lastchar == "\\");
+
+ if (!$isDir)
+ {
+ $path .= DIRECTORY_SEPARATOR;
+ }
+
+ // On a windows machine we need to put spaces around the entire command
+ // to allow for spaces in the path
+ if ($this->serverIsWindows)
+ $var = "\"$path$name\"";
+ else
+ $var = "$path$name";
+ }
+
+ // setSVNCommandPath
+ //
+ // Define the location of the svn and svnlook commands
+
+ function setSVNCommandPath($path)
+ {
+ $this->setPath($this->svn, $path, "svn");
+ $this->setPath($this->svnlook, $path, "svnlook");
+ }
+
+ // setDiffPath
+ //
+ // Define the location of the diff command
+
+ function setDiffPath($path)
+ {
+ $this->setPath($this->diff, $path, "diff");
+ }
+
+ // setEnscriptPath
+ //
+ // Define the location of the enscript command
+
+ function setEnscriptPath($path)
+ {
+ $this->setPath($this->enscript, $path, "enscript");
+ }
+
+ // setSedPath
+ //
+ // Define the location of the sed command
+
+ function setSedPath($path)
+ {
+ $this->setPath($this->sed, $path, "sed");
+ }
+
+ // setTarPath
+ //
+ // Define the location of the tar command
+
+ function setTarPath($path)
+ {
+ $this->setPath($this->tar, $path, "tar");
+ }
+
+ // setGzipPath
+ //
+ // Define the location of the GZip command
+
+ function setGzipPath($path)
+ {
+ $this->setPath($this->gzip, $path, "gzip");
+ }
+
+ function setTemplatePath($path)
+ {
+ $lastchar = $path{strlen($path) - 1};
+ $isDir = ($lastchar == DIRECTORY_SEPARATOR ||
+ $lastchar == "/" ||
+ $lastchar == "\\");
+
+ if (!$isDir)
+ {
+ $path .= DIRECTORY_SEPARATOR;
+ }
+
+ // On a windows machine we need to put spaces around the entire command
+ // to allow for spaces in the path
+ $this->templatePath = $path;
+ }
+
+ // parentPath
+ //
+ // Automatically set up the repositories based on a parent path
+
+ function parentPath($path)
+ {
+ if ($handle = opendir($path))
+ {
+ // For each file...
+ while (false !== ($file = readdir($handle)))
+ {
+ // That's also a non hidden directory
+ if (is_dir($path.DIRECTORY_SEPARATOR.$file) && $file{0} != ".")
+ {
+ // And that contains a db directory (in an attempt to not include
+ // non svn repositories.
+
+ if (is_dir($path.DIRECTORY_SEPARATOR.$file.DIRECTORY_SEPARATOR."db"))
+ {
+ // We add the repository to the list
+ $this->addRepository($file, $path.DIRECTORY_SEPARATOR.$file);
+ }
+ }
+ }
+ closedir($handle);
+ }
+
+ // Sort the repositories into alphabetical order
+
+ if (!empty($this->_repositories))
+ usort($this->_repositories, "cmpReps");
+ }
+
+ // Encoding functions
+
+ function setInputEncoding($enc)
+ {
+ $this->inputEnc = $enc;
+ }
+
+ function setOutputEncoding($enc)
+ {
+ global $vars;
+
+ if ($enc != "")
+ {
+ $this->outputEnc = $enc;
+ $vars["charset"] = $enc;
+ }
+ }
+
+ // Tab expansion functions
+
+ function expandTabsBy($sp)
+ {
+ $this->spaces = $sp;
+ }
+
+ // Misc settings
+
+ function ignoreSvnMimeTypes()
+ {
+ $this->ignoreSvnMimeTypes = true;
+ }
+
+ function ignoreWebSVNContentTypes()
+ {
+ $this->ignoreWebSVNContentTypes = true;
+ }
+
+ function useBugtraqProperties()
+ {
+ $this->bugtraq = true;
+ }
+}
+?>
Added: trunk/svn.matroska.org/WebSVN/include/feedcreator.class.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/feedcreator.class.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/feedcreator.class.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,1100 @@
+<?php
+/***************************************************************************
+
+FeedCreator class v1.6
+originally (c) Kai Blankenhorn
+www.bitfolge.de
[email protected]
+v1.3 work by Scott Reynen ([email protected]) and Kai Blankenhorn
+v1.5 OPML support by Dirk Clemens
+
+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: <http://www.gnu.org/licenses/gpl.txt>
+
+****************************************************************************
+
+
+Changelog:
+
+Modifications for WebSVN:
+ The main description link wasn't put through htmlspecialcharacters
+ Output encoding now defined by $config
+
+v1.6 05-10-04
+ added stylesheet to RSS 1.0 feeds
+ fixed generator comment (thanks Kevin L. Papendick and Tanguy Pruvot)
+ fixed RFC822 date bug (thanks Tanguy Pruvot)
+ added TimeZone customization for RFC8601 (thanks Tanguy Pruvot)
+ fixed Content-type could be empty (thanks Tanguy Pruvot)
+ fixed author/creator in RSS1.0 (thanks Tanguy Pruvot)
+
+
+v1.6 beta 02-28-04
+ added Atom 0.3 support (not all features, though)
+ improved OPML 1.0 support (hopefully - added more elements)
+ added support for arbitrary additional elements (use with caution)
+ code beautification :-)
+ considered beta due to some internal changes
+
+v1.5.1 01-27-04
+ fixed some RSS 1.0 glitches (thanks to Stéphane Vanpoperynghe)
+ fixed some inconsistencies between documentation and code (thanks to Timothy Martin)
+
+v1.5 01-06-04
+ added support for OPML 1.0
+ added more documentation
+
+v1.4 11-11-03
+ optional feed saving and caching
+ improved documentation
+ minor improvements
+
+v1.3 10-02-03
+ renamed to FeedCreator, as it not only creates RSS anymore
+ added support for mbox
+ tentative support for echo/necho/atom/pie/???
+
+v1.2 07-20-03
+ intelligent auto-truncating of RSS 0.91 attributes
+ don't create some attributes when they're not set
+ documentation improved
+ fixed a real and a possible bug with date conversions
+ code cleanup
+
+v1.1 06-29-03
+ added images to feeds
+ now includes most RSS 0.91 attributes
+ added RSS 2.0 feeds
+
+v1.0 06-24-03
+ initial release
+
+
+
+***************************************************************************/
+
+/*** GENERAL USAGE *********************************************************
+
+include("feedcreator.class.php");
+
+$rss = new UniversalFeedCreator();
+$rss->useCached(); // use cached version if age<1 hour
+$rss->title = "PHP news";
+$rss->description = "daily news from the PHP scripting world";
+$rss->link = "http://www.dailyphp.net/news";
+$rss->syndicationURL = "http://www.dailyphp.net/".$_SERVER["PHP_SELF"];
+
+$image = new FeedImage();
+$image->title = "dailyphp.net logo";
+$image->url = "http://www.dailyphp.net/images/logo.gif";
+$image->link = "http://www.dailyphp.net";
+$image->description = "Feed provided by dailyphp.net. Click to visit.";
+$rss->image = $image;
+
+// get your news items from somewhere, e.g. your database:
+mysql_select_db($dbHost, $dbUser, $dbPass);
+$res = mysql_query("SELECT * FROM news ORDER BY newsdate DESC");
+while ($data = mysql_fetch_object($res)) {
+ $item = new FeedItem();
+ $item->title = $data->title;
+ $item->link = $data->url;
+ $item->description = $data->short;
+ $item->date = $data->newsdate;
+ $item->source = "http://www.dailyphp.net";
+ $item->author = "John Doe";
+
+ $rss->addItem($item);
+}
+
+// valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1 (deprecated),
+// MBOX, OPML, ATOM0.3
+echo $rss->saveFeed("RSS1.0", "news/feed.xml");
+
+
+***************************************************************************
+* A little setup *
+**************************************************************************/
+
+// your local timezone, set to "" to disable or for GMT
+define("TIME_ZONE","+01:00");
+
+
+
+
+/**
+* Version string.
+**/
+define("FEEDCREATOR_VERSION", "FeedCreator 1.6");
+
+
+
+/**
+* A FeedItem is a part of a FeedCreator feed.
+*
+* @author Kai Blankenhorn <[email protected]>
+* @since 1.3
+*/
+class FeedItem {
+ /**
+ * Mandatory attributes of an item.
+ */
+ var $title, $description, $link;
+
+ /**
+ * Optional attributes of an item.
+ */
+ var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator;
+
+ /**
+ * Publishing date of an item. May be in one of the following formats:
+ *
+ * RFC 822:
+ * "Mon, 20 Jan 03 18:05:41 +0400"
+ * "20 Jan 03 18:05:41 +0000"
+ *
+ * ISO 8601:
+ * "2003-01-20T18:05:41+04:00"
+ *
+ * Unix:
+ * 1043082341
+ */
+ var $date;
+
+ /**
+ * Any additional elements to include as an assiciated array. All $key => $value pairs
+ * will be included unencoded in the feed item in the form
+ * <$key>$value</$key>
+ * Again: No encoding will be used! This means you can invalidate or enhance the feed
+ * if $value contains markup. This may be abused to embed tags not implemented by
+ * the FeedCreator class used.
+ */
+ var $additionalElements = Array();
+
+ // on hold
+ // var $source;
+}
+
+
+
+/**
+* An FeedImage may be added to a FeedCreator feed.
+* @author Kai Blankenhorn <[email protected]>
+* @since 1.3
+*/
+class FeedImage {
+ /**
+ * Mandatory attributes of an image.
+ */
+ var $title, $url, $link;
+
+ /**
+ * Optional attributes of an image.
+ */
+ var $width, $height, $description;
+}
+
+
+/**
+* UniversalFeedCreator lets you choose during runtime which
+* format to build.
+* For general usage of a feed class, see the FeedCreator class
+* below or the example above.
+*
+* @since 1.3
+* @author Kai Blankenhorn <[email protected]>
+*/
+class UniversalFeedCreator extends FeedCreator {
+ var $_feed;
+
+ function _setFormat($format) {
+ switch (strtoupper($format)) {
+
+ case "2.0":
+ // fall through
+ case "RSS2.0":
+ $this->_feed = new RSSCreator20();
+ break;
+
+ case "1.0":
+ // fall through
+ case "RSS1.0":
+ $this->_feed = new RSSCreator10();
+ break;
+
+ case "0.91":
+ // fall through
+ case "RSS0.91":
+ $this->_feed = new RSSCreator091();
+ break;
+
+ case "PIE0.1":
+ $this->_feed = new PIECreator01();
+ break;
+
+ case "MBOX":
+ $this->_feed = new MBOXCreator();
+ break;
+
+ case "OPML":
+ $this->_feed = new OPMLCreator();
+ break;
+
+ case "ATOM0.3":
+ $this->_feed = new AtomCreator03();
+ break;
+
+ default:
+ $this->_feed = new RSSCreator091();
+ break;
+ }
+
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if ($key!="feed") {
+ $this->_feed->{$key} = $this->{$key};
+ }
+ }
+ }
+
+ /**
+ * Creates a syndication feed based on the items previously added.
+ *
+ * @see FeedCreator::addItem()
+ * @param string format format the feed should comply to. Valid values are:
+ * "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML".
+ * @return string the contents of the feed.
+ */
+ function createFeed($format = "RSS0.91") {
+ $this->_setFormat($format);
+ return $this->_feed->createFeed();
+ }
+
+
+
+ /**
+ * Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect
+ * header may be sent to redirect the use to the newly created file.
+ * @since 1.4
+ *
+ * @param string format format the feed should comply to. Valid values are:
+ * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
+ * @param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response.
+ */
+ function saveFeed($format="RSS0.91", $filename="", $displayContents=true) {
+ $this->_setFormat($format);
+ $this->_feed->saveFeed($filename, $displayContents);
+ }
+
+}
+
+
+/**
+* FeedCreator is the abstract base implementation for concrete
+* implementations that implement a specific format of syndication.
+*
+* @abstract
+* @author Kai Blankenhorn <[email protected]>
+* @since 1.4
+*/
+class FeedCreator {
+
+ /**
+ * Mandatory attributes of a feed.
+ */
+ var $title, $description, $link;
+
+
+ /**
+ * Optional attributes of a feed.
+ */
+ var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays;
+
+
+ /**
+ * @access private
+ */
+ var $items = Array();
+
+
+ /**
+ * This feed's MIME content type.
+ * @since 1.4
+ * @access private
+ */
+ var $contentType = "text/xml";
+
+
+ /**
+ * Any additional elements to include as an assiciated array. All $key => $value pairs
+ * will be included unencoded in the feed in the form
+ * <$key>$value</$key>
+ * Again: No encoding will be used! This means you can invalidate or enhance the feed
+ * if $value contains markup. This may be abused to embed tags not implemented by
+ * the FeedCreator class used.
+ */
+ var $additionalElements = Array();
+
+
+ /**
+ * Adds an FeedItem to the feed.
+ *
+ * @param object FeedItem $item The FeedItem to add to the feed.
+ * @access public
+ */
+ function addItem($item) {
+ $this->items[] = $item;
+ }
+
+
+ /**
+ * Truncates a string to a certain length at the most sensible point.
+ * First, if there's a '.' character near the end of the string, the string is truncated after this character.
+ * If there is no '.', the string is truncated after the last ' ' character.
+ * If the string is truncated, " ..." is appended.
+ * If the string is already shorter than $length, it is returned unchanged.
+ *
+ * @static
+ * @param string string A string to be truncated.
+ * @param int length the maximum length the string should be truncated to
+ * @return string the truncated string
+ */
+ function iTrunc($string, $length) {
+ if (strlen($string)<=$length) {
+ return $string;
+ }
+
+ $pos = strrpos($string,".");
+ if ($pos>=$length-4) {
+ $string = substr($string,0,$length-4);
+ $pos = strrpos($string,".");
+ }
+ if ($pos>=$length*0.4) {
+ return substr($string,0,$pos+1)." ...";
+ }
+
+ $pos = strrpos($string," ");
+ if ($pos>=$length-4) {
+ $string = substr($string,0,$length-4);
+ $pos = strrpos($string," ");
+ }
+ if ($pos>=$length*0.4) {
+ return substr($string,0,$pos)." ...";
+ }
+
+ return substr($string,0,$length-4)." ...";
+
+ }
+
+
+ /**
+ * Creates a comment indicating the generator of this feed.
+ * The format of this comment seems to be recognized by
+ * Syndic8.com.
+ */
+ function _createGeneratorComment() {
+ return "<!-- generator=\"".FEEDCREATOR_VERSION."\" -->\n";
+ }
+
+
+ /**
+ * Creates a string containing all additional elements specified in
+ * $additionalElements.
+ * @param elements array an associative array containing key => value pairs
+ * @param indentString string a string that will be inserted before every generated line
+ * @return string the XML tags corresponding to $additionalElements
+ */
+ function _createAdditionalElements($elements, $indentString="") {
+ $ae = "";
+ if (is_array($elements)) {
+ foreach($elements AS $key => $value) {
+ $ae.= $indentString."<$key>$value</$key>\n";
+ }
+ }
+ return $ae;
+ }
+
+
+ /**
+ * Builds the feed's text.
+ * @abstract
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ }
+
+ /**
+ * Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml.
+ * For example:
+ *
+ * echo $_SERVER["PHP_SELF"]."\n";
+ * echo FeedCreator::_generateFilename();
+ *
+ * would produce:
+ *
+ * /rss/latestnews.php
+ * latestnews.xml
+ *
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml";
+ }
+
+
+ /**
+ * @since 1.4
+ * @access private
+ */
+ function _redirect($filename) {
+ // attention, heavily-commented-out-area
+
+ // maybe use this in addition to file time checking
+ //Header("Expires: ".date("r",time()+$this->_timeout));
+
+ /* no caching at all, doesn't seem to work as good:
+ Header("Cache-Control: no-cache");
+ Header("Pragma: no-cache");
+ */
+
+ // HTTP redirect, some feed readers' simple HTTP implementations don't follow it
+ //Header("Location: ".$filename);
+
+ Header("Content-Type: ".$this->contentType."; filename=".basename($filename));
+ Header("Content-Disposition: inline; filename=".basename($filename));
+ readfile($filename, "r");
+ die();
+ }
+
+ /**
+ * Turns on caching and checks if there is a recent version of this feed in the cache.
+ * If there is, an HTTP redirect header is sent.
+ * To effectively use caching, you should create the FeedCreator object and call this method
+ * before anything else, especially before you do the time consuming task to build the feed
+ * (web fetching, for example).
+ * @since 1.4
+ * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
+ */
+ function useCached($filename="", $timeout=3600) {
+ $this->_timeout = $timeout;
+ if ($filename=="") {
+ $filename = $this->_generateFilename();
+ }
+ if (file_exists($filename) AND (time()-filemtime($filename) < $timeout)) {
+ $this->_redirect($filename);
+ }
+ }
+
+
+ /**
+ * Saves this feed as a file on the local disk. After the file is saved, a redirect
+ * header may be sent to redirect the user to the newly created file.
+ * @since 1.4
+ *
+ * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param redirect boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file.
+ */
+ function saveFeed($filename="", $displayContents=true) {
+ if ($filename=="") {
+ $filename = $this->_generateFilename();
+ }
+ $feedFile = fopen($filename, "w+");
+ if ($feedFile) {
+ fputs($feedFile,$this->createFeed());
+ fclose($feedFile);
+ if ($displayContents) {
+ $this->_redirect($filename);
+ }
+ } else {
+ echo "<br /><b>Error creating feed file, please check write permissions.</b><br />";
+ }
+ }
+}
+
+
+/**
+* FeedDate is an internal class that stores a date for a feed or feed item.
+* Usually, you won't need to use this.
+*/
+class FeedDate {
+ var $unix;
+
+ /**
+ * Creates a new instance of FeedDate representing a given date.
+ * Accepts RFC 822, ISO 8601 date formats as well as unix time stamps.
+ * @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used.
+ */
+ function FeedDate($dateString="") {
+ if ($dateString=="") $dateString = date("r");
+
+ if (is_integer($dateString)) {
+ $this->unix = $dateString;
+ return;
+ }
+ if (preg_match("~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s+)?(\\d{1,2})\\s+([a-zA-Z]{3})\\s+(\\d{4})\\s+(\\d{2}):(\\d{2}):(\\d{2})\\s+(.*)~",$dateString,$matches)) {
+ $months = Array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);
+ $this->unix = mktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]);
+ if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {
+ $tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
+ } else {
+ if (strlen($matches[7])==1) {
+ $oneHour = 3600;
+ $ord = ord($matches[7]);
+ if ($ord < ord("M")) {
+ $tzOffset = (ord("A") - $ord - 1) * $oneHour;
+ } elseif ($ord >= ord("M") AND $matches[7]!="Z") {
+ $tzOffset = ($ord - ord("M")) * $oneHour;
+ } elseif ($matches[7]=="Z") {
+ $tzOffset = 0;
+ }
+ }
+ switch ($matches[7]) {
+ case "UT":
+ case "GMT": $tzOffset = 0;
+ }
+ }
+ $this->unix += $tzOffset;
+ return;
+ }
+ if (preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(.*)~",$dateString,$matches)) {
+ $this->unix = mktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]);
+ if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {
+ $tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
+ } else {
+ if ($matches[7]=="Z") {
+ $tzOffset = 0;
+ }
+ }
+ $this->unix += $tzOffset;
+ return;
+ }
+ $this->unix = 0;
+ }
+
+ /**
+ * Gets the date stored in this FeedDate as an RFC 822 date.
+ *
+ * @return a date in RFC 822 format
+ */
+ function rfc822() {
+ //return gmdate("r",$this->unix);
+ $date = gmdate("D, d M Y H:i:s", $this->unix);
+ if (TIME_ZONE!="") $date .= " ".str_replace(":","",TIME_ZONE);
+ return $date;
+ }
+
+ /**
+ * Gets the date stored in this FeedDate as an ISO 8601 date.
+ *
+ * @return a date in ISO 8601 format
+ */
+ function iso8601() {
+ $date = gmdate("Y-m-d\TH:i:sO",$this->unix);
+ $date = substr($date,0,22) . ':' . substr($date,-2);
+ if (TIME_ZONE!="") $date = str_replace("+00:00",TIME_ZONE,$date);
+ return $date;
+ }
+
+ /**
+ * Gets the date stored in this FeedDate as unix time stamp.
+ *
+ * @return a date as a unix time stamp
+ */
+ function unix() {
+ return $this->unix;
+ }
+}
+
+
+/**
+* RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0.
+*
+* @see http://www.purl.org/rss/1.0/
+* @since 1.3
+* @author Kai Blankenhorn <[email protected]>
+*/
+class RSSCreator10 extends FeedCreator {
+
+ /**
+ * Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
+ * The feed will contain all items previously added in the same order.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ global $config;
+ $feed = "<?xml version=\"1.0\" encoding=\"".$config->outputEnc."\"?>\n";
+ $feed.= "<?xml-stylesheet href=\"http://www.w3.org/2000/08/w3c-synd/style.css\" type=\"text/css\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= "<rdf:RDF\n";
+ $feed.= " xmlns=\"http://purl.org/rss/1.0/\"\n";
+ $feed.= " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
+ $feed.= " xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
+ $feed.= " <channel rdf:about=\"".htmlspecialchars($this->syndicationURL)."\">\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ $feed.= " <description>".htmlspecialchars($this->description)."</description>\n";
+ $feed.= " <link>".htmlspecialchars($this->link)."</link>\n";
+ if ($this->image!=null) {
+ $feed.= " <image rdf:resource=\"".$this->image->url."\" />\n";
+ }
+ $now = new FeedDate();
+ $feed.= " <dc:date>".htmlspecialchars($now->iso8601())."</dc:date>\n";
+ $feed.= " <items>\n";
+ $feed.= " <rdf:Seq>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <rdf:li rdf:resource=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ }
+ $feed.= " </rdf:Seq>\n";
+ $feed.= " </items>\n";
+ $feed.= " </channel>\n";
+ if ($this->image!=null) {
+ $feed.= " <image rdf:about=\"".$this->image->url."\">\n";
+ $feed.= " <title>".$this->image->title."</title>\n";
+ $feed.= " <link>".$this->image->link."</link>\n";
+ $feed.= " <url>".$this->image->url."</url>\n";
+ $feed.= " </image>\n";
+ }
+ //$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <item rdf:about=\"".htmlspecialchars($this->items[$i]->link)."\">\n";
+ //$feed.= " <dc:type>Posting</dc:type>\n";
+ $feed.= " <dc:format>text/html</dc:format>\n";
+ if ($this->items[$i]->date!=null) {
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <dc:date>".htmlspecialchars($itemDate->iso8601())."</dc:date>\n";
+ }
+ if ($this->items[$i]->source!="") {
+ $feed.= " <dc:source>".htmlspecialchars($this->items[$i]->source)."</dc:source>\n";
+ }
+ if ($this->items[$i]->author!="") {
+ $feed.= " <dc:creator>".htmlspecialchars($this->items[$i]->author)."</dc:creator>\n";
+ }
+ $feed.= " <title>".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")))."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n";
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ $feed.= " </item>\n";
+ }
+ $feed.= "</rdf:RDF>\n";
+ return $feed;
+ }
+}
+
+
+
+/**
+* RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3.
+*
+* @see http://my.netscape.com/publish/formats/rss-spec-0.91.html
+* @since 1.3
+* @author Kai Blankenhorn <[email protected]>
+*/
+class RSSCreator091 extends FeedCreator {
+
+ /**
+ * Stores this RSS feed's version number.
+ * @access private
+ */
+ var $RSSVersion;
+
+ function RSSCreator091() {
+ $this->_setRSSVersion("0.91");
+ $this->contentType = "application/rss+xml";
+ }
+
+ /**
+ * Sets this RSS feed's version number.
+ * @access private
+ */
+ function _setRSSVersion($version) {
+ $this->RSSVersion = $version;
+ }
+
+ /**
+ * Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
+ * The feed will contain all items previously added in the same order.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ global $config;
+ $feed = "<?xml version=\"1.0\" encoding=\"".$config->outputEnc."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= "<rss version=\"".$this->RSSVersion."\">\n";
+ $feed.= " <channel>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
+ $feed.= " <description>".FeedCreator::iTrunc(htmlspecialchars($this->description),500)."</description>\n";
+ $feed.= " <link>".htmlspecialchars($this->link)."</link>\n";
+ $now = new FeedDate();
+ $feed.= " <lastBuildDate>".htmlspecialchars($now->rfc822())."</lastBuildDate>\n";
+ $feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
+
+ if ($this->image!=null) {
+ $feed.= " <image>\n";
+ $feed.= " <url>".$this->image->url."</url>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->image->title),100)."</title>\n";
+ $feed.= " <link>".$this->image->link."</link>\n";
+ if ($this->image->width!="") {
+ $feed.= " <width>".$this->image->width."</width>\n";
+ }
+ if ($this->image->height!="") {
+ $feed.= " <height>".$this->image->height."</height>\n";
+ }
+ if ($this->image->description!="") {
+ $feed.= " <description>".htmlspecialchars($this->image->description)."</description>\n";
+ }
+ $feed.= " </image>\n";
+ }
+ if ($this->language!="") {
+ $feed.= " <language>".$this->language."</language>\n";
+ }
+ if ($this->copyright!="") {
+ $feed.= " <copyright>".FeedCreator::iTrunc(htmlspecialchars($this->copyright),100)."</copyright>\n";
+ }
+ if ($this->editor!="") {
+ $feed.= " <managingEditor>".FeedCreator::iTrunc(htmlspecialchars($this->editor),100)."</managingEditor>\n";
+ }
+ if ($this->webmaster!="") {
+ $feed.= " <webMaster>".FeedCreator::iTrunc(htmlspecialchars($this->webmaster),100)."</webMaster>\n";
+ }
+ if ($this->pubDate!="") {
+ $pubDate = new FeedDate($this->pubDate);
+ $feed.= " <pubDate>".htmlspecialchars($pubDate->rfc822())."</pubDate>\n";
+ }
+ if ($this->category!="") {
+ $feed.= " <category>".htmlspecialchars($this->category)."</category>\n";
+ }
+ if ($this->docs!="") {
+ $feed.= " <docs>".FeedCreator::iTrunc(htmlspecialchars($this->docs),500)."</docs>\n";
+ }
+ if ($this->ttl!="") {
+ $feed.= " <ttl>".htmlspecialchars($this->ttl)."</ttl>\n";
+ }
+ if ($this->rating!="") {
+ $feed.= " <rating>".FeedCreator::iTrunc(htmlspecialchars($this->rating),500)."</rating>\n";
+ }
+ if ($this->skipHours!="") {
+ $feed.= " <skipHours>".htmlspecialchars($this->skipHours)."</skipHours>\n";
+ }
+ if ($this->skipDays!="") {
+ $feed.= " <skipDays>".htmlspecialchars($this->skipDays)."</skipDays>\n";
+ }
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <item>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n";
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>".htmlspecialchars($this->items[$i]->author)."</author>\n";
+ }
+ /*
+ // on hold
+ if ($this->items[$i]->source!="") {
+ $feed.= " <source>".htmlspecialchars($this->items[$i]->source)."</source>\n";
+ }
+ */
+ if ($this->items[$i]->category!="") {
+ $feed.= " <category>".htmlspecialchars($this->items[$i]->category)."</category>\n";
+ }
+ if ($this->items[$i]->comments!="") {
+ $feed.= " <comments>".$this->items[$i]->comments."</comments>\n";
+ }
+ if ($this->items[$i]->date!="") {
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <pubDate>".htmlspecialchars($itemDate->rfc822())."</pubDate>\n";
+ }
+ if ($this->items[$i]->guid!="") {
+ $feed.= " <guid>".$this->items[$i]->guid."</guid>\n";
+ }
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ $feed.= " </item>\n";
+ }
+ $feed.= " </channel>\n";
+ $feed.= "</rss>\n";
+ return $feed;
+ }
+}
+
+
+
+/**
+* RSSCreator20 is a FeedCreator that implements RDF Site Summary (RSS) 2.0.
+*
+* @see http://backend.userland.com/rss
+* @since 1.3
+* @author Kai Blankenhorn <[email protected]>
+*/
+class RSSCreator20 extends RSSCreator091 {
+
+ function RSSCreator20() {
+ parent::_setRSSVersion("2.0");
+ }
+
+}
+
+
+/**
+* PIECreator01 is a FeedCreator that implements the emerging PIE specification,
+* as in http://intertwingly.net/wiki/pie/Syntax.
+*
+* @deprecated
+* @since 1.3
+* @author Scott Reynen <[email protected]> and Kai Blankenhorn <[email protected]>
+*/
+class PIECreator01 extends FeedCreator {
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+ $feed.= "<feed version=\"0.1\" xmlns=\"http://example.com/newformat#\">\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
+ $feed.= " <subtitle>".FeedCreator::iTrunc(htmlspecialchars($this->description),500)."</subtitle>\n";
+ $feed.= " <link>".$this->link."</link>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <entry>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
+ $feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
+ $feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
+ $feed.= " <id>".$this->items[$i]->guid."</id>\n";
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
+ if ($this->items[$i]->authorEmail!="") {
+ $feed.= " <email>".$this->items[$i]->authorEmail."</email>\n";
+ }
+ $feed.=" </author>\n";
+ }
+ $feed.= " <content type=\"text/html\" xml:lang=\"en-us\">\n";
+ $feed.= " <div xmlns=\"http://www.w3.org/1999/xhtml\">".$this->items[$i]->description."</div>\n";
+ $feed.= " </content>\n";
+ $feed.= " </entry>\n";
+ }
+ $feed.= "</feed>\n";
+ return $feed;
+ }
+}
+
+
+/**
+* AtomCreator03 is a FeedCreator that implements the atom specification,
+* as in http://www.intertwingly.net/wiki/pie/FrontPage.
+* Please note that just by using AtomCreator03 you won't automatically
+* produce valid atom files. For example, you have to specify either an editor
+* for the feed or an author for every single feed item.
+*
+* Some elements have not been implemented yet. These are (incomplete list):
+* author URL, item author's email and URL, item contents, alternate links,
+* other link content types than text/html. Some of them may be created with
+* AtomCreator03::additionalElements.
+*
+* @see FeedCreator#additionalElements
+* @since 1.6
+* @author Kai Blankenhorn <[email protected]>, Scott Reynen <[email protected]>
+*/
+class AtomCreator03 extends FeedCreator {
+
+ function AtomCreator03() {
+ $this->contentType = "application/atom+xml";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= "<feed version=\"0.3\" xmlns=\"http://purl.org/atom/ns#\"";
+ if ($this->language!="") {
+ $feed.= " xml:lang:\"".$this->language."\"";
+ }
+ $feed.= ">\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ $feed.= " <tagline>".htmlspecialchars($this->description)."</tagline>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->link)."\"/>\n";
+ $feed.= " <id>".$this->link."</id>\n";
+ $now = new FeedDate();
+ $feed.= " <modified>".htmlspecialchars($now->iso8601())."</modified>\n";
+ if ($this->editor!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".$this->editor."</name>\n";
+ if ($this->editorEmail!="") {
+ $feed.= " <email>".$this->editorEmail."</email>\n";
+ }
+ $feed.= " </author>\n";
+ }
+ $feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <entry>\n";
+ $feed.= " <title>".htmlspecialchars(strip_tags($this->items[$i]->title))."</title>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ if ($this->items[$i]->date=="") {
+ $this->items[$i]->date = time();
+ }
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
+ $feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
+ $feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
+ $feed.= " <id>".$this->items[$i]->link."</id>\n";
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
+ $feed.= " </author>\n";
+ }
+ if ($this->items[$i]->description!="") {
+ $feed.= " <summary>".htmlspecialchars($this->items[$i]->description)."</summary>\n";
+ }
+ $feed.= " </entry>\n";
+ }
+ $feed.= "</feed>\n";
+ return $feed;
+ }
+}
+
+
+/**
+* MBOXCreator is a FeedCreator that implements the mbox format
+* as described in http://www.qmail.org/man/man5/mbox.html
+*
+* @since 1.3
+* @author Kai Blankenhorn <[email protected]>
+*/
+class MBOXCreator extends FeedCreator {
+
+ function MBOXCreator() {
+ $this->contentType = "text/plain";
+ }
+
+ function qp_enc($input = "", $line_max = 76) {
+ $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
+ $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
+ $eol = "\r\n";
+ $escape = "=";
+ $output = "";
+ while( list(, $line) = each($lines) ) {
+ //$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary
+ $linlen = strlen($line);
+ $newline = "";
+ for($i = 0; $i < $linlen; $i++) {
+ $c = substr($line, $i, 1);
+ $dec = ord($c);
+ if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only
+ $c = "=20";
+ } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required
+ $h2 = floor($dec/16); $h1 = floor($dec%16);
+ $c = $escape.$hex["$h2"].$hex["$h1"];
+ }
+ if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
+ $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay
+ $newline = "";
+ }
+ $newline .= $c;
+ } // end of for
+ $output .= $newline.$eol;
+ }
+ return trim($output);
+ }
+
+
+ /**
+ * Builds the MBOX contents.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ global $config;
+ for ($i=0;$i<count($this->items);$i++) {
+ if ($this->items[$i]->author!="") {
+ $from = $this->items[$i]->author;
+ } else {
+ $from = $this->title;
+ }
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= "From ".strtr(MBOXCreator::qp_enc($from)," ","_")." ".date("D M d H:i:s Y",$itemDate->unix())."\n";
+ $feed.= "Content-Type: text/plain;\n";
+ $feed.= " charset=\"".$config->outputEnc."\"\n";
+ $feed.= "Content-Transfer-Encoding: quoted-printable\n";
+ $feed.= "Content-Type: text/plain\n";
+ $feed.= "From: \"".MBOXCreator::qp_enc($from)."\"\n";
+ $feed.= "Date: ".$itemDate->rfc822()."\n";
+ $feed.= "Subject: ".MBOXCreator::qp_enc(FeedCreator::iTrunc($this->items[$i]->title,100))."\n";
+ $feed.= "\n";
+ $body = chunk_split(MBOXCreator::qp_enc($this->items[$i]->description));
+ $feed.= preg_replace("~\nFrom ([^\n]*)(\n?)~","\n>From $1$2\n",$body);
+ $feed.= "\n";
+ $feed.= "\n";
+ }
+ return $feed;
+ }
+
+ /**
+ * Generate a filename for the feed cache file. Overridden from FeedCreator to prevent XML data types.
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".mbox";
+ }
+}
+
+
+/**
+* OPMLCreator is a FeedCreator that implements OPML 1.0.
+*
+* @see http://opml.scripting.com/spec
+* @author Dirk Clemens, Kai Blankenhorn
+* @since 1.5
+*/
+class OPMLCreator extends FeedCreator {
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= "<opml xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n";
+ $feed.= " <head>\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ if ($this->pubDate!="") {
+ $date = new FeedDate($this->pubDate);
+ $feed.= " <dateCreated>".$date->rfc822()."</dateCreated>\n";
+ }
+ if ($this->lastBuildDate!="") {
+ $date = new FeedDate($this->lastBuildDate);
+ $feed.= " <dateModified>".$date->rfc822()."</dateModified>\n";
+ }
+ if ($this->editor!="") {
+ $feed.= " <ownerName>".$this->editor."</ownerName>\n";
+ }
+ if ($this->editorEmail!="") {
+ $feed.= " <ownerEmail>".$this->editorEmail."</ownerEmail>\n";
+ }
+ $feed.= " </head>\n";
+ $feed.= " <body>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <outline type=\"rss\" ";
+ $title = htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")));
+ $feed.= " title=\"".$title."\"";
+ $feed.= " text=\"".$title."\"";
+ //$feed.= " description=\"".htmlspecialchars($this->items[$i]->description)."\"";
+ $feed.= " url=\"".htmlspecialchars($this->items[$i]->link)."\"";
+ $feed.= "/>\n";
+ }
+ $feed.= " </body>\n";
+ $feed.= "</opml>\n";
+ return $feed;
+ }
+}
+
+?>
Added: trunk/svn.matroska.org/WebSVN/include/setup.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/setup.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/setup.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,339 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// setup.inc
+//
+// Global setup
+
+// --- DON'T CHANGE THIS FILE ---
+//
+// User changes should be done in config.ini
+
+// Include the configuration class
+require("include/configclass.inc");
+
+// Define the language array
+$lang = array();
+
+// Include a default language file.
+require("languages/english.inc");
+
+// Set up svnlocwebsvn
+if (empty($locwebsvnhttp))
+ $locwebsvnhttp = ".";
+
+if (empty($locwebsvnreal))
+ $locwebsvnreal = ".";
+
+$vars["locwebsvnhttp"] = $locwebsvnhttp;
+
+// Make sure that the input locale is set up correctly
+setlocale(LC_ALL, "");
+
+// Create the config
+$config = new Config;
+
+// Set up the default character encodings
+if (function_exists("iconv_get_encoding"))
+{
+ $config->setInputEncoding(iconv_get_encoding("input_encoding"));
+ $config->setOutputEncoding(iconv_get_encoding("input_encoding"));
+}
+
+// Set up the default content-type extension handling
+
+$contentType = array (
+
+".dwg" => "application/acad", // AutoCAD Drawing files
+".DWG" => "application/acad", // AutoCAD Drawing files
+".arj" => "application/arj", //
+".ccAD" => "application/clariscad", // ClarisCAD files
+".DRW" => "application/drafting", // MATRA Prelude drafting
+".dxf" => "application/dxf", // DXF (AutoCAD)
+".DXF" => "application/dxf", // DXF (AutoCAD)
+".xl" => "application/excel", // Microsoft Excel
+".unv" => "application/i-deas", //SDRC I-DEAS files
+".UNV" => "application/i-deas", //SDRC I-DEAS files
+".igs" => "application/iges", // IGES graphics format
+".iges" => "application/iges", // IGES graphics format
+".IGS" => "application/iges", // IGES graphics format
+".IGES" => "application/iges", // IGES graphics format
+".hqx" => "application/mac-binhex40", // Macintosh BinHex format
+".word" => "application/msword", // Microsoft Word
+".w6w" => "application/msword", // Microsoft Word
+".doc" => "application/msword", // Microsoft Word
+".wri" => "application/mswrite", // Microsoft Write
+".bin" => "application/octet-stream", // Uninterpreted binary
+".exe" => "application/x-msdownload", // Windows EXE
+".EXE" => "application/x-msdownload", // Windows EXE
+".oda" => "application/oda", //
+".pdf" => "application/pdf", // PDF (Adobe Acrobat)
+".ai" => "application/postscript", // PostScript
+".PS" => "application/postscript", // PostScript
+".ps" => "application/postscript", // PostScript
+".eps" => "application/postscript", // PostScript
+".prt" => "application/pro_eng", // PTC Pro/ENGINEER
+".PRT" => "application/pro_eng", // PTC Pro/ENGINEER
+".part" => "application/pro_eng", // PTC Pro/ENGINEER
+".rtf" => "application/rtf", // Rich Text Format
+".set" => "application/set", // SET (French CAD standard)
+".SET" => "application/set", // SET (French CAD standard)
+".stl" => "application/sla", // Stereolithography
+".STL" => "application/sla", // Stereolithography
+".SOL" => "application/solids", // MATRA Prelude Solids
+".stp" => "application/STEP", // ISO-10303 STEP data files
+".STP" => "application/STEP", // ISO-10303 STEP data files
+".step" => "application/STEP", // ISO-10303 STEP data files
+".STEP" => "application/STEP", // ISO-10303 STEP data files
+".vda" => "application/vda", // VDA-FS Surface data
+".VDA" => "application/vda", // VDA-FS Surface data
+".dir" => "application/x-director", // Macromedia Director
+".dcr" => "application/x-director", // Macromedia Director
+".dxr" => "application/x-director", // Macromedia Director
+".mif" => "application/x-mif", // FrameMaker MIF Format
+".csh" => "application/x-csh", // C-shell script
+".dvi" => "application/x-dvi", // TeX DVI
+".gz" => "application/x-gzip", // GNU Zip
+".gzip" => "application/x-gzip", // GNU Zip
+".hdf" => "application/x-hdf", // ncSA HDF Data File
+".latex" => "application/x-latex", // LaTeX source
+".nc" => "application/x-netcdf", // Unidata netCDF
+".cdf" => "application/x-netcdf", // Unidata netCDF
+".sh" => "application/x-sh", // Bourne shell script
+".sit" => "application/x-stuffit", // Stiffut Archive
+".tcl" => "application/x-tcl", // TCL script
+".tex" => "application/x-tex", // TeX source
+".texinfo" => "application/x-texinfo", // Texinfo (Emacs)
+".texi" => "application/x-texinfo", // Texinfo (Emacs)
+".t" => "application/x-troff", // Troff
+".tr" => "application/x-troff", // Troff
+".roff" => "application/x-troff", // Troff
+".man" => "application/x-troff-man", // Troff with MAN macros
+".me" => "application/x-troff-me", // Troff with ME macros
+".ms" => "application/x-troff-ms", // Troff with MS macros
+".src" => "application/x-wais-source", // WAIS source
+".bcpio" => "application/x-bcpio", // Old binary CPIO
+".cpio" => "application/x-cpio", // POSIX CPIO
+".gtar" => "application/x-gtar", // GNU tar
+".shar" => "application/x-shar", // Shell archive
+".sv4cpio" => "application/x-sv4cpio", // SVR4 CPIO
+".sv4crc" => "application/x-sv4crc", // SVR4 CPIO with CRC
+".tar" => "application/x-tar", // 4.3BSD tar format
+".ustar" => "application/x-ustar", // POSIX tar format
+".hlp" => "application/x-winhelp", // Windows Help
+".zip" => "application/zip", // ZIP archive
+".au" => "audio/basic", // Basic audio (usually m-law)
+".snd" => "audio/basic", // Basic audio (usually m-law)
+".aif" => "audio/x-aiff", // AIFF audio
+".aiff" => "audio/x-aiff", // AIFF audio
+".aifc" => "audio/x-aiff", // AIFF audio
+".ra" => "audio/x-pn-realaudio", // RealAudio
+".ram" => "audio/x-pn-realaudio", // RealAudio
+".rpm" => "audio/x-pn-realaudio-plugin", // RealAudio (plug-in)
+".wav" => "audio/x-wav", // Windows WAVE audio
+".mp3" => "audio/x-mp3", // MP3 files
+".gif" => "image/gif", // gif image
+".ief" => "image/ief", // Image Exchange Format
+".jpg" => "image/jpeg", // JPEG image
+".JPG" => "image/jpeg", // JPEG image
+".JPE" => "image/jpeg", // JPEG image
+".jpe" => "image/jpeg", // JPEG image
+".JPEG" => "image/jpeg", // JPEG image
+".jpeg" => "image/jpeg", // JPEG image
+".pict" => "image/pict", // Macintosh PICT
+".tiff" => "image/tiff", // TIFF image
+".tif" => "image/tiff", // TIFF image
+".ras" => "image/x-cmu-raster", // CMU raster
+".pnm" => "image/x-portable-anymap", // PBM Anymap format
+".pbm" => "image/x-portable-bitmap", // PBM Bitmap format
+".pgm" => "image/x-portable-graymap", // PBM Graymap format
+".ppm" => "image/x-portable-pixmap", // PBM Pixmap format
+".rgb" => "image/x-rgb", // RGB Image
+".xbm" => "image/x-xbitmap", // X Bitmap
+".xpm" => "image/x-xpixmap", // X Pixmap
+".xwd" => "image/x-xwindowdump", // X Windows dump (xwd) format
+".zip" => "multipart/x-zip", // PKZIP Archive
+".gzip" => "multipart/x-gzip", // GNU ZIP Archive
+".mpeg" => "video/mpeg", // MPEG video
+".mpg" => "video/mpeg", // MPEG video
+".MPG" => "video/mpeg", // MPEG video
+".MPE" => "video/mpeg", // MPEG video
+".mpe" => "video/mpeg", // MPEG video
+".MPEG" => "video/mpeg", // MPEG video
+".mpeg" => "video/mpeg", // MPEG video
+".qt" => "video/quicktime", // QuickTime Video
+".mov" => "video/quicktime", // QuickTime Video
+".avi" => "video/msvideo", // Microsoft Windows Video
+".movie" => "video/x-sgi-movie", // SGI Movieplayer format
+".wrl" => "x-world/x-vrml" // VRML Worlds
+
+);
+
+// List of extensions recognised by enscript.
+
+$extEnscript = array
+(
+ ".ada" => "ada",
+ ".adb" => "ada",
+ ".ads" => "ada",
+ ".awk" => "awk",
+ ".c" => "c",
+ ".c++" => "cpp",
+ ".cc" => "cpp",
+ ".cpp" => "cpp",
+ ".csh" => "csh",
+ ".cxx" => "cpp",
+ ".diff" => "diffu",
+ ".dpr" => "delphi",
+ ".el" => "elisp",
+ ".eps" => "postscript",
+ ".f" => "fortran",
+ ".for" => "fortran",
+ ".gs" => "haskell",
+ ".h" => "c",
+ ".hpp" => "cpp",
+ ".hs" => "haskell",
+ ".htm" => "html",
+ ".html" => "html",
+ ".idl" => "idl",
+ ".java" => "java",
+ ".js" => "javascript",
+ ".lgs" => "haskell",
+ ".lhs" => "haskell",
+ ".m" => "objc",
+ ".m4" => "m4",
+ ".man" => "nroff",
+ ".nr" => "nroff",
+ ".p" => "pascal",
+ ".pas" => "delphi",
+ ".patch" => "diffu",
+ ".pkg" => "sql",
+ ".pl" => "perl",
+ ".pm" => "perl",
+ ".pp" => "pascal",
+ ".ps" => "postscript",
+ ".s" => "asm",
+ ".scheme" => "scheme",
+ ".scm" => "scheme",
+ ".scr" => "synopsys",
+ ".sh" => "sh",
+ ".shtml" => "html",
+ ".sql" => "sql",
+ ".st" => "states",
+ ".syn" => "synopsys",
+ ".synth" => "synopsys",
+ ".tcl" => "tcl",
+ ".tex" => "tex",
+ ".texi" => "tex",
+ ".texinfo" => "tex",
+ ".v" => "verilog",
+ ".vba" => "vba",
+ ".vh" => "verilog",
+ ".vhd" => "vhdl",
+ ".vhdl" => "vhdl",
+ ".py" => "python",
+
+ // The following are handled internally by WebSVN, since there's no
+ // support for them in Enscript
+
+ ".php" => "php",
+ ".inc" => "php"
+);
+
+// Default 'zipped' array
+
+$zipped = array ();
+
+// Get the user's personalised config
+
+require("config.inc");
+
+// Make sure that the user has set up a repository
+
+$reps = $config->getRepositories();
+if (empty($reps[0]))
+{
+ echo $lang["SUPPLYREP"];
+ exit;
+}
+
+// Override the rep parameter with the repository name if it's available
+$repname = @$_REQUEST["repname"];
+if (isset($repname))
+{
+ $rep = $config->findRepository($repname);
+}
+else
+ $rep = $reps[0];
+
+// Retrieve other standard parameters
+
+if (version_compare(phpversion(), "4.1.0", "<"))
+ $path = html_entity_decode(@$_REQUEST["path"]);
+else
+ $path = html_entity_decode(@$_REQUEST["path"], ENT_COMPAT, $config->outputEnc);
+
+$path = escapeshellcmd($path);
+$rev = (int)@$_REQUEST["rev"];
+$showchanged = (@$_REQUEST["sc"] == 1)?1:0;
+
+// Function to create the project selection HTML form
+function createProjectSelectionForm()
+{
+ global $config, $vars, $rep, $lang, $showchanged;
+
+ $url = $config->getURL(-1, "", "form");
+ $vars["projects_form"] = "<form action=\"$url\" method=\"post\" name=\"projectform\">";
+
+ $reps = $config->getRepositories();
+ $vars["projects_select"] = "<select name=\"repname\" onchange=\"javascript:this.form.submit();\">";
+
+ foreach ($reps as $trep)
+ {
+ if ($rep->name == $trep->name)
+ $sel = "selected";
+ else
+ $sel = "";
+
+ $vars["projects_select"] .= "<option value=\"".$trep->name."\" $sel>".$trep->name."</option>";
+ }
+
+ $vars["projects_select"] .= "</select>";
+
+ $vars["projects_submit"] = "<input type=\"submit\" value=\"${lang["GO"]}\">";
+ $vars["projects_endform"] = "<input type=\"hidden\" name=\"selectproj\" value=\"1\"><input type=\"hidden\" name=\"op\" value=\"form\"><input type=\"hidden\" name=\"sc\" value=\"$showchanged\"></form>";
+}
+
+// Create the form if we're not in MultiViews. Otherwise wsvn must create the form once the current project has
+// been found
+
+if (!$config->multiViews)
+{
+ createProjectSelectionForm();
+}
+
+if ($rep)
+{
+ $vars["allowdownload"] = $rep->getAllowDownload();
+ $vars["repname"] = $rep->name;
+}
+
+?>
Added: trunk/svn.matroska.org/WebSVN/include/svnlook.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/svnlook.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/svnlook.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,594 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// svn-look.inc
+//
+// Svn bindings
+//
+// These binding currently use svnlook to achieve their goal. Once a proper SWIG binding has been
+// produces, there'll be an option to use those instead
+
+require_once("include/utils.inc");
+
+// Function returns true if the give entry in a directory tree is at the top level
+
+function _topLevel($entry)
+{
+ // To be at top level, there must be one space before the entry
+ return (strlen($entry) > 1 && $entry{0} == " " && $entry{1} != " ");
+}
+
+// Function to sort two given directory entries. Directories go at the top
+
+function _dirSort($e1, $e2)
+{
+ $isDir1 = $e1{strlen($e1) - 1} == "/";
+ $isDir2 = $e2{strlen($e2) - 1} == "/";
+
+ if ($isDir1 && !$isDir2) return -1;
+ if ($isDir2 && !$isDir1) return 1;
+
+ return strnatcasecmp($e1, $e2);
+}
+
+// Return the revision string to pass to a command
+
+function _revStr($rev)
+{
+ if ($rev > 0)
+ return "-r $rev";
+ else
+ return "";
+}
+
+// Function to encode a URL without encoding the /'s
+
+function encodepath($uri)
+{
+ $parts = explode('/', $uri);
+ for ($i = 0; $i < count($parts); $i++)
+ {
+ if ( function_exists("mb_detect_encoding") && function_exists("mb_convert_encoding"))
+ {
+ $parts[$i] = mb_convert_encoding($parts[$i], "UTF-8", mb_detect_encoding($parts[$i]));
+ }
+
+ $parts[$i] = rawurlencode($parts[$i]);
+ }
+
+ $uri = implode('/', $parts);
+
+ // Quick hack. Subversion seems to have a bug surrounding the use of %3A instead of :
+
+ $uri = str_replace("%3A" ,":", $uri);
+
+ return $uri;
+}
+
+// The SVNRepository Class
+
+Class SVNRepository
+{
+ var $repPath;
+
+ function SVNRepository($repPath)
+ {
+ $this->repPath = $repPath;
+ }
+
+ function dirContents($path, $rev = 0)
+ {
+ global $config, $locwebsvnreal;
+
+ $revstr = _revStr($rev);
+
+ $tree = array();
+
+ // Try to find a cached version of this revision of the repository
+
+ if ($rev == 0)
+ {
+ $head = runCommand($config->svnlook." youngest ".quote($this->repPath));
+ settype($head[0], "integer");
+ $rev = $head[0];
+ }
+
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $output = runCommand($config->svn." list $revstr ".quote("file:///".$path), true);
+
+ foreach ($output as $entry)
+ {
+ if ($entry != "")
+ $tree[] = $entry;
+ }
+
+ // Sort the entries into alphabetical order with the directories at the top of the list
+ usort($tree, "_dirSort");
+
+ return $tree;
+ }
+
+ function getLogDetails($path, $rev = 0)
+ {
+ global $config, $lang, $locwebsvnreal;
+
+ if ($rev == 0)
+ {
+ $head = runCommand($config->svnlook." youngest ".quote($this->repPath));
+ settype($head[0], "integer");
+ $rev = $head[0];
+ }
+
+ $revstr = _revStr($rev);
+ $path = quote($path);
+
+ // Try to find a cached version of this revision of the repository
+
+ $cachedname = strtr($this->repPath, ":/\\", "___");
+ $cachedname = $locwebsvnreal.DIRECTORY_SEPARATOR."cache".DIRECTORY_SEPARATOR.$cachedname."_log_$rev";
+
+ if ($config->cacheResults && !file_exists($cachedname))
+ {
+ // Cache the directory layout
+
+ $cmd = quoteCommand($config->svnlook." info $revstr ".quote($this->repPath)." $path", false);
+
+ if (($handle = popen($cmd, "r")) !== FALSE)
+ {
+ if (($output = gzopen($cachedname, "w")) !== FALSE)
+ {
+ while (!feof($handle))
+ {
+ $line = fgets($handle);
+ gzwrite($output, $line);
+ }
+
+ gzclose($output);
+ }
+ pclose($handle);
+ }
+ }
+
+ // Get the log info
+ if ($config->cacheResults && file_exists($cachedname))
+ {
+ $output = transArray(gzfile($cachedname));
+ }
+ else
+ {
+ $output = runCommand($config->svnlook." info $revstr ".quote($this->repPath)." $path");
+ }
+
+ // Create a nice array to return
+ $log["author"] = ($output[0] ? $output[0] : " ");
+
+ $date = $output[1];
+ $log["date"] = $date;
+
+ sscanf($date, "%d-%d-%d %d:%d:%d %d", $y, $mo, $d, $h, $m, $s, $offset);
+
+ // Remove the offset to get the time in GMT
+ $h -= $offset / 100;
+
+ // Get the commit time as seconds. Note that the mktime function assumes that the time being
+ // passed to it is a local time - it will therefore subtract/add the required number of hours
+ // to make it GMT. Since we already have the time in GMT we first add the localtime offset to
+ // get the commit time in local time. The offset calculated above already handles the summer
+ // time case, so we tell mktime not to take this into account.
+
+ $lt = gettimeofday();
+ $minwest = $lt["minuteswest"];
+ $committime = mktime($h ,$m - $minwest, $s, $mo, $d, $y, 0);
+ $log["committime"] = $committime;
+
+ // Get the current time (as GMT)
+ $t = localtime(time(), 1);
+ $curtime = mktime($t["tm_hour"], $t["tm_min"], $t["tm_sec"], $t["tm_mon"] + 1, $t["tm_mday"], $t["tm_year"] + 1900, $t["tm_isdst"]);
+
+ // Get the number of seconds since the commit
+ $agesecs = $curtime - $committime;
+ if ($agesecs < 0) $agesecs = 0;
+
+ // Now create a nice human readable age based on these figures
+ $years = floor($agesecs / (60*60*24*365));
+ if ($years > 1)
+ {
+ $log["age"] = "$years ${lang["YEARS"]}";
+ }
+ else
+ {
+ $months = floor($agesecs / (60*60*24*365/12));
+ if ($months > 1)
+ {
+ $log["age"] = "$months ${lang["MONTHS"]}";
+ }
+ else
+ {
+ $weeks = floor($agesecs / (60*60*24*7));
+ if ($weeks > 1)
+ {
+ $log["age"] = "$weeks ${lang["WEEKS"]}";
+ }
+ else
+ {
+ $days = floor($agesecs / (60*60*24));
+ if ($days > 1)
+ {
+ $log["age"] = "$days ${lang["DAYS"]}";
+ }
+ else
+ {
+ $hours = floor($agesecs / (60*60));
+ if ($hours > 1)
+ {
+ $log["age"] = "$hours ${lang["HOURS"]}";
+ }
+ else
+ {
+ $minutes = floor($agesecs / 60);
+ $log["age"] = "$minutes ${lang["MINUTES"]}";
+ }
+ }
+ }
+ }
+ }
+
+ $log["message"] = $output[3];
+ $pos = 4;
+ while (isset($output[$pos]))
+ {
+ $log["message"] .= "\n".$output[$pos];
+ $pos++;
+ }
+
+ // If we're working on the head, get the head revision
+ if ($rev > 0)
+ $log["rev"] = $rev;
+ else
+ {
+ $head = runCommand($config->svnlook." youngest ".quote($this->repPath));
+ settype($head[0], "integer");
+ $log["rev"] = $head[0];
+ }
+
+ return $log;
+ }
+
+ function getChangedFiles($rev = 0)
+ {
+ global $config, $locwebsvnreal;
+
+ if ($rev == 0)
+ {
+ $head = runCommand($config->svnlook." youngest ".quote($this->repPath));
+ settype($head[0], "integer");
+ $rev = $head[0];
+ }
+
+ $revstr = _revStr($rev);
+
+ // Try to find a cached version of this revision of the repository
+
+ $cachedname = strtr($this->repPath, ":/\\", "___");
+ $cachedname = $locwebsvnreal.DIRECTORY_SEPARATOR."cache".DIRECTORY_SEPARATOR.$cachedname."_mods_$rev";
+
+ if ($config->cacheResults && !file_exists($cachedname))
+ {
+ // Cache the directory layout
+
+ $cmd = quoteCommand($config->svnlook." changed $revstr ".quote($this->repPath), false);
+
+ if (($handle = popen($cmd, "r")) !== FALSE)
+ {
+ if (($output = gzopen($cachedname, "w")) !== FALSE)
+ {
+ while (!feof($handle))
+ {
+ $line = fgets($handle);
+ gzwrite($output, $line);
+ }
+
+ gzclose($output);
+ }
+ pclose($handle);
+ }
+ }
+
+ if ($config->cacheResults && file_exists($cachedname))
+ {
+ $output = transArray(gzfile($cachedname));
+ }
+ else
+ {
+ $output = runCommand($config->svnlook." changed $revstr ".quote($this->repPath));
+ }
+
+ // Now create a nicer array from that
+ $changes = array("added" => array(), "updated" => array(), "deleted" => array());
+
+ foreach ($output as $changed)
+ {
+ if (trim($changed) != "")
+ {
+ $mod = $changed{0};
+ $name = substr($changed, 4);
+
+ switch ($mod)
+ {
+ case "A":
+ $changes["added"][] = $name;
+ break;
+
+ case "U":
+ $changes["updated"][] = $name;
+ break;
+
+ case "D":
+ $changes["deleted"][] = $name;
+ break;
+ }
+ }
+ }
+
+ // Sort each array alphabetically
+
+ natcasesort($changes["added"]);
+ natcasesort($changes["deleted"]);
+ natcasesort($changes["updated"]);
+
+ return $changes;
+ }
+
+ // getFileContents
+ //
+ // Dump the content of a file to the given filename
+
+ function getFileContents($path, $filename, $rev = 0, $pipe = "")
+ {
+ global $config, $extEnscript;
+
+ $revstr = _revStr($rev);
+
+ // If there's no filename, we'll just deliver the contents as it is to the user
+ if ($filename == "")
+ {
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ passthru($config->svn." cat $revstr ".quote("file:///".$path)." $pipe");
+ return;
+ }
+
+ // Get the file contents info
+
+ $ext = strrchr($path, ".");
+ $l = @$extEnscript[$ext];
+
+ if ($l == "php")
+ {
+ // Output the file to the filename
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $cmd = quoteCommand($config->svn." cat $revstr ".quote("file:///".$path)." > $filename", false);
+ @exec($cmd);
+
+ // Get the file as a string (memory hogging, but we have no other options)
+ $content = highlight_file($filename, true);
+
+ // Destroy the previous version, and replace it with the highlighted version
+ $f = fopen($filename, "w");
+ if ($f)
+ {
+ // The highlight file function doesn't deal with line endings very nicely at all. We'll have to do it
+ // by hand.
+
+ // Remove the first line generated by highlight()
+ $pos = strpos($content, "\n");
+ $content = substr($content, $pos+1);
+
+ $content = explode("<br />", $content);
+
+ foreach ($content as $line)
+ {
+ fputs($f, rtrim($line)."\n");
+ }
+
+ fclose($f);
+ }
+ }
+ else
+ {
+ if ($config->useEnscript)
+ {
+ // Get the files, feed it through enscript, then remove the enscript headers using sed
+ //
+ // Note that the sec command returns only the part of the file between <PRE> and </PRE>.
+ // It's complicated because it's designed not to return those lines themselves.
+
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $cmd = quoteCommand($config->svn." cat $revstr ".quote("file:///".$path)." | ".
+ $config->enscript." --language=html ".
+ ($l ? "--color --pretty-print=$l" : "")." -o - | ".
+ $config->sed." -n ".$config->quote."1,/^<PRE.$/!{/^<\\/PRE.$/,/^<PRE.$/!p;}".$config->quote." > $filename", false);
+ @exec($cmd);
+ }
+ else
+ {
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $cmd = quoteCommand($config->svn." cat $revstr ".quote("file:///".$path)." > $filename", false);
+ @exec($cmd);
+ }
+ }
+ }
+
+ // listFileContents
+ //
+ // Print the contents of a file without filling up Apache's memory
+
+ function listFileContents($path, $rev = 0)
+ {
+ global $config, $extEnscript;
+
+ $revstr = _revStr($rev);
+ $pre = false;
+
+ // Get the file contents info
+
+ $ext = strrchr($path, ".");
+ $l = @$extEnscript[$ext];
+
+ // Deal with php highlighting internally
+ if ($l == "php")
+ {
+ $tmp = tempnam("temp", "wsvn");
+
+ // Output the file to a temporary file
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $cmd = quoteCommand($config->svn." cat $revstr ".quote("file:///".$path)." > $tmp", false);
+ @exec($cmd);
+ highlight_file($tmp);
+ unlink($tmp);
+ }
+ else
+ {
+ if ($config->useEnscript)
+ {
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $cmd = quoteCommand($config->svn." cat $revstr ".quote("file:///".$path)." | ".
+ $config->enscript." --language=html ".
+ ($l ? "--color --pretty-print=$l" : "")." -o - | ".
+ $config->sed." -n ".$config->quote."/^<PRE.$/,/^<\\/PRE.$/p".$config->quote." 2>&1", false);
+
+ if (!($result = popen($cmd, "r")))
+ return;
+ }
+ else
+ {
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $cmd = quoteCommand($config->svn." cat $revstr ".quote("file:///".$path)." 2>&1", false);
+
+ if (!($result = popen($cmd, "r")))
+ return;
+
+ $pre = true;
+ }
+
+ if ($pre)
+ echo "<PRE>";
+
+ while (!feof($result))
+ {
+ $line = fgets($result, 1024);
+ if ($pre) $line = replaceEntities($line);
+
+ print hardspace($line);
+ }
+
+ if ($pre)
+ echo "</PRE>";
+
+ pclose($result);
+ }
+ }
+
+ // getBlameDetails
+ //
+ // Dump the blame content of a file to the given filename
+
+ function getBlameDetails($path, $filename, $rev = 0)
+ {
+ global $config;
+
+ $revstr = _revStr($rev);
+
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $cmd = quoteCommand($config->svn." blame $revstr ".quote("file:///".$path)." > $filename", false);
+
+ @exec($cmd);
+ }
+
+ function getProperty($path, $property, $rev = 0)
+ {
+ global $config;
+
+ $revstr = _revStr($rev);
+
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $ret = runCommand($config->svn." propget $property $revstr ".quote("file:///".$path), true);
+
+ // Remove the surplus newline
+ if (count($ret))
+ unset($ret[count($ret) - 1]);
+
+ return implode("\n", $ret);
+ }
+
+ function getHistory($path, $rev = 0)
+ {
+ global $config;
+
+ $revstr = _revStr($rev);
+ $path = quote($path);
+
+ // Get the history info
+ $output = runCommand($config->svnlook." history $revstr ".quote($this->repPath)." $path");
+
+ // Now create a nicer array from that
+ $history = array();
+
+ $line = 0;
+ foreach ($output as $record)
+ {
+ $line++;
+
+ // Skip header info
+ if ($line < 3)
+ continue;
+
+ $record = trim($record);
+ if ($record != "")
+ {
+ list($rev, $path) = split(" ", $record, 2);
+ if ($rev)
+ {
+ $path = trim($path);
+ $history[] = array("rev" => $rev, "path" => $path);
+ }
+ }
+ }
+
+ return $history;
+ }
+
+ // exportDirectory
+ //
+ // Exports the directory to the given location
+
+ function exportDirectory($path, $filename, $rev = 0)
+ {
+ global $config;
+
+ $revstr = _revStr($rev);
+
+ $path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repPath.$path));
+ $cmd = quoteCommand($config->svn." export $revstr ".quote("file:///".$path)." $filename", false);
+
+ @exec($cmd);
+ }
+}
+?>
Added: trunk/svn.matroska.org/WebSVN/include/template.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/template.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/template.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,305 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// templates.inc
+//
+// Templating system to allow advanced page customisation
+
+$ignore = false;
+
+// Stack of previous test results
+$ignorestack = array();
+
+// Number of test levels currently ignored
+$ignorelevel = 0;
+
+// parseCommand
+//
+// Parse a special command
+
+function parseCommand($line, $vars, $handle)
+{
+ global $ignore, $ignorestack, $ignorelevel;
+
+ // Check for test conditions
+ if (strncmp(trim($line), "[websvn-test:", 13) == 0)
+ {
+ if (!$ignore)
+ {
+ $line = trim($line);
+ $var = substr($line, 13, -1);
+ if (empty($vars[$var]))
+ {
+ array_push($ignorestack, $ignore);
+ $ignore = true;
+ }
+ }
+ else
+ {
+ $ignorelevel++;
+ }
+
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-else]", 13) == 0)
+ {
+ if ($ignorelevel == 0)
+ {
+ $ignore = !$ignore;
+ }
+
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-endtest]", 16) == 0)
+ {
+ if ($ignorelevel > 0)
+ {
+ $ignorelevel--;
+ }
+ else
+ {
+ $ignore = array_pop($ignorestack);
+ }
+
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-getlisting]", 19) == 0)
+ {
+ global $path, $rev, $svnrep;
+
+ if (!$ignore)
+ $svnrep->listFileContents($path, $rev);
+
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-defineicons]", 19) == 0)
+ {
+ global $icons;
+
+ if (!isset($icons))
+ $icons = array();
+
+ // Read all the lines until we reach the end of the definition, storing
+ // each one...
+
+ if (!$ignore)
+ {
+ while (!feof($handle))
+ {
+ $line = trim(fgets($handle));
+
+ if (strncmp($line, "[websvn-enddefineicons]", 22) == 0)
+ {
+ return true;
+ }
+
+ $eqsign = strpos($line, "=");
+
+ $match = substr($line, 0, $eqsign);
+ $def = substr($line, $eqsign + 1);
+
+ $icons[$match] = $def;
+ }
+ }
+
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-icon]", 13) == 0)
+ {
+ global $icons, $vars;
+
+ if (!$ignore)
+ {
+ // The current filetype should be defined my $vars["filetype"]
+
+ if (!empty($icons[$vars["filetype"]]))
+ {
+ echo parseTags($icons[$vars["filetype"]], $vars);
+ }
+ else if (!empty($icons["*"]))
+ {
+ echo parseTags($icons["*"], $vars);
+ }
+ }
+
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-treenode]", 17) == 0)
+ {
+ global $icons, $vars;
+
+ if (!$ignore)
+ {
+ if ((!empty($icons["i-node"])) && (!empty($icons["t-node"])) && (!empty($icons["l-node"])))
+ {
+ for ($n = 1; $n < $vars["level"]; $n++)
+ {
+ if ($vars["last_i_node"][$n])
+ {
+ echo parseTags($icons["e-node"], $vars);
+ }
+ else
+ {
+ echo parseTags($icons["i-node"], $vars);
+ }
+ }
+
+ if ($vars["level"] != 0)
+ {
+ if ($vars["node"] == 0)
+ {
+ echo parseTags($icons["t-node"], $vars);
+ }
+ else
+ {
+ echo parseTags($icons["l-node"], $vars);
+ $vars["last_i_node"][$vars["level"]] = TRUE;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+// parseTemplate
+//
+// Parse the given template, replacing the variables with the values passed
+
+function parseTemplate($template, $vars, $listing)
+{
+ global $ignore, $vars;
+
+ if (!is_file($template))
+ {
+ print "No template file found ($template)";
+ exit;
+ }
+
+ $handle = fopen($template, "r");
+ $inListing = false;
+ $ignore = false;
+ $listLines = array();
+
+ while (!feof($handle))
+ {
+ $line = fgets($handle);
+
+ // Check for the end of the file list
+ if ($inListing)
+ {
+ if (strcmp(trim($line), "[websvn-endlisting]") == 0)
+ {
+ $inListing = false;
+
+ // For each item in the list
+ foreach ($listing as $listvars)
+ {
+ // Copy the value for this list item into the $vars array
+ foreach ($listvars as $id => $value)
+ {
+ $vars[$id] = $value;
+ }
+
+ // Output the list item
+ foreach ($listLines as $line)
+ {
+ if (!parseCommand($line, $vars, $handle))
+ {
+ if (!$ignore)
+ print parseTags($line, $vars);
+ }
+ }
+ }
+ }
+ else
+ {
+ if ($ignore == false)
+ $listLines[] = $line;
+ }
+ }
+ else if (parseCommand($line, $vars, $handle))
+ {
+ continue;
+ }
+ else
+ {
+ // Check for the start of the file list
+ if (strncmp(trim($line), "[websvn-startlisting]", 21) == 0)
+ {
+ $inListing = true;
+ }
+ else
+ {
+ if ($ignore == false)
+ print parseTags($line, $vars);
+ }
+ }
+ }
+
+ fclose($handle);
+}
+
+// parseTags
+//
+// Replace all occurences of [websvn:varname] wit the give variable
+
+function parseTags($line, $vars)
+{
+ global $lang;
+
+ // Replace the websvn variables
+ while (ereg("\[websvn:([a-zA-Z0-9_]+)\]", $line, $matches))
+ {
+ // Make sure that the variable exists
+ if (!isset($vars[$matches[1]]))
+ {
+ $vars[$matches[1]] = "?${matches[1]}?";
+ }
+
+ $line = str_replace($matches[0], $vars[$matches[1]], $line);
+ }
+
+ // Replace the language strings
+ while (ereg("\[lang:([a-zA-Z0-9_]+)\]", $line, $matches))
+ {
+ // Make sure that the variable exists
+ if (!isset($lang[$matches[1]]))
+ {
+ $lang[$matches[1]] = "?${matches[1]}?";
+ }
+
+ $line = str_replace($matches[0], $lang[$matches[1]], $line);
+ }
+
+ // Return the results
+ return $line;
+}
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/include/utils.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/utils.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/utils.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,188 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// utils.inc
+//
+// General utility commands
+
+// createDirLinks
+//
+// Create a list of links to the current path that'll be available from the template
+
+function createDirLinks($rep, $path, $rev, $showchanged)
+{
+ global $vars, $config;
+
+ $subs = explode("/", $path);
+ $sofar = "";
+ $count = count($subs);
+ $vars["curdirlinks"] = "";
+
+ // The number of links depends on the last item. It's empty if
+ // we're looing at a directory, and full if it's a file
+ if (empty($subs[$count - 1]))
+ {
+ $limit = $count - 2;
+ $dir = true;
+ }
+ else
+ {
+ $limit = $count - 1;
+ $dir = false;
+ }
+
+ for ($n = 0; $n < $limit; $n++)
+ {
+ $sofar .= $subs[$n]."/";
+ $sofarurl = $config->getURL($rep, $sofar, "dir");
+ $vars["curdirlinks"] .= "[<a href=\"${sofarurl}rev=$rev&sc=$showchanged\">".$subs[$n]."/]</a> ";
+ }
+
+ if ($dir)
+ {
+ $vars["curdirlinks"] .= "[<b>".$subs[$n]."</b>/]";
+ }
+ else
+ {
+ $vars["curdirlinks"] .= "[<b>".$subs[$n]."</b>]";
+ }
+}
+
+// Create links out of http:// and mailto: tags
+
+function create_anchors($text)
+{
+ $ret = $text;
+
+ // Match correctly formed URLs that aren't already links
+ $ret = preg_replace("#\b(?<!href=\")([a-z]+?)://(\S*)([\w/]+)#i",
+ "<a href=\"\\1://\\2\\3\" target=\"_blank\">\\1://\\2\\3</a>",
+ $ret);
+
+ // Now match anything beginning with www, as long as it's not //www since they were matched above
+ $ret = preg_replace("#\b(?<!//)www\.(\S*)([\w/]+)#i",
+ "<a href=\"http://www.\\1\\2\" target=\"_blank\">www.\\1\\2</a>",
+ $ret);
+
+ // Match email addresses
+ $ret = preg_replace("#\b([\w\-_.]+)@([\w\-.]+)\b#i",
+ "<a href=\"mailto:\\1@\\2\">\\1@\\2</a>",
+ $ret);
+
+ // Replace any usernames
+ $ret = preg_replace("#\[:nom:([^\]]*)\]#e",
+ "username(0, trim(\"\\1\"))",
+ $ret);
+
+ return ($ret);
+}
+
+function getFullURL($loc)
+{
+ $protocol = 'http';
+
+ if (isset($_SERVER["HTTPS"]) && (strtolower($_SERVER["HTTPS"]) != "off"))
+ {
+ $protocol = "https";
+ }
+
+ $port = ":".$_SERVER["SERVER_PORT"];
+ if ((":80" == $port && "http" == $protocol) ||
+ (":443" == $port && "https" == $protocol))
+ {
+ $port = "";
+ }
+
+ if (isset($_SERVER["HTTP_HOST"]))
+ {
+ $host = $_SERVER["HTTP_HOST"];
+ }
+ else if (isset($_SERVER["SERVER_NAME"]))
+ {
+ $host = $_SERVER["SERVER_NAME"].$port;
+ }
+ else if (isset($_SERVER["SERVER_ADDR"]))
+ {
+ $host = $_SERVER["SERVER_ADDR"].$port;
+ }
+ else
+ {
+ print "Unable to redirect";
+ exit;
+ }
+
+ $url = $protocol . "://" . $host . $loc;
+
+ return $url;
+}
+
+// hardspace
+//
+// Replace the spaces at the front of a line with hard spaces
+
+$spacearray = array (
+0 => "",
+1 => " ",
+2 => " ",
+3 => " ",
+4 => " ",
+5 => " ",
+6 => " ",
+7 => " ",
+8 => " ",
+9 => " ",
+10 => " "
+);
+
+function hardspace($s)
+{
+ global $spacearray, $config, $rep;
+
+ $len = strlen($s);
+
+ // Calculate the number of spaces to added (expanding tabs)
+ for ($i = 0, $numspaces = 0; $i < $len; $i++)
+ {
+ if ($s[$i] == " ")
+ $numspaces += 1;
+ else
+ if ($s[$i] == "\t")
+ $numspaces += $rep->getExpandTabsBy();
+ else
+ break;
+ }
+
+ // Strip the leading blanks
+ $s = substr($s, $i);
+
+ // Create a string of 's
+ $spaces = "";
+ while ($numspaces >= 10)
+ {
+ $spaces .= $spacearray[10];
+ $numspaces -= 10;
+ }
+ $spaces .= $spacearray[$numspaces];
+
+ // Stick them together
+ return $spaces.$s;
+}
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/include/version.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/include/version.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/version.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,27 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// version.inc
+//
+// Version information
+
+$version = "1.61";
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/index.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/index.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/index.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,51 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// index.php
+//
+// Main page. Lists all the projects
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require("include/template.inc");
+
+$vars["action"] = $lang["PROJECTS"];
+$vars["repname"] = "";
+$vars["rev"] = 0;
+$vars["path"] = "";
+
+$projects = $config->getRepositories();
+$i = 0;
+$listing = array ();
+foreach ($projects as $project)
+{
+ $url = $config->getURL($project, "/", "dir");
+
+ $listing[$i]["rowparity"] = $i % 2;
+ $listing[$i++]["projlink"] = "<a href=\"${url}sc=0\">".$project->name."</a>";
+}
+
+$vars["version"] = $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."index.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/install.txt
===================================================================
--- trunk/svn.matroska.org/WebSVN/install.txt 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/install.txt 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,232 @@
+
+WHY WebSVN?
+
+WebSVN offers a view onto your subversion repositories that's been designed
+to reflect the Subversion methodology. You can view the log of any file or
+directory and see a list of all the files changed, added or deleted in any
+given revision. You can also view the differences between 2 versions of a
+file so as to see exactly what was changed in a particular revision.
+
+WebSVN offers the following features:
+
+* Easy to use interface
+* Highly customisable templating system
+* Colourisation of file listings
+* Blame view
+* Log message searching
+* Fast browsing thanks to internal caching feature
+* Apache MultiViews support
+* RSS feed support
+
+Since it's written using PHP, WebSVN is also very portable and easy to install.
+
+INSTALLATION
+
+Grab the source and stick it somewhere that your server can get to. You
+obviously need to have PHP installed and working. Also note that WebSVN
+won't currently work in safe mode, due to the need to call svnlook.
+
+You'll also need diff (preferably the GNU version; for Windows users I'd
+recommend the Cygwin version) and svnlook available.
+
+Rename distconfig.inc as config.inc (found in the includes directory)and then
+edit it as directed in the file itself.
+
+If everything has gone well, you should be able to view your projects by
+pointing your browser at the index.php file.
+
+For those of you wishing to customise the look and feel a little, you should
+read templates.txt, which explains the highly configurable template system.
+
+Windows users - note that some of the features offered by WebSVN, when
+enabled, require the use of various external programs. They can be downloaded
+from these locations:
+
+Diff/Sed/Gzip/Tar: http://www.cygwin.com/
+Enscript: http://people.ssh.com/mtr/genscript/
+
+ACCENTED CHARACTERS
+
+WebSVN is designed to worked with accented characters. To do this, it uses
+the iconv function. This may not be installed on your system. If you aren't
+getting the characters that you expect, make sure that the iconv module is
+being loaded in php.ini. Windows users will need to copy the appropriate
+DLLs to the system directory (from the PHP installation directory).
+
+CACHING
+
+In order to return results with a reasonable speed, WebSVN caches the results
+of it's requests to svnlook. Under normal usage this works correctly since
+it's not generally possible to change a revision with subversion.
+
+That said, one case that may cause confusion is if someone changes the log
+message of a given revision. WebSVN will have cached the previous log message
+and won't know that there's a new one available. There are various solutions
+to this problem:
+
+1) Turn off caching in the config file. This will severely impede the
+ perfomance of WebSVN.
+
+2) Change the post-revprop-change hook so that is deletes the contents of the
+ cache after any change to a revision property
+
+3) Only allow the administrator to change revision properties. He can then
+ delete the cache by hand should this occur.
+
+COLOURISATION
+
+You can few files with syntax colouring if you have Enscript 1.6 or higher
+installed on your system. You'll also need Sed.
+
+Simply set the paths in the config file and then uncomment the line:
+
+$config->useEnscript();
+
+MULTIVIEWS
+
+You may choose to configure access to your repository via Apache's MultiView
+system. This will enable you to access a respositoy using a url such as:
+
+http://servername/wsvn/repname/path/in/repository
+
+To do this you must:
+
+- Place wsvn.php where you want to. Normally you place it such that it's
+ accessible straight after the servername, as shown above.
+
+- Configure the parent directory of wsvn.php to use MultiViews (see Apache
+ docs).
+
+- Change config.inc to include the line $config->useMultiViews();
+
+- Change the paths configured at the beginning of the wsvn.php script.
+
+Now go to http://servername/wsvn/ and make sure that you get the index page.
+
+The repname part of the URL is the name given to it in the config.inc file.
+For this reason you may wish to avoid putting spaces in the name.
+
+AUTHENTICATION AND MULTIVIEW WALK-THROUGH
+
+You may wish to provide an authentication mechanism for WebSVN. One obvious
+solution is to protect the entire WebSVN directory with some form of Apache
+authentication mechanism, but that doesn't allow for per repository
+authentication.
+
+This walkthrough gives an example of setting up per repository authentication
+that's based on the same authentication requirements as you define for the
+Subversion access itself. You'll need to be using Apache.
+
+First, you must get the Multiviews option working. In my set up, my Apache
+directory root is set to a location on my harddrive:
+
+DocumentRoot "D:/svnpage"
+
+In that directory, I have WebSVN installed in a directory called websvn.
+Normally WebSVN would be accessed by http://servername/websvn
+
+wsvn.php in then copied from the WebSVN installation to the document root
+directory and the variables at the beginning of the script configured as
+follows (based on your own directory locations, obviously):
+
+// Location of websvn directory via HTTP
+//
+// e.g. For http://servername/websvn use /websvn
+//
+// Note that wsvn.php need not be in the /websvn directory (and normally isn't).
+$locwebsvnhttp = "/websvn";
+
+// Physical location of websvn directory
+$locwebsvnreal = "d:/svnpage/websvn";
+
+Next, turn on Multiviews in the WebSVN config.inc file:
+
+$config->useMultiViews();
+
+Finally, Apache needs to know that you want to enable MultiViews for the root
+directory. This can be done by including this line in the directory's
+.htaccess file (assuming that the appropriate AllowOverrides directive is set
+up):
+
+Options MultiViews
+
+If all has gone well, repositories should now by accessible by
+http://servername/wsvn/repname
+
+Note the index page can be accessed through http://servername/wsvn
+If you want to view the index page by http://servername/ you need to
+add another directive to the .htaccess file:
+
+DirectoryIndex wsvn.php
+
+We are now in a position where each repository has it's own URL location.
+To configure authentication we can use the same method as for controlling
+access to the svn repositories themselves. Here's an example using SSPI:
+
+<Location /wsvn/myproj>
+SVNPath C:\svn\myproj
+AuthType SSPI
+SSPIAuth On
+SSPIAuthoritative On
+SSPIDomain MYDOMAIN
+SSPIOfferBasic On
+AuthzSVNAccessFile c:\svn\myaccessfile.txt
+Require valid-user
+</Location>
+
+Here, I protect just the 'myproj' project, now accessed using
+http://servername/wsvn/myproj
+
+To get the AuthzSVNAccessFile directive working, you have to have the SVNPath
+directive pointing to the real SVN repository. Do NOT include the DAV
+directive.
+
+The authenticaion now works as for the repository access via SVN. Very nice!
+
+Newer versions of subversion allow use of the SVNParentPath directive with
+AuthzSVNAccessFile , making for an even nicer set up. Here's an example:
+
+<Location /svn>
+DAV svn
+SVNParentPath C:\svn
+AuthType SSPI
+SSPIAuth On
+SSPIAuthoritative On
+SSPIDomain MYDOMAIN
+SSPIOfferBasic On
+AuthzSVNAccessFile c:\svn\accessfile.txt
+Require valid-user
+</Location>
+
+<Location /wsvn/>
+SVNParentPath C:\svn
+AuthType SSPI
+SSPIAuth On
+SSPIAuthoritative On
+SSPIDomain MYDOMAIN
+SSPIOfferBasic On
+AuthzSVNAccessFile c:\svn\accessfile.txt
+Satisfy Any
+Require valid-user
+</Location>
+
+Note the use of the / after /wsvn/ in the location directive. If you use
+<Location /wsvn> then you won't be able to access the index.
+
+COMMON PROBLEMS
+
+1) On a Windows machine, this error is reported:
+
+Warning: shell_exec(): Unable to execute
+
+If you experience this problem, you need to give IUSR_<machinename> execute
+permissions on %systemroot%\system32\cmd.exe. Under most systems, the file will
+be C:\WINDOWS\system32\cmd.exe.
+
+Right-click on the file, choose properties, and on the security tab click
+the "Add" button. Add the IUSR_<machinename> user, and then select the
+"read" and "read & execute" boxes.
+
+LICENCE
+
+GNU Public licence.
Added: trunk/svn.matroska.org/WebSVN/languages/english.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/english.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/english.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,112 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// english.inc
+//
+// English language strings
+
+$lang["LOG"] = "Log";
+$lang["DIFF"] = "Diff";
+
+$lang["NOREP"] = "No repository given";
+$lang["NOPATH"] = "Path not found";
+$lang["SUPPLYREP"] = "Please set up a repository path in include/config.inc using \$config->parentPath or \$config->addRepository<p>See the installation guide for more details";
+
+$lang["DIFFREVS"] = "Diff between revs";
+$lang["AND"] = "and";
+$lang["REV"] = "Rev";
+$lang["LINE"] = "Line";
+$lang["SHOWENTIREFILE"] = "Show entire file";
+$lang["SHOWCOMPACT"] = "Only display areas with differences";
+
+$lang["DIFFPREV"] = "Compare with Previous";
+$lang["BLAME"] = "Blame";
+
+$lang["REVINFO"] = "Revision Information";
+$lang["GOYOUNGEST"] = "Go to most recent revision";
+$lang["LASTMOD"] = "Last modification";
+$lang["LOGMSG"] = "Log message";
+$lang["CHANGES"] = "Changes";
+$lang["SHOWCHANGED"] = "Show changed files";
+$lang["HIDECHANGED"] = "Hide changed files";
+$lang["NEWFILES"] = "New Files";
+$lang["CHANGEDFILES"] = "Modified files";
+$lang["DELETEDFILES"] = "Deleted files";
+$lang["VIEWLOG"] = "View Log";
+$lang["PATH"] = "Path";
+$lang["AUTHOR"] = "Author";
+$lang["AGE"] = "Age";
+$lang["LOG"] = "Log";
+$lang["CURDIR"] = "Current Directory";
+$lang["TARBALL"] = "Tarball";
+
+$lang["PREV"] = "Prev";
+$lang["NEXT"] = "Next";
+$lang["SHOWALL"] = "Show All";
+
+$lang["BADCMD"] = "Error running this command";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion Projects";
+$lang["SERVER"] = "Subversion Server";
+
+$lang["SEARCHLOG"] = "Search log for";
+$lang["CLEARLOG"] = "Clear current search";
+$lang["MORERESULTS"] = "Find more matches...";
+$lang["NORESULTS"] = "There are no logs matching your query";
+$lang["NOMORERESULTS"] = "There are no more logs matching your query";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "file(s) modified";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "Line No.";
+$lang["BLAMEFOR"] = "Blame information for rev";
+
+$lang["YEARS"] = "years";
+$lang["MONTHS"] = "months";
+$lang["WEEKS"] = "weeks";
+$lang["DAYS"] = "days";
+$lang["HOURS"] = "hours";
+$lang["MINUTES"] = "minutes";
+
+$lang["GO"] = "Go";
+
+$lang["PATHCOMPARISON"] = "Path Comparison";
+$lang["COMPAREPATHS"] = "Compare Paths";
+$lang["COMPAREREVS"] = "Compare Revisions";
+$lang["PROPCHANGES"] = "Property changes :";
+$lang["CONVFROM"] = "This comparison shows the changes necessary to convert path ";
+$lang["TO"] = "TO";
+$lang["REVCOMP"] = "Reverse comparison";
+$lang["COMPPATH"] = "Compare Path:";
+$lang["WITHPATH"] = "With Path:";
+$lang["FILEDELETED"] = "File deleted";
+$lang["FILEADDED"] = "New file";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "";
+$lang["ENDNOBR"] = "";
+
+// $lang["NOBR"] = "<nobr>";
+// $lang["ENDNOBR"] = "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/french.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/french.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/french.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,90 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Erik Le Blanc
+//
+// 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
+//
+// --
+//
+// french.inc
+//
+// French language strings
+
+$lang["LOG"] = "Log";
+$lang["DIFF"] = "Diff";
+
+$lang["NOREP"] = "Pas de repository";
+$lang["NOPATH"] = "Fichier ou répertoire non trouvé";
+
+$lang["DIFFREVS"] = "Différences entre les révisions";
+$lang["AND"] = "et";
+$lang["REV"] = "Révision";
+$lang["LINE"] = "Ligne";
+$lang["SHOWENTIREFILE"] = "Afficher tout le fichier";
+$lang["SHOWCOMPACT"] = "Afficher seulement les passages avec des différences";
+
+$lang["DIFFPREV"] = "Différence avec le précédent";
+$lang["BLAME"] = "Responsabilité";
+
+$lang["REVINFO"] = "Information sur la Révision";
+$lang["GOYOUNGEST"] = "Aller à la Révision la plus récente";
+$lang["LASTMOD"] = "Dernière modification";
+$lang["LOGMSG"] = "Message de Log";
+$lang["CHANGES"] = "Changements";
+$lang["SHOWCHANGED"] = "Montrer les fichiers modifiés";
+$lang["HIDECHANGED"] = "Cacher les fichiers modifiés";
+$lang["NEWFILES"] = "Nouveaux fichiers";
+$lang["CHANGEDFILES"] = "Fichier(s) modifié(s)";
+$lang["DELETEDFILES"] = "Fichier(s) effacé(s)";
+$lang["VIEWLOG"] = "Afficher le Log";
+$lang["PATH"] = "Chemin";
+$lang["AUTHOR"] = "Auteur";
+$lang["AGE"] = "Ancienneté";
+$lang["LOG"] = "Log";
+$lang["CURDIR"] = "Répertoire courant";
+
+$lang["PREV"] = "Précédent";
+$lang["NEXT"] = "Suivant";
+$lang["SHOWALL"] = "Tout montrer";
+
+$lang["BADCMD"] = "Cette commande a provoqué une erreur";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Projets Subversion";
+$lang["SERVER"] = "Serveur Subversion";
+
+$lang["SEARCHLOG"] = "Rechercher dans les Logs";
+$lang["CLEARLOG"] = "Effacer la recherche courante";
+$lang["MORERESULTS"] = "Trouver plus de réponses...";
+$lang["NORESULTS"] = "Il n'y a pas de réponse à votre recherche dans les Logs";
+$lang["NOMORERESULTS"] = "Il n'y a pas plus de réponses à votre recherche";
+
+$lang["RSSFEEDTITLE"] = "Fil RSS de WebSVN";
+$lang["FILESMODIFIED"] = "fichier(s) modifi&aecute;(s)";
+$lang["RSSFEED"] = "RSS";
+
+$lang["LINENO"] = "Ligne numéro";
+$lang["BLAMEFOR"] = "Dernier responsable";
+
+$lang["YEARS"] = "années";
+$lang["MONTHS"] = "mois";
+$lang["WEEKS"] = "semaines";
+$lang["DAYS"] = "jours";
+$lang["HOURS"] = "heures";
+$lang["MINUTES"] = "minutes";
+
+$lang["GO"] = "Go";
+
Added: trunk/svn.matroska.org/WebSVN/languages/german.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/german.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/german.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,68 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Stephan Stapel, <[email protected]>
+//
+// 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
+//
+// --
+//
+// germany.inc
+//
+// German language strings
+
+$lang["NOREP"] = "Kein Repository angegeben.";
+
+$lang["DIFFREVS"] = "Vergleich zwischen Revisionen";
+$lang["AND"] = "und";
+$lang["REV"] = "Revision";
+$lang["LINE"] = "Zeile";
+$lang["SHOWENTIREFILE"] = "Ganze Datei anzeigen";
+$lang["SHOWCOMPACT"] = "Nur geänderte Bereiche";
+
+$lang["DIFFPREV"] = "Vergleich mit vorheriger";
+
+$lang["REVINFO"] = "Revisions-Information";
+$lang["GOYOUNGEST"] = "Zur aktuellen Revision";
+$lang["LASTMOD"] = "Letzte Änderung";
+$lang["LOGMSG"] = "Logeintrag";
+$lang["CHANGES"] = "Änderungen";
+$lang["SHOWCHANGED"] = "Geänderte Dateien anzeigen";
+$lang["HIDECHANGED"] = "Geänderte Dateien verstecken";
+$lang["NEWFILES"] = "Neue Dateien";
+$lang["CHANGEDFILES"] = "Geänderte Dateien";
+$lang["DELETEDFILES"] = "Gelöschte Dateien";
+$lang["VIEWLOG"] = "Log anzeigen";
+$lang["PATH"] = "Pfad";
+$lang["AUTHOR"] = "Autor";
+$lang["AGE"] = "Alter";
+$lang["LOG"] = "Log";
+$lang["CURDIR"] = "Aktuelles Verzeichnis";
+
+$lang["PREV"] = "Zurück";
+$lang["NEXT"] = "Weiter";
+$lang["SHOWALL"] = "Alles anzeigen";
+
+$lang["BADCMD"] = "Fehler beim Ausführen des Befehls";
+
+$lang["PROJECTS"] = "Subversion-Projekte";
+$lang["SERVER"] = "Subversion Server";
+
+$lang["YEARS"] = "Jahre";
+$lang["MONTHS"] = "Monate";
+$lang["WEEKS"] = "Wochen";
+$lang["DAYS"] = "Tage";
+$lang["HOURS"] = "Stunden";
+$lang["MINUTES"] = "Minuten";
Added: trunk/svn.matroska.org/WebSVN/languages/japanese-euc.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/japanese-euc.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/japanese-euc.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,96 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// japanese-euc.inc
+// Transrator: BEPPU Masamichi
+//
+// Japanese(EUC) language strings
+
+$lang["LOG"] = "¥í¥°";
+$lang["DIFF"] = "º¹Ê¬";
+
+$lang["NOREP"] = "¥ê¥Ý¥¸¥È¥ê¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó";
+$lang["NOPATH"] = "¥Ñ¥¹¤¬¸«ÉÕ¤«¤ê¤Þ¤»¤ó";
+
+$lang["DIFFREVS"] = "¥ê¥Ó¥¸¥ç¥ó´Ö¤Îº¹Ê¬";
+$lang["AND"] = "¤È";
+$lang["REV"] = "¥ê¥Ó¥¸¥ç¥ó";
+$lang["LINE"] = "¹Ô";
+$lang["SHOWENTIREFILE"] = "Á´¤ÆÉ½¼¨";
+$lang["SHOWCOMPACT"] = "°Û¤Ê¤ë¹Ô¤Î¼þÊÕ¤À¤±É½¼¨";
+
+$lang["DIFFPREV"] = "Á°¤Î¥ê¥Ó¥¸¥ç¥ó¤È¤Îº¹Ê¬";
+$lang["BLAME"] = "¾ÜºÙɽ¼¨";
+
+$lang["REVINFO"] = "¥ê¥Ó¥¸¥ç¥ó¾ðÊó";
+$lang["GOYOUNGEST"] = "ºÇ¿·¤Î¥ê¥Ó¥¸¥ç¥ó¤Ø";
+$lang["LASTMOD"] = "ºÇ½ª¹¹¿·Æü»þ";
+$lang["LOGMSG"] = "¥í¥°¥á¥Ã¥»¡¼¥¸";
+$lang["CHANGES"] = "Êѹ¹";
+$lang["SHOWCHANGED"] = "Êѹ¹¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î°ìÍ÷¤òɽ¼¨¤¹¤ë";
+$lang["HIDECHANGED"] = "Êѹ¹¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î°ìÍ÷¤òɽ¼¨¤·¤Ê¤¤";
+$lang["NEWFILES"] = "Äɲåե¡¥¤¥ë";
+$lang["CHANGEDFILES"] = "½¤Àµ¥Õ¥¡¥¤¥ë";
+$lang["DELETEDFILES"] = "ºï½ü¥Õ¥¡¥¤¥ë";
+$lang["VIEWLOG"] = "¥í¥°¤ò¸«¤ë";
+$lang["PATH"] = "¥Ñ¥¹";
+$lang["AUTHOR"] = "½¤Àµ¼Ô";
+$lang["AGE"] = "̵½¤Àµ»þ´Ö";
+$lang["LOG"] = "¥í¥°";
+$lang["CURDIR"] = "¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê";
+
+$lang["PREV"] = "Á°";
+$lang["NEXT"] = "¼¡";
+$lang["SHOWALL"] = "Á´¤ÆÉ½¼¨";
+
+$lang["BADCMD"] = "¥³¥Þ¥ó¥É¼Â¹ÔÃæ¤Î¥¨¥é¡¼";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion ¥×¥í¥¸¥§¥¯¥È°ìÍ÷";
+$lang["SERVER"] = "Subversion ¥µ¡¼¥Ð";
+
+$lang["SEARCHLOG"] = "¥í¥°¤ò¸¡º÷";
+$lang["CLEARLOG"] = "¸¡º÷¾ò·ï¤ò¥¯¥ê¥¢¤¹¤ë";
+$lang["MORERESULTS"] = "¸¡º÷¾ò·ï¤ò¹Ê¤ê¹þ¤à";
+$lang["NORESULTS"] = "¸¡º÷¾ò·ï¤Ë¥Þ¥Ã¥Á¤¹¤ë¤â¤Î¤Ï¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿";
+$lang["NOMORERESULTS"] = "¤³¤ì°Ê¾å¸¡º÷¾ò·ï¤Ë¥Þ¥Ã¥Á¤¹¤ë¤â¤Î¤Ï¤¢¤ê¤Þ¤»¤ó";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "¥Õ¥¡¥¤¥ë¤¬½¤Àµ¤µ¤ì¤Þ¤·¤¿";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "¹ÔÈÖ¹æ";
+$lang["BLAMEFOR"] = "¾ÜºÙɽ¼¨ Âоݥê¥Ó¥¸¥ç¥ó";
+
+$lang["YEARS"] = "ǯ´Ö";
+$lang["MONTHS"] = "¥õ·î´Ö";
+$lang["WEEKS"] = "½µ´Ö";
+$lang["DAYS"] = "Æü´Ö";
+$lang["HOURS"] = "»þ´Ö";
+$lang["MINUTES"] = "ʬ";
+
+$lang["GO"] = "GO";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "<nobr>";
+$lang["ENDNOBR"] = "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/japanese-jis.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/japanese-jis.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/japanese-jis.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,96 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// japanese-jis.inc
+// Translator: BEPPU Masamichi
+//
+// Japanese(JIS) language strings
+
+$lang["LOG"] = "$B%m%0(B";
+$lang["DIFF"] = "$B:9J,(B";
+
+$lang["NOREP"] = "$B%j%]%8%H%j$,;XDj$5$l$F$$$^$;$s(B";
+$lang["NOPATH"] = "$B%Q%9$,8+IU$+$j$^$;$s(B";
+
+$lang["DIFFREVS"] = "$B%j%S%8%g%s4V$N:9J,(B";
+$lang["AND"] = "$B$H(B";
+$lang["REV"] = "$B%j%S%8%g%s(B";
+$lang["LINE"] = "$B9T(B";
+$lang["SHOWENTIREFILE"] = "$BA4$FI=<((B";
+$lang["SHOWCOMPACT"] = "$B0[$J$k9T$N<~JU$@$1I=<((B";
+
+$lang["DIFFPREV"] = "$BA0$N%j%S%8%g%s$H$N:9J,(B";
+$lang["BLAME"] = "$B>\:YI=<((B";
+
+$lang["REVINFO"] = "$B%j%S%8%g%s>pJs(B";
+$lang["GOYOUNGEST"] = "$B:G?7$N%j%S%8%g%s$X(B";
+$lang["LASTMOD"] = "$B:G=*99?7F|;~(B";
+$lang["LOGMSG"] = "$B%m%0%a%C%;!<%8(B";
+$lang["CHANGES"] = "$BJQ99(B";
+$lang["SHOWCHANGED"] = "$BJQ99$5$l$?%U%!%$%k$N0lMw$rI=<($9$k(B";
+$lang["HIDECHANGED"] = "$BJQ99$5$l$?%U%!%$%k$N0lMw$rI=<($7$J$$(B";
+$lang["NEWFILES"] = "$BDI2C%U%!%$%k(B";
+$lang["CHANGEDFILES"] = "$B=$@5%U%!%$%k(B";
+$lang["DELETEDFILES"] = "$B:o=|%U%!%$%k(B";
+$lang["VIEWLOG"] = "$B%m%0$r8+$k(B";
+$lang["PATH"] = "$B%Q%9(B";
+$lang["AUTHOR"] = "$B=$@5<T(B";
+$lang["AGE"] = "$BL5=$@5;~4V(B";
+$lang["LOG"] = "$B%m%0(B";
+$lang["CURDIR"] = "$B%+%l%s%H%G%#%l%/%H%j(B";
+
+$lang["PREV"] = "$BA0(B";
+$lang["NEXT"] = "$B<!(B";
+$lang["SHOWALL"] = "$BA4$FI=<((B";
+
+$lang["BADCMD"] = "$B%3%^%s%I<B9TCf$N%(%i!<(B";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion $B%W%m%8%'%/%H0lMw(B";
+$lang["SERVER"] = "Subversion $B%5!<%P(B";
+
+$lang["SEARCHLOG"] = "$B%m%0$r8!:w(B";
+$lang["CLEARLOG"] = "$B8!:w>r7o$r%/%j%"$9$k(B";
+$lang["MORERESULTS"] = "$B8!:w>r7o$r9J$j9~$`(B";
+$lang["NORESULTS"] = "$B8!:w>r7o$K%^%C%A$9$k$b$N$O$"$j$^$;$s$G$7$?(B";
+$lang["NOMORERESULTS"] = "$B$3$l0J>e8!:w>r7o$K%^%C%A$9$k$b$N$O$"$j$^$;$s(B";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "$B%U%!%$%k$,=$@5$5$l$^$7$?(B";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "$B9THV9f(B";
+$lang["BLAMEFOR"] = "$B>\:YI=<((B $BBP>]%j%S%8%g%s(B";
+
+$lang["YEARS"] = "$BG/4V(B";
+$lang["MONTHS"] = "$B%u7n4V(B";
+$lang["WEEKS"] = "$B=54V(B";
+$lang["DAYS"] = "$BF|4V(B";
+$lang["HOURS"] = "$B;~4V(B";
+$lang["MINUTES"] = "$BJ,(B";
+
+$lang["GO"] = "GO";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "<nobr>";
+$lang["ENDNOBR"] = "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/japanese-sjis.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/japanese-sjis.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/japanese-sjis.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,96 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// japanese-sjis.inc
+// Translator: BEPPU Masamichi
+//
+// Japanese(ShitJIS) language strings
+
+$lang["LOG"] = "O";
+$lang["DIFF"] = "·ª";
+
+$lang["NOREP"] = "|Wgªwè³êĢܹñ";
+$lang["NOPATH"] = "pXª©t©èܹñ";
+
+$lang["DIFFREVS"] = "rWÔÌ·ª";
+$lang["AND"] = "Æ";
+$lang["REV"] = "rW";
+$lang["LINE"] = "s";
+$lang["SHOWENTIREFILE"] = "SÄ\¦";
+$lang["SHOWCOMPACT"] = "ÙÈésÌüÓ¾¯\¦";
+
+$lang["DIFFPREV"] = "OÌrWÆÌ·ª";
+$lang["BLAME"] = "Ú×\¦";
+
+$lang["REVINFO"] = "rWîñ";
+$lang["GOYOUNGEST"] = "ÅVÌrWÖ";
+$lang["LASTMOD"] = "ÅIXVú";
+$lang["LOGMSG"] = "ObZ[W";
+$lang["CHANGES"] = "ÏX";
+$lang["SHOWCHANGED"] = "ÏX³ê½t@CÌêð\¦·é";
+$lang["HIDECHANGED"] = "ÏX³ê½t@CÌêð\¦µÈ¢";
+$lang["NEWFILES"] = "ÇÁt@C";
+$lang["CHANGEDFILES"] = "C³t@C";
+$lang["DELETEDFILES"] = "ít@C";
+$lang["VIEWLOG"] = "Oð©é";
+$lang["PATH"] = "pX";
+$lang["AUTHOR"] = "C³Ò";
+$lang["AGE"] = "³C³Ô";
+$lang["LOG"] = "O";
+$lang["CURDIR"] = "JgfBNg";
+
+$lang["PREV"] = "O";
+$lang["NEXT"] = "";
+$lang["SHOWALL"] = "SÄ\¦";
+
+$lang["BADCMD"] = "R}hÀsÌG[";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion vWFNgê";
+$lang["SERVER"] = "Subversion T[o";
+
+$lang["SEARCHLOG"] = "Oðõ";
+$lang["CLEARLOG"] = "õððNA·é";
+$lang["MORERESULTS"] = "õððièÞ";
+$lang["NORESULTS"] = "õðÉ}b`·éàÌÍ èܹñŵ½";
+$lang["NOMORERESULTS"] = "±êÈãõðÉ}b`·éàÌÍ èܹñ";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "t@CªC³³êܵ½";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "sÔ";
+$lang["BLAMEFOR"] = "Ú×\¦ ÎÛrW";
+
+$lang["YEARS"] = "NÔ";
+$lang["MONTHS"] = "Ô";
+$lang["WEEKS"] = "TÔ";
+$lang["DAYS"] = "úÔ";
+$lang["HOURS"] = "Ô";
+$lang["MINUTES"] = "ª";
+
+$lang["GO"] = "GO";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "<nobr>";
+$lang["ENDNOBR"] = "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/japanese-utf8.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/japanese-utf8.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/japanese-utf8.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,96 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// japanese-utf8.inc
+// Translatior: BEPPU Masamichi
+//
+// Japanese(UTF-8) language strings
+
+$lang["LOG"] = "ãã°";
+$lang["DIFF"] = "å·®å";
+
+$lang["NOREP"] = "ãªãã¸ããªãæå®ããã¦ãã¾ãã";
+$lang["NOPATH"] = "ãã¹ãè¦ä»ããã¾ãã";
+
+$lang["DIFFREVS"] = "ãªãã¸ã§ã³éã®å·®å";
+$lang["AND"] = "ã¨";
+$lang["REV"] = "ãªãã¸ã§ã³";
+$lang["LINE"] = "è¡";
+$lang["SHOWENTIREFILE"] = "å
¨ã¦è¡¨ç¤º";
+$lang["SHOWCOMPACT"] = "ç°ãªãè¡ã®å¨è¾ºã ã表示";
+
+$lang["DIFFPREV"] = "åã®ãªãã¸ã§ã³ã¨ã®å·®å";
+$lang["BLAME"] = "詳細表示";
+
+$lang["REVINFO"] = "ãªãã¸ã§ã³æ
å ±";
+$lang["GOYOUNGEST"] = "ææ°ã®ãªãã¸ã§ã³ã¸";
+$lang["LASTMOD"] = "æçµæ´æ°æ¥æ";
+$lang["LOGMSG"] = "ãã°ã¡ãã»ã¼ã¸";
+$lang["CHANGES"] = "夿´";
+$lang["SHOWCHANGED"] = "夿´ããããã¡ã¤ã«ã®ä¸è¦§ã表示ãã";
+$lang["HIDECHANGED"] = "夿´ããããã¡ã¤ã«ã®ä¸è¦§ã表示ããªã";
+$lang["NEWFILES"] = "追å ãã¡ã¤ã«";
+$lang["CHANGEDFILES"] = "ä¿®æ£ãã¡ã¤ã«";
+$lang["DELETEDFILES"] = "åé¤ãã¡ã¤ã«";
+$lang["VIEWLOG"] = "ãã°ãè¦ã";
+$lang["PATH"] = "ãã¹";
+$lang["AUTHOR"] = "ä¿®æ£è
";
+$lang["AGE"] = "ç¡ä¿®æ£æé";
+$lang["LOG"] = "ãã°";
+$lang["CURDIR"] = "ã«ã¬ã³ããã£ã¬ã¯ããª";
+
+$lang["PREV"] = "å";
+$lang["NEXT"] = "次";
+$lang["SHOWALL"] = "å
¨ã¦è¡¨ç¤º";
+
+$lang["BADCMD"] = "ã³ãã³ãå®è¡ä¸ã®ã¨ã©ã¼";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion ããã¸ã§ã¯ãä¸è¦§";
+$lang["SERVER"] = "Subversion ãµã¼ã";
+
+$lang["SEARCHLOG"] = "ãã°ãæ¤ç´¢";
+$lang["CLEARLOG"] = "æ¤ç´¢æ¡ä»¶ãã¯ãªã¢ãã";
+$lang["MORERESULTS"] = "æ¤ç´¢æ¡ä»¶ãçµãè¾¼ã";
+$lang["NORESULTS"] = "æ¤ç´¢æ¡ä»¶ã«ããããããã®ã¯ããã¾ããã§ãã";
+$lang["NOMORERESULTS"] = "ãã以䏿¤ç´¢æ¡ä»¶ã«ããããããã®ã¯ããã¾ãã";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "ãã¡ã¤ã«ãä¿®æ£ããã¾ãã";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "è¡çªå·";
+$lang["BLAMEFOR"] = "詳細表示 対象ãªãã¸ã§ã³";
+
+$lang["YEARS"] = "å¹´é";
+$lang["MONTHS"] = "ãµæé";
+$lang["WEEKS"] = "é±é";
+$lang["DAYS"] = "æ¥é";
+$lang["HOURS"] = "æé";
+$lang["MINUTES"] = "å";
+
+$lang["GO"] = "GO";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "<nobr>";
+$lang["ENDNOBR"] = "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/korean-euc.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/korean-euc.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/korean-euc.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,110 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// korean-euc.inc
+// Translator: Lee Jae-Hong
+// Korean(EUC) language strings
+
+$lang["LOG"] = "·Î±×";
+$lang["DIFF"] = "ºñ±³";
+
+$lang["NOREP"] = "ÀúÀå¼Ò°¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù.";
+$lang["NOPATH"] = "°æ·Î¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù.";
+$lang["SUPPLYREP"] = "include/config.inc ÆÄÀÏÀÇ \$config->parentPath ¶Ç´Â \$config->addRepository¿¡ ÀúÀå¼ÒÀÇ °æ·Î¸¦ ÁöÁ¤ÇØ ÁֽʽÿÀ.<p>¼³Ä¡ ¼³¸í¼¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.";
+
+$lang["DIFFREVS"] = "¸®ºñÀü°£ ºñ±³";
+$lang["AND"] = "¿Í(°ú)";
+$lang["REV"] = "¸®ºñÀü";
+$lang["LINE"] = "Çà";
+$lang["SHOWENTIREFILE"] = "¸ðµÎ º¸±â";
+$lang["SHOWCOMPACT"] = "¹Ù²ï ºÎºÐ¸¸ º¸±â";
+
+$lang["DIFFPREV"] = "ÀÌÀü ¸®ºñÀü°ú ºñ±³";
+$lang["BLAME"] = "¼öÁ¤ÇÑ »ç¶÷ º¸±â";
+
+$lang["REVINFO"] = "¸®ºñÀü Á¤º¸";
+$lang["GOYOUNGEST"] = "ÃֽЏ®ºñÀüÀ¸·Î °¡±â";
+$lang["LASTMOD"] = "¸¶Áö¸· º¯°æ";
+$lang["LOGMSG"] = "·Î±× ¸Þ½ÃÁö";
+$lang["CHANGES"] = "º¯°æ";
+$lang["SHOWCHANGED"] = "º¯°æµÈ ÆÄÀÏ º¸±â";
+$lang["HIDECHANGED"] = "º¯°æµÈ ÆÄÀÏ ¼û±â±â";
+$lang["NEWFILES"] = "»õ ÆÄÀÏ";
+$lang["CHANGEDFILES"] = "¼öÁ¤µÈ ÆÄÀÏ";
+$lang["DELETEDFILES"] = "»èÁ¦µÈ ÆÄÀÏ";
+$lang["VIEWLOG"] = "·Î±× º¸±â";
+$lang["PATH"] = "°æ·Î";
+$lang["AUTHOR"] = "ÀÛ¼ºÀÚ";
+$lang["AGE"] = "±â°£";
+$lang["LOG"] = "·Î±×";
+$lang["CURDIR"] = "ÇöÀç µð·ºÅ丮";
+$lang["TARBALL"] = "Tarball";
+
+$lang["PREV"] = "ÀÌÀü";
+$lang["NEXT"] = "´ÙÀ½";
+$lang["SHOWALL"] = "¸ðµÎ º¸±â";
+
+$lang["BADCMD"] = "¸í·É ½ÇÇà ¿¡·¯";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion ÇÁ·ÎÁ§Æ®";
+$lang["SERVER"] = "Subversion ¼¹ö";
+
+$lang["SEARCHLOG"] = "·Î±× °Ë»ö";
+$lang["CLEARLOG"] = "°Ë»ö Á¶°Ç »èÁ¦";
+$lang["MORERESULTS"] = "³ª¸ÓÁö °Ë»ö °á°ú...";
+$lang["NORESULTS"] = "°Ë»ö Á¶°Ç¿¡ ¸Â´Â °á°ú°¡ ¾ø½À´Ï´Ù.";
+$lang["NOMORERESULTS"] = "´õ ÀÌ»ó °Ë»ö Á¶°Ç¿¡ ¸Â´Â °á°ú°¡ ¾ø½À´Ï´Ù.";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "ÆÄÀÏ ¼öÁ¤µÊ";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "Çà¹øÈ£";
+$lang["BLAMEFOR"] = "¼öÁ¤ÇÑ »ç¶÷ º¸±â, ¸®ºñÀü ";
+
+$lang["YEARS"] = "³â";
+$lang["MONTHS"] = "°³¿ù";
+$lang["WEEKS"] = "ÁÖÀÏ";
+$lang["DAYS"] = "ÀÏ";
+$lang["HOURS"] = "½Ã°£";
+$lang["MINUTES"] = "ºÐ";
+
+$lang["GO"] = "Go";
+
+$lang["PATHCOMPARISON"] = "°æ·Î ºñ±³";
+$lang["COMPAREPATHS"] = "°æ·Î ºñ±³Çϱâ";
+$lang["COMPAREREVS"] = "¸®ºñÀü ºñ±³Çϱâ";
+$lang["PROPCHANGES"] = "Ư¼º º¯°æ :";
+$lang["CONVFROM"] = "ÀÌ ºñ±³´Â ¹Ù²ï °æ·Î¸¦ º¸¿© ÁÝ´Ï´Ù.";
+$lang["TO"] = "¿¡¼";
+$lang["REVCOMP"] = "¿ª ºñ±³";
+$lang["COMPPATH"] = "ºñ±³ °æ·Î:";
+$lang["WITHPATH"] = "°æ·Î:";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "";
+$lang["ENDNOBR"] = "";
+
+// $lang["NOBR"] = "<nobr>";
+// $lang["ENDNOBR"] = "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/korean-utf8.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/korean-utf8.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/korean-utf8.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,110 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// korean-utf8.inc
+// Translator: Lee Jae-Hong
+// Korean(utf8) language strings
+
+$lang["LOG"] = "ë¡ê·¸";
+$lang["DIFF"] = "ë¹êµ";
+
+$lang["NOREP"] = "ì ì¥ìê° ì§ì ëì´ ìì§ ììµëë¤.";
+$lang["NOPATH"] = "ê²½ë¡ë¥¼ ì°¾ì ì ììµëë¤.";
+$lang["SUPPLYREP"] = "include/config.inc íì¼ì \$config->parentPath ëë \$config->addRepositoryì ì ì¥ìì ê²½ë¡ë¥¼ ì§ì í´ ì£¼ììì¤.<p>ì¤ì¹ ì¤ëª
ì를 ì°¸ì¡°í´ ì£¼ììì¤.";
+
+$lang["DIFFREVS"] = "리ë¹ì ê° ë¹êµ";
+$lang["AND"] = "ì(ê³¼)";
+$lang["REV"] = "리ë¹ì ";
+$lang["LINE"] = "í";
+$lang["SHOWENTIREFILE"] = "모ë 보기";
+$lang["SHOWCOMPACT"] = "ë°ë ë¶ë¶ë§ 보기";
+
+$lang["DIFFPREV"] = "ì´ì 리ë¹ì ê³¼ ë¹êµ";
+$lang["BLAME"] = "ìì í ì¬ë 보기";
+
+$lang["REVINFO"] = "리ë¹ì ì ë³´";
+$lang["GOYOUNGEST"] = "ìµì 리ë¹ì ì¼ë¡ ê°ê¸°";
+$lang["LASTMOD"] = "ë§ì§ë§ ë³ê²½";
+$lang["LOGMSG"] = "ë¡ê·¸ ë©ìì§";
+$lang["CHANGES"] = "ë³ê²½";
+$lang["SHOWCHANGED"] = "ë³ê²½ë íì¼ ë³´ê¸°";
+$lang["HIDECHANGED"] = "ë³ê²½ë íì¼ ì¨ê¸°ê¸°";
+$lang["NEWFILES"] = "ì íì¼";
+$lang["CHANGEDFILES"] = "ìì ë íì¼";
+$lang["DELETEDFILES"] = "ìì ë íì¼";
+$lang["VIEWLOG"] = "ë¡ê·¸ 보기";
+$lang["PATH"] = "ê²½ë¡";
+$lang["AUTHOR"] = "ìì±ì";
+$lang["AGE"] = "기ê°";
+$lang["LOG"] = "ë¡ê·¸";
+$lang["CURDIR"] = "íì¬ ëë í 리";
+$lang["TARBALL"] = "Tarball";
+
+$lang["PREV"] = "ì´ì ";
+$lang["NEXT"] = "ë¤ì";
+$lang["SHOWALL"] = "모ë 보기";
+
+$lang["BADCMD"] = "ëª
ë ¹ ì¤í ìë¬";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion íë¡ì í¸";
+$lang["SERVER"] = "Subversion ìë²";
+
+$lang["SEARCHLOG"] = "ë¡ê·¸ ê²ì";
+$lang["CLEARLOG"] = "ê²ì ì¡°ê±´ ìì ";
+$lang["MORERESULTS"] = "ëë¨¸ì§ ê²ì ê²°ê³¼...";
+$lang["NORESULTS"] = "ê²ì ì¡°ê±´ì ë§ë ê²°ê³¼ê° ììµëë¤.";
+$lang["NOMORERESULTS"] = "ë ì´ì ê²ì ì¡°ê±´ì ë§ë ê²°ê³¼ê° ììµëë¤.";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "íì¼ ìì ë¨";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "íë²í¸";
+$lang["BLAMEFOR"] = "ìì í ì¬ë 보기, 리ë¹ì ";
+
+$lang["YEARS"] = "ë
";
+$lang["MONTHS"] = "ê°ì";
+$lang["WEEKS"] = "주ì¼";
+$lang["DAYS"] = "ì¼";
+$lang["HOURS"] = "ìê°";
+$lang["MINUTES"] = "ë¶";
+
+$lang["GO"] = "Go";
+
+$lang["PATHCOMPARISON"] = "ê²½ë¡ ë¹êµ";
+$lang["COMPAREPATHS"] = "ê²½ë¡ ë¹êµí기";
+$lang["COMPAREREVS"] = "리ë¹ì ë¹êµí기";
+$lang["PROPCHANGES"] = "í¹ì± ë³ê²½ :";
+$lang["CONVFROM"] = "ì´ ë¹êµë ë°ë ê²½ë¡ë¥¼ ë³´ì¬ ì¤ëë¤.";
+$lang["TO"] = "ìì";
+$lang["REVCOMP"] = "ì ë¹êµ";
+$lang["COMPPATH"] = "ë¹êµ ê²½ë¡:";
+$lang["WITHPATH"] = "ê²½ë¡:";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "";
+$lang["ENDNOBR"] = "";
+
+// $lang["NOBR"] = "<nobr>";
+// $lang["ENDNOBR"] = "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/portuguese.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/portuguese.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/portuguese.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,81 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// english.inc
+//
+// English language strings
+
+$lang["LOG"] = "Log";
+$lang["DIFF"] = "Diff";
+
+$lang["NOREP"] = "Não foi indicado um repositório";
+$lang["NOPATH"] = "Path Inválida";
+
+$lang["DIFFREVS"] = "Diferenças entre revisões";
+$lang["AND"] = "e";
+$lang["REV"] = "Rev";
+$lang["LINE"] = "Linha";
+$lang["SHOWENTIREFILE"] = "Mostrar todo o ficheiro";
+$lang["SHOWCOMPACT"] = "Mostrar apenas áreas com diferenças";
+
+$lang["DIFFPREV"] = "Diferenças com a anterior";
+
+$lang["REVINFO"] = "Notas desta revisão";
+$lang["GOYOUNGEST"] = "Revisão mais recente";
+$lang["LASTMOD"] = "Última alteração";
+$lang["LOGMSG"] = "Mensagem de Log";
+$lang["CHANGES"] = "Alterações";
+$lang["SHOWCHANGED"] = "Mostrar ficheiros alterados";
+$lang["HIDECHANGED"] = "Esconder ficheiros alterados";
+$lang["NEWFILES"] = "Novos ficheiros";
+$lang["CHANGEDFILES"] = "Ficheiros alterados";
+$lang["DELETEDFILES"] = "Ficheiros apagados";
+$lang["VIEWLOG"] = "Ver Log";
+$lang["PATH"] = "Path";
+$lang["AUTHOR"] = "Autor";
+$lang["AGE"] = "Idade";
+$lang["LOG"] = "Log";
+$lang["CURDIR"] = "Directoria Currente";
+
+$lang["PREV"] = "Anterior";
+$lang["NEXT"] = "Seguinte";
+$lang["SHOWALL"] = "Mostrar todos";
+
+$lang["BADCMD"] = "Erro ao correr este comando";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion Projectos";
+$lang["SERVER"] = "Subversion Servidor";
+
+$lang["SEARCHLOG"] = "Pesquisar o Search log por";
+$lang["CLEARLOG"] = "Limpar pesquisa";
+$lang["MORERESULTS"] = "Encontrar mais...";
+$lang["NORESULTS"] = "A pesquisa não devolveu nenhum log";
+$lang["NOMORERESULTS"] = "Não existem mais resultados (logs) para a pesquisa";
+
+$lang["YEARS"] = "anos";
+$lang["MONTHS"] = "meses";
+$lang["WEEKS"] = "semanas";
+$lang["DAYS"] = "dias";
+$lang["HOURS"] = "horas";
+$lang["MINUTES"] = "minutos";
+
+$lang["GO"] = "Go";
Added: trunk/svn.matroska.org/WebSVN/languages/russian.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/russian.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/russian.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,90 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// russian.inc
+//
+// Russian language strings (win1251)
+//
+
+$lang["LOG"] = "Ïðîòîêîë";
+$lang["DIFF"] = "Ñðàâíåíèå";
+
+$lang["NOREP"] = "Ðåïîçèòîðèé íå çàäàí";
+$lang["NOPATH"] = "Ïóòü íå íàéäåí";
+
+$lang["DIFFREVS"] = "Ñðàâíåíèå ðåâèçèé";
+$lang["AND"] = "è";
+$lang["REV"] = "ðåâ.";
+$lang["LINE"] = "Ñòðîêà";
+$lang["SHOWENTIREFILE"] = "Ïîêàçàòü öåëûé ôàéë";
+$lang["SHOWCOMPACT"] = "Îòîáðàæàòü òîëüêî îáëàñòè ñ ðàçëè÷èÿìè";
+
+$lang["DIFFPREV"] = "Ñðàâíåíèå ñ ïðåäûäóùèì";
+$lang["BLAME"] = "Blame";
+
+$lang["REVINFO"] = "Èíôîðìàöèÿ î ðåâèçèè";
+$lang["GOYOUNGEST"] = "Èäòè ê ïîñëåäíåé ðåâèçèè";
+$lang["LASTMOD"] = "Ïîñëåäíåå èçìåíåíèå";
+$lang["LOGMSG"] = "Ðåãèñòðàöèîííîå ñîîáùåíèå";
+$lang["CHANGES"] = "Èçìåíåíèÿ";
+$lang["SHOWCHANGED"] = "Ïîêàç èçìåíèâøèåñÿ ôàéëû";
+$lang["HIDECHANGED"] = "Ñêðûòü èçìåíèâøèåñÿ ôàéëû";
+$lang["NEWFILES"] = "Íîâûå ôàéëû";
+$lang["CHANGEDFILES"] = "Èçìåíåííûå ôàéëû";
+$lang["DELETEDFILES"] = "Óäàëåííûå ôàéëû";
+$lang["VIEWLOG"] = "Ñìîòðåòü ïðîòîêîë";
+$lang["PATH"] = "Ïóòü";
+$lang["AUTHOR"] = "Àâòîð";
+$lang["AGE"] = "Âîçðàñò";
+$lang["LOG"] = "Ïðîòîêîë";
+$lang["CURDIR"] = "Òåêóùèé êàòàëîã";
+
+$lang["PREV"] = "Ïðåä.";
+$lang["NEXT"] = "Ñëåä.";
+$lang["SHOWALL"] = "Ïîêàçàòü âñ¸";
+
+$lang["BADCMD"] = "Îøèáêà âûïîëíåíèÿ ýòîé êîììàíäû";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion Projects";
+$lang["SERVER"] = "Subversion Server";
+
+$lang["SEARCHLOG"] = "Èñêàòü log for";
+$lang["CLEARLOG"] = "Î÷èñòèòü òåêóùèé ïîèñê";
+$lang["MORERESULTS"] = "Èñêàòü åùå ñîâïàäåíèÿ...";
+$lang["NORESULTS"] = "There are no logs matching your query";
+$lang["NOMORERESULTS"] = "There are no more logs matching your query";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "Ôàèéë(û) èçìåíåíû";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "Ñòðîêà #.";
+$lang["BLAMEFOR"] = "Blame information for rev";
+
+$lang["YEARS"] = "ãîä";
+$lang["MONTHS"] = "ìåñÿö";
+$lang["WEEKS"] = "íåäåëÿ";
+$lang["DAYS"] = "äåíü";
+$lang["HOURS"] = "÷àñ";
+$lang["MINUTES"] = "ìèíóòà";
+
+$lang["GO"] = "Go";
Added: trunk/svn.matroska.org/WebSVN/languages/spanish.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/spanish.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/spanish.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,112 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// english.inc
+//
+// English language strings
+
+$lang["LOG"] = "Log";
+$lang["DIFF"] = "Diff";
+
+$lang["NOREP"] = "No se especificó un repositorio";
+$lang["NOPATH"] = "Ruta no encontrada";
+$lang["SUPPLYREP"] = "Por Favor, configure una ruta a un repositorio en include/config.inc usando \$config->parentPath o \$config->addRepository<p>Verifique la guía de instalación para mas detalles";
+
+$lang["DIFFREVS"] = "Diff entre versiones";
+$lang["AND"] = "y";
+$lang["REV"] = "Rev";
+$lang["LINE"] = "Línea";
+$lang["SHOWENTIREFILE"] = "Mostrar el archivo completo";
+$lang["SHOWCOMPACT"] = "Solo mostrar áreas con diferencias";
+
+$lang["DIFFPREV"] = "Comparar con el anterior";
+$lang["BLAME"] = "Autoría";
+
+$lang["REVINFO"] = "Información sobre la revisión";
+$lang["GOYOUNGEST"] = "Ir a la última revisión";
+$lang["LASTMOD"] = "Ultima modificación";
+$lang["LOGMSG"] = "Mensaje de Log";
+$lang["CHANGES"] = "Cambios";
+$lang["SHOWCHANGED"] = "Mostrar archivos modificados";
+$lang["HIDECHANGED"] = "Ocultar archivos modificados";
+$lang["NEWFILES"] = "Archivos Nuevos";
+$lang["CHANGEDFILES"] = "Archivos modificados";
+$lang["DELETEDFILES"] = "Archivos borrados";
+$lang["VIEWLOG"] = "Ver Log";
+$lang["PATH"] = "Ruta";
+$lang["AUTHOR"] = "Autor";
+$lang["AGE"] = "Antigüedad";
+$lang["LOG"] = "Log";
+$lang["CURDIR"] = "Directorio Actual";
+$lang["TARBALL"] = "Tarball";
+
+$lang["PREV"] = "Ant";
+$lang["NEXT"] = "Sig";
+$lang["SHOWALL"] = "Mostrar todo";
+
+$lang["BADCMD"] = "Error ejecutando ese comando";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Proyectos de Subversion";
+$lang["SERVER"] = "Servidor de Subversion";
+
+$lang["SEARCHLOG"] = "Buscar en el log";
+$lang["CLEARLOG"] = "Limpiar la búsqueda actual";
+$lang["MORERESULTS"] = "Buscar mas coincidencias";
+$lang["NORESULTS"] = "Ningún log coincide con su búsqueda";
+$lang["NOMORERESULTS"] = "No hay mas logs que coincidan con su búsqueda";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "Archivo(s) modificados";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "Línea Nro.";
+$lang["BLAMEFOR"] = "Información de culpa para rev";
+
+$lang["YEARS"] = "Años";
+$lang["MONTHS"] = "meses";
+$lang["WEEKS"] = "semanas";
+$lang["DAYS"] = "días";
+$lang["HOURS"] = "horas";
+$lang["MINUTES"] = "minutos";
+
+$lang["GO"] = "Ir";
+
+$lang["PATHCOMPARISON"] = "Comparación de rutas";
+$lang["COMPAREPATHS"] = "Comparar Rutas";
+$lang["COMPAREREVS"] = "Comparar Revisiones";
+$lang["PROPCHANGES"] = "Cambios de propiedades :";
+$lang["CONVFROM"] = "Esta Comparación muestra los cambios necesarios para convertir la ruta";
+$lang["TO"] = "a";
+$lang["REVCOMP"] = "Revertir comparación";
+$lang["COMPPATH"] = "Comparar Ruta:";
+$lang["WITHPATH"] = "Con Ruta:";
+$lang["FILEDELETED"] = "Archivo Eliminado";
+$lang["FILEADDED"] = "Archivo Nuevo";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "";
+$lang["ENDNOBR"] = "";
+
+// $lang["NOBR"] = "<nobr>";
+// $lang["ENDNOBR"] = "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/swedish.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/swedish.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/swedish.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,114 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// swedish.inc
+//
+// Swedish language strings
+
+$lang["LOG"] = "Logg";
+$lang["DIFF"] = "Skillnad";
+
+$lang["NOREP"] = "Inget arkiv angivet"; //repository
+$lang["NOPATH"] = "Sökvägen saknas";
+$lang["SUPPLYREP"] = "Vänligen sätt upp en söväg till arkivet i include/config.inc med \$config->parentPath eller \$config->addRepository<p>Se installationsanvisningen för mer detaljer";
+
+$lang["DIFFREVS"] = "Skillnad mellan rev.";
+$lang["AND"] = "och";
+$lang["REV"] = "Rev";
+$lang["LINE"] = "Rad";
+$lang["SHOWENTIREFILE"] = "Visa hela filen";
+$lang["SHOWCOMPACT"] = "Visa bara områden med skillnader";
+
+$lang["DIFFPREV"] = "Skillnad mot föregående";
+$lang["BLAME"] = "Ansvarig";
+
+$lang["REVINFO"] = "Revisionsinformation";
+$lang["GOYOUNGEST"] = "Gå till senaste revision";
+$lang["LASTMOD"] = "Senast ändrad";
+$lang["LOGMSG"] = "Loggmeddelande";
+$lang["CHANGES"] = "ändringar";
+$lang["SHOWCHANGED"] = "Visa ändrade filer";
+$lang["HIDECHANGED"] = "Göm ändrade filer";
+$lang["NEWFILES"] = "Nya filer";
+$lang["CHANGEDFILES"] = "Ändrade filer";
+$lang["DELETEDFILES"] = "Raderade filer";
+$lang["VIEWLOG"] = "Visa Logg";
+$lang["PATH"] = "Sökväg";
+$lang["AUTHOR"] = "Författare";
+$lang["AGE"] = "Ålder";
+$lang["LOG"] = "Logg";
+$lang["CURDIR"] = "Nuvarande folder";
+$lang["TARBALL"] = "Tarball";
+
+$lang["PREV"] = "Föreg.";
+$lang["NEXT"] = "Nästa";
+$lang["SHOWALL"] = "Visa alla";
+
+$lang["BADCMD"] = "Fel vid körning av kommande";
+
+$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
+$lang["PROJECTS"] = "Subversion Projekt";
+$lang["SERVER"] = "Subversion Server";
+
+$lang["SEARCHLOG"] = "Sök i logg efter";
+$lang["CLEARLOG"] = "Rensa nuvarande sökning";
+$lang["MORERESULTS"] = "Hitta fler träffar...";
+$lang["NORESULTS"] = "Det finns ingen logg som motsvarar din sökning";
+$lang["NOMORERESULTS"] = "Det finns inga fler loggar i din sökning";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "fil(er) ändrade";
+$lang["RSSFEED"] = "RSS";
+
+$lang["LINENO"] = "Radnr.";
+$lang["BLAMEFOR"] = "Ansvariginformation för rev";
+
+$lang["YEARS"] = "år";
+$lang["MONTHS"] = "månader";
+$lang["WEEKS"] = "veckor";
+$lang["DAYS"] = "dagar";
+$lang["HOURS"] = "timmar";
+$lang["MINUTES"] = "minuter";
+
+$lang["GO"] = "Utför";
+
+$lang["PATHCOMPARISON"] = "Sökvägsjämförelse";
+$lang["COMPAREPATHS"] = "Jämför sökvägar";
+$lang["COMPAREREVS"] = "Jämför revisioner";
+$lang["PROPCHANGES"] = "Egenskapsändringar :";
+$lang["CONVFROM"] = "Denna jämförelse visar ändringarna som behövs för att konvertera sökväg ";
+$lang["TO"] = "till";
+$lang["REVCOMP"] = "Växla jämförelse";
+$lang["COMPPATH"] = "Jämför sökväg:";
+$lang["WITHPATH"] = "Med sökväg:";
+$lang["FILEDELETED"] = "Filen raderad";
+$lang["FILEADDED"] = "Ny fil";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "";
+$lang["ENDNOBR"] = "";
+
+// $lang["NOBR"] = "<nobr>";
+// $lang["ENDNOBR"] = "</nobr>";
+
+
Added: trunk/svn.matroska.org/WebSVN/languages/tchinese-utf8.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/tchinese-utf8.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/tchinese-utf8.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,107 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// tchinese.inc
+//
+// Traditional Chinese language strings
+//
+// Author: Yuan-Chung Hsiao <[email protected]>
+//
+
+$lang["LOG"] = "æ·å²è¨é??";
+$lang["DIFF"] = "æ¯å??";
+
+$lang["NOREP"] = "æ²æ?æ?æ??åº?";
+$lang["NOPATH"] = "?¾ä¸å?°è·¯å¾?";
+$lang["SUPPLYREP"] = "è«å¨include/config.incä¸è¨å®æ?æ??庫ä?ç½®??? \$config->parentPath ??? \$config->addRepository<p>?´è©³ç´°?????§å®¹è«è?å?è?æ?å??";
+
+$lang["DIFFREVS"] = "ä¸å??????¬??ç??å·®ç°";
+$lang["AND"] = "???";
+$lang["REV"] = "ä¿®è????????";
+$lang["LINE"] = "è¡?";
+$lang["SHOWALL"] = "顯示å®??´???æªæ??";
+$lang["SHOWCOMPACT"] = "?ªé¡¯ç¤ºä¸å?????";
+
+$lang["DIFFPREV"] = "?????ä?????次æ?è??";
+$lang["BLAME"] = "è´è²¬";
+
+$lang["REVINFO"] = "ä¿®è?????次è??è¨?";
+$lang["GOYOUNGEST"] = "??°æ???°???ä¿®è??";
+$lang["LASTMOD"] = "???å¾??´???";
+$lang["LOGMSG"] = "è¨æ?¯è?é??";
+$lang["CHANGES"] = "?¹è®?";
+$lang["SHOWCHANGED"] = "顯示已è?å?æ?æ??";
+$lang["HIDECHANGED"] = "?±??å·²è®å?æ?æ??";
+$lang["NEWFILES"] = "?°æªæ??";
+$lang["CHANGEDFILES"] = "å·²è?å?æ?æ??";
+$lang["DELETEDFILES"] = "å·²åª?¤æªæ??";
+$lang["VIEWLOG"] = "??æ·?²è¨é??";
+$lang["PATH"] = "è·¯å??";
+$lang["AUTHOR"] = "ä½è??";
+$lang["AGE"] = "?´??æ?????";
+$lang["LOG"] = "æ·å²è¨é??";
+$lang["CURDIR"] = "?®??ç®???";
+$lang["TARBALL"] = "Tarball ? ¼å¼?";
+
+$lang["PREV"] = "ä¸ä??ç?";
+$lang["NEXT"] = "ä¸ä??ç?";
+$lang["SHOWALL"] = "顯示??¨é??";
+
+$lang["BADCMD"] = "?·è¡???¯èª¤";
+
+$lang["POWERED"] = "?¡?¨ <a href=\"http://websvn.tigris.org/\">WebSVN</a>?¶è¨?";
+$lang["PROJECTS"] = "Subversion å°?æ¡?";
+$lang["SERVER"] = "Subversion Server";
+
+$lang["SEARCHLOG"] = "??å?è?é????§å®¹";
+$lang["CLEARLOG"] = "æ¸??¤?®??æ?å??";
+$lang["MORERESULTS"] = "?¾??°æ´å¤ç??符å?????...";
+$lang["NORESULTS"] = "?¥è©¢ç?æ?ä¸¦æ²æ?符??????ç´????";
+$lang["NOMORERESULTS"] = "æ²æ?æ´å¤ç?????符å??ä½ ç???¥è©?";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "??æ?æ??è®å??";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "è¡?";
+$lang["BLAMEFOR"] = "????¬è´è²¬è³?è¨?";
+
+$lang["YEARS"] = "å¹´å??";
+$lang["MONTHS"] = "??????";
+$lang["WEEKS"] = "??±å??";
+$lang["DAYS"] = "?¥???";
+$lang["HOURS"] = "å°æ?????";
+$lang["MINUTES"] = "?????å??";
+
+$lang["GO"] = "???";
+
+$lang["COMPAREPATHS"] = "æ¯å?è·¯å¾?";
+$lang["COMPAREREVS"] = "æ¯å?ä¿®è¨????";
+$lang["PROPCHANGES"] = "?¹è®å±¬??? :";
+$lang["CONVFROM"] = "??å?æ?å?顯示å??????¹è®è?æ?è·¯å¾?";
+$lang["TO"] = "???";
+$lang["REVCOMP"] = "é¡å?æ?å??";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "";
+$lang["ENDNOBR"] = "";
Added: trunk/svn.matroska.org/WebSVN/languages/tchinese.inc
===================================================================
--- trunk/svn.matroska.org/WebSVN/languages/tchinese.inc 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/tchinese.inc 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,108 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// tchinese.inc
+//
+// Traditional Chinese language strings
+//
+// Author: Yuan-Chung Hsiao <[email protected]>
+//
+
+$lang["LOG"] = "¾ú¥v°O¿ý";
+$lang["DIFF"] = "¤ñ¹ï";
+
+$lang["NOREP"] = "¨S¦³ÀÉ®×®w";
+$lang["NOPATH"] = "§ä¤£¨ì¸ô®|";
+$lang["SUPPLYREP"] = "½Ð¦binclude/config.inc¤¤³]©wÀÉ®×®w¦ì¸m¬° \$config->parentPath ©Î \$config->addRepository<p>§ó¸Ô²Óªº¤º®e½Ð¨£¦w¸Ë¤â¥U";
+
+$lang["DIFFREVS"] = "¤£¦Pª©¥»¶¡ªº®t²§";
+$lang["AND"] = "»P";
+$lang["REV"] = "×qª©¸¹";
+$lang["LINE"] = "¦æ";
+$lang["SHOWALL"] = "Åã¥Ü§¹¾ãªºÀÉ®×";
+$lang["SHOWCOMPACT"] = "¥uÅã¥Ü¤£¦P³B";
+
+$lang["DIFFPREV"] = "»P«e¤@ª©¦¸¤ñ¸û";
+$lang["BLAME"] = "Äþ³d";
+
+$lang["REVINFO"] = "×qª©¦¸¸ê°T";
+$lang["GOYOUNGEST"] = "¨ì³Ì·sªº×q";
+$lang["LASTMOD"] = "³Ì«á§ó°Ê";
+$lang["LOGMSG"] = "°T®§°O¿ý";
+$lang["CHANGES"] = "§ïÅÜ";
+$lang["SHOWCHANGED"] = "Åã¥Ü¤wÅܰÊÀÉ®×";
+$lang["HIDECHANGED"] = "ÁôÂäwÅܰÊÀÉ®×";
+$lang["NEWFILES"] = "·sÀÉ®×";
+$lang["CHANGEDFILES"] = "¤wÅܰÊÀÉ®×";
+$lang["DELETEDFILES"] = "¤w§R°£ÀÉ®×";
+$lang["VIEWLOG"] = "¬Ý¾ú¥v°O¿ý";
+$lang["PATH"] = "¸ô®|";
+$lang["AUTHOR"] = "§@ªÌ";
+$lang["AGE"] = "§ó°Ê®É¶¡";
+$lang["LOG"] = "¾ú¥v°O¿ý";
+$lang["CURDIR"] = "¥Ø«e¥Ø¿ý";
+$lang["TARBALL"] = "Tarball ®æ¦¡";
+
+$lang["PREV"] = "¤W¤@µ§";
+$lang["NEXT"] = "¤U¤@µ§";
+$lang["SHOWALL"] = "Åã¥Ü¥þ³¡";
+
+$lang["BADCMD"] = "°õ¦æ¿ù»~";
+
+$lang["POWERED"] = "±Ä¥Î <a href=\"http://websvn.tigris.org/\">WebSVN</a>¬[³]";
+$lang["PROJECTS"] = "Subversion ±M®×";
+$lang["SERVER"] = "Subversion Server";
+
+$lang["SEARCHLOG"] = "·j´M°O¿ý¤º®e";
+$lang["CLEARLOG"] = "²M°£¥Ø«e·j´M";
+$lang["MORERESULTS"] = "§ä¨ì§ó¦hªº²Å¦Xªº...";
+$lang["NORESULTS"] = "¬d¸ßµ²ªG¨Ã¨S¦³²Å¦Xªº¬ö¿ý";
+$lang["NOMORERESULTS"] = "¨S¦³§ó¦h¬ö¿ý²Å¦X§Aªº¬d¸ß";
+
+$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
+$lang["FILESMODIFIED"] = "ÓÀÉ®×ÅܰÊ";
+$lang["RSSFEED"] = "RSS feed";
+
+$lang["LINENO"] = "¦æ";
+$lang["BLAMEFOR"] = "ª©¥»Äþ³d¸ê°T";
+
+$lang["YEARS"] = "¦~«e";
+$lang["MONTHS"] = "¤ë«e";
+$lang["WEEKS"] = "¶g«e";
+$lang["DAYS"] = "¤é«e";
+$lang["HOURS"] = "¤p®É«e";
+$lang["MINUTES"] = "¤ÀÄÁ«e";
+
+$lang["GO"] = "¨ì";
+
+$lang["COMPAREPATHS"] = "¤ñ¹ï¸ô®|";
+$lang["COMPAREREVS"] = "¤ñ¹ï×qª©";
+$lang["PROPCHANGES"] = "§ïÅÜÄÝ©Ê :";
+$lang["CONVFROM"] = "³oÓ¤ñ¹ïÅã¥Ü¥²»Ý§ïÅÜÂà´«¸ô®|";
+$lang["TO"] = "¨ì";
+$lang["REVCOMP"] = "ÄAˤñ¹ï";
+
+// The following are defined by some languages to stop unwanted line splitting
+// in the template files.
+
+$lang["NOBR"] = "";
+$lang["ENDNOBR"] = "";
+
Added: trunk/svn.matroska.org/WebSVN/licence.txt
===================================================================
--- trunk/svn.matroska.org/WebSVN/licence.txt 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/licence.txt 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,280 @@
+ 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
Added: trunk/svn.matroska.org/WebSVN/listing.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/listing.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/listing.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,324 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// listing.php
+//
+// Show the listing for the given repository/path/revision
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require_once("include/utils.inc");
+require_once("include/template.inc");
+require_once("include/bugtraq.inc");
+
+function fileLink($path, $file, $returnjoin = false)
+{
+ global $rep, $passrev, $showchanged, $config;
+
+ if ($path == "" || $path{0} != "/")
+ $ppath = "/".$path;
+ else
+ $ppath = $path;
+
+ if ($returnjoin)
+ return $ppath.$file;
+
+ $isDir = $file{strlen($file) - 1} == "/";
+
+ if ($isDir)
+ {
+ $url = $config->getURL($rep, $ppath.$file, "dir");
+ return "<a href=\"${url}rev=$passrev&sc=$showchanged\">$file</a>";
+ }
+ else
+ {
+ $url = $config->getURL($rep, $ppath.$file, "file");
+ return "<a href=\"${url}rev=$passrev&sc=$showchanged\">$file</a>";
+ }
+}
+
+function showDirFiles($svnrep, $subs, $level, $limit, $rev, $listing, $index)
+{
+ global $rep, $passrev, $showchanged, $config, $lang;
+
+ $path = "";
+
+ for ($n = 0; $n <= $level; $n++)
+ {
+ $path .= $subs[$n]."/";
+ }
+
+ $contents = $svnrep->dirContents($path, $rev);
+
+ // List each file in the current directory
+ $loop = 0;
+ $last_index = 0;
+ foreach($contents as $file)
+ {
+ $isDir = ($file{strlen($file) - 1} == "/"?1:0);
+
+ if ($isDir)
+ {
+ $listing[$index]["filetype"] = "dir";
+
+ if ($rep->getAllowDownload())
+ {
+ $dlurl = $config->getURL($rep, $path.$file, "dl");
+ $listing[$index]["fileviewdllink"] = "<a href=\"${dlurl}rev=$passrev&isdir=1\">${lang["TARBALL"]}</a>";
+ }
+ else
+ $listing[$index]["fileviewdllink"] = " ";
+ }
+ else
+ {
+ if ($level != $limit)
+ {
+ // List directories only, skip all files
+ continue;
+ }
+
+ $listing[$index]["fileviewdllink"] = " ";
+ $listing[$index]["filetype"] = strrchr($file, ".");
+ }
+
+ $listing[$index]["rowparity"] = ($index % 2)?"1":"0";
+
+ $listing[$index]["compare_box"] = "<input type=\"checkbox\" name=\"compare[]\" value=\"".fileLink($path, $file, true)."@$passrev\" onClick=\"checkCB(this)\">";
+
+ if (!strcmp($subs[$level+1]."/", $file) || !strcmp($subs[$level+1], $file))
+ $listing[$index]["filelink"] = "<b>".fileLink($path, $file)."</b>";
+ else
+ $listing[$index]["filelink"] = fileLink($path, $file);
+
+ // The history command doesn't return with a trailing slash. We need to remember here if the
+ // file is a directory or not!
+
+ $listing[$index]["isDir"] = $isDir;
+
+ $listing[$index]["level"] = $level;
+ $listing[$index]["node"] = 0; // t-node
+
+ $fileurl = $config->getURL($rep, $path.$file, "log");
+ $listing[$index]["fileviewloglink"] = "<a href=\"${fileurl}rev=$passrev&sc=$showchanged&isdir=$isDir\">${lang["VIEWLOG"]}</a>";
+
+ $rssurl = $config->getURL($rep, $path.$file, "rss");
+ if ($rep->getHideRss())
+ {
+ $listing[$index]["rsslink"] = "<a href=\"${rssurl}rev=$passrev&sc=$showchanged&isdir=$isDir\">${lang["RSSFEED"]}</a>";
+ $listing[$index]["rssanchor"] = "<a href=\"${rssurl}rev=$passrev&sc=$showchanged&isdir=$isDir\">";
+ }
+
+ $index++;
+ $loop++;
+ $last_index = $index;
+
+ if (($level != $limit) && ($isDir))
+ {
+ if (!strcmp($subs[$level + 1]."/", $file))
+ {
+ $listing = showDirFiles($svnrep, $subs, $level + 1, $limit, $rev, $listing, $index);
+ $index = count($listing);
+ }
+ }
+ }
+
+ if ($last_index != 0)
+ {
+ $listing[$last_index - 1]["node"] = 1; // l-node
+ }
+
+ return $listing;
+}
+
+function showTreeDir($svnrep, $path, $rev, $listing)
+{
+ global $vars;
+
+ $subs = explode("/", $path);
+
+ // For directory, the last element in the subs is empty.
+ // For file, the last element in the subs is the file name.
+ // Therefore, it is always count($subs) - 2
+ $limit = count($subs) - 2;
+
+ for ($n = 0; $n < $limit; $n++)
+ {
+ $vars["last_i_node"][$n] = FALSE;
+ }
+
+ return showDirFiles($svnrep, $subs, 0, $limit, $rev, $listing, 0);
+
+}
+
+// Make sure that we have a repository
+if (!isset($rep))
+{
+ echo $lang["NOREP"];
+ exit;
+}
+
+$svnrep = new SVNRepository($rep->path);
+
+// Revision info to pass along chain
+$passrev = $rev;
+
+// Get the directory contents of the given revision, or HEAD if not defined
+$contents = $svnrep->dirContents($path, @$rev);
+
+$history = $svnrep->getHistory($path);
+
+if (!empty($history[0]))
+ $youngest = $history[0]["rev"];
+else
+ $youngest = -1;
+
+// Unless otherwise specified, we get the log details of the latest change
+if (empty($rev))
+ $logrev = $youngest;
+else
+ $logrev = $rev;
+
+$log = $svnrep->getLogDetails($path, $logrev);
+
+$headlog = $svnrep->getLogDetails($path);
+$headrev = $headlog["rev"];
+
+// If we're not looking at a specific revision, get the HEAD revision number
+// (the revision of the rest of the tree display)
+
+if (empty($rev))
+{
+ $rev = $headrev;
+}
+
+if ($path == "" || $path{0} != "/")
+ $ppath = "/".$path;
+else
+ $ppath = $path;
+
+$vars["repname"] = $rep->name;
+
+$dirurl = $config->getURL($rep, $path, "dir");
+$logurl = $config->getURL($rep, $path, "log");
+$rssurl = $config->getURL($rep, $path, "rss");
+$dlurl = $config->getURL($rep, $path, "dl");
+$compurl = $config->getURL($rep, "", "comp");
+
+if ($passrev != 0 && $passrev != $headrev && $youngest != -1)
+ $vars["goyoungestlink"] = "<a href=\"${dirurl}opt=dir&sc=1\">${lang["GOYOUNGEST"]}</a>";
+else
+ $vars["goyoungestlink"] = "";
+
+$bugtraq = new Bugtraq($rep, $svnrep, $ppath);
+
+$vars["action"] = "";
+$vars["author"] = $log['author'];
+$vars["date"] = $log['date'];
+$vars["log"] = nl2br($bugtraq->replaceIDs(create_anchors($log['message'])));
+$vars["rev"] = $rev;
+$vars["lastchangedrev"] = $logrev;
+$vars["path"] = $ppath;
+
+if (!$showchanged)
+{
+ $vars["showchangeslink"] = "<a href=\"${dirurl}rev=$passrev&sc=1\">${lang["SHOWCHANGED"]}</a>";
+ $vars["hidechangeslink"] = "";
+
+ $vars["hidechanges"] = true;
+ $vars["showchanges"] = false;
+}
+else
+{
+ $vars["showchangeslink"] = "";
+
+ $changes = $svnrep->getChangedFiles($rev);
+
+ $first = true;
+ $vars["newfilesbr"] = "";
+ $vars["newfiles"] = "";
+ foreach ($changes["added"] as $file)
+ {
+ if (!$first) $vars["newfilesbr"] .= "<br>";
+ $first = false;
+ $vars["newfilesbr"] .= fileLink("", $file);
+ $vars["newfiles"] .= " ".fileLink("", $file);
+ }
+
+ $first = true;
+ $vars["changedfilesbr"] = "";
+ $vars["changedfiles"] = "";
+ foreach ($changes["updated"] as $file)
+ {
+ if (!$first) $vars["changedfilesbr"] .= "<br>";
+ $first = false;
+ $vars["changedfilesbr"] .= fileLink("", $file);
+ $vars["changedfiles"] .= " ".fileLink("", $file);
+ }
+
+ $first = true;
+ $vars["deletedfilesbr"] = "";
+ $vars["deletedfiles"] = "";
+ foreach ($changes["deleted"] as $file)
+ {
+ if (!$first) $vars["deletedfilesbr"] .= "<br>";
+ $first = false;
+ $vars["deletedfilesbr"] .= $file;
+ $vars["deletedfiles"] .= " ".$file;
+ }
+
+ $vars["hidechangeslink"] = "<a href=\"${dirurl}rev=$passrev&sc=0\">${lang["HIDECHANGED"]}</a>";
+
+ $vars["hidechanges"] = false;
+ $vars["showchanges"] = true;
+}
+
+createDirLinks($rep, $ppath, $passrev, $showchanged);
+$vars["curdirloglink"] = "<a href=\"${logurl}rev=$passrev&sc=$showchanged&isdir=1\">${lang["VIEWLOG"]}</a>";
+$vars["curdircomplink"] = "<a href=\"${compurl}compare%5B%5D=".urlencode($history[1]["path"])."@".$history[1]["rev"]."&compare%5B%5D=".urlencode($history[0]["path"])."@".$history[0]["rev"]."\">${lang["DIFFPREV"]}</a>";
+if (isset($history[1]))
+ $vars["curdircomplink"] = "<a href=\"${compurl}compare%5B%5D=".urlencode($history[1]["path"])."@".$history[1]["rev"]."&compare%5B%5D=".urlencode($history[0]["path"])."@".$history[0]["rev"]."\">${lang["DIFFPREV"]}</a>";
+else
+ $vars["curdircomplink"] = "";
+
+if ($rep->getHideRss())
+{
+ $vars["curdirrsslink"] = "<a href=\"${rssurl}rev=$passrev&sc=$showchanged&isdir=1\">${lang["RSSFEED"]}</a>";
+ $vars["curdirrssanchor"] = "<a href=\"${rssurl}rev=$passrev&sc=$showchanged&isdir=1\">";
+}
+
+if ($rep->getAllowDownload())
+ $vars["curdirdllink"] = "<a href=\"${dlurl}rev=$passrev&isdir=1\">${lang["TARBALL"]}</a>";
+
+$url = $config->getURL($rep, "", "comp");
+$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">";
+$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREPATHS"]}\">";
+$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\"><input type=\"hidden\" name=\"sc\" value=\"$showchanged\"></form>";
+
+$listing = array();
+$listing = showTreeDir($svnrep, $path, $rev, $listing);
+
+$vars["version"] = $version;
+
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."directory.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/log.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/log.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/log.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,309 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+// log.php
+//
+// Show the logs for the given path
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require_once("include/utils.inc");
+require_once("include/template.inc");
+require_once("include/bugtraq.inc");
+
+$page = (int)@$_REQUEST["page"];
+$all = (@$_REQUEST["all"] == 1)?1:0;
+$isDir = (@$_REQUEST["isdir"] == 1)?1:0;
+$dosearch = (@$_REQUEST["logsearch"] == 1)?1:0;
+$search = trim(@$_REQUEST["search"]);
+$words = explode(" ", $search);
+
+$fromRev = (int)@$_REQUEST["fr"];
+
+// Max number of results to find at a time
+$numSearchResults = 10;
+
+if ($search == "")
+ $dosearch = false;
+
+// removeAccents
+//
+// Remove all the accents from a string. This function doesn't seem
+// ideal, but expecting everyone to install 'unac' seems a little
+// excessive as well...
+
+function removeAccents($string)
+{
+ return strtr($string,
+ "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
+ "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
+}
+
+// Normalise the search words
+foreach ($words as $index => $word)
+{
+ $words[$index] = strtolower(removeAccents($word));
+
+ // Remove empty string introduced by multiple spaces
+ if ($words[$index] == "")
+ unset($words[$index]);
+}
+
+if (empty($page)) $page = 1;
+
+// If searching, display all the results
+if ($dosearch) $all = true;
+
+$maxperpage = 20;
+
+// Make sure that we have a repository
+if (!isset($rep))
+{
+ echo $lang["NOREP"];
+ exit;
+}
+
+$svnrep = new SVNRepository($rep->path);
+
+$passrev = $rev;
+
+// If there's no revision info, go to the lastest revision for this path
+$history = $svnrep->getHistory($path);
+$youngest = $history[0]["rev"];
+
+if (empty($rev))
+ $rev = $youngest;
+
+if ($path == "" || $path{0} != "/")
+ $ppath = "/".$path;
+else
+ $ppath = $path;
+
+$vars["action"] = $lang["LOG"];
+$vars["repname"] = $rep->name;
+$vars["rev"] = $rev;
+$vars["path"] = $ppath;
+
+createDirLinks($rep, $ppath, $passrev, $showchanged);
+
+$logurl = $config->getURL($rep, $path, "log");
+
+if ($rev != $youngest)
+ $vars["goyoungestlink"] = "<a href=\"${logurl}sc=1\">${lang["GOYOUNGEST"]}</a>";
+else
+ $vars["goyoungestlink"] = "";
+
+// We get the bugtraq variable just once based on the HEAD
+$bugtraq = new Bugtraq($rep, $svnrep, $ppath);
+
+$history = $svnrep->getHistory($path, $rev);
+
+// Get the number of separate revisions
+$revisions = count($history);
+
+if ($all)
+{
+ $firstrevindex = 0;
+ $lastrevindex = $revisions - 1;
+ $pages = 1;
+}
+else
+{
+ // Calculate the number of pages
+ $pages = floor($revisions / $maxperpage);
+ if (($revisions % $maxperpage) > 0) $pages++;
+
+ if ($page > $pages) $page = $pages;
+
+ // Word out where to start and stop
+ $firstrevindex = ($page - 1) * $maxperpage;
+ $lastrevindex = $firstrevindex + $maxperpage - 1;
+ if ($lastrevindex > $revisions - 1) $lastrevindex = $revisions - 1;
+}
+
+$vars["logsearch_moreresultslink"] = "";
+
+$row = 0;
+$index = 0;
+$listing = array();
+$found = false;
+
+for ($n = $firstrevindex; $n <= $lastrevindex; $n++)
+{
+ $r = $history[$n];
+
+ // Assume a good match
+ $match = true;
+
+ $log = $svnrep->getLogDetails($path, $r["rev"]);
+
+ // Check the log for the search words, if searching
+ if ($dosearch)
+ {
+ if ((empty($fromRev) || $fromRev > $r["rev"]))
+ {
+ // Turn all the HTML entities into real characters.
+
+ if (version_compare(phpversion(), "4.1.0", "<"))
+ $msg = html_entity_decode($log["message"]);
+ else
+ $msg = html_entity_decode($log["message"], ENT_COMPAT, $config->outputEnc);
+
+ // Make sure that each word in the search in also in the log
+ foreach($words as $word)
+ {
+ if (strpos(strtolower(removeAccents($msg)), $word) === false)
+ {
+ $match = false;
+ break;
+ }
+ }
+
+ if ($match)
+ {
+ $numSearchResults--;
+ $found = true;
+ }
+ }
+ else
+ $match = false;
+ }
+
+ if ($match)
+ {
+ // Add the trailing slash if we need to (svnlook history doesn't return trailing slashes!)
+ $rpath = $r["path"];
+ if ($isDir && $rpath{strlen($rpath) - 1} != "/")
+ $rpath .= "/";
+
+ // Find the parent path (or the whole path if it's already a directory)
+ $pos = strrpos($rpath, "/");
+ $parent = substr($rpath, 0, $pos + 1);
+
+ $url = $config->getURL($rep, $parent, "dir");
+ $listing[$index]["compare_box"] = "<input type=\"checkbox\" name=\"compare[]\" value=\"$parent@${r["rev"]}\" onClick=\"checkCB(this)\">";
+ $listing[$index]["revlink"] = "<a href=\"${url}rev=${r["rev"]}&sc=1\">${r["rev"]}</a>";
+
+ if ($isDir)
+ {
+ $url = $config->getURL($rep, $rpath, "dir");
+ $listing[$index]["revpathlink"] = "<a href=\"${url}rev=${r["rev"]}&sc=$showchanged\">$rpath</a>";
+ }
+ else
+ {
+ $url = $config->getURL($rep, $rpath, "file");
+ $listing[$index]["revpathlink"] = "<a href=\"${url}rev=${r["rev"]}&sc=$showchanged\">$rpath</a>";
+ }
+
+ $listing[$index]["revauthor"] = $log["author"];
+ $listing[$index]["revage"] = $log["age"];
+ $listing[$index]["revlog"] = nl2br($bugtraq->replaceIDs(create_anchors($log["message"])));
+ $listing[$index]["rowparity"] = "$row";
+
+ $row = 1 - $row;
+ $index++;
+ }
+
+ // If we've reached the search limit, stop here...
+ if (!$numSearchResults)
+ {
+ $url = $config->getURL($rep, $path, "log");
+ $vars["logsearch_moreresultslink"] = "<a href=\"${url}rev=$revamp;&sc=$showchanged&isdir=$isDir&logsearch=1&search=$search&fr=${r["rev"]}\">${lang["MORERESULTS"]}</a>";
+ break;
+ }
+}
+
+$vars["logsearch_resultsfound"] = true;
+
+if ($dosearch && !$found)
+{
+ if ($fromRev == 0)
+ {
+ $vars["logsearch_nomatches"] = true;
+ $vars["logsearch_resultsfound"] = false;
+ }
+ else
+ $vars["logsearch_nomorematches"] = true;
+}
+else if ($dosearch && $numSearchResults > 0)
+{
+ $vars["logsearch_nomorematches"] = true;
+}
+
+// Work out the paging options
+
+$vars["pagelinks"] = "";
+$vars["showalllink"] = "";
+
+if ($pages > 1)
+{
+ $prev = $page - 1;
+ $next = $page + 1;
+ echo "<p><center>";
+
+ if ($page > 1) $vars["pagelinks"] .= "<a href=\"${logurl}rev=$rev&sc=$showchanged&page=$prev\">< ${lang["PREV"]}</a> ";
+ for ($p = 1; $p <= $pages; $p++)
+ {
+ if ($p != $page)
+ $vars["pagelinks"].= "<a href=\"${logurl}rev=$rev&sc=$showchanged&page=$p\">$p</a> ";
+ else
+ $vars["pagelinks"] .= "<b>$p </b>";
+ }
+ if ($page < $pages) $vars["pagelinks"] .=" <a href=\"${logurl}rev=$rev&sc=$showchanged&page=$next\">${lang["NEXT"]} ></a>";
+
+ $vars["showalllink"] = "<a href=\"${logurl}rev=$rev&sc=$showchanged&all=1\">${lang["SHOWALL"]}</a>";
+ echo "</center>";
+}
+
+// Create the project change combo box
+
+$url = $config->getURL($rep, $path, "log");
+$vars["logsearch_form"] = "<form action=\"$url\" method=\"post\" name=\"logsearchform\">";
+
+$vars["logsearch_inputbox"] = "<input name=\"search\" value=\"$search\">";
+
+$vars["logsearch_submit"] = "<input type=\"submit\" value=\"${lang["GO"]}\">";
+$vars["logsearch_endform"] = "<input type=\"hidden\" name=\"logsearch\" value=\"1\">".
+ "<input type=\"hidden\" name=\"op\" value=\"log\">".
+ "<input type=\"hidden\" name=\"rev\" value=\"$rev\">".
+ "<input type=\"hidden\" name=\"sc\" value=\"$showchanged\">".
+ "<input type=\"hidden\" name=\"isdir\" value=\"$isDir\">".
+ "</form>";
+
+if ($search != "")
+{
+ $url = $config->getURL($rep, $path, "log");
+ $vars["logsearch_clearloglink"] = "<a href=\"${url}rev=$rev&sc=$showchanged&isdir=$isDir\">${lang["CLEARLOG"]}</a>";
+}
+else
+ $vars["logsearch_clearloglink"] = "";
+
+$url = $config->getURL($rep, "", "comp");
+$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">";
+$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREREVS"]}\">";
+$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\"><input type=\"hidden\" name=\"sc\" value=\"$showchanged\"></form>";
+
+$vars["version"] = $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."log.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/rss.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/rss.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/rss.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,141 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// RSS feed initial version by Lübbe Onken
+// Modifications for the first official RSS feed release by Tim Armes
+//
+// 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
+//
+// --
+//
+// rss.php
+//
+// Creates an rss feed for the given repository number
+
+include("include/feedcreator.class.php");
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+require_once("include/utils.inc");
+require_once("include/template.inc");
+
+$isDir = (@$_REQUEST["isdir"] == 1)?1:0;
+
+$maxmessages = 20;
+
+// Find the base URL name
+if ($config->multiViews)
+{
+ $baseurl = "";
+}
+else
+{
+ $baseurl = dirname($_SERVER["PHP_SELF"]);
+ if ($baseurl != "" && $baseurl != DIRECTORY_SEPARATOR && $baseurl != "\\" && $baseurl != "/" )
+ $baseurl .= "/";
+ else
+ $baseurl = "/";
+}
+
+$svnrep = new SVNRepository($rep->path);
+
+if ($path == "" || $path{0} != "/")
+ $ppath = "/".$path;
+else
+ $ppath = $path;
+
+$url = $config->getURL($rep, $path, "log");
+$listurl = $config->getURL($rep, $path, "dir");
+
+$history = $svnrep->getHistory($path, $rev);
+
+$cachename = strtr($svnrep->repPath, ":/\\", "___");
+$cachename = $locwebsvnreal.DIRECTORY_SEPARATOR."cache".DIRECTORY_SEPARATOR.$cachename."_rssfeed";
+
+$rss = new UniversalFeedCreator();
+$rss->useCached($cachename);
+$rss->title = $rep->name;
+$rss->description = "${lang["RSSFEEDTITLE"]} - $repname";
+$rss->link = getFullURL($baseurl.$listurl);
+$rss->syndicationURL = $rss->link;
+
+//$divbox = "<div>";
+//$divfont = "<span>";
+
+if ($maxmessages > count($history))
+ $maxmessages = count($history);
+
+for ($n = 0; $n < $maxmessages; $n++)
+{
+ $r = $history[$n];
+
+ $log = $svnrep->getLogDetails($path, $r["rev"]);
+ $changes = $svnrep->getChangedFiles($r["rev"]);
+ $files = count($changes["added"]) + count($changes["deleted"]) + count($changes["updated"]);
+
+ // Add the trailing slash if we need to (svnlook history doesn't return trailing slashes!)
+ $rpath = $r["path"];
+ if ($isDir && $rpath{strlen($rpath) - 1} != "/")
+ $rpath .= "/";
+
+ // Find the parent path (or the whole path if it's already a directory)
+ $pos = strrpos($rpath, "/");
+ $parent = substr($rpath, 0, $pos + 1);
+
+ $url = $config->getURL($rep, $parent, "dir");
+
+ $desc = $log["message"];
+ $item = new FeedItem();
+
+ // For the title, we show the first 10 words of the description
+ $pos = 0;
+ $len = strlen($desc);
+ for ($i = 0; $i < 10; $i++)
+ {
+ if ($pos >= $len) break;
+
+ $pos = strpos($desc, " ", $pos);
+
+ if ($pos === FALSE) break;
+ $pos++;
+ }
+
+ if ($pos !== FALSE)
+ {
+ $sdesc = substr($desc, 0, $pos) . "...";
+ }
+ else
+ {
+ $sdesc = $desc;
+ }
+
+ if ($desc == "") $sdesc = "${lang["REV"]} ${r["rev"]}";
+
+ $item->title = "$sdesc";
+ $item->link = getFullURL($baseurl."${url}rev=${r["rev"]}&sc=$showchanged");
+ $item->description = "<div><strong>${lang["REV"]} ${r["rev"]} - ${log["author"]}</strong> ($files ${lang["FILESMODIFIED"]})</div><div>".nl2br(create_anchors($desc))."</div>";
+ $item->date = $log["committime"];
+ $item->author = $log["author"];
+
+ $rss->addItem($item);
+}
+
+// valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1, MBOX, OPML
+header("Content-Type: text/xml");
+echo $rss->createFeed("RSS2.0");
+
+?>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/blame.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/blame.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/blame.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,23 @@
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+[websvn:curdirlinks] - <h2> [lang:BLAMEFOR] [websvn:rev]</h2>
+<p>
+
+<table cellpadding="2px" cellspacing="0" width="100%">
+ <tr>
+ <th class="HdrClmn"><b>[lang:LINENO]</b></th>
+ <th class="HdrClmn"><b>[lang:REV]</b></th>
+ <th class="HdrClmn"><b>[lang:AUTHOR]</b></th>
+ <th class="HdrClmnEnd"><b>[lang:LINE]</b></th>
+ </tr>
+
+ [websvn-startlisting]
+ <tr>
+ <td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:lineno]</td>
+ <td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:revision]</td>
+ <td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:author]</td>
+ <td style="border-right: 1px solid black" valign="top">[websvn:line]</td>
+ </tr>
+ [websvn-endlisting]
+
+</table>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/compare.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/compare.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/compare.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,55 @@
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+<p>
+[websvn:compare_form]
+<table>
+ <tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr>
+ <tr><td>[lang:WITHPATH]</td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr>
+</table>
+[websvn:compare_submit]
+[websvn:compare_endform]
+<hr>
+ <p>[lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b>
+ <p>
+ [websvn:revlink]
+<p>
+
+[websvn-startlisting]
+ [websvn-test:newpath]
+ <p>
+ <div class="newpath">
+ <b>[websvn:newpath]</b><br>
+ [websvn-endtest]
+
+ [websvn-test:info]
+ [websvn:info]<br>
+ [websvn-endtest]
+
+ [websvn-test:difflines]
+ <div class="difflines">
+ <p>
+ [websvn:difflines]<br>
+ <table class="diff" cellspacing="0">
+ [websvn-endtest]
+
+ [websvn-test:diffclass]
+ <tr><td class="[websvn:diffclass]">[websvn:line]</td></tr>
+ [websvn-endtest]
+
+ [websvn-test:enddifflines]
+ </table>
+ </div>
+ [websvn-endtest]
+
+ [websvn-test:endpath]
+ </div>
+ <p><hr>
+ [websvn-endtest]
+
+ [websvn-test:properties]
+ <p><i>[lang:PROPCHANGES]</i><p>
+ [websvn-endtest]
+
+[websvn-endlisting]
+</table>
+
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/diff.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/diff.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/diff.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,36 @@
+[websvn-test:noprev]
+No Previous Revision
+[websvn-else]
+
+ <div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+ <h2>[websvn:repname]</h2>
+ [websvn:curdirlinks] - [lang:DIFFREVS] <b>[websvn:rev2]</b> [lang:AND] <b>[websvn:rev1]</b>
+ <p>
+
+ <p><center>
+ [websvn:showcompactlink]
+ [websvn:showalllink]
+ </center>
+ <p>
+ <table class="diff" width="100%" cellspacing="0">
+ <tr>
+ <th class="HdrClmnEnd" style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th>
+ <th rowspan=100000 width="5"></th>
+ <th class="HdrClmnEnd" style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th>
+ </tr>
+
+ [websvn-startlisting]
+ [websvn-test:rev1lineno]
+ <tr>
+ <td width="50%" style="padding: 3px 0 3px 0" align="center" class="row1"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
+ <td width="50%" style="padding: 3px 0 3px 0" align="center" class="row1"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
+ <tr>
+ [websvn-else]
+ <tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td>
+ <td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr>
+ [websvn-endtest]
+ [websvn-endlisting]
+
+ </table>
+[websvn-endtest]
+
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/directory.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/directory.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/directory.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,124 @@
+
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h1>[websvn:repname]</h1>
+
+<table border=0 cellpadding=2 cellspacing=0>
+<tr><th colspan=2 class="HdrClmnEnd">[lang:REVINFO]</th></tr>
+<tr><td class="CatClmn0" valign="top">[lang:CURDIR]:</td><td class="row0">[websvn:path]</td></tr>
+<tr><td class="CatClmn1">[lang:REV]:</td><td class="row1">[websvn:rev]
+[websvn-test:goyoungestlink]
+ - [websvn:goyoungestlink]
+[websvn-endtest]
+</td></tr>
+<tr><td class="CatClmn0" valign="top">[lang:AUTHOR]:</td><td class="row0">[websvn:author]</td></tr>
+<tr><td class="CatClmn1" valign="top">[lang:LASTMOD]:</td><td class="row1">[lang:REV] [websvn:lastchangedrev] - [websvn:date]</td></tr>
+<tr><td class="CatClmn0" valign="top">[lang:LOGMSG]:</td><td class="row0">[websvn:log]</td></tr>
+[websvn-test:hidechanges]
+ <tr><td class="CatClmn1" valign="top"> </td><td class="row1">([websvn:showchangeslink])</td></tr>
+[websvn-else]
+[websvn:showchangeslink]
+ <tr><td class="CatClmn1" valign="top"> </td><td class="row1">([websvn:hidechangeslink])</td></tr>
+ [websvn-test:changedfilesbr]
+ <tr><td class="CatClmn0" valign="top">[lang:CHANGEDFILES]:</td><td class="row0">[websvn:changedfilesbr]</td></tr>
+ [websvn-endtest]
+ [websvn-test:newfilesbr]
+ [websvn-test:changedfilesbr]
+ <tr><td class="CatClmn1" valign="top">[lang:NEWFILES]:</td><td class="row1">[websvn:newfilesbr]</td></tr>
+ [websvn-else]
+ <tr><td class="CatClmn0" valign="top">[lang:NEWFILES]:</td><td class="row0">[websvn:newfilesbr]</td></tr>
+ [websvn-endtest]
+ [websvn-endtest]
+ [websvn-test:deletedfilesbr]
+ [websvn-test:changedfilesbr]
+ [websvn-test:newfilesbr]
+ <tr><td class="CatClmn0" valign="top">[lang:DELETEDFILES]:</td><td class="row0">[websvn:deletedfilesbr]</td></tr>
+ [websvn-else]
+ <tr><td class="CatClmn1" valign="top">[lang:DELETEDFILES]:</td><td class="row1">[websvn:deletedfilesbr]</td></tr>
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:newfilesbr]
+ <tr><td class="CatClmn1" valign="top">[lang:DELETEDFILES]:</td><td class="row1">[websvn:deletedfilesbr]</td></tr>
+ [websvn-else]
+ <tr><td class="CatClmn0" valign="top">[lang:DELETEDFILES]:</td><td class="row0">[websvn:deletedfilesbr]</td></tr>
+ [websvn-endtest]
+ [websvn-endtest]
+ [websvn-endtest]
+[websvn-endtest]
+</table>
+
+[websvn-defineicons]
+dir=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder.png" alt="[FOLDER]">
+*=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/file.png" alt="[FILE]">
+.c=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filec.png" alt="[C-FILE]">
+.h=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/fileh.png" alt="[H-FILE]">
+.s=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/files.png" alt="[S-FILE]">
+
+i-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/i-node.png" alt="[NODE]">
+t-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/t-node.png" alt="[NODE]">
+l-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/l-node.png" alt="[NODE]">
+e-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/e-node.png" alt="[NODE]">
+[websvn-enddefineicons]
+
+<p><hr>
+[websvn:curdirlinks] - [websvn:curdirloglink] - [websvn:curdircomplink]
+[websvn-test:allowdownload]
+ - [websvn:curdirdllink]
+[websvn-endtest]
+[websvn-test:curdirrsslink]
+ - [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a>
+[websvn-endtest]
+<p>
+[websvn:compare_form]
+ <table cellpadding="0px" cellspacing="0px" width="100%">
+ <tr>
+ <th class="HdrClmn" width="100%"><b>[lang:PATH]</b></th>
+ [websvn-test:allowdownload]
+ [websvn-test:curdirrsslink]
+ <th class="HdrClmn"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
+ <th class="HdrClmn"><b>[lang:TARBALL]</b></th>
+ <th class="HdrClmnEnd"><b>[lang:RSSFEED]</b></th>
+ [websvn-else]
+ <th class="HdrClmn"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
+ <th class="HdrClmnEnd"><b>[lang:TARBALL]</b></th>
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:curdirrsslink]
+ <th class="HdrClmn"><b>[lang:LOG]</b></th>
+ <th class="HdrClmnEnd"><b>[lang:RSSFEED]</b></th>
+ [websvn-else]
+ <th class="HdrClmnEnd"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
+ [websvn-endtest]
+ [websvn-endtest]
+ </tr>
+ [websvn-startlisting]
+ <tr>
+ <td valign="middle" style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">
+ [websvn:compare_box]
+ [websvn-treenode]
+ [websvn-icon]
+ [websvn:filelink]
+ </td>
+ [websvn-test:allowdownload]
+ [websvn-test:curdirrsslink]
+ <td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
+ <td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:fileviewdllink]</td>
+ <td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
+ [websvn-else]
+ <td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
+ <td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:fileviewdllink]</td>
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:curdirrsslink]
+ <td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
+ <td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
+ [websvn-else]
+ <td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
+ [websvn-endtest]
+ [websvn-endtest]
+ </tr>
+ [websvn-endlisting]
+ </table>
+<p>
+[websvn:compare_submit]
+[websvn:compare_endform]
+<hr>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/e-node.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/e-node.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,16 @@
+
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+[websvn:curdirlinks] - [lang:REV] [websvn:rev]
+[websvn-test:goyoungestlink]
+[websvn:goyoungestlink]<p>
+[websvn-endtest]
+<p>
+[websvn:prevdifflink] - [websvn:blamelink]
+<p>
+<hr>
+<table width="100%" border=0><tr><td class="row0">
+[websvn-getlisting]
+</td></tr></table>
+<hr>
+
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/filec.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/filec.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fileh.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fileh.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/files.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/files.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/folder.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/folder.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/footer.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/footer.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/footer.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,3 @@
+ <p><center><font size="-1"><i><b>[lang:POWERED] v[websvn:version]</b></i></font></center>
+ </body>
+</html>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/header.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/header.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/header.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html;charset=[websvn:charset]">
+ <link href="[websvn:locwebsvnhttp]/templates/BlueGrey/styles.css" rel="stylesheet" media="screen">
+ <!--[if gte IE 5.5000]>
+ <script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/BlueGrey/png.js"></script>
+ <![endif]-->
+ <title>
+ WebSVN
+ [websvn-test:repname]
+ - [websvn:repname]
+ [websvn-endtest]
+ [websvn-test:action]
+ - [websvn:action]
+ [websvn-endtest]
+ [websvn-test:rev2]
+ [websvn-test:path2]
+ - [websvn:path1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:path2] [lang:REV] [websvn:rev2]
+ [websvn-else]
+ - [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2]
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:rev]
+ - [lang:REV] [websvn:rev]
+ [websvn-endtest]
+ [websvn-endtest]
+ [websvn-test:path]
+ - [websvn:path]
+ [websvn-endtest]
+ </title>
+
+ <script>
+ function checkCB(chBox)
+ {
+ count = 0
+ first = null
+ f = chBox.form
+ for (i = 0 ; i < f.elements.length ; i++)
+ if (f.elements[i].type == 'checkbox' && f.elements[i].checked)
+ {
+ if (first == null && f.elements[i] != chBox)
+ first = f.elements[i]
+ count += 1
+ }
+
+ if (count > 2)
+ {
+ first.checked = false
+ count -= 1
+ }
+ }
+ </script>
+
+ </head>
+ <body>
+
+ <div style="text-align: center">
+ <a href="http://subversion.tigris.org/"><img style="border: 0; width: 468px; height: 64px" src="[websvn:locwebsvnhttp]/templates/BlueGrey/subversion.png" alt="Subversion" /></a>
+ </div>
+
+ <hr>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/i-node.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/i-node.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/index.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/index.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/index.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,8 @@
+<p>
+<table align="center" border=0 cellspacing=0 cellpadding=0 width="50%">
+ <tr><th align="left" colspan=2 class="HdrClmnEnd">[lang:PROJECTS]</th></tr>
+ [websvn-startlisting]
+ <tr><td class="row[websvn:rowparity]"><img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/repo.png" alt="[FOLDER]"> [websvn:projlink]</td></tr>
+ [websvn-endlisting]
+</table>
+<hr>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/l-node.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/l-node.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/log.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/log.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/log.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,56 @@
+
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<p>
+<h2>[websvn:repname] - [lang:REV] [websvn:rev]</h2>
+[websvn:curdirlinks]<p>
+[websvn-test:goyoungestlink]
+[websvn:goyoungestlink]<p>
+[websvn-endtest]
+<hr>
+<center>
+[websvn:logsearch_form][lang:SEARCHLOG]: [websvn:logsearch_inputbox][websvn:logsearch_submit]
+[websvn-test:logsearch_clearloglink]
+<p><font size="-1">[websvn:logsearch_clearloglink]</font><p>
+[websvn-endtest]
+[websvn:logsearch_endform]
+</center>
+
+[websvn-test:logsearch_nomatches]
+ <center>[lang:NORESULTS]</center>
+[websvn-endtest]
+
+[websvn-test:logsearch_resultsfound]
+ [websvn:compare_form]
+ <table cellpadding="2px" cellspacing="0" width="100%">
+ <tr>
+ <th class="HdrClmn">[lang:REV]</th>
+ <th class="HdrClmn">[lang:PATH]</th>
+ <th class="HdrClmn">[lang:AUTHOR]</th>
+ <th class="HdrClmn">[lang:AGE]</th>
+ <th class="HdrClmnEnd">[lang:LOGMSG]</th>
+ </tr>
+
+ [websvn-startlisting]
+ <tr>
+ <td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td>
+ <td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revpathlink]</td>
+ <td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revauthor]</td>
+ <td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revage]</td>
+ <td valign="top" class="row[websvn:rowparity]">[websvn:revlog]</td>
+ </tr>
+ [websvn-endlisting]
+ </table>
+ <p>
+ [websvn:compare_submit]
+ [websvn:compare_endform]
+[websvn-endtest]
+
+[websvn-test:logsearch_nomorematches]
+ <p><center>[lang:NOMORERESULTS]</center>
+[websvn-endtest]
+
+<p><center>[websvn:logsearch_moreresultslink]</center>
+
+<hr>
+<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center>
+
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/png.js
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/png.js 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/png.js 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,39 @@
+// correctly handle PNG transparency in Win IE 5.5 or higher.
+
+function correctPNG()
+{
+ for(var i = 0; i < document.images.length; i++)
+ {
+ var img = document.images[i]
+ var imgName = img.src.toUpperCase()
+ if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
+ {
+ var imgID = (img.id) ? "id='" + img.id + "' " : ""
+ var imgClass = (img.className) ? "class='" + img.className + "' " : ""
+ var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
+ var imgStyle = "display:inline-block;" + img.style.cssText
+ var imgAttribs = img.attributes;
+ for (var j=0; j<imgAttribs.length; j++)
+ {
+ var imgAttrib = imgAttribs[j];
+ if (imgAttrib.nodeName == "align")
+ {
+ if (imgAttrib.nodeValue == "left") imgStyle = "float:left;" + imgStyle
+ if (imgAttrib.nodeValue == "right") imgStyle = "float:right;" + imgStyle
+ break
+ }
+ }
+ var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ strNewHTML += " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ strNewHTML += "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
+ img.outerHTML = strNewHTML
+ i = i-1
+ }
+ }
+}
+
+var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32";
+
+if (supported)
+ window.attachEvent("onload", correctPNG);
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/repo.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/repo.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/styles.css
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/styles.css 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/styles.css 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,98 @@
+BODY
+{
+ COLOR: black;
+ FONT-FAMILY: verdana, sans-serif;
+ BACKGROUND-COLOR: white
+}
+HR
+{
+ BORDER-RIGHT: 0px;
+ PADDING-RIGHT: 0px;
+ BORDER-TOP: 0px;
+ PADDING-LEFT: 0px;
+ PADDING-BOTTOM: 0px;
+ BORDER-LEFT: 0px;
+ PADDING-TOP: 0px;
+ BORDER-BOTTOM: 0px;
+ HEIGHT: 1px;
+ BACKGROUND-COLOR: #808080
+}
+A
+{
+ TEXT-DECORATION: none
+}
+A:hover
+{
+ TEXT-DECORATION: underline
+}
+.HdrClmn
+{
+ BORDER-RIGHT: black 1px solid;
+ FONT-WEIGHT: bold;
+ COLOR: white;
+ BORDER-BOTTOM: black 1px solid;
+ BACKGROUND-COLOR: #809cc8
+}
+.HdrClmnEnd
+{
+ FONT-WEIGHT: bold;
+ COLOR: white;
+ BORDER-BOTTOM: black 1px solid;
+ BACKGROUND-COLOR: #809cc8
+}
+
+.row0
+{
+ background-color: #F0F0F0;
+}
+
+.row1
+{
+ background-color: #E0E0E0;
+}
+
+.CatClmn1
+{
+ BORDER-RIGHT: black 1px solid;
+ BACKGROUND-COLOR: #d0d0ee
+}
+
+.CatClmn0
+{
+ BORDER-RIGHT: black 1px solid;
+ BACKGROUND-COLOR: #e0e0ff
+}
+
+TD.diffdeleted
+{
+ font-size: 11px;
+ background-color: red;
+}
+
+TD.diffchanged
+{
+ font-size: 11px;
+ background-color: yellow;
+}
+
+TD.diffadded
+{
+ font-size: 11px;
+ background-color: green;
+}
+
+TD.diff
+{
+ font-size: 11px;
+ background-color: #F0F0F0;
+}
+
+DIV.newpath
+{
+ PADDING: 10px 10px 10px 10px;
+ BACKGROUND-COLOR: #d0d0ee
+}
+
+DIV.difflines
+{
+}
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/subversion.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/subversion.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/t-node.png
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/t-node.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/xml.gif
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/xml.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/blame.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/blame.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/blame.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,24 @@
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+[websvn:curdirlinks] - <h2> [lang:BLAMEFOR] [websvn:rev]</h2>
+<p>
+
+<table border="1" class="blame" width="100%">
+ <tr>
+ <th style="padding-bottom: 5px" align="left"><b>[lang:LINENO]</b></th>
+ <th style="padding-bottom: 5px" align="left"><b>[lang:REV]</b></th>
+ <th style="padding-bottom: 5px" align="left"><b>[lang:AUTHOR]</b></th>
+ <th style="padding-bottom: 5px" align="left"><b>[lang:LINE]</b></th>
+ </tr>
+
+ [websvn-startlisting]
+ <tr>
+ <td>[websvn:lineno]</td>
+ <td>[websvn:revision]</td>
+ <td>[websvn:author]</td>
+ <td>[websvn:line]</td>
+ </tr>
+ [websvn-endlisting]
+
+</table>
+
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/compare.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/compare.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/compare.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,63 @@
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+<p>
+<center>
+ [websvn:compare_form]
+ <table>
+ <tr><td>
+ <table class="outlined">
+ <tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr>
+ <tr><td>[lang:WITHPATH] </td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr>
+ </table>
+ </td><tr>
+ <tr><td align="center">[websvn:compare_submit]</td></tr>
+ </table>
+ [websvn:compare_endform]
+</center>
+<hr>
+[websvn-test:success]
+ [lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b>
+ <p>
+ [websvn:revlink]
+[websvn-endtest]
+<p>
+
+[websvn-startlisting]
+ [websvn-test:newpath]
+ <p>
+ <div class="newpath">
+ <b>[websvn:newpath]</b><br>
+ [websvn-endtest]
+
+ [websvn-test:info]
+ [websvn:info]<br>
+ [websvn-endtest]
+
+ [websvn-test:difflines]
+ <div class="difflines">
+ <p>
+ [websvn:difflines]<br>
+ <table class="diff" cellspacing="0">
+ [websvn-endtest]
+
+ [websvn-test:diffclass]
+ <tr><td class="[websvn:diffclass]">[websvn:line]</td></tr>
+ [websvn-endtest]
+
+ [websvn-test:enddifflines]
+ </table>
+ </div>
+ [websvn-endtest]
+
+ [websvn-test:endpath]
+ </div>
+ <p><hr>
+ [websvn-endtest]
+
+ [websvn-test:properties]
+ <p><i>[lang:PROPCHANGES]</i><p>
+ [websvn-endtest]
+
+[websvn-endlisting]
+</table>
+
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/diff.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/diff.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/diff.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,35 @@
+[websvn-test:noprev]
+ No Previous Revision
+[websvn-else]
+ <div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+ <h2>[websvn:repname]</h2>
+ [websvn:curdirlinks] - <h2>[lang:DIFFREVS] <b>[websvn:rev2]</b> [lang:AND] <b>[websvn:rev1]</b></h2>
+ <p>
+
+ <p><center>
+ [websvn:showcompactlink]
+ [websvn:showalllink]
+ </center>
+ <p>
+ <table class="diff" width="100%">
+ <tr>
+ <th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th>
+ <th rowspan=100000 width=5></th>
+ <th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th>
+ </tr>
+
+ [websvn-startlisting]
+ [websvn-test:rev1lineno]
+ <tr>
+ <td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
+ <td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
+ <tr>
+ [websvn-else]
+ <tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td>
+ <td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr>
+ [websvn-endtest]
+ [websvn-endlisting]
+
+ </table>
+[websvn-endtest]
+
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/directory.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/directory.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/directory.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,105 @@
+
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h1>[websvn:repname]</h1>
+<p><b>[lang:PATH]:</b> [websvn:path]
+<br><b>[lang:REV]:</b> [websvn:rev]
+[websvn-test:goyoungestlink]
+ - [websvn:goyoungestlink]
+[websvn-endtest]
+<br><b>[lang:LASTMOD]:</b> [lang:REV] [websvn:lastchangedrev] - [websvn:author] - [websvn:date]
+<br><b>[lang:LOGMSG]:</b><br>
+[websvn:log]
+<p>
+[websvn-test:hidechanges]
+ <p>[websvn:showchangeslink]
+[websvn-endtest]
+
+[websvn-test:showchanges]
+ <p><b>[lang:CHANGES]:</b><br>
+ <p>[websvn:hidechangeslink]
+ <p>
+ <center>
+ <table border=1 class="bordered" cellpadding=4>
+ <tr>
+ <th><center><b>[lang:NEWFILES]</b></center></th>
+ <th><center><b>[lang:CHANGEDFILES]</b></center></th>
+ <th><center><b>[lang:DELETEDFILES]</b></center></th>
+ </tr>
+ <tr>
+ <td valign="top">
+ [websvn-test:newfilesbr]
+ [websvn:newfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ <td valign="top">
+ [websvn-test:changedfilesbr]
+ [websvn:changedfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ <td valign="top">
+ [websvn-test:deletedfilesbr]
+ [websvn:deletedfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ </tr>
+ </table>
+ </center>
+[websvn-endtest]
+
+[websvn-defineicons]
+dir=
+i-node=
+t-node=
+l-node=
+e-node=
+*=
+[websvn-enddefineicons]
+
+<p><hr>
+<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink] - [websvn:curdircomplink]
+[websvn-test:allowdownload]
+ - [websvn:curdirdllink]
+[websvn-endtest]
+[websvn-test:curdirrsslink]
+ - [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a>
+[websvn-endtest]
+<p>
+
+[websvn:compare_form]
+ <table class="outlined" width="100%" cellpadding=2>
+ <tr>
+ <th width="100%"><b>[lang:PATH]</b></th>
+ <th><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
+ [websvn-test:allowdownload]
+ <th><b>[lang:TARBALL]</b></th>
+ [websvn-endtest]
+ [websvn-test:curdirrsslink]
+ <th><b>[lang:RSSFEED]</b></th>
+ [websvn-endtest]
+ </tr>
+ [websvn-startlisting]
+ <tr>
+ <td class="[websvn:rowparity]">
+ [websvn:compare_box]
+ [websvn-treenode]
+ [websvn:filelink]
+ </td>
+ <td class="[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
+ [websvn-test:allowdownload]
+ <td class="[websvn:rowparity]">[websvn:fileviewdllink]</td>
+ [websvn-endtest]
+ [websvn-test:curdirrsslink]
+ <td class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
+ [websvn-endtest]
+ </tr>
+ [websvn-endlisting]
+ </table>
+<p>
+[websvn:compare_submit]
+[websvn:compare_endform]
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/file.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/file.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/file.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,13 @@
+
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+[websvn:curdirlinks] - [lang:REV] [websvn:rev]<p>
+[websvn-test:goyoungestlink]
+[websvn:goyoungestlink]<p>
+[websvn-endtest]
+
+[websvn:prevdifflink] - [websvn:blamelink]
+<p>
+<table width="100%" border=0><tr><td>
+[websvn-getlisting]
+</td></tr></table>
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/footer.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/footer.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/footer.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,3 @@
+ <p><center><font size="-1"><i><b>[lang:POWERED] v[websvn:version]</b></i></font></center>
+ </body>
+</html>
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/header.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/header.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/header.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html;charset=[websvn:charset]">
+ <link href="[websvn:locwebsvnhttp]/templates/Standard/styles.css" rel="stylesheet" media="screen">
+ <script>
+ function checkCB(chBox)
+ {
+ count = 0
+ first = null
+ f = chBox.form
+ for (i = 0 ; i < f.elements.length ; i++)
+ if (f.elements[i].type == 'checkbox' && f.elements[i].checked)
+ {
+ if (first == null && f.elements[i] != chBox)
+ first = f.elements[i]
+ count += 1
+ }
+
+ if (count > 2)
+ {
+ first.checked = false
+ count -= 1
+ }
+ }
+ </script>
+ <title>
+ WebSVN
+ [websvn-test:repname]
+ - [websvn:repname]
+ [websvn-endtest]
+ [websvn-test:action]
+ - [websvn:action]
+ [websvn-endtest]
+ [websvn-test:rev2]
+ [websvn-test:path2]
+ - [websvn:path1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:path2] [lang:REV] [websvn:rev2]
+ [websvn-else]
+ - [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2]
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:rev]
+ - [lang:REV] [websvn:rev]
+ [websvn-endtest]
+ [websvn-endtest]
+ [websvn-test:path]
+ - [websvn:path]
+ [websvn-endtest]
+ </title>
+
+ </head>
+ <body>
+ <center>
+ <h1>[lang:SERVER]</h1>
+ </center>
+ <hr>
+ <p>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/index.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/index.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/index.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,16 @@
+
+<table border=0 cellspacing=0 cellpadding=0 align="center">
+ <tr>
+ <td align="center">
+ <br><h2>[lang:PROJECTS]:</h2>
+ <table border=0>
+ <tr><td><ul>
+ [websvn-startlisting]
+ <li><strong>[websvn:projlink]</strong></li>
+ [websvn-endlisting]
+ </ul></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/log.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/log.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/log.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,52 @@
+
+<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname] - [lang:REV] [websvn:rev]</h2>
+[websvn:curdirlinks]<p>
+[websvn-test:goyoungestlink]
+[websvn:goyoungestlink]<p>
+[websvn-endtest]
+
+<center>
+[websvn:logsearch_form][lang:SEARCHLOG]: [websvn:logsearch_inputbox][websvn:logsearch_submit]
+[websvn-test:logsearch_clearloglink]
+<p><font size="-1">[websvn:logsearch_clearloglink]</font><p>
+[websvn-endtest]
+[websvn:logsearch_endform]
+</center>
+
+[websvn-test:logsearch_nomatches]
+ <center>[lang:NORESULTS]</center>
+[websvn-endtest]
+
+[websvn-test:logsearch_resultsfound]
+ [websvn:compare_form]
+ <table border=1 class="outlined" width="100%" cellpadding=2>
+ <tr>
+ <th>[lang:REV]</th>
+ <th>[lang:PATH]</th>
+ <th>[lang:AUTHOR]</th>
+ <th>[lang:AGE]</th>
+ <th>[lang:LOGMSG]</th>
+ </tr>
+
+ [websvn-startlisting]
+ <tr>
+ <td valign="top" class="[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td>
+ <td valign="top" class="[websvn:rowparity]">[websvn:revpathlink]</td>
+ <td valign="top" class="[websvn:rowparity]">[websvn:revauthor]</td>
+ <td valign="top" class="[websvn:rowparity]">[websvn:revage]</td>
+ <td valign="top" class="[websvn:rowparity]">[websvn:revlog]</td>
+ </tr>
+ [websvn-endlisting]
+ </table>
+ <p>
+ [websvn:compare_submit]
+ [websvn:compare_endform]
+[websvn-endtest]
+
+[websvn-test:logsearch_nomorematches]
+ <p><center>[lang:NOMORERESULTS]</center>
+[websvn-endtest]
+
+<p><center>[websvn:logsearch_moreresultslink]</center>
+<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center>
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/styles.css
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Standard/styles.css 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/styles.css 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,86 @@
+
+body
+{
+ font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular;
+ background-color: white;
+ margin: 20px;
+ padding: 0px
+}
+
+H1
+{
+ color: #99007E;
+ font-size: 30px;
+ font-weight: normal;
+ font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular;
+ text-decoration: none;
+}
+
+HR { color: #99007E; background-color: #99007E }
+
+.highlight { color: #99007E; font-style: italic; }
+
+TABLE.bordered, TABLE.outlined, TABLE.blame
+{
+ border-collapse: collapse;
+ border: solid 2px #99007E;
+}
+
+.bordered TD, .bordered TH
+{
+ border: solid 2px #99007E;
+}
+
+.outlined TD
+{
+ padding: 0px 5px 0px 5px;
+}
+
+.outlined TH, .blame TH
+{
+ padding: 5px 5px 5px 5px;
+ font-weight: bold;
+ border: solid 2px #99007E;
+}
+
+.outlined TD, .blame TD
+{
+ padding: 1px 5px 1px 5px;
+ border-right: solid 2px #99007E;
+ border-bottom: solid 1px #F0F0F0;
+}
+
+TD.diffdeleted
+{
+ font-size: 11px;
+ background-color: red;
+}
+
+TD.diffchanged
+{
+ font-size: 11px;
+ background-color: yellow;
+}
+
+TD.diffadded
+{
+ font-size: 11px;
+ background-color: green;
+}
+
+TD.diff
+{
+ font-size: 11px;
+ background-color: #D0D0D0;
+}
+
+TABLE.diff
+{
+ border-collapse: collapse;
+}
+
+DIV.newpath
+{
+ padding: 5px 5px 5px 5px;
+ border: solid 2px #99007E;
+}
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/xml.gif
===================================================================
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/Standard/xml.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/blame.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/blame.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/blame.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,32 @@
+<table width="100%" border="0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+ </td>
+ </tr>
+</table>
+[websvn:curdirlinks] - [lang:BLAMEFOR] [websvn:rev]
+<p>
+
+<table border="1" class="blame" width="100%" cellpadding="2">
+ <tr>
+ <th style="padding-bottom: 5px" align="left"><b>[lang:LINENO]</b></th>
+ <th style="padding-bottom: 5px" align="left"><b>[lang:REV]</b></th>
+ <th style="padding-bottom: 5px" align="left"><b>[lang:AUTHOR]</b></th>
+ <th style="padding-bottom: 5px" align="left"><b>[lang:LINE]</b></th>
+ </tr>
+
+ [websvn-startlisting]
+ <tr>
+ <td>[websvn:lineno]</td>
+ <td>[websvn:revision]</td>
+ <td>[websvn:author]</td>
+ <td>[websvn:line]</td>
+ </tr>
+ [websvn-endlisting]
+
+</table>
+
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/compare.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/compare.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/compare.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,72 @@
+<table width="100%" border="0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+ </td>
+ </tr>
+</table>
+
+<center>
+ [websvn:compare_form]
+ <table>
+ <tr><td>
+ <table class="outlined">
+ <tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr>
+ <tr><td>[lang:WITHPATH] </td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr>
+ </table>
+ </td><tr>
+ <tr><td align="center">[websvn:compare_submit]</td></tr>
+ </table>
+ [websvn:compare_endform]
+ <hr>
+</center>
+<p>
+[websvn-test:success]
+ [lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b>
+ <p>
+ [websvn:revlink]
+[websvn-endtest]
+<p>
+
+[websvn-startlisting]
+ [websvn-test:newpath]
+ <p>
+ <div class="newpath">
+ <b>[websvn:newpath]</b><br>
+ [websvn-endtest]
+
+ [websvn-test:info]
+ [websvn:info]<br>
+ [websvn-endtest]
+
+ [websvn-test:difflines]
+ <div class="difflines">
+ <p>
+ [websvn:difflines]<br>
+ <table class="diff" cellspacing="0">
+ [websvn-endtest]
+
+ [websvn-test:diffclass]
+ <tr><td class="[websvn:diffclass]">[websvn:line]</td></tr>
+ [websvn-endtest]
+
+ [websvn-test:enddifflines]
+ </table>
+ </div>
+ [websvn-endtest]
+
+ [websvn-test:endpath]
+ </div>
+ <p><hr>
+ [websvn-endtest]
+
+ [websvn-test:properties]
+ <p><i>[lang:PROPCHANGES]</i><p>
+ [websvn-endtest]
+
+[websvn-endlisting]
+</table>
+
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/diff.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/diff.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/diff.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,46 @@
+[websvn-test:noprev]
+ No Previous Revision
+[websvn-else]
+<table width="100%" border="0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+ </td>
+ </tr>
+</table>
+<b>[lang:PATH]:</b> [websvn:path]
+<br><b>[lang:REV]:</b> [websvn:rev]
+<p><hr>
+<b>[lang:CURDIR]:</b> [websvn:curdirlinks]
+ <p>
+
+ <p><center>
+ [websvn:showcompactlink]
+ [websvn:showalllink]
+ </center>
+ <p>
+ <table class="diff" width="100%">
+ <tr>
+ <th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th>
+ <th rowspan=100000 width=5></th>
+ <th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th>
+ </tr>
+
+ [websvn-startlisting]
+ [websvn-test:rev1lineno]
+ <tr>
+ <td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
+ <td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
+ <tr>
+ [websvn-else]
+ <tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td>
+ <td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr>
+ [websvn-endtest]
+ [websvn-endlisting]
+
+ </table>
+[websvn-endtest]
+
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/directory.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/directory.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/directory.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,114 @@
+<table width="100%" border="0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+ </td>
+ </tr>
+</table>
+<b>[lang:PATH]:</b> [websvn:path]
+<br><b>[lang:REV]:</b> [websvn:rev]
+<p><hr>
+<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink] - [websvn:curdircomplink]
+[websvn-test:allowdownload]
+ - [websvn:curdirdllink]
+[websvn-endtest]
+[websvn-test:curdirrsslink]
+ - [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a>
+[websvn-endtest]
+
+[websvn-defineicons]
+dir=
+i-node=
+t-node=
+l-node=
+e-node=
+*=
+[websvn-enddefineicons]
+
+<p>
+[websvn:compare_form]
+ <table class="outlined" width="100%" cellpadding="2">
+ <tr>
+ <th width="100%"><b>Path</b></th>
+ <th><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
+ [websvn-test:allowdownload]
+ <th><b>[lang:TARBALL]</b></th>
+ [websvn-endtest]
+ [websvn-test:curdirrsslink]
+ <th><b>[lang:RSSFEED]</b></th>
+ [websvn-endtest]
+ </tr>
+ [websvn-startlisting]
+ <tr>
+ <td class="[websvn:rowparity]">
+ [websvn:compare_box]
+ [websvn-treenode]
+ [websvn:filelink]
+ </td>
+ <td class="[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
+ [websvn-test:allowdownload]
+ <td class="[websvn:rowparity]">[websvn:fileviewdllink]</td>
+ [websvn-endtest]
+ [websvn-test:curdirrsslink]
+ <td class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
+ [websvn-endtest]
+ </tr>
+ [websvn-endlisting]
+ </table>
+<p>
+[websvn:compare_submit]
+[websvn:compare_endform]
+<hr>
+[websvn-test:goyoungestlink]
+ - [websvn:goyoungestlink]
+[websvn-endtest]
+<br><b>[lang:LASTMOD]:</b> [lang:REV] [websvn:lastchangedrev] - [websvn:author] - [websvn:date]
+<br><b>[lang:LOGMSG]:</b><br>
+[websvn:log]
+<p>
+[websvn-test:hidechanges]
+ <p>[websvn:showchangeslink]
+[websvn-endtest]
+
+[websvn-test:showchanges]
+ <p><b>[lang:CHANGES]:</b><br>
+ <p>[websvn:hidechangeslink]
+ <p>
+ <center>
+ <table border=1 class="bordered" cellpadding=4>
+ <tr>
+ <th><center><b>[lang:NEWFILES]</b></center></th>
+ <th><center><b>[lang:CHANGEDFILES]</b></center></th>
+ <th><center><b>[lang:DELETEDFILES]</b></center></th>
+ </tr>
+ <tr>
+ <td valign="top">
+ [websvn-test:newfilesbr]
+ [websvn:newfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ <td valign="top">
+ [websvn-test:changedfilesbr]
+ [websvn:changedfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ <td valign="top">
+ [websvn-test:deletedfilesbr]
+ [websvn:deletedfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ </tr>
+ </table>
+ </center>
+[websvn-endtest]
+
+
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/file.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/file.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/file.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,25 @@
+<table width="100%" border="0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+ </td>
+ </tr>
+</table>
+<b>[lang:PATH]:</b> [websvn:path]
+<br><b>[lang:REV]:</b> [websvn:rev]
+<p><hr>
+<b>[lang:CURDIR]:</b> [websvn:curdirlinks]
+<p>
+
+[websvn-test:goyoungestlink]
+[websvn:goyoungestlink]<p>
+[websvn-endtest]
+
+[websvn:prevdifflink] - [websvn:blamelink]
+<p>
+<table width="100%" border=1><tr><td>
+[websvn-getlisting]
+</td></tr></table>
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/footer.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/footer.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/footer.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,2 @@
+ </body>
+</html>
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/header.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/header.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/header.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html;charset=[websvn:charset]">
+ <link href="[websvn:locwebsvnhttp]/templates/zinn/styles.css" rel="stylesheet" media="screen">
+ <script>
+ function checkCB(chBox)
+ {
+ count = 0
+ first = null
+ f = chBox.form
+ for (i = 0 ; i < f.elements.length ; i++)
+ if (f.elements[i].type == 'checkbox' && f.elements[i].checked)
+ {
+ if (first == null && f.elements[i] != chBox)
+ first = f.elements[i]
+ count += 1
+ }
+
+ if (count > 2)
+ {
+ first.checked = false
+ count -= 1
+ }
+ }
+ </script>
+ <title>
+ WebSVN
+ [websvn-test:repname]
+ - [websvn:repname]
+ [websvn-endtest]
+ [websvn-test:action]
+ - [websvn:action]
+ [websvn-endtest]
+ [websvn-test:rev2]
+ [websvn-test:path2]
+ - [websvn:path1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:path2] [lang:REV] [websvn:rev2]
+ [websvn-else]
+ - [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2]
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:rev]
+ - [lang:REV] [websvn:rev]
+ [websvn-endtest]
+ [websvn-endtest]
+ [websvn-test:path]
+ - [websvn:path]
+ [websvn-endtest]
+ </title>
+
+ </head>
+ <body>
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/index.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/index.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/index.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,15 @@
+
+<table border=0 cellspacing=0 cellpadding=0 align="center">
+ <tr>
+ <td align="center">
+ <br><h1>[lang:PROJECTS]:</h1>
+ <p><hr><p>
+ <table width="100%" class="outlined" cellpadding="2">
+ [websvn-startlisting]
+ <tr><td>[websvn:projlink]</td></tr>
+ [websvn-endlisting]
+ </table>
+ </td>
+ </tr>
+</table>
+
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/log.tmpl
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/log.tmpl 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/log.tmpl 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,62 @@
+<table width="100%" border="0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
+ </td>
+ </tr>
+</table>
+<b>[lang:PATH]:</b> [websvn:path]
+<br><b>[lang:REV]:</b> [websvn:rev]
+<p><hr>
+<b>[lang:CURDIR]:</b> [websvn:curdirlinks]<br><br>
+[websvn-test:goyoungestlink]
+[websvn:goyoungestlink]<p>
+[websvn-endtest]
+
+<center>
+[websvn:logsearch_form][lang:SEARCHLOG]: [websvn:logsearch_inputbox][websvn:logsearch_submit]
+[websvn-test:logsearch_clearloglink]
+<p><font size="-1">[websvn:logsearch_clearloglink]</font><p>
+[websvn-endtest]
+[websvn:logsearch_endform]
+</center>
+
+[websvn-test:logsearch_nomatches]
+ <center>[lang:NORESULTS]</center>
+[websvn-endtest]
+
+[websvn-test:logsearch_resultsfound]
+ [websvn:compare_form]
+ <table border=1 class="outlined" width="100%" cellpadding=2>
+ <tr>
+ <th>[lang:REV]</th>
+ <th>[lang:PATH]</th>
+ <th>[lang:AUTHOR]</th>
+ <th>[lang:AGE]</th>
+ <th>[lang:LOGMSG]</th>
+ </tr>
+
+ [websvn-startlisting]
+ <tr>
+ <td valign="top" class="[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td>
+ <td valign="top" class="[websvn:rowparity]">[websvn:revpathlink]</td>
+ <td valign="top" class="[websvn:rowparity]">[websvn:revauthor]</td>
+ <td valign="top" class="[websvn:rowparity]">[websvn:revage]</td>
+ <td valign="top" class="[websvn:rowparity]">[websvn:revlog]</td>
+ </tr>
+ [websvn-endlisting]
+ </table>
+ <p>
+ [websvn:compare_submit]
+ [websvn:compare_endform]
+[websvn-endtest]
+
+[websvn-test:logsearch_nomorematches]
+ <p><center>[lang:NOMORERESULTS]</center>
+[websvn-endtest]
+
+<p><center>[websvn:logsearch_moreresultslink]</center>
+<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center>
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/styles.css
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/styles.css 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/styles.css 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,99 @@
+
+body
+{
+ font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular;
+ background-color: white;
+ margin: 20px;
+ padding: 0px;
+ font-size: 76%;
+}
+
+H1
+{
+ color: #8c0000;
+ font-size: 30px;
+ font-weight: normal;
+ font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular;
+ text-decoration: none;
+}
+
+a:link { color: black;
+ font-size: 76%;
+}
+a:visited { color: black;
+ font-size: 76%;
+}
+
+HR { color: #8c0000; background-color: #8c0000 }
+
+.highlight { color: #8c0000; font-style: italic; }
+
+TABLE.bordered, TABLE.outlined, TABLE.blame
+{
+ border-collapse: collapse;
+ border: solid 2px #8c0000;
+}
+
+.bordered TD, .bordered TH
+{
+ border: solid 2px #8c0000;
+}
+
+.outlined TH, .blame TH
+{
+ padding: 5px 5px 5px 5px;
+ font-weight: bold;
+ border: solid 2px #8c0000;
+}
+
+.outlined TD, .blame TD
+{
+ padding: 1px 5px 1px 5px;
+ border-right: solid 2px #8c0000;
+ border-bottom: solid 1px #F0F0F0;
+}
+
+.blame TD
+{
+ font-size: 11px;
+}
+
+.blame TD A
+{
+ font-size: 100%;
+}
+
+TD.diffdeleted
+{
+ font-size: 11px;
+ background-color: red;
+}
+
+TD.diffchanged
+{
+ font-size: 11px;
+ background-color: yellow;
+}
+
+TD.diffadded
+{
+ font-size: 11px;
+ background-color: green;
+}
+
+TD.diff
+{
+ font-size: 11px;
+ background-color: #D0D0D0;
+}
+
+TABLE.diff
+{
+ border-collapse: collapse;
+}
+
+DIV.newpath
+{
+ padding: 5px 5px 5px 5px;
+ border: solid 2px #8c0000;
+}
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/templates.txt
===================================================================
--- trunk/svn.matroska.org/WebSVN/templates.txt 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates.txt 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,340 @@
+
+THE TEMPLATING SYSTEM
+~~~~~~~~~~~~~~~~~~~~~
+
+Everyone wants their view onto their SVN repository to fit in with their look
+and feel. With WebSVN's templating system this is very possible.
+
+To create your own templates, you first need to change your config.inc file to
+tell WebSVN where the templates are stored. For example:
+
+$config->setTemplatePath("./templates/Standard/");
+
+This directory should contain at least the following files:
+
+header.tmpl - Header templated included before any other
+footer.tmpl - Footer templated included after any other
+
+index.tmpl - The main project page template
+
+directory.tmpl - Listing of a directory
+log.tmple - Log of a directory or file
+file.tmpl - Contents of a text file
+diff.tmpl - Differences between text files
+blame.tmpl - Blame information for a file
+
+Each template file should be written in HTML, but is allowed to contain certain
+WebSVN controls. There are two control types, commands and variables.
+
+
+COMMANDS
+~~~~~~~~
+
+NOTE: Commands MUST appear on their own line.
+
+---
+
+[websvn-test:varname]
+...
+[websvn-else]
+...
+[websvn-endtest]
+
+If the variable is non-0 write out the first part else write out the second
+
+---
+
+[websvn-startlisting]
+...
+[websvn-endlisting]
+
+
+Used in pages that contain listings of files, logs, etc. Everything between
+the controls is repeated for each item in the list
+
+---
+
+[websvn-defineicons] (used in directory.tmpl only)
+...
+[websvn-enddefineicons]
+...
+
+[websvn-treenode]
+[websvn-icon]
+
+These commands are used to display certain icons next to certain file types in
+the directory view.
+
+The [websvn-defineicons] block should contain a line for each file type,
+defining the HTML to be used for that file type. To define the HTML for a
+particular extension use the syntax:
+
+.<extension>=<HTML code>
+
+There are also some special filetypes:
+
+dir=<HTML code> is used for directory icons
+*=<HTML code> is used for all filetypes which have no other definition
+
+i-node - | shaped node of the tree view
+t-node - T shaped node of the tree view
+l-node - L shaped node of the tree view
+e-node - Empty node of the tree view
+
+Example from the BlueGrey scheme:
+
+[websvn-defineicons]
+dir=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder.png" alt="[FOLDER]">
+*=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/file.png" alt="[FILE]">
+.c=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filec.png" alt="[C-FILE]">
+.h=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/fileh.png" alt="[H-FILE]">
+.s=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/files.png" alt="[S-FILE]">
+
+i-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/i-node.png" alt="[NODE]">
+t-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/t-node.png" alt="[NODE]">
+l-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/l-node.png" alt="[NODE]">
+e-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/e-node.png" alt="[NODE]">
+[websvn-enddefineicons]
+
+Inside the [websvn-startlisting] block, the command [websvn-treeview] will
+output the HTML code defined for the appropriate tree view icon.
+[websvn-icon] will output the HTML code defined for the type of the current
+file.
+
+---
+
+[websvn-getlisting] (used in file.tmpl only)
+
+Get the contents of the file being viewed and output it exactly (surrounded
+with <PRE> .. </PRE>).
+
+VARIABLES
+~~~~~~~~~
+
+Variables are written in the form [websvn:varname] where varname is the name of
+a variable passed to the template. The control is replaced with the variable
+required.
+
+The variables available are described below for each template.
+You may also access the language file using [lang:varname] is order to keep your
+templates international!
+
+Take special notice of the use of the locwebsvnhttp variable. It should be used
+to locate other files and graphics that your templates need. For example:
+
+<link href="[websvn:locwebsvnhttp]/templates/tmptname/styles.css" ...
+
+You may imagine that simply using . in place should work, however this isn't
+the case when MultiViews are turned on. Using this variable gives you a way to
+access your template files in all cases.
+
+Variables defined for in all scripts
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+locwebsvnhttp - Root of websvn directory
+charset - The charset requested by the user
+
+projects_form - HTML <form> specification for the projects selection box
+projects_select - HTML <select>...</select> specification for the project
+ options
+projects_submit - HTML <input> specification for the projects selection GO
+ button
+projects_endform - HTML </form> specification for the projects selection
+ box (includes hidden field declarations)
+
+
+
+Variables defined for index.tmpl
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Used in [websvn-startlisting] ... [websvn-endlisting] block:
+
+projlink - Link to the project
+rowparity - Parity of the row (0 or 1). Used to generate striped tables
+
+Variables defined for directory.tmpl
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+repname - Name of the repository
+rev - Revision being viewed
+path - Path of item being logged
+author - Author of current revision
+date - Date that revision was committed
+log - Log message of revision
+lastchangedrev - Revision of the last modification to current directory
+goyoungestlink - Link to head revision of repository
+
+showchanges - 1 if showing changes (for websvn-test)
+hidechanges - 1 if hiding changes (for websvn-test)
+showchangeslink - Link to page with changes hidden
+hidechangeslink - Link to page with changes shown
+
+newfilesbr - list of the new files separated by <BR>'s
+changedfilesbr - list of the changed files separated by <BR>'s
+deletedfilesbr - list of the deleted files separated by <BR>'s
+
+newfiles - list of the new files separated by spaces
+changedfiles - list of the changed files separated by spaces
+deletedfiles - list of the deleted files separated by spaces
+
+curdirlinks - List of the path of this directory with links to each one
+curdirloglink - Link to the log view of current directory
+curdirrsslink - Link to the RSS feed for the current directory
+curdirrssanchor - The <a href=...> tag to the RSS feed for the current directory
+curdirdllink - Link to the tarball of current directory
+curdircomplink - Link to comparison with previously changed revision
+
+allowdownload - True if downloading has been configured
+
+compare_form - HTML <form> specification for the comparison form
+compare_submit - HTML <input> specification for the comparison button
+compare_endform - HTML </form> specification for the comparison form
+
+Used in [websvn-startlisting] ... [websvn-endlisting] block:
+
+compare_box - HTML checkbox specification for the comparison option
+filelink - Link to the file
+rowparity - Parity of the row (0 or 1). Used to generate striped tables
+fileviewloglink - Link to the log page for the file
+fileviewdllink - Link to the tarball of current directory
+isDir - true if the current file is a directory (use with [websvn-test:isDir]
+ to display icons)
+rsslink - Link to the RSS feed for this file/directory
+rssanchor - The <a href=...> tag to the RSS feed for this file/directory
+
+Variables defined for log.tmpl
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+action - Action being performed ("Log")
+
+repname - Name of the repository
+rev - Revision being viewed
+path - Path of item being logged
+curdirlinks - List of the path of this directory with links to each one
+
+pagelinks - List of list to all the pages of the log
+showalllink - Link to show the entire log in one go
+
+logsearch_form - HTML <form> specification for the log search box
+logsearch_inputbox - HTML <input> specification for the log search box
+logsearch_submit - HTML <input> specification for the log search GO button
+logsearch_endform - HTML </form> specification for the log search box box
+ (includes hidden field declarations)
+logsearch_clearloglink - Link to unfiltered display (remove current search
+ criteria)
+
+logsearch_resultsfound - true when there are logs to display
+logsearch_nomatches - true when there are no matches for the current request
+logsearch_nomorematches - true when there are no further matches to the current
+ request (but there have been previous pages,
+ for example)
+
+compare_form - HTML <form> specification for the comparison form
+compare_submit - HTML <input> specification for the comparison button
+compare_endform - HTML </form> specification for the comparison form
+
+Used in [websvn-startlisting] ... [websvn-endlisting] block:
+
+compare_box - HTML checkbox specification for the comparison option
+revpathlink - Link to revision
+revauthor - Author of this revision
+revage - Age of revision
+revlog - Log message of revision
+
+
+Variables defined for file.tmpl
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+repname - Name of the repository
+rev - Revision being viewed
+path - Path of item being logged
+curdirlinks - List of the path of this directory with links to each one
+
+prevdifflink - Link to comparison with previous revision
+blamelink - Link to the blame information for this file
+
+Note: Use command [websvn-getlisting] to display the listing.
+
+
+Variables defined for diff.tmpl
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+action - Action being performed ("Diff")
+locwebsvnhttp - Root of websvn directory
+charset - The charset requested by the user
+
+repname - Name of the repository
+rev - Revision being viewed
+path - Path of item being logged
+curdirlinks - List of the path of this directory with links to each one
+
+rev1 - Revision of the older file
+rev2 - Revision of the newer file
+
+showcompactlink - Link to compact view
+showalllink - Link to full view
+
+Used in [websvn-startlisting] ... [websvn-endlisting] block:
+
+rev1lineno / rev2lineno - Line number of the next difference block. Only
+ defined at the start of the block.
+rev2diffclass / rev2diffclass - Class name of the diff block used for colouring
+ differences. The result is one of:
+ * diff (no changes)
+ * diffadded
+ * diffchanged
+ * diffdeleted
+rev1line / rev2line - The line under comparison
+
+Variables defined for blame.tmpl
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+locwebsvnhttp - Root of websvn directory
+charset - The charset requested by the user
+
+repname - Name of the repository
+rev - Revision being viewed
+path - Path of item being logged
+curdirlinks - List of the path of this directory with links to each one
+
+Used in [websvn-startlisting] ... [websvn-endlisting] block:
+
+lineno - Line number of the line
+revision - Revision in which the line changed
+author - Last author to modify the line
+line - The line itself
+
+Variables defined for compare.tmpl
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+action - Action being performed ("Path Comparison")
+repname - Name of the repository
+path1 - First path being compared
+rev1 - Revision of first path
+path2 - Second path being compared
+rev2 - Revision of second path
+
+success = true if the comparison succeeded
+
+revlink - Link to reverse comparison
+
+compare_form - HTML <form> specification for the comparison form
+compare_path1input/compare_path2input - HTML specifications for the path input areas
+compare_rev1input/compare_rev2input - HTML specifications for the revision input areas
+compare_submit - HTML <input> specification for the comparison button
+compare_endform - HTML </form> specification for the comparison form
+
+Used in [websvn-startlisting] ... [websvn-endlisting] block:
+
+newpath - Name of new file under comparison (only defined at start of block)
+difflines - Lines changed information for this file. Start of diff lines.
+ (only defined after newpath)
+diffclass - Class name of the diff block used for colouring
+ differences. The result is one of:
+ * diff (no changes)
+ * diffadded
+ * diffdeleted
+line - The line under comparison
+enddifflines - End of diff lines
+properties - Property changes
+endpath - End of current path
Added: trunk/svn.matroska.org/WebSVN/wsvn.php
===================================================================
--- trunk/svn.matroska.org/WebSVN/wsvn.php 2005-07-11 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/wsvn.php 2005-08-02 22:50:12 UTC (rev 966)
@@ -0,0 +1,131 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Tim Armes
+//
+// 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
+//
+// --
+//
+
+// --- CONFIGURE THESE VARIABLES ---
+
+// Location of websvn directory via HTTP
+//
+// e.g. For http://servername/websvn use /websvn
+//
+// Note that wsvn.php need not be in the /websvn directory (and normally isn't).
+$locwebsvnhttp = "/websvn";
+
+// Physical location of websvn directory
+$locwebsvnreal = "d:/websvn";
+
+chdir($locwebsvnreal);
+
+// --- DON'T CHANGE BELOW HERE ---
+
+ini_set("include_path", $locwebsvnreal);
+
+require_once("include/setup.inc");
+require_once("include/svnlook.inc");
+
+if (!isset($_REQUEST["sc"]))
+ $_REQUEST["sc"] = 1;
+
+if ($config->multiViews)
+{
+ // If this is a form handling request, deal with it
+ if (@$_REQUEST["op"] == "form")
+ {
+ include("$locwebsvnreal/form.php");
+ exit;
+ }
+
+ $path = @$_SERVER["PATH_INFO"];
+
+ // Remove initial slash
+ $path = substr($path, 1);
+ if (empty($path))
+ {
+ include("$locwebsvnreal/index.php");
+ exit;
+ }
+
+ // Get the repository name
+ $pos = strpos($path, "/");
+
+ if ($pos === false)
+ {
+ $name = substr($path, 0);
+ $path = "/";
+ }
+ else
+ {
+ $name = substr($path, 0, $pos);
+ $path = substr($path, $pos);
+ }
+
+ $rep = $config->findRepository($name);
+ createProjectSelectionForm();
+ $vars["allowdownload"] = $rep->getAllowDownload();
+
+ // find the operation type
+ $op = @$_REQUEST["op"];
+ switch ($op)
+ {
+ case "dir":
+ $file = "listing.php";
+ break;
+
+ case "file":
+ $file = "filedetails.php";
+ break;
+
+ case "log":
+ $file = "log.php";
+ break;
+
+ case "diff":
+ $file = "diff.php";
+ break;
+
+ case "blame":
+ $file = "blame.php";
+ break;
+
+ case "rss":
+ $file = "rss.php";
+ break;
+
+ case "dl":
+ $file = "dl.php";
+ break;
+
+ case "comp":
+ $file = "comp.php";
+ break;
+
+ default:
+ $file = "listing.php";
+ }
+
+ // Now include the file that handles it
+ include("$locwebsvnreal/$file");
+}
+else
+{
+ print "<p>MultiViews must be configured in config.inc in order to use this file";
+ exit;
+}