[Matroska-cvs] [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
robux4 at matroska.org
robux4 at matroska.org
Wed Aug 3 00:50:48 CEST 2005
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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D $lang["BLAME"];
+
+$svnrep =3D new SVNRepository($rep->path);
+
+// If there's no revision info, go to the lastest revision for this path
+$history =3D $svnrep->getHistory($path);
+$youngest =3D $history[0]["rev"];
+
+if (empty($rev))
+ $rev =3D $youngest;
+
+if ($path{0} !=3D "/")
+ $ppath =3D "/".$path;
+else
+ $ppath =3D $path;
+
+// Find the parent path (or the whole path if it's already a directory)
+$pos =3D strrpos($ppath, "/");
+$parent =3D substr($ppath, 0, $pos + 1);
+
+$vars["repname"] =3D $rep->name;
+$vars["rev"] =3D $rev;
+$vars["path"] =3D $ppath;
+
+createDirLinks($rep, $ppath, $rev, $showchanged);
+
+$listing =3D array();
+
+// Get the contents of the file
+$tfname =3D tempnam("temp", "");
+$svnrep->getFileContents($path, $tfname, $rev);
+
+$filecache =3D array();
+
+if ($file =3D fopen($tfname, "r")) =20
+{
+ // Get the blame info
+ $tbname =3D tempnam("temp", "");
+ $svnrep->getBlameDetails($path, $tbname, $rev);=20
+ =20
+ $ent =3D true;
+ if ((strrchr($path, ".") =3D=3D '.php') || ($config->useEnscript))
+ $ent =3D false;
+
+ if ($blame =3D fopen($tbname, "r")) =20
+ {
+ // Create an array of version/author/line
+ =20
+ $index =3D 0;
+ =20
+ while (!feof($blame) && !feof($file))
+ {
+ $blameline =3D fgets($blame);
+ =20
+ if ($blameline !=3D "")
+ {
+ list($revision, $author) =3D sscanf($blameline, "%d %s");
+ =20
+ $listing[$index]["lineno"] =3D $index + 1;
+ =20
+ $url =3D $config->getURL($rep, $parent, "dir");
+ $listing[$index]["revision"] =3D "<a href=3D\"${url}rev=3D$r=
evision&sc=3D1\">$revision</a>";
+
+ $listing[$index]["author"] =3D $author;
+ =20
+ if ($ent)
+ $line =3D replaceEntities(rtrim(fgets($file)));
+ else
+ $line =3D rtrim(fgets($file));
+
+ $listing[$index]["line"] =3D hardspace($line);
+ =20
+ if (trim($listing[$index]["line"]) =3D=3D "")
+ $listing[$index]["line"] =3D " ";
+ =20
+ $index++;
+ }
+ }
+ =20
+ fclose($blame);
+ }
+ =20
+ fclose($file);
+}
+
+unlink($tfname); =20
+unlink($tbname); =20
+
+$vars["version"] =3D $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."blame.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+ =20
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/cache/tmp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/changes.txt 2005-07-11 21:06:24 UTC (re=
v 965)
+++ trunk/svn.matroska.org/WebSVN/changes.txt 2005-08-02 22:50:12 UTC (re=
v 966)
@@ -0,0 +1,312 @@
+CHANGES
+
+FIX: Accented characters weren't shown correctly in the directory compar=
ison
+ 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=20
+ string for the latest modification to the current directory).
+ This means the the parent directory structure won't change as yo=
u
+ browse through old directories.
+
+FIX: A bug prevented downloading of tarballs from working
+
+1.60=20
+
+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=F8rch 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
+ =20
+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 character=
s
+ under windows.
+FIX: File listing sometimes failed when there were spaces in the filenam=
e
+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 d=
isplay
+ the contents
+FIX: Diff and Blame didn't work properly for php files when enscript was=
n'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 execut=
ing
+ commands so that tempnam works. This used to cause problems on som=
e
+ systems when running diff and blame.
+
+1.50
+
+Notes: Before installing this version you should delete all the existing
+ cache files.
+ =20
+ wsvn.php has changed. You should redo any appropriate configurat=
ion
+ 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 usi=
ng
+ the svn command via file:/// access rather than svnlook. This h=
as
+ 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!
+ =20
+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 WebS=
VN
+ was installed in the server's root directory.
+FIX: Sed wouldn't work under all versions of Windows due to the use of s=
ingle
+ 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=FCbbe 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.=20
+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=20
+ 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.=20
+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 argume=
nts
+ on Windows machines.
+
+1.35
+
+NEW: You can now specify a list of file types (extensions) for files whi=
ch
+ should be delivered to the user in a GZIP'd archive rather than=20
+ 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, offe=
ring
+ 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 contro=
l
+ (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 'charse=
t')
+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 attachme=
nts.
+ The list of files types to be sent back to the user (rather than di=
splayed
+ 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 overri=
de 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:
+ =20
+ 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 repositor=
y.
+ This means that clicking on a directory will show the lastest=20
+ 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=20
+ 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 Window=
s
+ 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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/comp.php 2005-07-11 21:06:24 UTC (rev 9=
65)
+++ trunk/svn.matroska.org/WebSVN/comp.php 2005-08-02 22:50:12 UTC (rev 9=
66)
@@ -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 =3D new SVNRepository($rep->path);
+
+function checkRevision($rev)
+{
+ if (is_numeric($rev) && ((int)$rev > 0))
+ return $rev;
+ =20
+ $rev =3D strtoupper($rev);
+ =20
+ switch($rev)
+ {
+ case "HEAD":
+ case "PREV":
+ case "COMMITTED":
+ return $rev;
+ }
+ =20
+ return "HEAD"; =20
+}
+
+$svnrep =3D new SVNRepository($rep->path);
+
+// Retrieve the request information
+$path1 =3D @$_REQUEST["compare"][0];
+$path2 =3D @$_REQUEST["compare"][1];
+$rev1 =3D @$_REQUEST["compare_rev"][0];
+$rev2 =3D @$_REQUEST["compare_rev"][1];
+
+// Some page links put the revision with the path...
+if (strpos($path1, "@")) list($path1, $rev1) =3D explode("@", $path1);
+if (strpos($path2, "@")) list($path2, $rev2) =3D explode("@", $path2);
+
+$rev1 =3D checkRevision($rev1);
+$rev2 =3D checkRevision($rev2);
+
+// Choose a sensible comparison order unless told not to
+if (!@$_REQUEST["manualorder"] && is_numeric($rev1) && is_numeric($rev2)=
)
+{
+ if ($rev1 > $rev2)
+ {
+ $temppath =3D $path1;
+ $temprev =3D $rev1;
+ =20
+ $path1 =3D $path2;
+ $rev1 =3D $rev2;
+ =20
+ $path2 =3D $temppath;
+ $rev2 =3D $temprev;
+ }
+}
+
+$url =3D $config->getURL($rep, "", "comp");
+$vars["revlink"] =3D "<a href=3D\"${url}compare%5B%5D=3D".urlencode($pat=
h2)."@$rev2&compare%5B%5D=3D".urlencode($path1)."@$rev1&manualorder=3D=
1\">${lang["REVCOMP"]}</a>";
+
+if ($rev1 =3D=3D 0) $rev1 =3D "HEAD";
+if ($rev2 =3D=3D 0) $rev2 =3D "HEAD";
+
+$vars["repname"] =3D $rep->name;
+$vars["action"] =3D $lang["PATHCOMPARISON"];
+$vars["compare_form"] =3D "<form action=3D\"$url\" method=3D\"post\" nam=
e=3D\"compareform\">";
+$vars["compare_path1input"] =3D "<input type=3D\"text\" size=3D\"40\" na=
me=3D\"compare[0]\" value=3D\"$path1\">";
+$vars["compare_rev1input"] =3D "<input type=3D\"text\" size=3D\"5\" name=
=3D\"compare_rev[0]\" value=3D\"$rev1\">";
+$vars["compare_path2input"] =3D "<input type=3D\"text\" size=3D\"40\" na=
me=3D\"compare[1]\" value=3D\"$path2\">";
+$vars["compare_rev2input"] =3D "<input type=3D\"text\" size=3D\"5\" name=
=3D\"compare_rev[1]\" value=3D\"$rev2\">";
+$vars["compare_submit"] =3D "<input name=3D\"comparesubmit\" type=3D\"su=
bmit\" value=3D\"${lang["COMPAREPATHS"]}\">";
+$vars["compare_endform"] =3D "<input type=3D\"hidden\" name=3D\"op\" val=
ue=3D\"comp\"><input type=3D\"hidden\" name=3D\"manualorder\" value=3D\"1=
\"><input type=3D\"hidden\" name=3D\"sc\" value=3D\"$showchanged\"></form=
>"; =20
+
+$vars["path1"] =3D $path1;
+$vars["path2"] =3D $path2;
+
+$vars["rev1"] =3D $rev1;
+$vars["rev2"] =3D $rev2;
+
+$noinput =3D empty($path1) || empty($path2);
+$listing =3D array();
+
+// Generate the diff listing
+$path1 =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $svnrep->rep=
Path.$path1));
+$path2 =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $svnrep->rep=
Path.$path2));
+
+$debug =3D false;
+
+if (!$noinput)
+{
+ $rawcmd =3D $config->svn." diff -r$rev1:$rev2 ".quote("file:///".$pat=
h1)." ".quote("file:///".$path2);
+ $cmd =3D quoteCommand($rawcmd, true);
+ if ($debug) echo "$cmd\n";
+}
+
+function clearVars()
+{
+ global $listing, $index;
+ =20
+ $listing[$index]["newpath"] =3D null;
+ $listing[$index]["endpath"] =3D null;
+ $listing[$index]["info"] =3D null;
+ $listing[$index]["diffclass"] =3D null;
+ $listing[$index]["difflines"] =3D null;
+ $listing[$index]["enddifflines"] =3D null;
+ $listing[$index]["properties"] =3D null;
+} =20
+
+$vars["success"] =3D false;
+
+if (!$noinput)
+{
+ if ($diff =3D popen($cmd, "r"))
+ {
+ $index =3D 0;
+ $indiff =3D false;
+ $indiffproper =3D false;
+ $getLine =3D true;
+ $node =3D null;
+ =20
+ $vars["success"] =3D true;
+ =20
+ while (!feof($diff))
+ {
+ if ($getLine)
+ $line =3D fgets($diff);
+ =20
+ clearVars(); =20
+ $getLine =3D true;
+ if ($debug) print "Line =3D '$line'<br>" ; =20
+ if ($indiff)
+ {
+ // If we're in a diff proper, just set up the line
+ if ($indiffproper)
+ {
+ if ($line[0] =3D=3D " " || $line[0] =3D=3D "+" || $line[0] =
=3D=3D "-")
+ {
+ switch ($line[0])
+ {
+ case " ":
+ $listing[$index]["diffclass"] =3D "diff";
+ $subline =3D replaceEntities(rtrim(substr($line, 1=
)));=20
+ if (empty($subline)) $subline =3D " ";
+ $listing[$index++]["line"] =3D $subline;
+ if ($debug) print "Including as diff: $subline<b=
r>";
+ break;
+ =20
+ case "+":
+ $listing[$index]["diffclass"] =3D "diffadded";
+ $subline =3D replaceEntities(rtrim(substr($line, 1=
)));=20
+ if (empty($subline)) $subline =3D " ";
+ $listing[$index++]["line"] =3D $subline;
+ if ($debug) print "Including as added: $subline<=
br>";
+ break;
+ =20
+ case "-":
+ $listing[$index]["diffclass"] =3D "diffdeleted";
+ $subline =3D replaceEntities(rtrim(substr($line, 1=
)));=20
+ if (empty($subline)) $subline =3D " ";
+ $listing[$index++]["line"] =3D $subline;
+ if ($debug) print "Including as removed: $sublin=
e<br>";
+ break;
+ }
+ =20
+ continue;
+ }
+ else
+ {
+ $indiffproper =3D false;
+ $listing[$index++]["enddifflines"] =3D true;
+ $getLine =3D false;
+ if ($debug) print "Ending lines<br>";
+ continue;
+ }
+ }
+ =20
+ // Check for the start of a new diff area
+ if (!strncmp($line, "@@", 2))
+ {
+ $pos =3D strpos($line, "+");
+ $posline =3D substr($line, $pos);=20
+ sscanf($posline, "+%d,%d", $sline, $eline);
+ if ($debug) print "sline =3D '$sline', eline =3D=
'$eline'<br>"; =20
+ // Check that this isn't a file deletion
+ if ($sline =3D=3D 0 && $eline =3D=3D 0)
+ {
+ $line =3D fgets($diff);
+ if ($debug) print "Ignoring: $line<br>" ; =20
+ while ($line[0] =3D=3D " " || $line[0] =3D=3D "+" || $li=
ne[0] =3D=3D "-")
+ {
+ $line =3D fgets($diff);
+ if ($debug) print "Ignoring: $line<br>" ; =20
+ } =09
+ =20
+ $getLine =3D false;
+ if ($debug) print "Unignoring previous - marking as de=
leted<b>";
+ $listing[$index++]["info"] =3D $lang["FILEDELETED"];
+ }
+ else
+ {
+ $listing[$index++]["difflines"] =3D $line;
+ $indiffproper =3D true;
+ }
+ =20
+ continue;
+ }
+ else
+ {
+ $indiff =3D false;
+ if ($debug) print "Ending diff";
+ }
+ }
+ =20
+ // Check for a new node entry
+ if (strncmp(trim($line), "Index: ", 7) =3D=3D 0)
+ {
+ // End the current node
+ if ($node)
+ {
+ $listing[$index++]["endpath"] =3D true;
+ clearVars();
+ }
+ =20
+ $node =3D trim($line);
+ $node =3D substr($node, 7);
+ =20
+ $listing[$index]["newpath"] =3D $node;
+ if ($debug) echo "Creating node $node<br>";
+ =20
+ // Skip past the line of =3D's
+ $line =3D fgets($diff);
+ if ($debug) print "Skipping: $line<br>" ; =20
+ =20
+ // Check for a file addition
+ $line =3D fgets($diff);
+ if ($debug) print "Examining: $line<br>" ; =20
+ if (strpos($line, "(revision 0)"))
+ $listing[$index]["info"] =3D $lang["FILEADDED"];
+ =20
+ if (strncmp(trim($line), "Cannot display:", 15) =3D=3D 0)
+ {
+ $index++;
+ clearVars();
+ $listing[$index++]["info"] =3D $line;
+ continue;
+ }
+ =20
+ // Skip second file info
+ $line =3D fgets($diff);
+ if ($debug) print "Skipping: $line<br>" ; =20
+ =20
+ $indiff =3D true;
+ $index++;
+ =20
+ continue;
+ }
+ =20
+ if (strncmp(trim($line), "Property changes on: ", 21) =3D=3D 0)
+ {
+ $propnode =3D trim($line);
+ $propnode =3D substr($propnode, 21);
+ =20
+ if ($debug) print "Properties on $propnode (cur node $ $node=
)";
+ if ($propnode !=3D $node)
+ {
+ if ($node)
+ {
+ $listing[$index++]["endpath"] =3D true;
+ clearVars();
+ }
+ =20
+ $node =3D $propnode;
+ =20
+ $listing[$index++]["newpath"] =3D $node;
+ clearVars();
+ }
+ =20
+ $listing[$index++]["properties"] =3D true;
+ clearVars();
+ if ($debug) echo "Creating node $node<br>";
+ =20
+ // Skip the row of underscores
+ $line =3D fgets($diff);
+ if ($debug) print "Skipping: $line<br>" ; =20
+ =20
+ while ($line =3D trim(fgets($diff)))
+ {
+ $listing[$index++]["info"] =3D $line;
+ clearVars();
+ }
+ =20
+ continue;
+ }
+ =20
+ // Check for error messages
+ if (strncmp(trim($line), "svn: ", 5) =3D=3D 0)
+ {
+ $listing[$index++]["info"] =3D urldecode($line);
+ $vars["success"] =3D false;
+ continue;
+ }
+ =20
+ $listing[$index++]["info"] =3D $line;
+ =20
+ }
+ =20
+ if ($node)
+ {=20
+ clearVars();
+ $listing[$index++]["endpath"] =3D true;
+ }
+ =20
+ if ($debug) print_r($listing);
+ } =20
+}
+
+$vars["version"] =3D $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."compare.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+ =20
+?>
Added: trunk/svn.matroska.org/WebSVN/diff.php
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/diff.php 2005-07-11 21:06:24 UTC (rev 9=
65)
+++ trunk/svn.matroska.org/WebSVN/diff.php 2005-08-02 22:50:12 UTC (rev 9=
66)
@@ -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 =3D 5;
+
+$vars["action"] =3D $lang["DIFF"];
+$all =3D (@$_REQUEST["all"] =3D=3D 1)?1:0;
+
+// Make sure that we have a repository
+if (!isset($rep))
+{
+ echo $lang["NOREP"];
+ exit;
+}
+
+$svnrep =3D new SVNRepository($rep->path);
+
+// If there's no revision info, go to the lastest revision for this path
+$history =3D $svnrep->getHistory($path);
+$youngest =3D $history[0]["rev"];
+
+if (empty($rev))
+ $rev =3D $youngest;
+
+$history =3D $svnrep->getHistory($path, $rev);
+
+if ($path{0} !=3D "/")
+ $ppath =3D "/".$path;
+else
+ $ppath =3D $path;
+
+$prevrev =3D @$history[1]["rev"];
+
+$vars["repname"] =3D $rep->name;
+$vars["rev"] =3D $rev;
+$vars["path"] =3D $ppath;
+$vars["prevrev"] =3D $prevrev;
+
+$vars["rev1"] =3D $history[0]["rev"];
+$vars["rev2"] =3D $prevrev;
+
+createDirLinks($rep, $ppath, $rev, $showchanged);
+
+$listing =3D array();
+
+if ($prevrev)
+{
+ $url =3D $config->getURL($rep, $path, "diff");
+ =20
+ if (!$all)
+ {
+ $vars["showalllink"] =3D "<a href=3D\"${url}rev=3D$rev&sc=3D$s=
howchanged&all=3D1\">${lang["SHOWENTIREFILE"]}</a>";
+ $vars["showcompactlink"] =3D "";
+ }
+ else
+ {
+ $vars["showcompactlink"] =3D "<a href=3D\"${url}rev=3D$rev&sc=3D=
$showchanged&all=3D0\">${lang["SHOWCOMPACT"]}</a>";
+ $vars["showalllink"] =3D "";
+ }
+
+ // Get the contents of the two files
+ $newtname =3D tempnam("temp", "");
+ $new =3D $svnrep->getFileContents($history[0]["path"], $newtname, $hi=
story[0]["rev"]);
+
+ $oldtname =3D tempnam("temp", "");
+ $old =3D $svnrep->getFileContents($history[1]["path"], $oldtname, $hi=
story[1]["rev"]);
+ =20
+ $ent =3D true;
+ if ((strrchr($path, ".") =3D=3D '.php') || ($config->useEnscript))
+ $ent =3D false;
+
+ $file1cache =3D array();
+
+ if ($all)
+ $context =3D 1; // Setting the context to 0 makes diff generate t=
he wrong line numbers!
+
+ // Open a pipe to the diff command with $context lines of context =20
+ =20
+ $cmd =3D quoteCommand($config->diff." --ignore-all-space -U $context =
$oldtname $newtname", false);
+ =20
+ if ($all)
+ {
+ $ofile =3D fopen($oldtname, "r");
+ $nfile =3D fopen($newtname, "r"); =20
+ }
+
+ if ($diff =3D popen($cmd, "r"))
+ {
+ // Ignore the 3 header lines
+ $line =3D fgets($diff);
+ $line =3D fgets($diff);
+
+ // Get the first real line
+ $line =3D fgets($diff);
+ =20
+ $index =3D 0;
+ $listing =3D array();
+ =20
+ $curoline =3D 1;
+ $curnline =3D 1;
+ =20
+ while (!feof($diff))
+ { =20
+ // Get the first line of this range
+ sscanf($line, "@@ -%d", $oline);
+ =20
+ $line =3D substr($line, strpos($line, "+"));
+ sscanf($line, "+%d", $nline);
+ =20
+ if ($all)
+ {
+ while ($curoline < $oline || $curnline < $nline)
+ {
+ $listing[$index]["rev1diffclass"] =3D "diff";
+ $listing[$index]["rev2diffclass"] =3D "diff";
+ =20
+ if ($curoline < $oline)
+ {
+ $nl =3D fgets($ofile);
+ =20
+ if ($ent)
+ $line =3D replaceEntities(rtrim($nl));
+ else
+ $line =3D rtrim($nl);
+ =20
+ $listing[$index]["rev1line"] =3D hardspace($line);
+
+ $curoline++;
+ }
+ else
+ $listing[$index]["rev1line"] =3D " ";
+ =20
+ if ($curnline < $nline)
+ {
+ $nl =3D fgets($nfile);
+
+ if ($ent)
+ $line =3D replaceEntities(rtrim($nl));
+ else
+ $line =3D rtrim($nl);
+ =20
+ $listing[$index]["rev1line"] =3D hardspace($line);
+ $curnline++;
+ }
+ else
+ $listing[$index]["rev2line"] =3D " ";
+ =20
+ $listing[$index]["rev1lineno"] =3D 0;
+ $listing[$index]["rev2lineno"] =3D 0;
+
+ $index++;
+ }
+ }
+ else
+ {
+ // Output the line numbers
+ $listing[$index]["rev1lineno"] =3D "$oline";
+ $listing[$index]["rev2lineno"] =3D "$nline";
+ $index++;
+ }
+ =20
+ $fin =3D false;
+ while (!feof($diff) && !$fin)
+ { =20
+ $listing[$index]["rev1lineno"] =3D 0;
+ $listing[$index]["rev2lineno"] =3D 0;
+
+ $line =3D fgets($diff);
+ if (!strncmp($line, "@@", 2))
+ {
+ $fin =3D true;
+ }
+ else
+ {
+ $mod =3D $line{0};
+
+ if ($ent)
+ $line =3D replaceEntities(rtrim(substr($line, 1)));
+ else
+ $line =3D rtrim(substr($line, 1));
+ =20
+ $listing[$index]["rev1line"] =3D hardspace($line);
+
+ $text =3D hardspace($line);
+ if ($text =3D=3D "") $text =3D " ";
+ =20
+ switch ($mod)
+ {
+ case "-":
+ $listing[$index]["rev1diffclass"] =3D "diffdeleted"=
;
+ $listing[$index]["rev2diffclass"] =3D "diff";
+ =20
+ $listing[$index]["rev1line"] =3D $text;
+ $listing[$index]["rev2line"] =3D " ";
+ =20
+ if ($all)
+ {
+ fgets($ofile);
+ $curoline++;
+ }
+ =20
+ break; =20
+
+ case "+":
+ =20
+ // Try to mark "changed" line sensibly
+ if (!empty($listing[$index-1]) && empty($listing[$i=
ndex-1]["rev1lineno"]) && $listing[$index-1]["rev1diffclass"] =3D=3D "dif=
fdeleted" && $listing[$index-1]["rev2diffclass"] =3D=3D "diff")
+ {
+ $i =3D $index - 1;
+ while (!empty($listing[$i-1]) && empty($listing[=
$i-1]["rev1lineno"]) && $listing[$i-1]["rev1diffclass"] =3D=3D "diffdelet=
ed" && $listing[$i-1]["rev2diffclass"] =3D=3D "diff")
+ $i--;
+ =20
+ $listing[$i]["rev1diffclass"] =3D "diffchanged";
+ $listing[$i]["rev2diffclass"] =3D "diffchanged";
+ $listing[$i]["rev2line"] =3D $text;
+ =20
+ if ($all)
+ {
+ fgets($nfile);
+ $curnline++;
+ }
+
+ // Don't increment the current index count
+ $index--;
+ }
+ else
+ {
+ $listing[$index]["rev1diffclass"] =3D "diff";
+ $listing[$index]["rev2diffclass"] =3D "diffadded=
";
+ =20
+ $listing[$index]["rev1line"] =3D " ";
+ $listing[$index]["rev2line"] =3D $text;
+
+ if ($all)
+ {
+ fgets($nfile);
+ $curnline++;
+ }
+ }
+ break;
+ =20
+ default:
+ $listing[$index]["rev1diffclass"] =3D "diff";
+ $listing[$index]["rev2diffclass"] =3D "diff";
+ =20
+ $listing[$index]["rev1line"] =3D $text;
+ $listing[$index]["rev2line"] =3D $text;
+ =20
+ if ($all)
+ {
+ fgets($ofile);
+ fgets($nfile);
+ $curoline++;
+ $curnline++;
+ }
+
+ break; =09
+ }
+ }
+ =20
+ if (!$fin)
+ $index++;
+ }
+ } =20
+ =09
+ // Output the rest of the files
+ if ($all)
+ {
+ while (!feof($ofile) || !feof($nfile))
+ {
+ $listing[$index]["rev1diffclass"] =3D "diff";
+ $listing[$index]["rev2diffclass"] =3D "diff";
+ =20
+ if ($ent)
+ $line =3D replaceEntities(rtrim(fgets($ofile)));
+ else
+ $line =3D rtrim(fgets($ofile));
+
+ if (!feof($ofile))
+ $listing[$index]["rev1line"] =3D hardspace($line);
+ else
+ $listing[$index]["rev1line"] =3D " ";
+ =20
+ if ($ent)
+ $line =3D replaceEntities(rtrim(fgets($nfile)));
+ else
+ $line =3D rtrim(fgets($nfile));
+
+ if (!feof($nfile))
+ $listing[$index]["rev2line"] =3D hardspace($line);
+ else
+ $listing[$index]["rev2line"] =3D " ";
+ =20
+ $listing[$index]["rev1lineno"] =3D 0;
+ $listing[$index]["rev2lineno"] =3D 0;
+
+ $index++;
+ }
+ }
+ =09
+ pclose($diff); =20
+ } =20
+ =20
+ if ($all)
+ {
+ fclose($ofile);
+ fclose($nfile); =20
+ }
+
+ // Remove our temporary files =20
+ unlink($oldtname);
+ unlink($newtname);
+}
+else
+{
+ $vars["noprev"] =3D 1;
+}
+
+$vars["version"] =3D $version;
+parseTemplate($config->templatePath."header.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."diff.tmpl", $vars, $listing);
+parseTemplate($config->templatePath."footer.tmpl", $vars, $listing);
+ =20
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/dl.php
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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 =3D new SVNRepository($rep->path);
+
+if ($path{0} !=3D "/")
+ $ppath =3D "/".$path;
+else
+ $ppath =3D $path;
+
+// If there's no revision info, go to the lastest revision for this path
+$history =3D $svnrep->getHistory($path);
+$youngest =3D $history[0]["rev"];
+
+if (empty($rev))
+ $rev =3D $youngest;
+
+// Create a temporary directory. Here we have an unavoidable but highly
+// unlikely to occure race condition
+
+$tmpname =3D tempnam("temp", "wsvn");
+unlink($tmpname);
+if (mkdir($tmpname))
+{
+ // Get the name of the directory being archived
+ $arcname =3D substr($path, 0, -1);
+ $arcname =3D basename($arcname);
+ if (empty($arcname))
+ $arcname =3D $rep->name;
+
+ $svnrep->exportDirectory($path, $tmpname.DIRECTORY_SEPARATOR.$arcname=
, $rev);
+ =20
+ // Create the tar file
+ chdir($tmpname);
+ exec($config->tar." -cf $arcname.tar $arcname");
+ =20
+ // ZIP it up
+ exec($config->gzip." $arcname.tar");
+ $size =3D filesize("$arcname.tar.gz");
+
+ // Give the file to the browser
+
+ if ($fp =3D @fopen("$arcname.tar.gz","rb"))
+ {
+ header("Content-Type: application/x-gzip");
+ header("Content-Length: $size");
+ header("Content-Disposition: attachment; filename=3D$arcname.tar.g=
z");
+ @fpassthru($fp);
+ }
+ else
+ {
+ print "Unable to open file $arcname.tar.gz";
+ }
+ =20
+ fclose($fp);
+ =20
+ chdir("..");
+
+ // Delete the directory. Why doesn't PHP have a generic recursive di=
rectory
+ // deletion command? It's stupid.
+
+ if ($config->serverIsWindows)
+ {
+ $cmd =3D quoteCommand("rmdir /S /Q ".quote($tmpname), false);
+ }
+ else
+ {
+ $cmd =3D quoteCommand("rm -rf ".quote($tmpname), false);
+ }
+ =20
+ @exec($cmd);
+}
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/filedetails.php
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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 =3D new SVNRepository($rep->path);
+
+if ($path{0} !=3D "/")
+ $ppath =3D "/".$path;
+else
+ $ppath =3D $path;
+
+$passrev =3D $rev;
+
+// If there's no revision info, go to the lastest revision for this path
+$history =3D $svnrep->getHistory($path);
+$youngest =3D $history[0]["rev"];
+
+if (empty($rev))
+ $rev =3D $youngest;
+
+$extn =3D strrchr($path, ".");
+
+// Check to see if the user has requested that this type be zipped and s=
ent
+// to the browser as an attachment
+
+if (in_array($extn, $zipped))
+{
+ $base =3D basename($path);
+ header("Content-Type: application/x-gzip");
+ header("Content-Disposition: attachment; filename=3D".urlencode($base=
).".gz");
+
+ // Get the file contents and pipe into gzip. All this without creati=
ng
+ // a temporary file. Damn clever.
+ $svnrep->getFileContents($path, "", $rev, "| ".$config->gzip." -n -f"=
);
+ =20
+ 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())=20
+{
+ $svnMimeType =3D $svnrep->getProperty($path, 'svn:mime-type', $rev);
+}
+
+if (!$rep->getIgnoreWebSVNContentTypes())=20
+{
+ $setupContentType =3D @$contentType[$extn];
+}
+
+// Use this set of priorities when establishing what content-type to
+// actually use.
+
+if (!empty($svnMimeType) && $svnMimeType !=3D 'application/octet-stream'=
)=20
+{
+ $cont =3D $svnMimeType;
+}
+else if (!empty($setupContentType))
+{
+ $cont =3D $setupContentType;
+}=20
+else if (!empty($svnMimeType))
+{
+ // It now is equal to application/octet-stream due to logic
+ // above....
+ $cont =3D $svnMimeType;
+}
+
+// If there's a MIME type associated with this format, then we deliver i=
t
+// with this information=20
+
+if (!empty($cont))
+{
+ $base =3D basename($path);
+ =20
+ header("Content-Type: $cont");
+ //header("Content-Length: $size");
+ header("Content-Disposition: inline; filename=3D".urlencode($base));
+ =20
+ $svnrep->getFileContents($path, "", $rev);
+ =20
+ exit;
+}
+
+// There's no associated MIME type. Show the file using WebSVN.
+
+$url =3D $config->getURL($rep, $path, "file");
+
+if ($rev !=3D $youngest)
+ $vars["goyoungestlink"] =3D "<a href=3D\"${url}sc=3D1\">${lang["GOYOU=
NGEST"]}</a>";
+else
+ $vars["goyoungestlink"] =3D "";
+
+$vars["action"] =3D "";
+$vars["repname"] =3D $rep->name;
+$vars["rev"] =3D $rev;
+$vars["path"] =3D $ppath;
+
+createDirLinks($rep, $ppath, $passrev, $showchanged);
+
+$url =3D $config->getURL($rep, $path, "diff");
+$vars["prevdifflink"] =3D "<a href=3D\"${url}rev=3D$passrev&sc=3D$sh=
owchanged\">${lang["DIFFPREV"]}</a>";
+
+$url =3D $config->getURL($rep, $path, "blame");
+$vars["blamelink"] =3D "<a href=3D\"${url}rev=3D$passrev&sc=3D$showc=
hanged\">${lang["BLAME"]}</a>";
+
+$listing =3D array ();
+
+$vars["version"] =3D $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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/form.php 2005-07-11 21:06:24 UTC (rev 9=
65)
+++ trunk/svn.matroska.org/WebSVN/form.php 2005-08-02 22:50:12 UTC (rev 9=
66)
@@ -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=3D getFullURL($loc);
+ =20
+ header("Location: $url");
+ echo "<html><script language=3D\"JavaScript\" type=3D\"text/JavaScrip=
t\">window.location =3D \"$url\"</script></html>";
+}
+
+// Handle project selection
+
+if (@$_REQUEST["selectproj"])
+{ =20
+ $basedir =3D dirname($_SERVER["PHP_SELF"]);
+ if ($basedir !=3D "" && $basedir !=3D DIRECTORY_SEPARATOR && $basedir=
!=3D "\\" && $basedir !=3D "/" )
+ $basedir .=3D "/";
+ else
+ $basedir =3D "/";
+ =20
+ $url =3D $config->getURL($rep, "/", "dir");
+ $url =3D html_entity_decode($url);
+ =20
+ if ($config->multiViews)
+ redirect($url."sc=3D$showchanged");
+ else
+ redirect($basedir.$url."sc=3D$showchanged"); =20
+}
+
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/include/bugtraq.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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 ID=
s
+// with URLs.
+//
+// For more information about bugtraq, see=20
+// http://svn.collab.net/repos/tortoisesvn/trunk/doc/issuetrackers.txt
+
+class Bugtraq
+{
+ var $msgstring;
+ var $urlstring;
+ =20
+ var $firstPart;
+ var $firstPartLen;
+ var $lastPart;
+ var $lastPartLen;
+ =20
+ var $propsfound =3D false;
+ =20
+ function Bugtraq($rep, $svnrep, $path)
+ {
+ global $config;
+ =20
+ if ($rep->getBugtraq())
+ {
+ $pos =3D strrpos($path, "/");
+ $parent =3D substr($path, 0, $pos + 1);
+ =20
+ while ((empty($this->msgstring) || empty($this->urlstring)) && =
(strpos($parent, "/") !=3D=3D false))
+ {
+ if (empty($this->msgstring)) $this->msgstring =3D $svnrep->g=
etProperty($parent, 'bugtraq:message');
+ if (empty($this->urlstring)) $this->urlstring =3D $svnrep->g=
etProperty($parent, 'bugtraq:url');
+ =20
+ $parent =3D substr($parent, 0, -1); // Remove the tra=
iling slash
+ $pos =3D strrpos($parent, "/"); // Find the last =
trailing slash
+ $parent =3D substr($parent, 0, $pos + 1); // Find the previ=
ous parent directory =20
+ }
+ =20
+ if (!empty($this->msgstring) && !empty($this->urlstring))
+ {
+ $this->msgstring =3D trim($this->msgstring);
+ $this->urlstring =3D trim($this->urlstring);
+ =20
+ if (($bugidpos =3D strpos($this->msgstring, "%BUGID%")) !=3D=
=3D false && strpos($this->urlstring, "%BUGID%") !=3D=3D false)
+ {
+ // Get the textual parts of the message string for compar=
ison purposes
+ $this->firstPart =3D substr($this->msgstring, 0, $bugidpo=
s);
+ $this->firstPartLen =3D strlen($this->firstPart);
+ $this->lastPart =3D substr($this->msgstring, $bugidpos + =
7);
+ $this->lastPartLen =3D strlen($this->lastPart);
+ }
+ =20
+ $this->propsfound =3D true;
+ }
+ }
+ }
+
+ function replaceIDs($message)
+ {
+ if ($this->propsfound)
+ {
+ $logmsg =3D "";
+ $message =3D rtrim($message);
+ =20
+ // Just compare the last line =20
+ if ($offset =3D strrpos($message, "\n"))
+ {
+ $logmsg =3D substr($message, 0, $offset + 1);
+ $lastLine =3D substr($message, $offset + 1);
+ }
+ else
+ $lastLine =3D $message;
+ =20
+ // Make sure that our line really is an issue tracker message
+ if (((strncmp($lastLine, $this->firstPart, $this->firstPartLen)=
=3D=3D 0) || (($offset !=3D=3D false) && ($logmsg =3D=3D ""))) &&
+ strcmp(substr($lastLine, -$this->lastPartLen, $this->lastPa=
rtLen), $this->lastPart) =3D=3D 0)
+ {
+ // Get the issues list
+ if ($this->lastPartLen > 0)
+ $issues =3D substr($lastLine, $this->firstPartLen, -$this=
->lastPartLen);
+ else
+ $issues =3D substr($lastLine, $this->firstPartLen);
+ =20
+ // Add each reference to the first part of the line
+ $line =3D $this->firstPart;
+ while ($pos =3D strpos($issues, ","))
+ {
+ $issue =3D trim(substr($issues, 0, $pos));
+ $issues =3D substr($issues, $pos + 1);
+ =20
+ $line .=3D "<a href=3D\"".str_replace("%BUGID%", $issue, =
$this->urlstring)."\">$issue</a>, ";
+ }
+ $line .=3D "<a href=3D\"".str_replace("%BUGID%", trim($issue=
s), $this->urlstring)."\">".trim($issues)."</a>".$this->lastPart;
+ =20
+ return $logmsg.$line;
+ }
+ }
+ =20
+ return $message;
+ }
+}
+?>
Added: trunk/svn.matroska.org/WebSVN/include/command.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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;
+ =20
+ if (version_compare(phpversion(), "4.1.0", "<"))
+ $str =3D htmlentities($str);
+ else
+ $str =3D htmlentities($str, ENT_COMPAT, $config->outputEnc);
+
+ return $str;
+}
+
+function transChars($str, $doEnt =3D true)
+{
+ global $config;
+ =20
+ // Try to convert the messages based on the locale information
+ if ($config->inputEnc && $config->outputEnc)
+ {
+ if (function_exists("iconv"))
+ {
+ $output =3D @iconv($config->inputEnc, $config->outputEnc, $str)=
;
+ if (!empty($output))
+ $str =3D $output;
+ }
+ }
+ =20
+ if ($doEnt) $str =3D replaceEntities($str);
+
+ return $str;
+}
+
+function transArray($arr)
+{
+ global $config;
+ =20
+ $narr =3D array();
+ =20
+ foreach ($arr as $key =3D> $value)
+ {
+ // Try to convert the messages based on the locale information
+ if ($config->inputEnc && $config->outputEnc)
+ {
+ if (function_exists("iconv"))
+ {
+ $output =3D @iconv($config->inputEnc, $config->outputEnc, $v=
alue);
+ if (!empty($output))
+ $value =3D $output;
+ }
+ }
+
+ $narr[$key] =3D replaceEntities(rtrim($value));
+ }
+ =20
+ return $narr;
+}
+
+function quoteCommand($cmd, $redirecterr)
+{
+ global $config;
+ =20
+ if ($redirecterr)
+ $cmd .=3D " 2>&1";
+ =20
+ // On Windows machines, the whole line needs quotes round it so that =
it's
+ // passed to cmd.exe correctly
+
+ if ($config->serverIsWindows)
+ $cmd =3D "\"$cmd\"";
+ =20
+ return $cmd;
+}
+
+function runCommand($cmd, $mayReturnNothing =3D false)
+{
+ global $lang;
+ =20
+ $output =3D array ();
+ $err =3D false;
+
+ $c =3D quoteCommand($cmd, false);
+ =20
+ // Try to run the command normally
+ if ($handle =3D popen($c, "r"))
+ {
+ $firstline =3D true;
+ while (!feof($handle))
+ {
+ $line =3D fgets($handle);
+ if ($firstline && $line =3D=3D "" && !$mayReturnNothing)
+ {
+ $err =3D true;
+ }
+ $firstline =3D false;
+ $output[] =3D transChars(rtrim($line));
+ }
+ =09
+ pclose($handle);
+ if (!$err)
+ return $output;
+ }
+
+ echo "${lang["BADCMD"]}: <i><b>$cmd</b></i><br>";
+ =20
+ // Rerun the command, this time grabbing the error information
+
+ $c =3D quoteCommand($cmd, true);
+
+ $output =3D 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); =20
+}
+
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/include/config.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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.=20
+//
+$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 s=
ystem. Either you list
+// them by hand, in which case you can give each one the name of your ch=
oice, 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 replac=
e 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. =20
+
+$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");=20
+// include("languages/korean-utf8.inc");
+
+// include("languages/tchinese.inc");=20
+// include("languages/tchinese-utf8.inc");
+
+// By default, WebSVN tries to use the iconv module (if enabled) to conv=
ert log messages from your
+// system's character set to you default output encoding. If you find th=
at 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 we=
b page
+$config->setOutputEncoding("utf8"); // Encoding of resulting web page
+
+// Note for Windows users: To enable iconv you'll need to enable the ex=
tension in your php.ini file=20
+// 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();. =20
+
+// Note for *nix users. You'll need to have iconv compiled into your bi=
nary. The default input and
+// output encodings are taken from your locale informations. Override t=
hese if they aren't correct.
+
+// --- MULTIVIEWS ---
+
+// Uncomment this line if you want to use MultiView to access the reposi=
tory 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 be=
tween the []'s).
+// If you'd rather that the files were delivered uncompressed with the a=
ssociated MIME type,
+// then read below.
+//
+// $zipped[] =3D ".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 yo=
ur
+// files.
+//
+// $config->ignoreSvnMimeTypes();
+//=20
+// Uncomment this if you want skip WebSVN's custom mime-type handling
+//
+// $config->ignoreWebSVNContentTypes();
+//=20
+// 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"] =3D "plain/text"; // Create a new association
+// $contentType[".doc"] =3D "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 al=
l your
+// repositories.
+//
+$config->allowDownload();
+//
+// To change the global option for individual repositories, uncomment an=
d replicate
+// the required line below (replacing 'myrep' for the name of the reposi=
tory to be changed).
+
+// $config->findRepository("myrep")->allowDownload(); // Specifically al=
low 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 fil=
e listings
+//
+// You'll need Enscript version 1.6 or higher AND Sed installed to use t=
his feature.=20
+// Set the path above.
+//
+$config->useEnscript();
+
+// Enscript need to be told what the contents of a file are so that it c=
an be colourised
+// correctly. WebSVN includes a predefined list of mappings from file e=
xtension to Enscript
+// file type (viewable in setup.inc).
+//
+// Here you should add and other extensions not already listed or redefi=
ne the default ones. eg:
+//
+// $extEnscript[".pas"] =3D "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 an=
d replicate
+// the required line below (replacing 'myrep' for the name of the reposi=
tory 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 li=
nks to your BugTracker
+// from the log messages.
+//
+// $config->useBugtraqProperties();
+//
+// To change the global option for individual repositories, uncomment an=
d replicate
+// the required line below (replacing 'myrep' for the name of the reposi=
tory to be changed).
+
+// $config->findRepository("myrep")->useBugtraqProperties(); // Specific=
ally use bugtraq properties for 'myrep'
+// $config->findRepository("myrep")->ignoreBugtraqProperties(); // Speci=
fically 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 re=
positories
+
+$config->expandTabsBy(2);
+
+// To change the global option for individual repositories, uncomment an=
d replicate
+// the required line below (replacing 'myrep' for the name of the reposi=
tory to be changed).
+
+// $config->findRepository("myrep")->expandTabsBy(3); // Expand Tabs by =
3 for repository 'myrep'
+?>
Added: trunk/svn.matroska.org/WebSVN/include/configclass.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/include/configclass.inc 2005-07-11 21:0=
6:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/configclass.inc 2005-08-02 22:5=
0: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;
+ =20
+ // Local configuration options must start off unset
+ =20
+ var $allowDownload;
+ var $rss;
+ var $spaces;
+ var $ignoreSvnMimeTypes;
+ var $ignoreWebSVNContentTypes;
+ var $bugtraq;
+ =20
+ function Repository($name, $path)
+ {
+ $this->name =3D $name;
+ $this->path =3D $path;
+ }
+ =20
+ // Local configuration accessors
+ =20
+ // RSS Feed
+ =20
+ function hideRSS()
+ {
+ $this->rss =3D false;
+ }
+
+ function showRSS()
+ {
+ $this->rss =3D true;
+ }
+
+ function getHideRSS()
+ {
+ global $config;
+
+ if (isset($this->rss))
+ return $this->rss;
+ =20
+ return $config->rss;
+ }
+ =20
+ // Download
+ =20
+ function allowDownload()
+ {
+ $this->allowDownload =3D true;
+ }
+
+ function disallowDownload()
+ {
+ $this->allowDownload =3D false;
+ }
+
+ function getAllowDownload()
+ {
+ global $config;
+
+ if (isset($this->allowDownload))
+ return $this->allowDownload;
+ =20
+ return $config->allowDownload;
+ }
+
+ // Tab expansion
+ =20
+ function expandTabsBy($sp)
+ {
+ $this->spaces =3D $sp;
+ }
+ =20
+ function getExpandTabsBy()
+ {
+ global $config;
+
+ if (isset($this->spaces))
+ return $this->spaces;
+ =20
+ return $config->spaces;
+ }
+
+ // Mime Type Handing
+ =20
+ function ignoreSvnMimeTypes()
+ {
+ $this->ignoreSvnMimeTypes =3D true;
+ }
+
+ function useSvnMimeTypes()
+ {
+ $this->ignoreSvnMimeTypes =3D false;
+ }
+
+ function getIgnoreSvnMimeTypes()
+ {
+ global $config;
+
+ if (isset($this->ignoreSvnMimeTypes))
+ return $this->ignoreSvnMimeTypes;
+ =20
+ return $config->ignoreSvnMimeTypes;
+ }
+
+ function ignoreWebSVNContentTypes()
+ {
+ $this->ignoreWebSVNContentTypes =3D true;
+ }
+
+ function useWebSVNContentTypes()
+ {
+ $this->ignoreWebSVNContentTypes =3D false;
+ }
+
+ function getIgnoreWebSVNContentTypes()
+ {
+ global $config;
+
+ if (isset($this->ignoreWebSVNContentTypes))
+ return $this->ignoreWebSVNContentTypes;
+ =20
+ return $config->ignoreWebSVNContentTypes;
+ }
+ =20
+ // Issue Tracking
+ =20
+ function useBugtraqProperties()
+ {
+ $this->bugtraq =3D true;
+ }
+
+ function ignoreBugtraqProperties()
+ {
+ $this->bugtraq =3D false;
+ }
+
+ function getBugtraq()
+ {
+ global $config;
+
+ if (isset($this->bugtraq))
+ return $this->bugtraq;
+ =20
+ return $config->bugtraq;
+ }
+}
+
+// The general configuration class
+
+Class Config
+{
+ // Tool path locations
+
+ var $svnlook =3D "svnlook";
+ var $svn =3D "svn --non-interactive";
+ var $diff =3D "diff";
+ var $enscript =3D"enscript";
+ var $sed =3D "sed";
+ var $gzip =3D "gzip";
+ var $tar =3D "tar";
+ =20
+ // Other configuration items
+ =20
+ var $serverIsWindows =3D false;
+ var $cacheResults =3D false;
+ var $multiViews =3D false;
+ var $useEnscript =3D false;
+ var $allowDownload =3D false;
+ var $rss =3D true;
+ var $spaces =3D 8;
+ var $bugtraq =3D false;
+ =20
+ var $templatePath =3D "./templates/Standard/";
+
+ var $ignoreSvnMimeTypes =3D false;
+ var $ignoreWebSVNContentTypes =3D false;
+
+ // Default character encodings
+ var $inputEnc =3D "";
+ var $outputEnc;
+
+ var $quote =3D "'";
+
+ var $_repositories;
+ =20
+ function Config()
+ {
+ $this->setOutputEncoding("ISO-8859-1");
+ }
+ =20
+ function addRepository($name, $path)
+ {
+ if (($path{strlen($path) - 1} =3D=3D DIRECTORY_SEPARATOR) ||
+ ($path{strlen($path) - 1} =3D=3D "/"))
+ $path =3D substr($path, 0, -1);
+ =20
+ $this->_repositories[] =3D new Repository($name, $path);
+ }
+
+ function getRepository($rep)
+ {
+ return $this->_repositories[$rep];
+ }
+
+ function getRepositories()
+ {
+ return $this->_repositories;
+ }
+
+ function findRepository($name)
+ {
+ foreach ($this->_repositories as $index =3D> $rep)
+ {
+ if (strcasecmp($rep->name, $name) =3D=3D 0)
+ return $rep;
+ }
+ return null;
+ }
+
+ // setServerIsWindows
+ //
+ // The server is running on Windows
+ =20
+ function setServerIsWindows()
+ {
+ $this->serverIsWindows =3D true;
+ =20
+ // Try to set the input encoding intelligently
+ =20
+ $cp =3D 0;
+ if ($cp =3D @shell_exec("CHCP"))
+ {
+ $cp =3D trim(substr($cp, strpos($cp, ":") + 1));
+ settype($sp, "integer");
+ }
+ =20
+ // Use the most sensible default value if that failed
+ if ($cp =3D=3D 0) $cp =3D 850;
+ =20
+ $this->setInputEncoding("CP$cp");
+ =20
+ // On Windows machines, use double quotes around command line para=
meters
+ =20
+ $this->quote =3D '"';
+ }
+
+ // setCachingOn
+ //
+ // Set result caching on
+ =20
+ function setCachingOn()
+ {
+ $this->cacheResults =3D true;
+ }
+
+ // useMultiViews
+ //
+ // Use MultiViews to access the repository
+ =20
+ function useMultiViews()
+ {
+ $this->multiViews =3D true;
+ }
+
+ // useEnscript
+ //
+ // Use Enscript to colourise listings
+ =20
+ function useEnscript()
+ {
+ $this->useEnscript =3D true;
+ }
+
+ // offerRSS
+ //
+ // Use Enscript to colourise listings
+ =20
+ function hideRSS()
+ {
+ $this->rss =3D false;
+ }
+
+ // allowDownload
+ //
+ // Allow download of tarballs
+ =20
+ function allowDownload()
+ {
+ global $vars;
+ =20
+ $this->allowDownload =3D true;
+ }
+
+ // getURL
+ //
+ // Get the URL to a path name based on the current config
+ =20
+ function getURL($rep, $path, $op)
+ { =20
+ $base =3D $_SERVER["SCRIPT_NAME"];
+ =20
+ if ($this->multiViews)
+ {
+ // Remove the .php
+ $base =3D substr($base, 0, -4);
+ =20
+ if ($path && $path{0} !=3D "/") $path =3D "/".$path;
+ =20
+ $url =3D $base;
+ =20
+ if ($rep !=3D -1)
+ {
+ $url .=3D "/".$rep->name.$path;
+ =20
+ if ($op !=3D "dir")
+ $url .=3D "?op=3D$op&";
+ else
+ $url .=3D "?";
+ }
+ =20
+ return $url;
+ }
+ else
+ {
+ switch ($op)
+ {
+ case "dir":
+ $fname =3D "listing.php";
+ break;
+ =20
+ case "file":
+ $fname =3D "filedetails.php";
+ break;
+
+ case "log":
+ $fname =3D "log.php";
+ break;
+
+ case "diff":
+ $fname =3D "diff.php";
+ break;
+
+ case "blame":
+ $fname =3D "blame.php";
+ break;
+
+ case "form":
+ $fname =3D "form.php";
+ break;
+
+ case "rss":
+ $fname =3D "rss.php";
+ break;
+
+ case "dl":
+ $fname =3D "dl.php";
+ break;
+
+ case "comp":
+ $fname =3D "comp.php";
+ break;
+ }
+
+ if ($rep =3D=3D -1)
+ return $fname."?path=3D".urlencode($path)."&";
+ else
+ return $fname."?repname=3D".$rep->name."&path=3D".urlenc=
ode($path)."&";
+ }
+ }
+
+ // setPath
+ //
+ // Set the location of the given path
+ =20
+ function setPath(&$var, $path, $name)
+ {
+ $lastchar =3D $path{strlen($path) - 1};
+ $isDir =3D ($lastchar =3D=3D DIRECTORY_SEPARATOR ||
+ $lastchar =3D=3D "/" ||
+ $lastchar =3D=3D "\\");
+ =20
+ if (!$isDir)
+ {
+ $path .=3D DIRECTORY_SEPARATOR;
+ }
+
+ // On a windows machine we need to put spaces around the entire co=
mmand
+ // to allow for spaces in the path
+ if ($this->serverIsWindows)
+ $var =3D "\"$path$name\"";
+ else =20
+ $var =3D "$path$name";
+ }
+
+ // setSVNCommandPath
+ //
+ // Define the location of the svn and svnlook commands
+ =20
+ function setSVNCommandPath($path)
+ {
+ $this->setPath($this->svn, $path, "svn");
+ $this->setPath($this->svnlook, $path, "svnlook");
+ }
+ =20
+ // setDiffPath
+ //
+ // Define the location of the diff command
+ =20
+ function setDiffPath($path)
+ {
+ $this->setPath($this->diff, $path, "diff");
+ }
+
+ // setEnscriptPath
+ //
+ // Define the location of the enscript command
+ =20
+ function setEnscriptPath($path)
+ {
+ $this->setPath($this->enscript, $path, "enscript");
+ }
+
+ // setSedPath
+ //
+ // Define the location of the sed command
+ =20
+ function setSedPath($path)
+ {
+ $this->setPath($this->sed, $path, "sed");
+ }
+ =20
+ // setTarPath
+ //
+ // Define the location of the tar command
+ =20
+ function setTarPath($path)
+ {
+ $this->setPath($this->tar, $path, "tar");
+ }
+ =20
+ // setGzipPath
+ //
+ // Define the location of the GZip command
+ =20
+ function setGzipPath($path)
+ {
+ $this->setPath($this->gzip, $path, "gzip");
+ }
+ =20
+ function setTemplatePath($path)
+ {
+ $lastchar =3D $path{strlen($path) - 1};
+ $isDir =3D ($lastchar =3D=3D DIRECTORY_SEPARATOR ||
+ $lastchar =3D=3D "/" ||
+ $lastchar =3D=3D "\\");
+ =20
+ if (!$isDir)
+ {
+ $path .=3D DIRECTORY_SEPARATOR;
+ }
+
+ // On a windows machine we need to put spaces around the entire co=
mmand
+ // to allow for spaces in the path
+ $this->templatePath =3D $path;
+ }
+
+ // parentPath
+ //
+ // Automatically set up the repositories based on a parent path
+ =20
+ function parentPath($path)
+ {
+ if ($handle =3D opendir($path))
+ {
+ // For each file...
+ while (false !=3D=3D ($file =3D readdir($handle)))
+ {=20
+ // That's also a non hidden directory
+ if (is_dir($path.DIRECTORY_SEPARATOR.$file) && $file{0} !=3D=
".")
+ {
+ // And that contains a db directory (in an attempt to not=
include
+ // non svn repositories.
+ =20
+ if (is_dir($path.DIRECTORY_SEPARATOR.$file.DIRECTORY_SEPA=
RATOR."db"))
+ {
+ // We add the repository to the list
+ $this->addRepository($file, $path.DIRECTORY_SEPARATOR.=
$file);
+ }
+ }
+ }
+ closedir($handle);=20
+ }
+
+ // Sort the repositories into alphabetical order
+ =20
+ if (!empty($this->_repositories))
+ usort($this->_repositories, "cmpReps");
+ }
+ =20
+ // Encoding functions
+ =20
+ function setInputEncoding($enc)
+ {
+ $this->inputEnc =3D $enc;
+ }
+
+ function setOutputEncoding($enc)
+ {
+ global $vars;
+ =20
+ if ($enc !=3D "")
+ {
+ $this->outputEnc =3D $enc;
+ $vars["charset"] =3D $enc;
+ }
+ }
+ =20
+ // Tab expansion functions
+ =20
+ function expandTabsBy($sp)
+ {
+ $this->spaces =3D $sp;
+ }
+ =20
+ // Misc settings
+ =20
+ function ignoreSvnMimeTypes()
+ {
+ $this->ignoreSvnMimeTypes =3D true;
+ }
+
+ function ignoreWebSVNContentTypes()
+ {
+ $this->ignoreWebSVNContentTypes =3D true;
+ }
+
+ function useBugtraqProperties()
+ {
+ $this->bugtraq =3D true;
+ }
+}
+?>
Added: trunk/svn.matroska.org/WebSVN/include/feedcreator.class.php
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/include/feedcreator.class.php 2005-07-1=
1 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/feedcreator.class.php 2005-08-0=
2 22:50:12 UTC (rev 966)
@@ -0,0 +1,1100 @@
+<?php
+/***********************************************************************=
****
+
+FeedCreator class v1.6
+originally (c) Kai Blankenhorn
+www.bitfolge.de
+kaib at bitfolge.de
+v1.3 work by Scott Reynen (scott at randomchaos.com) 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/license=
s/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=E9phane 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/???
+ =20
+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 =3D new UniversalFeedCreator();
+$rss->useCached(); // use cached version if age<1 hour
+$rss->title =3D "PHP news";
+$rss->description =3D "daily news from the PHP scripting world";
+$rss->link =3D "http://www.dailyphp.net/news";
+$rss->syndicationURL =3D "http://www.dailyphp.net/".$_SERVER["PHP_SELF"]=
;
+
+$image =3D new FeedImage();
+$image->title =3D "dailyphp.net logo";
+$image->url =3D "http://www.dailyphp.net/images/logo.gif";
+$image->link =3D "http://www.dailyphp.net";
+$image->description =3D "Feed provided by dailyphp.net. Click to visit."=
;
+$rss->image =3D $image;
+
+// get your news items from somewhere, e.g. your database:
+mysql_select_db($dbHost, $dbUser, $dbPass);
+$res =3D mysql_query("SELECT * FROM news ORDER BY newsdate DESC");
+while ($data =3D mysql_fetch_object($res)) {
+ $item =3D new FeedItem();
+ $item->title =3D $data->title;
+ $item->link =3D $data->url;
+ $item->description =3D $data->short;
+ $item->date =3D $data->newsdate;
+ $item->source =3D "http://www.dailyphp.net";
+ $item->author =3D "John Doe";
+ =20
+ $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 <kaib at bitfolge.de>
+* @since 1.3
+*/
+class FeedItem {
+ /**
+ * Mandatory attributes of an item.
+ */
+ var $title, $description, $link;
+ =20
+ /**
+ * Optional attributes of an item.
+ */
+ var $author, $authorEmail, $image, $category, $comments, $guid, $sou=
rce, $creator;
+ =20
+ /**
+ * Publishing date of an item. May be in one of the following format=
s:
+ *
+ * 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;
+ =20
+ /**
+ * Any additional elements to include as an assiciated array. All $k=
ey =3D> $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 i=
mplemented by
+ * the FeedCreator class used.
+ */
+ var $additionalElements =3D Array();
+
+ // on hold
+ // var $source;
+}
+
+
+
+/**
+* An FeedImage may be added to a FeedCreator feed.
+* @author Kai Blankenhorn <kaib at bitfolge.de>
+* @since 1.3
+*/
+class FeedImage {
+ /**
+ * Mandatory attributes of an image.
+ */
+ var $title, $url, $link;
+ =20
+ /**
+ * 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 <kaib at bitfolge.de>
+*/
+class UniversalFeedCreator extends FeedCreator {
+ var $_feed;
+ =20
+ function _setFormat($format) {
+ switch (strtoupper($format)) {
+ =20
+ case "2.0":
+ // fall through
+ case "RSS2.0":
+ $this->_feed =3D new RSSCreator20();
+ break;
+ =20
+ case "1.0":
+ // fall through
+ case "RSS1.0":
+ $this->_feed =3D new RSSCreator10();
+ break;
+ =20
+ case "0.91":
+ // fall through
+ case "RSS0.91":
+ $this->_feed =3D new RSSCreator091();
+ break;
+ =20
+ case "PIE0.1":
+ $this->_feed =3D new PIECreator01();
+ break;
+ =20
+ case "MBOX":
+ $this->_feed =3D new MBOXCreator();
+ break;
+ =20
+ case "OPML":
+ $this->_feed =3D new OPMLCreator();
+ break;
+ =20
+ case "ATOM0.3":
+ $this->_feed =3D new AtomCreator03();
+ break;
+ =20
+ default:
+ $this->_feed =3D new RSSCreator091();
+ break;
+ }
+ =20
+ $vars =3D get_object_vars($this);
+ foreach ($vars as $key =3D> $value) {
+ if ($key!=3D"feed") {
+ $this->_feed->{$key} =3D $this->{$key};
+ }
+ }
+ }
+ =20
+ /**
+ * Creates a syndication feed based on the items previously added.
+ *
+ * @see FeedCreator::addItem()
+ * @param string format format the feed should comply to. V=
alid values are:
+ * "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML=
".
+ * @return string the contents of the feed.
+ */
+ function createFeed($format =3D "RSS0.91") {
+ $this->_setFormat($format);
+ return $this->_feed->createFeed();
+ }
+ =20
+ =20
+ =20
+ /**
+ * Saves this feed as a file on the local disk. After the file is sa=
ved, 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. V=
alid values are:
+ * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "R=
SS2.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 _generateFilen=
ame()).
+ * @param boolean displayContents optional send the cont=
ent of the file or not. If true, the file will be sent in the body of the=
response.
+ */
+ function saveFeed($format=3D"RSS0.91", $filename=3D"", $displayConte=
nts=3Dtrue) {
+ $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 <kaib at bitfolge.de>
+* @since 1.4
+*/
+class FeedCreator {
+
+ /**
+ * Mandatory attributes of a feed.
+ */
+ var $title, $description, $link;
+ =20
+ =20
+ /**
+ * Optional attributes of a feed.
+ */
+ var $syndicationURL, $image, $language, $copyright, $pubDate, $lastB=
uildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rat=
ing, $skipHours, $skipDays;
+ =20
+ =20
+ /**
+ * @access private
+ */
+ var $items =3D Array();
+ =20
+ =20
+ /**
+ * This feed's MIME content type.
+ * @since 1.4
+ * @access private
+ */
+ var $contentType =3D "text/xml";
+ =20
+ =20
+ /**
+ * Any additional elements to include as an assiciated array. All $k=
ey =3D> $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 i=
mplemented by
+ * the FeedCreator class used.
+ */
+ var $additionalElements =3D Array();
+ =20
+ =20
+ /**
+ * Adds an FeedItem to the feed.
+ *
+ * @param object FeedItem $item The FeedItem to add to the feed.
+ * @access public
+ */
+ function addItem($item) {
+ $this->items[] =3D $item;
+ }
+ =20
+ =20
+ /**
+ * 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 ' ' ch=
aracter.
+ * If the string is truncated, " ..." is appended.
+ * If the string is already shorter than $length, it is returned unc=
hanged.
+ *
+ * @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)<=3D$length) {
+ return $string;
+ }
+ =20
+ $pos =3D strrpos($string,".");
+ if ($pos>=3D$length-4) {
+ $string =3D substr($string,0,$length-4);
+ $pos =3D strrpos($string,".");
+ }
+ if ($pos>=3D$length*0.4) {
+ return substr($string,0,$pos+1)." ...";
+ }
+ =20
+ $pos =3D strrpos($string," ");
+ if ($pos>=3D$length-4) {
+ $string =3D substr($string,0,$length-4);
+ $pos =3D strrpos($string," ");
+ }
+ if ($pos>=3D$length*0.4) {
+ return substr($string,0,$pos)." ...";
+ }
+ =20
+ return substr($string,0,$length-4)." ...";
+ =20
+ }
+ =20
+ =20
+ /**
+ * 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=3D\"".FEEDCREATOR_VERSION."\" -->\n";
+ }
+ =20
+ =20
+ /**
+ * Creates a string containing all additional elements specified in
+ * $additionalElements.
+ * @param elements array an associative array containing ke=
y =3D> value pairs
+ * @param indentString string a string that will be inserted b=
efore every generated line
+ * @return string the XML tags corresponding to $additionalEle=
ments
+ */
+ function _createAdditionalElements($elements, $indentString=3D"") {
+ $ae =3D "";
+ if (is_array($elements)) {
+ foreach($elements AS $key =3D> $value) {
+ $ae.=3D $indentString."<$key>$value</$key>\n";
+ }
+ }
+ return $ae;
+ }
+ =20
+ =20
+ /**
+ * Builds the feed's text.
+ * @abstract
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ }
+ =20
+ /**
+ * 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 =3D pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extens=
ion"])+1)).".xml";
+ }
+ =20
+ =20
+ /**
+ * @since 1.4
+ * @access private
+ */
+ function _redirect($filename) {
+ // attention, heavily-commented-out-area
+ =20
+ // maybe use this in addition to file time checking
+ //Header("Expires: ".date("r",time()+$this->_timeout));
+ =20
+ /* no caching at all, doesn't seem to work as good:
+ Header("Cache-Control: no-cache");
+ Header("Pragma: no-cache");
+ */
+ =20
+ // HTTP redirect, some feed readers' simple HTTP implementations=
don't follow it
+ //Header("Location: ".$filename);
+
+ Header("Content-Type: ".$this->contentType."; filename=3D".basen=
ame($filename));
+ Header("Content-Disposition: inline; filename=3D".basename($file=
name));
+ readfile($filename, "r");
+ die();
+ }
+ =20
+ /**
+ * 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 obj=
ect 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 rec=
ent version of the feed is saved. If not specified, the filename is $_SER=
VER["PHP_SELF"] with the extension changed to .xml (see _generateFilename=
()).
+ * @param timeout int optional the timeout in seconds b=
efore a cached version is refreshed (defaults to 3600 =3D 1 hour)
+ */
+ function useCached($filename=3D"", $timeout=3D3600) {
+ $this->_timeout =3D $timeout;
+ if ($filename=3D=3D"") {
+ $filename =3D $this->_generateFilename();
+ }
+ if (file_exists($filename) AND (time()-filemtime($filename) < $t=
imeout)) {
+ $this->_redirect($filename);
+ }
+ }
+ =20
+ =20
+ /**
+ * Saves this feed as a file on the local disk. After the file is sa=
ved, 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 rec=
ent version of the feed is saved. If not specified, the filename is $_SER=
VER["PHP_SELF"] with the extension changed to .xml (see _generateFilename=
()).
+ * @param redirect boolean optional send an HTTP redirect h=
eader or not. If true, the user will be automatically redirected to the c=
reated file.
+ */
+ function saveFeed($filename=3D"", $displayContents=3Dtrue) {
+ if ($filename=3D=3D"") {
+ $filename =3D $this->_generateFilename();
+ }
+ $feedFile =3D 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 it=
em.
+* Usually, you won't need to use this.
+*/
+class FeedDate {
+ var $unix;
+ =20
+ /**
+ * Creates a new instance of FeedDate representing a given date.
+ * Accepts RFC 822, ISO 8601 date formats as well as unix time stamp=
s.
+ * @param mixed $dateString optional the date this FeedDate will rep=
resent. If not specified, the current date and time is used.
+ */
+ function FeedDate($dateString=3D"") {
+ if ($dateString=3D=3D"") $dateString =3D date("r");
+ =20
+ if (is_integer($dateString)) {
+ $this->unix =3D $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 =3D Array("Jan"=3D>1,"Feb"=3D>2,"Mar"=3D>3,"Apr"=3D>=
4,"May"=3D>5,"Jun"=3D>6,"Jul"=3D>7,"Aug"=3D>8,"Sep"=3D>9,"Oct"=3D>10,"Nov=
"=3D>11,"Dec"=3D>12);
+ $this->unix =3D mktime($matches[4],$matches[5],$matches[6],$=
months[$matches[2]],$matches[1],$matches[3]);
+ if (substr($matches[7],0,1)=3D=3D'+' OR substr($matches[7],0=
,1)=3D=3D'-') {
+ $tzOffset =3D (substr($matches[7],0,3) * 60 + substr($ma=
tches[7],-2)) * 60;
+ } else {
+ if (strlen($matches[7])=3D=3D1) {
+ $oneHour =3D 3600;
+ $ord =3D ord($matches[7]);
+ if ($ord < ord("M")) {
+ $tzOffset =3D (ord("A") - $ord - 1) * $oneHour;
+ } elseif ($ord >=3D ord("M") AND $matches[7]!=3D"Z")=
{
+ $tzOffset =3D ($ord - ord("M")) * $oneHour;
+ } elseif ($matches[7]=3D=3D"Z") {
+ $tzOffset =3D 0;
+ }
+ }
+ switch ($matches[7]) {
+ case "UT":
+ case "GMT": $tzOffset =3D 0;
+ }
+ }
+ $this->unix +=3D $tzOffset;
+ return;
+ }
+ if (preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\=
\d{2})(.*)~",$dateString,$matches)) {
+ $this->unix =3D mktime($matches[4],$matches[5],$matches[6],$=
matches[2],$matches[3],$matches[1]);
+ if (substr($matches[7],0,1)=3D=3D'+' OR substr($matches[7],0=
,1)=3D=3D'-') {
+ $tzOffset =3D (substr($matches[7],0,3) * 60 + substr($ma=
tches[7],-2)) * 60;
+ } else {
+ if ($matches[7]=3D=3D"Z") {
+ $tzOffset =3D 0;
+ }
+ }
+ $this->unix +=3D $tzOffset;
+ return;
+ }
+ $this->unix =3D 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 =3D gmdate("D, d M Y H:i:s", $this->unix);
+ if (TIME_ZONE!=3D"") $date .=3D " ".str_replace(":","",TIME_ZONE=
);
+ return $date;
+ }
+ =20
+ /**
+ * Gets the date stored in this FeedDate as an ISO 8601 date.
+ *
+ * @return a date in ISO 8601 format
+ */
+ function iso8601() {
+ $date =3D gmdate("Y-m-d\TH:i:sO",$this->unix);
+ $date =3D substr($date,0,22) . ':' . substr($date,-2);
+ if (TIME_ZONE!=3D"") $date =3D str_replace("+00:00",TIME_ZONE,$d=
ate);
+ return $date;
+ }
+ =20
+ /**
+ * 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 <kaib at bitfolge.de>
+*/
+class RSSCreator10 extends FeedCreator {
+
+ /**
+ * Builds the RSS feed's text. The feed will be compliant to RDF Sit=
e Summary (RSS) 1.0.
+ * The feed will contain all items previously added in the same orde=
r.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ global $config; =20
+ $feed =3D "<?xml version=3D\"1.0\" encoding=3D\"".$config->outpu=
tEnc."\"?>\n";
+ $feed.=3D "<?xml-stylesheet href=3D\"http://www.w3.org/2000/08/w=
3c-synd/style.css\" type=3D\"text/css\"?>\n";
+ $feed.=3D $this->_createGeneratorComment();
+ $feed.=3D "<rdf:RDF\n";
+ $feed.=3D " xmlns=3D\"http://purl.org/rss/1.0/\"\n";
+ $feed.=3D " xmlns:rdf=3D\"http://www.w3.org/1999/02/22-rdf-sy=
ntax-ns#\"\n";
+ $feed.=3D " xmlns:dc=3D\"http://purl.org/dc/elements/1.1/\">\=
n";
+ $feed.=3D " <channel rdf:about=3D\"".htmlspecialchars($this->=
syndicationURL)."\">\n";
+ $feed.=3D " <title>".htmlspecialchars($this->title)."</ti=
tle>\n";
+ $feed.=3D " <description>".htmlspecialchars($this->descri=
ption)."</description>\n";
+ $feed.=3D " <link>".htmlspecialchars($this->link)."</link=
>\n";
+ if ($this->image!=3Dnull) {
+ $feed.=3D " <image rdf:resource=3D\"".$this->image->u=
rl."\" />\n";
+ }
+ $now =3D new FeedDate();
+ $feed.=3D " <dc:date>".htmlspecialchars($now->iso8601())."=
</dc:date>\n";
+ $feed.=3D " <items>\n";
+ $feed.=3D " <rdf:Seq>\n";
+ for ($i=3D0;$i<count($this->items);$i++) {
+ $feed.=3D " <rdf:li rdf:resource=3D\"".htmlsp=
ecialchars($this->items[$i]->link)."\"/>\n";
+ }
+ $feed.=3D " </rdf:Seq>\n";
+ $feed.=3D " </items>\n";
+ $feed.=3D " </channel>\n";
+ if ($this->image!=3Dnull) {
+ $feed.=3D " <image rdf:about=3D\"".$this->image->url."\">=
\n";
+ $feed.=3D " <title>".$this->image->title."</title>\n"=
;
+ $feed.=3D " <link>".$this->image->link."</link>\n";
+ $feed.=3D " <url>".$this->image->url."</url>\n";
+ $feed.=3D " </image>\n";
+ }
+ //$feed.=3D $this->_createAdditionalElements($this->items[$i]->a=
dditionalElements, " ");
+ =20
+ for ($i=3D0;$i<count($this->items);$i++) {
+ $feed.=3D " <item rdf:about=3D\"".htmlspecialchars($this-=
>items[$i]->link)."\">\n";
+ //$feed.=3D " <dc:type>Posting</dc:type>\n";
+ $feed.=3D " <dc:format>text/html</dc:format>\n";
+ if ($this->items[$i]->date!=3Dnull) {
+ $itemDate =3D new FeedDate($this->items[$i]->date);
+ $feed.=3D " <dc:date>".htmlspecialchars($itemDate=
->iso8601())."</dc:date>\n";
+ }
+ if ($this->items[$i]->source!=3D"") {
+ $feed.=3D " <dc:source>".htmlspecialchars($this->=
items[$i]->source)."</dc:source>\n";
+ }
+ if ($this->items[$i]->author!=3D"") {
+ $feed.=3D " <dc:creator>".htmlspecialchars($this-=
>items[$i]->author)."</dc:creator>\n";
+ }
+ $feed.=3D " <title>".htmlspecialchars(strip_tags(strt=
r($this->items[$i]->title,"\n\r"," ")))."</title>\n";
+ $feed.=3D " <link>".htmlspecialchars($this->items[$i]=
->link)."</link>\n";
+ $feed.=3D " <description>".htmlspecialchars($this->it=
ems[$i]->description)."</description>\n";
+ $feed.=3D $this->_createAdditionalElements($this->items[$i]-=
>additionalElements, " ");
+ $feed.=3D " </item>\n";
+ }
+ $feed.=3D "</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 <kaib at bitfolge.de>
+*/
+class RSSCreator091 extends FeedCreator {
+
+ /**
+ * Stores this RSS feed's version number.
+ * @access private
+ */
+ var $RSSVersion;
+
+ function RSSCreator091() {
+ $this->_setRSSVersion("0.91");
+ $this->contentType =3D "application/rss+xml";
+ }
+ =20
+ /**
+ * Sets this RSS feed's version number.
+ * @access private
+ */
+ function _setRSSVersion($version) {
+ $this->RSSVersion =3D $version;
+ }
+
+ /**
+ * Builds the RSS feed's text. The feed will be compliant to RDF Sit=
e Summary (RSS) 1.0.
+ * The feed will contain all items previously added in the same orde=
r.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ global $config; =20
+ $feed =3D "<?xml version=3D\"1.0\" encoding=3D\"".$config->outpu=
tEnc."\"?>\n";
+ $feed.=3D $this->_createGeneratorComment();
+ $feed.=3D "<rss version=3D\"".$this->RSSVersion."\">\n";
+ $feed.=3D " <channel>\n";
+ $feed.=3D " <title>".FeedCreator::iTrunc(htmlspecialchars=
($this->title),100)."</title>\n";
+ $feed.=3D " <description>".FeedCreator::iTrunc(htmlspecia=
lchars($this->description),500)."</description>\n";
+ $feed.=3D " <link>".htmlspecialchars($this->link)."</link=
>\n";
+ $now =3D new FeedDate();
+ $feed.=3D " <lastBuildDate>".htmlspecialchars($now->rfc82=
2())."</lastBuildDate>\n";
+ $feed.=3D " <generator>".FEEDCREATOR_VERSION."</generator=
>\n";
+
+ if ($this->image!=3Dnull) {
+ $feed.=3D " <image>\n";
+ $feed.=3D " <url>".$this->image->url."</url>\n";
+ $feed.=3D " <title>".FeedCreator::iTrunc(htmlspec=
ialchars($this->image->title),100)."</title>\n";
+ $feed.=3D " <link>".$this->image->link."</link>\n=
";
+ if ($this->image->width!=3D"") {
+ $feed.=3D " <width>".$this->image->width."</w=
idth>\n";
+ }
+ if ($this->image->height!=3D"") {
+ $feed.=3D " <height>".$this->image->height."<=
/height>\n";
+ }
+ if ($this->image->description!=3D"") {
+ $feed.=3D " <description>".htmlspecialchars($=
this->image->description)."</description>\n";
+ }
+ $feed.=3D " </image>\n";
+ }
+ if ($this->language!=3D"") {
+ $feed.=3D " <language>".$this->language."</language>\=
n";
+ }
+ if ($this->copyright!=3D"") {
+ $feed.=3D " <copyright>".FeedCreator::iTrunc(htmlspec=
ialchars($this->copyright),100)."</copyright>\n";
+ }
+ if ($this->editor!=3D"") {
+ $feed.=3D " <managingEditor>".FeedCreator::iTrunc(htm=
lspecialchars($this->editor),100)."</managingEditor>\n";
+ }
+ if ($this->webmaster!=3D"") {
+ $feed.=3D " <webMaster>".FeedCreator::iTrunc(htmlspec=
ialchars($this->webmaster),100)."</webMaster>\n";
+ }
+ if ($this->pubDate!=3D"") {
+ $pubDate =3D new FeedDate($this->pubDate);
+ $feed.=3D " <pubDate>".htmlspecialchars($pubDate->rfc=
822())."</pubDate>\n";
+ }
+ if ($this->category!=3D"") {
+ $feed.=3D " <category>".htmlspecialchars($this->categ=
ory)."</category>\n";
+ }
+ if ($this->docs!=3D"") {
+ $feed.=3D " <docs>".FeedCreator::iTrunc(htmlspecialch=
ars($this->docs),500)."</docs>\n";
+ }
+ if ($this->ttl!=3D"") {
+ $feed.=3D " <ttl>".htmlspecialchars($this->ttl)."</tt=
l>\n";
+ }
+ if ($this->rating!=3D"") {
+ $feed.=3D " <rating>".FeedCreator::iTrunc(htmlspecial=
chars($this->rating),500)."</rating>\n";
+ }
+ if ($this->skipHours!=3D"") {
+ $feed.=3D " <skipHours>".htmlspecialchars($this->skip=
Hours)."</skipHours>\n";
+ }
+ if ($this->skipDays!=3D"") {
+ $feed.=3D " <skipDays>".htmlspecialchars($this->skipD=
ays)."</skipDays>\n";
+ }
+ $feed.=3D $this->_createAdditionalElements($this->additionalElem=
ents, " ");
+
+ for ($i=3D0;$i<count($this->items);$i++) {
+ $feed.=3D " <item>\n";
+ $feed.=3D " <title>".FeedCreator::iTrunc(htmlspec=
ialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
+ $feed.=3D " <link>".htmlspecialchars($this->items=
[$i]->link)."</link>\n";
+ $feed.=3D " <description>".htmlspecialchars($this=
->items[$i]->description)."</description>\n";
+ if ($this->items[$i]->author!=3D"") {
+ $feed.=3D " <author>".htmlspecialchars($this-=
>items[$i]->author)."</author>\n";
+ }
+ /*
+ // on hold
+ if ($this->items[$i]->source!=3D"") {
+ $feed.=3D " <source>".htmlspecialchars($t=
his->items[$i]->source)."</source>\n";
+ }
+ */
+ if ($this->items[$i]->category!=3D"") {
+ $feed.=3D " <category>".htmlspecialchars($thi=
s->items[$i]->category)."</category>\n";
+ }
+ if ($this->items[$i]->comments!=3D"") {
+ $feed.=3D " <comments>".$this->items[$i]->com=
ments."</comments>\n";
+ }
+ if ($this->items[$i]->date!=3D"") {
+ $itemDate =3D new FeedDate($this->items[$i]->date);
+ $feed.=3D " <pubDate>".htmlspecialchars($item=
Date->rfc822())."</pubDate>\n";
+ }
+ if ($this->items[$i]->guid!=3D"") {
+ $feed.=3D " <guid>".$this->items[$i]->guid."<=
/guid>\n";
+ }
+ $feed.=3D $this->_createAdditionalElements($this->items[$i]-=
>additionalElements, " ");
+ $feed.=3D " </item>\n";
+ }
+ $feed.=3D " </channel>\n";
+ $feed.=3D "</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 <kaib at bitfolge.de>
+*/
+class RSSCreator20 extends RSSCreator091 {
+
+ function RSSCreator20() {
+ parent::_setRSSVersion("2.0");
+ }
+ =20
+}
+
+
+/**
+* PIECreator01 is a FeedCreator that implements the emerging PIE specifi=
cation,
+* as in http://intertwingly.net/wiki/pie/Syntax.
+*
+* @deprecated
+* @since 1.3
+* @author Scott Reynen <scott at randomchaos.com> and Kai Blankenhorn <kaib=
@bitfolge.de>
+*/
+class PIECreator01 extends FeedCreator {
+ =20
+ function createFeed() {
+ $feed =3D "<?xml version=3D\"1.0\" encoding=3D\"utf-8\"?>\n";
+ $feed.=3D "<feed version=3D\"0.1\" xmlns=3D\"http://example.com/=
newformat#\">\n";
+ $feed.=3D " <title>".FeedCreator::iTrunc(htmlspecialchars($th=
is->title),100)."</title>\n";
+ $feed.=3D " <subtitle>".FeedCreator::iTrunc(htmlspecialchars(=
$this->description),500)."</subtitle>\n";
+ $feed.=3D " <link>".$this->link."</link>\n";
+ for ($i=3D0;$i<count($this->items);$i++) {
+ $feed.=3D " <entry>\n";
+ $feed.=3D " <title>".FeedCreator::iTrunc(htmlspecialc=
hars(strip_tags($this->items[$i]->title)),100)."</title>\n";
+ $feed.=3D " <link>".htmlspecialchars($this->items[$i]=
->link)."</link>\n";
+ $itemDate =3D new FeedDate($this->items[$i]->date);
+ $feed.=3D " <created>".htmlspecialchars($itemDate->is=
o8601())."</created>\n";
+ $feed.=3D " <issued>".htmlspecialchars($itemDate->iso=
8601())."</issued>\n";
+ $feed.=3D " <modified>".htmlspecialchars($itemDate->i=
so8601())."</modified>\n";
+ $feed.=3D " <id>".$this->items[$i]->guid."</id>\n";
+ if ($this->items[$i]->author!=3D"") {
+ $feed.=3D " <author>\n";
+ $feed.=3D " <name>".htmlspecialchars($this->i=
tems[$i]->author)."</name>\n";
+ if ($this->items[$i]->authorEmail!=3D"") {
+ $feed.=3D " <email>".$this->items[$i]->au=
thorEmail."</email>\n";
+ }
+ $feed.=3D" </author>\n";
+ }
+ $feed.=3D " <content type=3D\"text/html\" xml:lang=3D=
\"en-us\">\n";
+ $feed.=3D " <div xmlns=3D\"http://www.w3.org/1999=
/xhtml\">".$this->items[$i]->description."</div>\n";
+ $feed.=3D " </content>\n";
+ $feed.=3D " </entry>\n";
+ }
+ $feed.=3D "</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 e=
ditor
+* for the feed or an author for every single feed item.
+*
+* Some elements have not been implemented yet. These are (incomplete lis=
t):
+* author URL, item author's email and URL, item contents, alternate link=
s,
+* other link content types than text/html. Some of them may be created w=
ith
+* AtomCreator03::additionalElements.
+*
+* @see FeedCreator#additionalElements
+* @since 1.6
+* @author Kai Blankenhorn <kaib at bitfolge.de>, Scott Reynen <scott at random=
chaos.com>
+*/
+class AtomCreator03 extends FeedCreator {
+
+ function AtomCreator03() {
+ $this->contentType =3D "application/atom+xml";
+ }
+ =20
+ function createFeed() {
+ $feed =3D "<?xml version=3D\"1.0\" encoding=3D\"utf-8\"?>\n";
+ $feed.=3D $this->_createGeneratorComment();
+ $feed.=3D "<feed version=3D\"0.3\" xmlns=3D\"http://purl.org/ato=
m/ns#\"";
+ if ($this->language!=3D"") {
+ $feed.=3D " xml:lang:\"".$this->language."\"";
+ }
+ $feed.=3D ">\n";
+ $feed.=3D " <title>".htmlspecialchars($this->title)."</title>=
\n";
+ $feed.=3D " <tagline>".htmlspecialchars($this->description)."=
</tagline>\n";
+ $feed.=3D " <link rel=3D\"alternate\" type=3D\"text/html\" hr=
ef=3D\"".htmlspecialchars($this->link)."\"/>\n";
+ $feed.=3D " <id>".$this->link."</id>\n";
+ $now =3D new FeedDate();
+ $feed.=3D " <modified>".htmlspecialchars($now->iso8601())."</=
modified>\n";
+ if ($this->editor!=3D"") {
+ $feed.=3D " <author>\n";
+ $feed.=3D " <name>".$this->editor."</name>\n";
+ if ($this->editorEmail!=3D"") {
+ $feed.=3D " <email>".$this->editorEmail."</email>=
\n";
+ }
+ $feed.=3D " </author>\n";
+ }
+ $feed.=3D " <generator>".FEEDCREATOR_VERSION."</generator>\n"=
;
+ $feed.=3D $this->_createAdditionalElements($this->additionalElem=
ents, " ");
+ for ($i=3D0;$i<count($this->items);$i++) {
+ $feed.=3D " <entry>\n";
+ $feed.=3D " <title>".htmlspecialchars(strip_tags($thi=
s->items[$i]->title))."</title>\n";
+ $feed.=3D " <link rel=3D\"alternate\" type=3D\"text/h=
tml\" href=3D\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ if ($this->items[$i]->date=3D=3D"") {
+ $this->items[$i]->date =3D time();
+ }
+ $itemDate =3D new FeedDate($this->items[$i]->date);
+ $feed.=3D " <created>".htmlspecialchars($itemDate->is=
o8601())."</created>\n";
+ $feed.=3D " <issued>".htmlspecialchars($itemDate->iso=
8601())."</issued>\n";
+ $feed.=3D " <modified>".htmlspecialchars($itemDate->i=
so8601())."</modified>\n";
+ $feed.=3D " <id>".$this->items[$i]->link."</id>\n";
+ $feed.=3D $this->_createAdditionalElements($this->items[$i]-=
>additionalElements, " ");
+ if ($this->items[$i]->author!=3D"") {
+ $feed.=3D " <author>\n";
+ $feed.=3D " <name>".htmlspecialchars($this->i=
tems[$i]->author)."</name>\n";
+ $feed.=3D " </author>\n";
+ }
+ if ($this->items[$i]->description!=3D"") {
+ $feed.=3D " <summary>".htmlspecialchars($this->it=
ems[$i]->description)."</summary>\n";
+ }
+ $feed.=3D " </entry>\n";
+ }
+ $feed.=3D "</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 <kaib at bitfolge.de>
+*/
+class MBOXCreator extends FeedCreator {
+
+ function MBOXCreator() {
+ $this->contentType =3D "text/plain";
+ }
+ =20
+ function qp_enc($input =3D "", $line_max =3D 76) {
+ $hex =3D array('0','1','2','3','4','5','6','7','8','9','A','B','=
C','D','E','F');
+ $lines =3D preg_split("/(?:\r\n|\r|\n)/", $input);
+ $eol =3D "\r\n";
+ $escape =3D "=3D";
+ $output =3D "";
+ while( list(, $line) =3D each($lines) ) {
+ //$line =3D rtrim($line); // remove trailing white space -> =
no =3D20\r\n necessary
+ $linlen =3D strlen($line);
+ $newline =3D "";
+ for($i =3D 0; $i < $linlen; $i++) {
+ $c =3D substr($line, $i, 1);
+ $dec =3D ord($c);
+ if ( ($dec =3D=3D 32) && ($i =3D=3D ($linlen - 1)) ) { /=
/ convert space at eol only
+ $c =3D "=3D20";
+ } elseif ( ($dec =3D=3D 61) || ($dec < 32 ) || ($dec > 1=
26) ) { // always encode "\t", which is *not* required
+ $h2 =3D floor($dec/16); $h1 =3D floor($dec%16);
+ $c =3D $escape.$hex["$h2"].$hex["$h1"];
+ }
+ if ( (strlen($newline) + strlen($c)) >=3D $line_max ) { =
// CRLF is not counted
+ $output .=3D $newline.$escape.$eol; // soft line bre=
ak; " =3D\r\n" is okay
+ $newline =3D "";
+ }
+ $newline .=3D $c;
+ } // end of for
+ $output .=3D $newline.$eol;
+ }
+ return trim($output);
+ }
+ =20
+
+ /**
+ * Builds the MBOX contents.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ global $config;
+ for ($i=3D0;$i<count($this->items);$i++) {
+ if ($this->items[$i]->author!=3D"") {
+ $from =3D $this->items[$i]->author;
+ } else {
+ $from =3D $this->title;
+ }
+ $itemDate =3D new FeedDate($this->items[$i]->date);
+ $feed.=3D "From ".strtr(MBOXCreator::qp_enc($from)," ","_").=
" ".date("D M d H:i:s Y",$itemDate->unix())."\n";
+ $feed.=3D "Content-Type: text/plain;\n";
+ $feed.=3D " charset=3D\"".$config->outputEnc."\"\n";
+ $feed.=3D "Content-Transfer-Encoding: quoted-printable\n";
+ $feed.=3D "Content-Type: text/plain\n";
+ $feed.=3D "From: \"".MBOXCreator::qp_enc($from)."\"\n";
+ $feed.=3D "Date: ".$itemDate->rfc822()."\n";
+ $feed.=3D "Subject: ".MBOXCreator::qp_enc(FeedCreator::iTrun=
c($this->items[$i]->title,100))."\n";
+ $feed.=3D "\n";
+ $body =3D chunk_split(MBOXCreator::qp_enc($this->items[$i]->=
description));
+ $feed.=3D preg_replace("~\nFrom ([^\n]*)(\n?)~","\n>From $1$=
2\n",$body);
+ $feed.=3D "\n";
+ $feed.=3D "\n";
+ }
+ return $feed;
+ }
+ =20
+ /**
+ * Generate a filename for the feed cache file. Overridden from Feed=
Creator to prevent XML data types.
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo =3D pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extens=
ion"])+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 {
+ =20
+ function createFeed() { =20
+ $feed =3D "<?xml version=3D\"1.0\" encoding=3D\"utf-8\"?>\n";
+ $feed.=3D $this->_createGeneratorComment();
+ $feed.=3D "<opml xmlns:xsd=3D\"http://www.w3.org/2001/XMLSchema\=
" xmlns:xsi=3D\"http://www.w3.org/2001/XMLSchema-instance\">\n";
+ $feed.=3D " <head>\n";
+ $feed.=3D " <title>".htmlspecialchars($this->title)."</ti=
tle>\n";
+ if ($this->pubDate!=3D"") {
+ $date =3D new FeedDate($this->pubDate);
+ $feed.=3D " <dateCreated>".$date->rfc822()."</dateCr=
eated>\n";
+ }
+ if ($this->lastBuildDate!=3D"") {
+ $date =3D new FeedDate($this->lastBuildDate);
+ $feed.=3D " <dateModified>".$date->rfc822()."</dateM=
odified>\n";
+ }
+ if ($this->editor!=3D"") {
+ $feed.=3D " <ownerName>".$this->editor."</ownerName>=
\n";
+ }
+ if ($this->editorEmail!=3D"") {
+ $feed.=3D " <ownerEmail>".$this->editorEmail."</owne=
rEmail>\n";
+ }
+ $feed.=3D " </head>\n";
+ $feed.=3D " <body>\n";
+ for ($i=3D0;$i<count($this->items);$i++) {
+ $feed.=3D " <outline type=3D\"rss\" ";
+ $title =3D htmlspecialchars(strip_tags(strtr($this->items[$i=
]->title,"\n\r"," ")));
+ $feed.=3D " title=3D\"".$title."\"";
+ $feed.=3D " text=3D\"".$title."\"";
+ //$feed.=3D " description=3D\"".htmlspecialchars($this->item=
s[$i]->description)."\"";
+ $feed.=3D " url=3D\"".htmlspecialchars($this->items[$i]->lin=
k)."\"";
+ $feed.=3D "/>\n";
+ }
+ $feed.=3D " </body>\n";
+ $feed.=3D "</opml>\n";
+ return $feed;
+ }
+}
+
+?>
Added: trunk/svn.matroska.org/WebSVN/include/setup.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/include/setup.inc 2005-07-11 21:06:24 U=
TC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/setup.inc 2005-08-02 22:50:12 U=
TC (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 =3D array();
+
+// Include a default language file.
+require("languages/english.inc");
+
+// Set up svnlocwebsvn
+if (empty($locwebsvnhttp))
+ $locwebsvnhttp =3D ".";
+
+if (empty($locwebsvnreal))
+ $locwebsvnreal =3D ".";
+
+$vars["locwebsvnhttp"] =3D $locwebsvnhttp;
+
+// Make sure that the input locale is set up correctly
+setlocale(LC_ALL, "");
+
+// Create the config
+$config =3D 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")); =20
+}
+
+// Set up the default content-type extension handling
+
+$contentType =3D array (
+
+".dwg" =3D> "application/acad", // AutoCAD Drawing files
+".DWG" =3D> "application/acad", // AutoCAD Drawing files
+".arj" =3D> "application/arj", // =A0
+".ccAD" =3D> "application/clariscad", // ClarisCAD files
+".DRW" =3D> "application/drafting", // MATRA Prelude drafting
+".dxf" =3D> "application/dxf", // DXF (AutoCAD)
+".DXF" =3D> "application/dxf", // DXF (AutoCAD)
+".xl" =3D> "application/excel", // Microsoft Excel
+".unv" =3D> "application/i-deas", //SDRC I-DEAS files
+".UNV" =3D> "application/i-deas", //SDRC I-DEAS files
+".igs" =3D> "application/iges", // IGES graphics format
+".iges" =3D> "application/iges", // IGES graphics format
+".IGS" =3D> "application/iges", // IGES graphics format
+".IGES" =3D> "application/iges", // IGES graphics format
+".hqx" =3D> "application/mac-binhex40", // Macintosh BinHex format
+".word" =3D> "application/msword", // Microsoft Word
+".w6w" =3D> "application/msword", // Microsoft Word
+".doc" =3D> "application/msword", // Microsoft Word
+".wri" =3D> "application/mswrite", // Microsoft Write
+".bin" =3D> "application/octet-stream", // Uninterpreted binary
+".exe" =3D> "application/x-msdownload", // Windows EXE
+".EXE" =3D> "application/x-msdownload", // Windows EXE
+".oda" =3D> "application/oda", // =A0
+".pdf" =3D> "application/pdf", // PDF (Adobe Acrobat)
+".ai" =3D> "application/postscript", // PostScript
+".PS" =3D> "application/postscript", // PostScript
+".ps" =3D> "application/postscript", // PostScript
+".eps" =3D> "application/postscript", // PostScript
+".prt" =3D> "application/pro_eng", // PTC Pro/ENGINEER
+".PRT" =3D> "application/pro_eng", // PTC Pro/ENGINEER
+".part" =3D> "application/pro_eng", // PTC Pro/ENGINEER
+".rtf" =3D> "application/rtf", // Rich Text Format
+".set" =3D> "application/set", // SET (French CAD standard)
+".SET" =3D> "application/set", // SET (French CAD standard)
+".stl" =3D> "application/sla", // Stereolithography
+".STL" =3D> "application/sla", // Stereolithography
+".SOL" =3D> "application/solids", // MATRA Prelude Solids
+".stp" =3D> "application/STEP", // ISO-10303 STEP data files
+".STP" =3D> "application/STEP", // ISO-10303 STEP data files
+".step" =3D> "application/STEP", // ISO-10303 STEP data files
+".STEP" =3D> "application/STEP", // ISO-10303 STEP data files
+".vda" =3D> "application/vda", // VDA-FS Surface data
+".VDA" =3D> "application/vda", // VDA-FS Surface data
+".dir" =3D> "application/x-director", // Macromedia Director
+".dcr" =3D> "application/x-director", // Macromedia Director
+".dxr" =3D> "application/x-director", // Macromedia Director
+".mif" =3D> "application/x-mif", // FrameMaker MIF Format
+".csh" =3D> "application/x-csh", // C-shell script
+".dvi" =3D> "application/x-dvi", // TeX DVI
+".gz" =3D> "application/x-gzip", // GNU Zip
+".gzip" =3D> "application/x-gzip", // GNU Zip
+".hdf" =3D> "application/x-hdf", // ncSA HDF Data File
+".latex" =3D> "application/x-latex", // LaTeX source
+".nc" =3D> "application/x-netcdf", // Unidata netCDF
+".cdf" =3D> "application/x-netcdf", // Unidata netCDF
+".sh" =3D> "application/x-sh", // Bourne shell script
+".sit" =3D> "application/x-stuffit", // Stiffut Archive
+".tcl" =3D> "application/x-tcl", // TCL script
+".tex" =3D> "application/x-tex", // TeX source
+".texinfo" =3D> "application/x-texinfo", // Texinfo (Emacs)
+".texi" =3D> "application/x-texinfo", // Texinfo (Emacs)
+".t" =3D> "application/x-troff", // Troff
+".tr" =3D> "application/x-troff", // Troff
+".roff" =3D> "application/x-troff", // Troff
+".man" =3D> "application/x-troff-man", // Troff with MAN macros
+".me" =3D> "application/x-troff-me", // Troff with ME macros
+".ms" =3D> "application/x-troff-ms", // Troff with MS macros
+".src" =3D> "application/x-wais-source", // WAIS source
+".bcpio" =3D> "application/x-bcpio", // Old binary CPIO
+".cpio" =3D> "application/x-cpio", // POSIX CPIO
+".gtar" =3D> "application/x-gtar", // GNU tar
+".shar" =3D> "application/x-shar", // Shell archive
+".sv4cpio" =3D> "application/x-sv4cpio", // SVR4 CPIO
+".sv4crc" =3D> "application/x-sv4crc", // SVR4 CPIO with CRC
+".tar" =3D> "application/x-tar", // 4.3BSD tar format
+".ustar" =3D> "application/x-ustar", // POSIX tar format
+".hlp" =3D> "application/x-winhelp", // Windows Help
+".zip" =3D> "application/zip", // ZIP archive
+".au" =3D> "audio/basic", // Basic audio (usually m-law)
+".snd" =3D> "audio/basic", // Basic audio (usually m-law)
+".aif" =3D> "audio/x-aiff", // AIFF audio
+".aiff" =3D> "audio/x-aiff", // AIFF audio
+".aifc" =3D> "audio/x-aiff", // AIFF audio
+".ra" =3D> "audio/x-pn-realaudio", // RealAudio
+".ram" =3D> "audio/x-pn-realaudio", // RealAudio
+".rpm" =3D> "audio/x-pn-realaudio-plugin", // RealAudio (plug-in)
+".wav" =3D> "audio/x-wav", // Windows WAVE audio
+".mp3" =3D> "audio/x-mp3", // MP3 files
+".gif" =3D> "image/gif", // gif image
+".ief" =3D> "image/ief", // Image Exchange Format
+".jpg" =3D> "image/jpeg", // JPEG image
+".JPG" =3D> "image/jpeg", // JPEG image
+".JPE" =3D> "image/jpeg", // JPEG image
+".jpe" =3D> "image/jpeg", // JPEG image
+".JPEG" =3D> "image/jpeg", // JPEG image
+".jpeg" =3D> "image/jpeg", // JPEG image
+".pict" =3D> "image/pict", // Macintosh PICT
+".tiff" =3D> "image/tiff", // TIFF image
+".tif" =3D> "image/tiff", // TIFF image
+".ras" =3D> "image/x-cmu-raster", // CMU raster
+".pnm" =3D> "image/x-portable-anymap", // PBM Anymap format
+".pbm" =3D> "image/x-portable-bitmap", // PBM Bitmap format
+".pgm" =3D> "image/x-portable-graymap", // PBM Graymap format
+".ppm" =3D> "image/x-portable-pixmap", // PBM Pixmap format
+".rgb" =3D> "image/x-rgb", // RGB Image
+".xbm" =3D> "image/x-xbitmap", // X Bitmap
+".xpm" =3D> "image/x-xpixmap", // X Pixmap
+".xwd" =3D> "image/x-xwindowdump", // X Windows dump (xwd) format
+".zip" =3D> "multipart/x-zip", // PKZIP Archive
+".gzip" =3D> "multipart/x-gzip", // GNU ZIP Archive
+".mpeg" =3D> "video/mpeg", // MPEG video
+".mpg" =3D> "video/mpeg", // MPEG video
+".MPG" =3D> "video/mpeg", // MPEG video
+".MPE" =3D> "video/mpeg", // MPEG video
+".mpe" =3D> "video/mpeg", // MPEG video
+".MPEG" =3D> "video/mpeg", // MPEG video
+".mpeg" =3D> "video/mpeg", // MPEG video
+".qt" =3D> "video/quicktime", // QuickTime Video
+".mov" =3D> "video/quicktime", // QuickTime Video
+".avi" =3D> "video/msvideo", // Microsoft Windows Video
+".movie" =3D> "video/x-sgi-movie", // SGI Movieplayer format
+".wrl" =3D> "x-world/x-vrml" // VRML Worlds
+
+);
+
+// List of extensions recognised by enscript.
+
+$extEnscript =3D array
+(
+ ".ada" =3D> "ada",
+ ".adb" =3D> "ada",
+ ".ads" =3D> "ada",
+ ".awk" =3D> "awk",
+ ".c" =3D> "c",
+ ".c++" =3D> "cpp",
+ ".cc" =3D> "cpp",
+ ".cpp" =3D> "cpp",
+ ".csh" =3D> "csh",
+ ".cxx" =3D> "cpp",
+ ".diff" =3D> "diffu",
+ ".dpr" =3D> "delphi",
+ ".el" =3D> "elisp",
+ ".eps" =3D> "postscript",
+ ".f" =3D> "fortran",
+ ".for" =3D> "fortran",
+ ".gs" =3D> "haskell",
+ ".h" =3D> "c",
+ ".hpp" =3D> "cpp",
+ ".hs" =3D> "haskell",
+ ".htm" =3D> "html",
+ ".html" =3D> "html",
+ ".idl" =3D> "idl",
+ ".java" =3D> "java",
+ ".js" =3D> "javascript",
+ ".lgs" =3D> "haskell",
+ ".lhs" =3D> "haskell",
+ ".m" =3D> "objc",
+ ".m4" =3D> "m4",
+ ".man" =3D> "nroff",
+ ".nr" =3D> "nroff",
+ ".p" =3D> "pascal",
+ ".pas" =3D> "delphi",
+ ".patch" =3D> "diffu",
+ ".pkg" =3D> "sql",=20
+ ".pl" =3D> "perl",
+ ".pm" =3D> "perl",
+ ".pp" =3D> "pascal",
+ ".ps" =3D> "postscript",
+ ".s" =3D> "asm",
+ ".scheme" =3D> "scheme",
+ ".scm" =3D> "scheme",
+ ".scr" =3D> "synopsys",
+ ".sh" =3D> "sh",
+ ".shtml" =3D> "html",
+ ".sql" =3D> "sql",
+ ".st" =3D> "states",
+ ".syn" =3D> "synopsys",
+ ".synth" =3D> "synopsys",
+ ".tcl" =3D> "tcl",
+ ".tex" =3D> "tex",
+ ".texi" =3D> "tex",
+ ".texinfo" =3D> "tex",
+ ".v" =3D> "verilog",
+ ".vba" =3D> "vba",
+ ".vh" =3D> "verilog",
+ ".vhd" =3D> "vhdl",
+ ".vhdl" =3D> "vhdl",
+ ".py" =3D> "python",
+ =20
+ // The following are handled internally by WebSVN, since there's no
+ // support for them in Enscript
+ =20
+ ".php" =3D> "php",
+ ".inc" =3D> "php" =20
+);
+
+// Default 'zipped' array
+
+$zipped =3D array ();
+
+// Get the user's personalised config
+
+require("config.inc");
+
+// Make sure that the user has set up a repository
+
+$reps =3D $config->getRepositories();
+if (empty($reps[0]))
+{
+ echo $lang["SUPPLYREP"];
+ exit;
+}
+
+// Override the rep parameter with the repository name if it's available
+$repname =3D @$_REQUEST["repname"];
+if (isset($repname))
+{
+ $rep =3D $config->findRepository($repname);
+}
+else
+ $rep =3D $reps[0];
+ =20
+// Retrieve other standard parameters
+
+if (version_compare(phpversion(), "4.1.0", "<"))
+ $path =3D html_entity_decode(@$_REQUEST["path"]);
+else
+ $path =3D html_entity_decode(@$_REQUEST["path"], ENT_COMPAT, $config-=
>outputEnc);
+
+$path =3D escapeshellcmd($path);
+$rev =3D (int)@$_REQUEST["rev"];
+$showchanged =3D (@$_REQUEST["sc"] =3D=3D 1)?1:0;
+
+// Function to create the project selection HTML form
+function createProjectSelectionForm()
+{=20
+ global $config, $vars, $rep, $lang, $showchanged;
+ =20
+ $url =3D $config->getURL(-1, "", "form");
+ $vars["projects_form"] =3D "<form action=3D\"$url\" method=3D\"post\"=
name=3D\"projectform\">";
+ =20
+ $reps =3D $config->getRepositories();
+ $vars["projects_select"] =3D "<select name=3D\"repname\" onchange=3D\=
"javascript:this.form.submit();\">";
+ =20
+ foreach ($reps as $trep)
+ {
+ if ($rep->name =3D=3D $trep->name)
+ $sel =3D "selected";
+ else
+ $sel =3D "";
+ =20
+ $vars["projects_select"] .=3D "<option value=3D\"".$trep->name."\"=
$sel>".$trep->name."</option>";
+ }
+ =20
+ $vars["projects_select"] .=3D "</select>";
+ =20
+ $vars["projects_submit"] =3D "<input type=3D\"submit\" value=3D\"${la=
ng["GO"]}\">";
+ $vars["projects_endform"] =3D "<input type=3D\"hidden\" name=3D\"sele=
ctproj\" value=3D\"1\"><input type=3D\"hidden\" name=3D\"op\" value=3D\"f=
orm\"><input type=3D\"hidden\" name=3D\"sc\" value=3D\"$showchanged\"></f=
orm>"; =20
+}
+
+// Create the form if we're not in MultiViews. Otherwise wsvn must crea=
te the form once the current project has
+// been found
+
+if (!$config->multiViews)
+{
+ createProjectSelectionForm();
+}
+
+if ($rep)
+{
+ $vars["allowdownload"] =3D $rep->getAllowDownload();
+ $vars["repname"] =3D $rep->name;
+}
+
+?>
Added: trunk/svn.matroska.org/WebSVN/include/svnlook.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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 pr=
oper 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} =3D=3D " " && $entry{1} !=3D =
" ");
+}
+
+// Function to sort two given directory entries. Directories go at the =
top
+
+function _dirSort($e1, $e2)
+{
+ $isDir1 =3D $e1{strlen($e1) - 1} =3D=3D "/";
+ $isDir2 =3D $e2{strlen($e2) - 1} =3D=3D "/";
+ =20
+ if ($isDir1 && !$isDir2) return -1;
+ if ($isDir2 && !$isDir1) return 1;
+ =20
+ 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 =3D explode('/', $uri);
+ for ($i =3D 0; $i < count($parts); $i++)
+ {
+ if ( function_exists("mb_detect_encoding") && function_exists("mb_=
convert_encoding"))
+ {
+ $parts[$i] =3D mb_convert_encoding($parts[$i], "UTF-8", mb_dete=
ct_encoding($parts[$i]));
+ }
+ =20
+ $parts[$i] =3D rawurlencode($parts[$i]);
+ }
+ =20
+ $uri =3D implode('/', $parts);
+ =20
+ // Quick hack. Subversion seems to have a bug surrounding the use of=
%3A instead of :
+ =20
+ $uri =3D str_replace("%3A" ,":", $uri);
+ =20
+ return $uri;
+}
+
+// The SVNRepository Class
+
+Class SVNRepository
+{
+ var $repPath;
+ =20
+ function SVNRepository($repPath)
+ {
+ $this->repPath =3D $repPath;
+ }
+ =20
+ function dirContents($path, $rev =3D 0)
+ {
+ global $config, $locwebsvnreal;
+ =20
+ $revstr =3D _revStr($rev);
+ =20
+ $tree =3D array();
+ =20
+ // Try to find a cached version of this revision of the repository
+ =20
+ if ($rev =3D=3D 0)
+ {
+ $head =3D runCommand($config->svnlook." youngest ".quote($this-=
>repPath));
+ settype($head[0], "integer");
+ $rev =3D $head[0];
+ }
+ =20
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->=
repPath.$path));
+ $output =3D runCommand($config->svn." list $revstr ".quote("file:/=
//".$path), true);
+ =20
+ foreach ($output as $entry)
+ {
+ if ($entry !=3D "")
+ $tree[] =3D $entry;
+ }
+ =20
+ // Sort the entries into alphabetical order with the directories a=
t the top of the list
+ usort($tree, "_dirSort");
+ =20
+ return $tree;
+ }
+ =20
+ function getLogDetails($path, $rev =3D 0)
+ {
+ global $config, $lang, $locwebsvnreal;
+ =20
+ if ($rev =3D=3D 0)
+ {
+ $head =3D runCommand($config->svnlook." youngest ".quote($this-=
>repPath));
+ settype($head[0], "integer");
+ $rev =3D $head[0];
+ }
+
+ $revstr =3D _revStr($rev);
+ $path =3D quote($path);
+ =20
+ // Try to find a cached version of this revision of the repository
+ =20
+ $cachedname =3D strtr($this->repPath, ":/\\", "___");
+ $cachedname =3D $locwebsvnreal.DIRECTORY_SEPARATOR."cache".DIRECTO=
RY_SEPARATOR.$cachedname."_log_$rev";
+ =20
+ if ($config->cacheResults && !file_exists($cachedname))
+ {
+ // Cache the directory layout
+ =20
+ $cmd =3D quoteCommand($config->svnlook." info $revstr ".quote($=
this->repPath)." $path", false);
+
+ if (($handle =3D popen($cmd, "r")) !=3D=3D FALSE)
+ {
+ if (($output =3D gzopen($cachedname, "w")) !=3D=3D FALSE)
+ {
+ while (!feof($handle))
+ {
+ $line =3D fgets($handle);
+ gzwrite($output, $line);
+ }
+ =09
+ gzclose($output);
+ }
+ pclose($handle);
+ }
+ }
+ =20
+ // Get the log info
+ if ($config->cacheResults && file_exists($cachedname))
+ {
+ $output =3D transArray(gzfile($cachedname));
+ }
+ else
+ { =20
+ $output =3D runCommand($config->svnlook." info $revstr ".quote(=
$this->repPath)." $path");
+ }
+ =20
+ // Create a nice array to return
+ $log["author"] =3D ($output[0] ? $output[0] : " ");
+ =20
+ $date =3D $output[1];
+ $log["date"] =3D $date;
+
+ sscanf($date, "%d-%d-%d %d:%d:%d %d", $y, $mo, $d, $h, $m, $s, $of=
fset);
+ =20
+ // Remove the offset to get the time in GMT
+ $h -=3D $offset / 100;
+ =20
+ // 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 t=
he 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.
+ =20
+ $lt =3D gettimeofday();
+ $minwest =3D $lt["minuteswest"];
+ $committime =3D mktime($h ,$m - $minwest, $s, $mo, $d, $y, 0);
+ $log["committime"] =3D $committime;
+ =20
+ // Get the current time (as GMT)
+ $t =3D localtime(time(), 1);
+ $curtime =3D mktime($t["tm_hour"], $t["tm_min"], $t["tm_sec"], $t=
["tm_mon"] + 1, $t["tm_mday"], $t["tm_year"] + 1900, $t["tm_isdst"]);
+ =20
+ // Get the number of seconds since the commit
+ $agesecs =3D $curtime - $committime;
+ if ($agesecs < 0) $agesecs =3D 0;
+ =20
+ // Now create a nice human readable age based on these figures
+ $years =3D floor($agesecs / (60*60*24*365));
+ if ($years > 1)
+ {
+ $log["age"] =3D "$years ${lang["YEARS"]}"; =20
+ }
+ else
+ {
+ $months =3D floor($agesecs / (60*60*24*365/12));
+ if ($months > 1)
+ {
+ $log["age"] =3D "$months ${lang["MONTHS"]}";
+ }
+ else
+ {
+ $weeks =3D floor($agesecs / (60*60*24*7));
+ if ($weeks > 1)
+ {
+ $log["age"] =3D "$weeks ${lang["WEEKS"]}";
+ }
+ else
+ { =20
+ $days =3D floor($agesecs / (60*60*24));
+ if ($days > 1)
+ {
+ $log["age"] =3D "$days ${lang["DAYS"]}";
+ }
+ else
+ {=20
+ $hours =3D floor($agesecs / (60*60));
+ if ($hours > 1)
+ {
+ $log["age"] =3D "$hours ${lang["HOURS"]}";
+ }
+ else
+ {=20
+ $minutes =3D floor($agesecs / 60);
+ $log["age"] =3D "$minutes ${lang["MINUTES"]}";
+ }
+ }
+ }
+ }
+ }
+ =20
+ $log["message"] =3D $output[3];=20
+ $pos =3D 4;
+ while (isset($output[$pos]))
+ {
+ $log["message"] .=3D "\n".$output[$pos];
+ $pos++;
+ }
+ =20
+ // If we're working on the head, get the head revision
+ if ($rev > 0)
+ $log["rev"] =3D $rev;
+ else
+ {
+ $head =3D runCommand($config->svnlook." youngest ".quote($this-=
>repPath));
+ settype($head[0], "integer");
+ $log["rev"] =3D $head[0];
+ }
+ =20
+ return $log;
+ }
+ =20
+ function getChangedFiles($rev =3D 0)
+ {
+ global $config, $locwebsvnreal;
+ =20
+ if ($rev =3D=3D 0)
+ {
+ $head =3D runCommand($config->svnlook." youngest ".quote($this-=
>repPath));
+ settype($head[0], "integer");
+ $rev =3D $head[0];
+ }
+ =20
+ $revstr =3D _revStr($rev);
+ =20
+ // Try to find a cached version of this revision of the repository
+ =20
+ $cachedname =3D strtr($this->repPath, ":/\\", "___");
+ $cachedname =3D $locwebsvnreal.DIRECTORY_SEPARATOR."cache".DIRECTO=
RY_SEPARATOR.$cachedname."_mods_$rev";
+ =20
+ if ($config->cacheResults && !file_exists($cachedname))
+ {
+ // Cache the directory layout
+ =20
+ $cmd =3D quoteCommand($config->svnlook." changed $revstr ".quot=
e($this->repPath), false);
+
+ if (($handle =3D popen($cmd, "r")) !=3D=3D FALSE)
+ {
+ if (($output =3D gzopen($cachedname, "w")) !=3D=3D FALSE)
+ {
+ while (!feof($handle))
+ {
+ $line =3D fgets($handle);
+ gzwrite($output, $line);
+ }
+ =09
+ gzclose($output);
+ }
+ pclose($handle);
+ }
+ }
+ =20
+ if ($config->cacheResults && file_exists($cachedname))
+ {
+ $output =3D transArray(gzfile($cachedname));
+ }
+ else
+ {
+ $output =3D runCommand($config->svnlook." changed $revstr ".quot=
e($this->repPath));
+ }
+ =20
+ // Now create a nicer array from that
+ $changes =3D array("added" =3D> array(), "updated" =3D> array(), "=
deleted" =3D> array());
+ =20
+ foreach ($output as $changed)
+ {
+ if (trim($changed) !=3D "")
+ {
+ $mod =3D $changed{0};
+ $name =3D substr($changed, 4);
+ =20
+ switch ($mod)
+ {
+ case "A":
+ $changes["added"][] =3D $name;
+ break;
+ =20
+ case "U":
+ $changes["updated"][] =3D $name;
+ break;
+ =20
+ case "D":
+ $changes["deleted"][] =3D $name;
+ break;
+ }
+ }
+ }
+ =20
+ // Sort each array alphabetically
+ =20
+ natcasesort($changes["added"]);
+ natcasesort($changes["deleted"]);
+ natcasesort($changes["updated"]);
+ =20
+ return $changes; =20
+ }
+ =20
+ // getFileContents
+ //
+ // Dump the content of a file to the given filename
+ =20
+ function getFileContents($path, $filename, $rev =3D 0, $pipe =3D "")
+ {
+ global $config, $extEnscript;
+ =20
+ $revstr =3D _revStr($rev);
+ =20
+ // If there's no filename, we'll just deliver the contents as it i=
s to the user
+ if ($filename =3D=3D "")
+ {
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $thi=
s->repPath.$path));
+ passthru($config->svn." cat $revstr ".quote("file:///".$path)."=
$pipe");
+ return;
+ }
+ =20
+ // Get the file contents info
+ =20
+ $ext =3D strrchr($path, ".");
+ $l =3D @$extEnscript[$ext];
+ =20
+ if ($l =3D=3D "php")
+ { =20
+ // Output the file to the filename
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $thi=
s->repPath.$path));
+ $cmd =3D quoteCommand($config->svn." cat $revstr ".quote("file:=
///".$path)." > $filename", false);
+ @exec($cmd);
+ =20
+ // Get the file as a string (memory hogging, but we have no oth=
er options)
+ $content =3D highlight_file($filename, true);
+ =20
+ // Destroy the previous version, and replace it with the highli=
ghted version
+ $f =3D fopen($filename, "w");
+ if ($f)
+ {
+ // The highlight file function doesn't deal with line ending=
s very nicely at all. We'll have to do it
+ // by hand.
+ =20
+ // Remove the first line generated by highlight()
+ $pos =3D strpos($content, "\n");
+ $content =3D substr($content, $pos+1);
+ =20
+ $content =3D explode("<br />", $content);
+ =20
+ foreach ($content as $line)
+ {
+ fputs($f, rtrim($line)."\n");
+ }
+ =20
+ fclose($f);
+ } =20
+ }
+ 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 fi=
le between <PRE> and </PRE>.
+ // It's complicated because it's designed not to return thos=
e lines themselves.
+ =20
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $=
this->repPath.$path));
+ $cmd =3D quoteCommand($config->svn." cat $revstr ".quote("fi=
le:///".$path)." | ".
+ $config->enscript." --language=3Dhtml ".
+ ($l ? "--color --pretty-print=3D$l" : "")." -o - | ".
+ $config->sed." -n ".$config->quote."1,/^=
<PRE.$/!{/^<\\/PRE.$/,/^<PRE.$/!p;}".$config->quote." > $filename", false=
);
+ @exec($cmd);
+ }
+ else
+ {
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $=
this->repPath.$path));
+ $cmd =3D quoteCommand($config->svn." cat $revstr ".quote("fi=
le:///".$path)." > $filename", false);
+ @exec($cmd);
+ }
+ }
+ }
+
+ // listFileContents
+ //
+ // Print the contents of a file without filling up Apache's memory
+ =20
+ function listFileContents($path, $rev =3D 0)
+ {
+ global $config, $extEnscript;
+ =20
+ $revstr =3D _revStr($rev);
+ $pre =3D false;
+ =20
+ // Get the file contents info
+ =20
+ $ext =3D strrchr($path, ".");
+ $l =3D @$extEnscript[$ext];
+ =20
+ // Deal with php highlighting internally
+ if ($l =3D=3D "php")
+ {
+ $tmp =3D tempnam("temp", "wsvn");
+ =20
+ // Output the file to a temporary file
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $thi=
s->repPath.$path));
+ $cmd =3D quoteCommand($config->svn." cat $revstr ".quote("file:=
///".$path)." > $tmp", false);
+ @exec($cmd);
+ highlight_file($tmp);
+ unlink($tmp);
+ }
+ else
+ { =20
+ if ($config->useEnscript)
+ {
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $=
this->repPath.$path));
+ $cmd =3D quoteCommand($config->svn." cat $revstr ".quote("fi=
le:///".$path)." | ".
+ $config->enscript." --language=3Dhtml ".
+ ($l ? "--color --pretty-print=3D$l" : "")." -o - | ".
+ $config->sed." -n ".$config->quote."/^<P=
RE.$/,/^<\\/PRE.$/p".$config->quote." 2>&1", false);
+ =20
+ if (!($result =3D popen($cmd, "r")))
+ return;
+ }
+ else
+ {
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $=
this->repPath.$path));
+ $cmd =3D quoteCommand($config->svn." cat $revstr ".quote("fi=
le:///".$path)." 2>&1", false);
+ =20
+ if (!($result =3D popen($cmd, "r")))
+ return;
+ =20
+ $pre =3D true;
+ }
+ =20
+ if ($pre)
+ echo "<PRE>";
+ =20
+ while (!feof($result))
+ {
+ $line =3D fgets($result, 1024);
+ if ($pre) $line =3D replaceEntities($line);
+ =20
+ print hardspace($line);
+ }
+ =20
+ if ($pre)
+ echo "</PRE>";
+ =09
+ pclose($result);
+ }
+ }
+
+ // getBlameDetails
+ //
+ // Dump the blame content of a file to the given filename
+ =20
+ function getBlameDetails($path, $filename, $rev =3D 0)
+ {
+ global $config;
+ =20
+ $revstr =3D _revStr($rev);
+ =20
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->=
repPath.$path));
+ $cmd =3D quoteCommand($config->svn." blame $revstr ".quote("file:/=
//".$path)." > $filename", false);
+ =20
+ @exec($cmd);
+ }
+
+ function getProperty($path, $property, $rev =3D 0)
+ {
+ global $config;
+ =20
+ $revstr =3D _revStr($rev);
+ =20
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->=
repPath.$path));
+ $ret =3D runCommand($config->svn." propget $property $revstr ".quo=
te("file:///".$path), true);
+ =20
+ // Remove the surplus newline
+ if (count($ret))
+ unset($ret[count($ret) - 1]);
+ =20
+ return implode("\n", $ret);
+ }
+
+ function getHistory($path, $rev =3D 0)
+ {
+ global $config;
+ =20
+ $revstr =3D _revStr($rev);
+ $path =3D quote($path);
+ =20
+ // Get the history info
+ $output =3D runCommand($config->svnlook." history $revstr ".quote(=
$this->repPath)." $path");
+ =20
+ // Now create a nicer array from that
+ $history =3D array();
+ =20
+ $line =3D 0;
+ foreach ($output as $record)
+ { =20
+ $line++;
+ =20
+ // Skip header info
+ if ($line < 3)
+ continue; =20
+ =20
+ $record =3D trim($record);
+ if ($record !=3D "")
+ {
+ list($rev, $path) =3D split(" ", $record, 2);
+ if ($rev)
+ {
+ $path =3D trim($path);
+ $history[] =3D array("rev" =3D> $rev, "path" =3D> $path);
+ }
+ }
+ }
+ =20
+ return $history;
+ }
+
+ // exportDirectory
+ //
+ // Exports the directory to the given location
+ =20
+ function exportDirectory($path, $filename, $rev =3D 0)
+ {
+ global $config;
+ =20
+ $revstr =3D _revStr($rev);
+ =20
+ $path =3D encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->=
repPath.$path));
+ $cmd =3D quoteCommand($config->svn." export $revstr ".quote("file:=
///".$path)." $filename", false);
+
+ @exec($cmd);
+ }
+}
+?>
Added: trunk/svn.matroska.org/WebSVN/include/template.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/include/template.inc 2005-07-11 21:06:2=
4 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/template.inc 2005-08-02 22:50:1=
2 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 =3D false;
+
+// Stack of previous test results
+$ignorestack =3D array();
+
+// Number of test levels currently ignored
+$ignorelevel =3D 0;
+
+// parseCommand
+//
+// Parse a special command
+
+function parseCommand($line, $vars, $handle)
+{=20
+ global $ignore, $ignorestack, $ignorelevel;
+ =20
+ // Check for test conditions =20
+ if (strncmp(trim($line), "[websvn-test:", 13) =3D=3D 0)
+ {
+ if (!$ignore)
+ {
+ $line =3D trim($line);
+ $var =3D substr($line, 13, -1);
+ if (empty($vars[$var]))
+ {
+ array_push($ignorestack, $ignore);
+ $ignore =3D true;
+ }
+ }
+ else
+ {
+ $ignorelevel++;
+ }
+ =20
+ return true;
+ }
+ =20
+ if (strncmp(trim($line), "[websvn-else]", 13) =3D=3D 0)
+ {
+ if ($ignorelevel =3D=3D 0)
+ {
+ $ignore =3D !$ignore;
+ }
+ =20
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-endtest]", 16) =3D=3D 0)
+ {
+ if ($ignorelevel > 0)
+ {
+ $ignorelevel--;
+ }
+ else
+ {
+ $ignore =3D array_pop($ignorestack);
+ }
+ =20
+ return true;
+ }
+ =20
+ if (strncmp(trim($line), "[websvn-getlisting]", 19) =3D=3D 0)
+ {
+ global $path, $rev, $svnrep;
+ =20
+ if (!$ignore)
+ $svnrep->listFileContents($path, $rev);
+ =20
+ return true;
+ }
+ =20
+ if (strncmp(trim($line), "[websvn-defineicons]", 19) =3D=3D 0)
+ {
+ global $icons;
+ =20
+ if (!isset($icons))
+ $icons =3D array();
+ =20
+ // Read all the lines until we reach the end of the definition, st=
oring
+ // each one...
+ =20
+ if (!$ignore)
+ {
+ while (!feof($handle))
+ {
+ $line =3D trim(fgets($handle));
+ =20
+ if (strncmp($line, "[websvn-enddefineicons]", 22) =3D=3D 0)
+ {
+ return true;=20
+ }
+ =20
+ $eqsign =3D strpos($line, "=3D");
+ =20
+ $match =3D substr($line, 0, $eqsign);
+ $def =3D substr($line, $eqsign + 1);
+ =20
+ $icons[$match] =3D $def;
+ }
+ }
+ =20
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-icon]", 13) =3D=3D 0)
+ {
+ global $icons, $vars;
+ =20
+ if (!$ignore)
+ {
+ // The current filetype should be defined my $vars["filetype"]
+ =20
+ if (!empty($icons[$vars["filetype"]]))
+ {
+ echo parseTags($icons[$vars["filetype"]], $vars);
+ }
+ else if (!empty($icons["*"]))
+ {
+ echo parseTags($icons["*"], $vars);
+ }
+ }
+ =20
+ return true;
+ }
+
+ if (strncmp(trim($line), "[websvn-treenode]", 17) =3D=3D 0)
+ {
+ global $icons, $vars;
+ =20
+ if (!$ignore)
+ {
+ if ((!empty($icons["i-node"])) && (!empty($icons["t-node"])) &&=
(!empty($icons["l-node"])))
+ {
+ for ($n =3D 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"] !=3D 0)
+ {
+ if ($vars["node"] =3D=3D 0)
+ {
+ echo parseTags($icons["t-node"], $vars);
+ }
+ else
+ {
+ echo parseTags($icons["l-node"], $vars);
+ $vars["last_i_node"][$vars["level"]] =3D TRUE;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+ =20
+ return false;
+}
+
+// parseTemplate
+//
+// Parse the given template, replacing the variables with the values pas=
sed
+
+function parseTemplate($template, $vars, $listing)
+{
+ global $ignore, $vars;
+ =20
+ if (!is_file($template))
+ {
+ print "No template file found ($template)";
+ exit;
+ }
+
+ $handle =3D fopen($template, "r");
+ $inListing =3D false;
+ $ignore =3D false;
+ $listLines =3D array();
+ =20
+ while (!feof($handle))
+ {
+ $line =3D fgets($handle);
+ =20
+ // Check for the end of the file list
+ if ($inListing)
+ {
+ if (strcmp(trim($line), "[websvn-endlisting]") =3D=3D 0)
+ {
+ $inListing =3D 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 =3D> $value)
+ {
+ $vars[$id] =3D $value;
+ }
+ =20
+ // Output the list item
+ foreach ($listLines as $line)
+ {
+ if (!parseCommand($line, $vars, $handle))
+ {
+ if (!$ignore)
+ print parseTags($line, $vars);
+ }
+ }
+ }
+ }
+ else
+ {
+ if ($ignore =3D=3D false)
+ $listLines[] =3D $line;
+ }
+ }
+ else if (parseCommand($line, $vars, $handle))
+ {
+ continue;
+ }
+ else
+ {
+ // Check for the start of the file list
+ if (strncmp(trim($line), "[websvn-startlisting]", 21) =3D=3D 0)
+ {
+ $inListing =3D true;
+ }
+ else
+ {
+ if ($ignore =3D=3D false)
+ print parseTags($line, $vars);
+ }
+ }
+ }
+ =20
+ fclose($handle);
+}
+
+// parseTags
+//
+// Replace all occurences of [websvn:varname] wit the give variable
+
+function parseTags($line, $vars)
+{
+ global $lang;
+ =20
+ // 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]] =3D "?${matches[1]}?";
+ }
+ =20
+ $line =3D str_replace($matches[0], $vars[$matches[1]], $line);
+ }
+ =20
+ // 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]] =3D "?${matches[1]}?";
+ }
+ =20
+ $line =3D 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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/include/utils.inc 2005-07-11 21:06:24 U=
TC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/include/utils.inc 2005-08-02 22:50:12 U=
TC (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;
+ =20
+ $subs =3D explode("/", $path);
+ $sofar =3D "";
+ $count =3D count($subs);
+ $vars["curdirlinks"] =3D "";
+ =20
+ // 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 =3D $count - 2;
+ $dir =3D true;
+ }
+ else
+ {
+ $limit =3D $count - 1;
+ $dir =3D false;
+ }
+ =20
+ for ($n =3D 0; $n < $limit; $n++)
+ {
+ $sofar .=3D $subs[$n]."/";
+ $sofarurl =3D $config->getURL($rep, $sofar, "dir");
+ $vars["curdirlinks"] .=3D "[<a href=3D\"${sofarurl}rev=3D$rev&=
sc=3D$showchanged\">".$subs[$n]."/]</a> ";
+ }
+ =20
+ if ($dir)
+ {
+ $vars["curdirlinks"] .=3D "[<b>".$subs[$n]."</b>/]";
+ }
+ else
+ {
+ $vars["curdirlinks"] .=3D "[<b>".$subs[$n]."</b>]";
+ }
+}
+
+// Create links out of http:// and mailto: tags
+
+function create_anchors($text)
+{
+ $ret =3D $text;
+
+ // Match correctly formed URLs that aren't already links
+ $ret =3D preg_replace("#\b(?<!href=3D\")([a-z]+?)://(\S*)([\w/]+)#i",
+ "<a href=3D\"\\1://\\2\\3\" target=3D\"_blank\">\\1=
://\\2\\3</a>",
+ $ret);
+ =20
+ // Now match anything beginning with www, as long as it's not //www sin=
ce they were matched above =20
+ $ret =3D preg_replace("#\b(?<!//)www\.(\S*)([\w/]+)#i",
+ "<a href=3D\"http://www.\\1\\2\" target=3D\"_blank\=
">www.\\1\\2</a>",
+ $ret);
+
+ // Match email addresses
+ $ret =3D preg_replace("#\b([\w\-_.]+)@([\w\-.]+)\b#i",
+ "<a href=3D\"mailto:\\1@\\2\">\\1@\\2</a>",
+ $ret);
+ =20
+ // Replace any usernames
+ $ret =3D preg_replace("#\[:nom:([^\]]*)\]#e",
+ "username(0, trim(\"\\1\"))",
+ $ret);
+ =20
+ return ($ret);
+}
+
+function getFullURL($loc)
+{
+ $protocol =3D 'http';
+ =20
+ if (isset($_SERVER["HTTPS"]) && (strtolower($_SERVER["HTTPS"]) !=3D "=
off"))
+ {
+ $protocol =3D "https";
+ }
+ =20
+ $port =3D ":".$_SERVER["SERVER_PORT"];
+ if ((":80" =3D=3D $port && "http" =3D=3D $protocol) ||
+ (":443" =3D=3D $port && "https" =3D=3D $protocol))=20
+ {
+ $port =3D "";
+ }
+ =20
+ if (isset($_SERVER["HTTP_HOST"]))
+ {
+ $host =3D $_SERVER["HTTP_HOST"];
+ }
+ else if (isset($_SERVER["SERVER_NAME"]))
+ {
+ $host =3D $_SERVER["SERVER_NAME"].$port;
+ }
+ else if (isset($_SERVER["SERVER_ADDR"]))
+ {
+ $host =3D $_SERVER["SERVER_ADDR"].$port;
+ }
+ else
+ {
+ print "Unable to redirect";
+ exit;
+ }
+ =20
+ $url =3D $protocol . "://" . $host . $loc;
+
+ return $url;
+}
+
+// hardspace
+//
+// Replace the spaces at the front of a line with hard spaces
+
+$spacearray =3D array (
+0 =3D> "",
+1 =3D> " ",
+2 =3D> " ",
+3 =3D> " ",
+4 =3D> " ",
+5 =3D> " ",
+6 =3D> " ",
+7 =3D> " ",
+8 =3D> " ",
+9 =3D> " ",
+10 =3D> " "
+);
+
+function hardspace($s)
+{
+ global $spacearray, $config, $rep;
+
+ $len =3D strlen($s);
+
+ // Calculate the number of spaces to added (expanding tabs)
+ for ($i =3D 0, $numspaces =3D 0; $i < $len; $i++)
+ {
+ if ($s[$i] =3D=3D " ")
+ $numspaces +=3D 1;
+ else
+ if ($s[$i] =3D=3D "\t")
+ $numspaces +=3D $rep->getExpandTabsBy();
+ else
+ break;
+ }
+ =20
+ // Strip the leading blanks
+ $s =3D substr($s, $i);
+
+ // Create a string of 's
+ $spaces =3D "";
+ while ($numspaces >=3D 10)
+ {
+ $spaces .=3D $spacearray[10];
+ $numspaces -=3D 10;
+ }
+ $spaces .=3D $spacearray[$numspaces];
+ =20
+ // Stick them together
+ return $spaces.$s;
+}
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/include/version.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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 =3D "1.61";
+?>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/index.php
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D $lang["PROJECTS"];
+$vars["repname"] =3D "";
+$vars["rev"] =3D 0;
+$vars["path"] =3D "";
+
+$projects =3D $config->getRepositories();
+$i =3D 0;
+$listing =3D array ();
+foreach ($projects as $project)
+{
+ $url =3D $config->getURL($project, "/", "dir");
+
+ $listing[$i]["rowparity"] =3D $i % 2;
+ $listing[$i++]["projlink"] =3D "<a href=3D\"${url}sc=3D0\">".$project=
->name."</a>";
+}=20
+
+$vars["version"] =3D $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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/install.txt 2005-07-11 21:06:24 UTC (re=
v 965)
+++ trunk/svn.matroska.org/WebSVN/install.txt 2005-08-02 22:50:12 UTC (re=
v 966)
@@ -0,0 +1,232 @@
+
+WHY WebSVN?
+
+WebSVN offers a view onto your subversion repositories that's been desig=
ned
+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 a=
ny
+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.=20
+
+WebSVN offers the following features:=20
+
+* Easy to use interface=20
+* Highly customisable templating system=20
+* Colourisation of file listings
+* Blame view
+* Log message searching
+* Fast browsing thanks to internal caching feature=20
+* Apache MultiViews support=20
+* RSS feed support
+
+Since it's written using PHP, WebSVN is also very portable and easy to i=
nstall.
+
+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 sh=
ould
+read templates.txt, which explains the highly configurable template syst=
em.
+
+Windows users - note that some of the features offered by WebSVN, when
+enabled, require the use of various external programs. They can be down=
loaded
+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 u=
ses
+the iconv function. This may not be installed on your system. If you a=
ren'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 appropriat=
e
+DLLs to the system directory (from the PHP installation directory).
+
+CACHING
+
+In order to return results with a reasonable speed, WebSVN caches the re=
sults
+of it's requests to svnlook. Under normal usage this works correctly si=
nce
+it's not generally possible to change a revision with subversion.
+
+That said, one case that may cause confusion is if someone changes the l=
og
+message of a given revision. WebSVN will have cached the previous log m=
essage
+and won't know that there's a new one available. There are various solu=
tions
+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 o=
f the
+ cache after any change to a revision property
+
+3) Only allow the administrator to change revision properties. He can t=
hen
+ delete the cache by hand should this occur.
+
+COLOURISATION
+
+You can few files with syntax colouring if you have Enscript 1.6 or high=
er=20
+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 Multi=
View
+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 Apac=
he
+ 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 p=
age.
+
+The repname part of the URL is the name given to it in the config.inc fi=
le.
+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 obv=
ious
+solution is to protect the entire WebSVN directory with some form of Apa=
che
+authentication mechanism, but that doesn't allow for per repository
+authentication.
+
+This walkthrough gives an example of setting up per repository authentic=
ation
+that's based on the same authentication requirements as you define for t=
he=20
+Subversion access itself. You'll need to be using Apache.
+
+First, you must get the Multiviews option working. In my set up, my Apa=
che
+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 roo=
t
+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 =3D "/websvn"; =20
+
+// Physical location of websvn directory
+$locwebsvnreal =3D "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 i=
s 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 controllin=
g
+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 SV=
NPath
+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 wi=
th
+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> =09
+
+<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>=09
+
+Note the use of the / after /wsvn/ in the location directive. If you us=
e
+<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> exec=
ute
+permissions on %systemroot%\system32\cmd.exe. Under most systems, the fi=
le will
+be C:\WINDOWS\system32\cmd.exe.
+
+Right-click on the file, choose properties, and on the security tab clic=
k
+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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D "Log";
+$lang["DIFF"] =3D "Diff";
+
+$lang["NOREP"] =3D "No repository given";
+$lang["NOPATH"] =3D "Path not found";
+$lang["SUPPLYREP"] =3D "Please set up a repository path in include/confi=
g.inc using \$config->parentPath or \$config->addRepository<p>See the ins=
tallation guide for more details";
+
+$lang["DIFFREVS"] =3D "Diff between revs";
+$lang["AND"] =3D "and";
+$lang["REV"] =3D "Rev";
+$lang["LINE"] =3D "Line";
+$lang["SHOWENTIREFILE"] =3D "Show entire file";
+$lang["SHOWCOMPACT"] =3D "Only display areas with differences";
+
+$lang["DIFFPREV"] =3D "Compare with Previous";
+$lang["BLAME"] =3D "Blame";
+
+$lang["REVINFO"] =3D "Revision Information";
+$lang["GOYOUNGEST"] =3D "Go to most recent revision";
+$lang["LASTMOD"] =3D "Last modification";
+$lang["LOGMSG"] =3D "Log message";
+$lang["CHANGES"] =3D "Changes";
+$lang["SHOWCHANGED"] =3D "Show changed files";
+$lang["HIDECHANGED"] =3D "Hide changed files";
+$lang["NEWFILES"] =3D "New Files";
+$lang["CHANGEDFILES"] =3D "Modified files";
+$lang["DELETEDFILES"] =3D "Deleted files";
+$lang["VIEWLOG"] =3D "View Log";
+$lang["PATH"] =3D "Path";
+$lang["AUTHOR"] =3D "Author";
+$lang["AGE"] =3D "Age";
+$lang["LOG"] =3D "Log";
+$lang["CURDIR"] =3D "Current Directory";
+$lang["TARBALL"] =3D "Tarball";
+
+$lang["PREV"] =3D "Prev";
+$lang["NEXT"] =3D "Next";
+$lang["SHOWALL"] =3D "Show All";
+
+$lang["BADCMD"] =3D "Error running this command";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion Projects";
+$lang["SERVER"] =3D "Subversion Server";
+
+$lang["SEARCHLOG"] =3D "Search log for";
+$lang["CLEARLOG"] =3D "Clear current search";
+$lang["MORERESULTS"] =3D "Find more matches...";
+$lang["NORESULTS"] =3D "There are no logs matching your query";
+$lang["NOMORERESULTS"] =3D "There are no more logs matching your query";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "file(s) modified";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "Line No.";
+$lang["BLAMEFOR"] =3D "Blame information for rev";
+
+$lang["YEARS"] =3D "years";
+$lang["MONTHS"] =3D "months";
+$lang["WEEKS"] =3D "weeks";
+$lang["DAYS"] =3D "days";
+$lang["HOURS"] =3D "hours";
+$lang["MINUTES"] =3D "minutes";
+
+$lang["GO"] =3D "Go";
+
+$lang["PATHCOMPARISON"] =3D "Path Comparison";
+$lang["COMPAREPATHS"] =3D "Compare Paths";
+$lang["COMPAREREVS"] =3D "Compare Revisions";
+$lang["PROPCHANGES"] =3D "Property changes :";
+$lang["CONVFROM"] =3D "This comparison shows the changes necessary to co=
nvert path ";
+$lang["TO"] =3D "TO";
+$lang["REVCOMP"] =3D "Reverse comparison";
+$lang["COMPPATH"] =3D "Compare Path:";
+$lang["WITHPATH"] =3D "With Path:";
+$lang["FILEDELETED"] =3D "File deleted";
+$lang["FILEADDED"] =3D "New file";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "";
+$lang["ENDNOBR"] =3D "";
+
+// $lang["NOBR"] =3D "<nobr>";
+// $lang["ENDNOBR"] =3D "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/french.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/languages/french.inc 2005-07-11 21:06:2=
4 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/french.inc 2005-08-02 22:50:1=
2 UTC (rev 966)
@@ -0,0 +1,90 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Erik Le Blanc=20
+//
+// 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"] =3D "Log";
+$lang["DIFF"] =3D "Diff";
+
+$lang["NOREP"] =3D "Pas de repository";
+$lang["NOPATH"] =3D "Fichier ou répertoire non trouvé";
+
+$lang["DIFFREVS"] =3D "Différences entre les révisions";
+$lang["AND"] =3D "et";
+$lang["REV"] =3D "Révision";
+$lang["LINE"] =3D "Ligne";
+$lang["SHOWENTIREFILE"] =3D "Afficher tout le fichier";
+$lang["SHOWCOMPACT"] =3D "Afficher seulement les passages avec des diff&=
eacute;rences";
+
+$lang["DIFFPREV"] =3D "Différence avec le précédent=
";
+$lang["BLAME"] =3D "Responsabilité";
+
+$lang["REVINFO"] =3D "Information sur la Révision";
+$lang["GOYOUNGEST"] =3D "Aller à la Révision la plus r&eac=
ute;cente";
+$lang["LASTMOD"] =3D "Dernière modification";
+$lang["LOGMSG"] =3D "Message de Log";
+$lang["CHANGES"] =3D "Changements";
+$lang["SHOWCHANGED"] =3D "Montrer les fichiers modifiés";
+$lang["HIDECHANGED"] =3D "Cacher les fichiers modifiés";
+$lang["NEWFILES"] =3D "Nouveaux fichiers";
+$lang["CHANGEDFILES"] =3D "Fichier(s) modifié(s)";
+$lang["DELETEDFILES"] =3D "Fichier(s) effacé(s)";
+$lang["VIEWLOG"] =3D "Afficher le Log";
+$lang["PATH"] =3D "Chemin";
+$lang["AUTHOR"] =3D "Auteur";
+$lang["AGE"] =3D "Ancienneté";
+$lang["LOG"] =3D "Log";
+$lang["CURDIR"] =3D "Répertoire courant";
+
+$lang["PREV"] =3D "Précédent";
+$lang["NEXT"] =3D "Suivant";
+$lang["SHOWALL"] =3D "Tout montrer";
+
+$lang["BADCMD"] =3D "Cette commande a provoqué une erreur";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Projets Subversion";
+$lang["SERVER"] =3D "Serveur Subversion";
+
+$lang["SEARCHLOG"] =3D "Rechercher dans les Logs";
+$lang["CLEARLOG"] =3D "Effacer la recherche courante";
+$lang["MORERESULTS"] =3D "Trouver plus de réponses...";
+$lang["NORESULTS"] =3D "Il n'y a pas de réponse à votre re=
cherche dans les Logs";
+$lang["NOMORERESULTS"] =3D "Il n'y a pas plus de réponses à=
; votre recherche";
+
+$lang["RSSFEEDTITLE"] =3D "Fil RSS de WebSVN";=20
+$lang["FILESMODIFIED"] =3D "fichier(s) modifi&aecute;(s)";=20
+$lang["RSSFEED"] =3D "RSS";=20
+
+$lang["LINENO"] =3D "Ligne numéro";
+$lang["BLAMEFOR"] =3D "Dernier responsable";
+
+$lang["YEARS"] =3D "années";
+$lang["MONTHS"] =3D "mois";
+$lang["WEEKS"] =3D "semaines";
+$lang["DAYS"] =3D "jours";
+$lang["HOURS"] =3D "heures";
+$lang["MINUTES"] =3D "minutes";
+
+$lang["GO"] =3D "Go";
+
Added: trunk/svn.matroska.org/WebSVN/languages/german.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/languages/german.inc 2005-07-11 21:06:2=
4 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/german.inc 2005-08-02 22:50:1=
2 UTC (rev 966)
@@ -0,0 +1,68 @@
+<?php
+
+// WebSVN - Subversion repository viewing via the web using PHP
+// Copyright (C) 2004 Stephan Stapel, <stephan.stapel at web.de>
+//
+// 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"] =3D "Kein Repository angegeben.";
+
+$lang["DIFFREVS"] =3D "Vergleich zwischen Revisionen";
+$lang["AND"] =3D "und";
+$lang["REV"] =3D "Revision";
+$lang["LINE"] =3D "Zeile";
+$lang["SHOWENTIREFILE"] =3D "Ganze Datei anzeigen";
+$lang["SHOWCOMPACT"] =3D "Nur geänderte Bereiche";
+
+$lang["DIFFPREV"] =3D "Vergleich mit vorheriger";
+
+$lang["REVINFO"] =3D "Revisions-Information";
+$lang["GOYOUNGEST"] =3D "Zur aktuellen Revision"; =20
+$lang["LASTMOD"] =3D "Letzte Änderung";
+$lang["LOGMSG"] =3D "Logeintrag";
+$lang["CHANGES"] =3D "=C4nderungen"; =
=20
+$lang["SHOWCHANGED"] =3D "Geänderte Dateien anzeigen";
+$lang["HIDECHANGED"] =3D "Geänderte Dateien verstecken";
+$lang["NEWFILES"] =3D "Neue Dateien";
+$lang["CHANGEDFILES"] =3D "Geänderte Dateien";
+$lang["DELETEDFILES"] =3D "Gelöschte Dateien";
+$lang["VIEWLOG"] =3D "Log anzeigen";
+$lang["PATH"] =3D "Pfad";
+$lang["AUTHOR"] =3D "Autor";
+$lang["AGE"] =3D "Alter"; =
=20
+$lang["LOG"] =3D "Log";
+$lang["CURDIR"] =3D "Aktuelles Verzeichnis"; =
=20
+
+$lang["PREV"] =3D "Zurück";
+$lang["NEXT"] =3D "Weiter";
+$lang["SHOWALL"] =3D "Alles anzeigen";
+
+$lang["BADCMD"] =3D "Fehler beim Ausführen des Befehls";
+ =20
+$lang["PROJECTS"] =3D "Subversion-Projekte"; =20
+$lang["SERVER"] =3D "Subversion Server"; =20
+
+$lang["YEARS"] =3D "Jahre"; =20
+$lang["MONTHS"] =3D "Monate"; =20
+$lang["WEEKS"] =3D "Wochen"; =
=20
+$lang["DAYS"] =3D "Tage"; =20
+$lang["HOURS"] =3D "Stunden"; =
=20
+$lang["MINUTES"] =3D "Minuten"; =20
Added: trunk/svn.matroska.org/WebSVN/languages/japanese-euc.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/languages/japanese-euc.inc 2005-07-11 2=
1:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/japanese-euc.inc 2005-08-02 2=
2: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"] =3D "=A5=ED=A5=B0";
+$lang["DIFF"] =3D "=BA=B9=CA=AC";
+
+$lang["NOREP"] =3D "=A5=EA=A5=DD=A5=B8=A5=C8=A5=EA=A4=AC=BB=D8=C4=EA=A4=B5=
=A4=EC=A4=C6=A4=A4=A4=DE=A4=BB=A4=F3";
+$lang["NOPATH"] =3D "=A5=D1=A5=B9=A4=AC=B8=AB=C9=D5=A4=AB=A4=EA=A4=DE=A4=
=BB=A4=F3";
+
+$lang["DIFFREVS"] =3D "=A5=EA=A5=D3=A5=B8=A5=E7=A5=F3=B4=D6=A4=CE=BA=B9=CA=
=AC";
+$lang["AND"] =3D "=A4=C8";
+$lang["REV"] =3D "=A5=EA=A5=D3=A5=B8=A5=E7=A5=F3";
+$lang["LINE"] =3D "=B9=D4";
+$lang["SHOWENTIREFILE"] =3D "=C1=B4=A4=C6=C9=BD=BC=A8";
+$lang["SHOWCOMPACT"] =3D "=B0=DB=A4=CA=A4=EB=B9=D4=A4=CE=BC=FE=CA=D5=A4=C0=
=A4=B1=C9=BD=BC=A8";
+
+$lang["DIFFPREV"] =3D "=C1=B0=A4=CE=A5=EA=A5=D3=A5=B8=A5=E7=A5=F3=A4=C8=A4=
=CE=BA=B9=CA=AC";
+$lang["BLAME"] =3D "=BE=DC=BA=D9=C9=BD=BC=A8";
+
+$lang["REVINFO"] =3D "=A5=EA=A5=D3=A5=B8=A5=E7=A5=F3=BE=F0=CA=F3";
+$lang["GOYOUNGEST"] =3D "=BA=C7=BF=B7=A4=CE=A5=EA=A5=D3=A5=B8=A5=E7=A5=F3=
=A4=D8";
+$lang["LASTMOD"] =3D "=BA=C7=BD=AA=B9=B9=BF=B7=C6=FC=BB=FE";
+$lang["LOGMSG"] =3D "=A5=ED=A5=B0=A5=E1=A5=C3=A5=BB=A1=BC=A5=B8";
+$lang["CHANGES"] =3D "=CA=D1=B9=B9";
+$lang["SHOWCHANGED"] =3D "=CA=D1=B9=B9=A4=B5=A4=EC=A4=BF=A5=D5=A5=A1=A5=A4=
=A5=EB=A4=CE=B0=EC=CD=F7=A4=F2=C9=BD=BC=A8=A4=B9=A4=EB";
+$lang["HIDECHANGED"] =3D "=CA=D1=B9=B9=A4=B5=A4=EC=A4=BF=A5=D5=A5=A1=A5=A4=
=A5=EB=A4=CE=B0=EC=CD=F7=A4=F2=C9=BD=BC=A8=A4=B7=A4=CA=A4=A4";
+$lang["NEWFILES"] =3D "=C4=C9=B2=C3=A5=D5=A5=A1=A5=A4=A5=EB";
+$lang["CHANGEDFILES"] =3D "=BD=A4=C0=B5=A5=D5=A5=A1=A5=A4=A5=EB";
+$lang["DELETEDFILES"] =3D "=BA=EF=BD=FC=A5=D5=A5=A1=A5=A4=A5=EB";
+$lang["VIEWLOG"] =3D "=A5=ED=A5=B0=A4=F2=B8=AB=A4=EB";
+$lang["PATH"] =3D "=A5=D1=A5=B9";
+$lang["AUTHOR"] =3D "=BD=A4=C0=B5=BC=D4";
+$lang["AGE"] =3D "=CC=B5=BD=A4=C0=B5=BB=FE=B4=D6";
+$lang["LOG"] =3D "=A5=ED=A5=B0";
+$lang["CURDIR"] =3D "=A5=AB=A5=EC=A5=F3=A5=C8=A5=C7=A5=A3=A5=EC=A5=AF=A5=
=C8=A5=EA";
+
+$lang["PREV"] =3D "=C1=B0";
+$lang["NEXT"] =3D "=BC=A1";
+$lang["SHOWALL"] =3D "=C1=B4=A4=C6=C9=BD=BC=A8";
+
+$lang["BADCMD"] =3D "=A5=B3=A5=DE=A5=F3=A5=C9=BC=C2=B9=D4=C3=E6=A4=CE=A5=
=A8=A5=E9=A1=BC";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion =A5=D7=A5=ED=A5=B8=A5=A7=A5=AF=A5=
=C8=B0=EC=CD=F7";
+$lang["SERVER"] =3D "Subversion =A5=B5=A1=BC=A5=D0";
+
+$lang["SEARCHLOG"] =3D "=A5=ED=A5=B0=A4=F2=B8=A1=BA=F7";
+$lang["CLEARLOG"] =3D "=B8=A1=BA=F7=BE=F2=B7=EF=A4=F2=A5=AF=A5=EA=A5=A2=A4=
=B9=A4=EB";
+$lang["MORERESULTS"] =3D "=B8=A1=BA=F7=BE=F2=B7=EF=A4=F2=B9=CA=A4=EA=B9=FE=
=A4=E0";
+$lang["NORESULTS"] =3D "=B8=A1=BA=F7=BE=F2=B7=EF=A4=CB=A5=DE=A5=C3=A5=C1=
=A4=B9=A4=EB=A4=E2=A4=CE=A4=CF=A4=A2=A4=EA=A4=DE=A4=BB=A4=F3=A4=C7=A4=B7=A4=
=BF";
+$lang["NOMORERESULTS"] =3D "=A4=B3=A4=EC=B0=CA=BE=E5=B8=A1=BA=F7=BE=F2=B7=
=EF=A4=CB=A5=DE=A5=C3=A5=C1=A4=B9=A4=EB=A4=E2=A4=CE=A4=CF=A4=A2=A4=EA=A4=DE=
=A4=BB=A4=F3";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "=A5=D5=A5=A1=A5=A4=A5=EB=A4=AC=BD=A4=C0=B5=A4=
=B5=A4=EC=A4=DE=A4=B7=A4=BF";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=B9=D4=C8=D6=B9=E6";
+$lang["BLAMEFOR"] =3D "=BE=DC=BA=D9=C9=BD=BC=A8 =C2=D0=BE=DD=A5=EA=A5=D3=
=A5=B8=A5=E7=A5=F3";
+ =
=20
+$lang["YEARS"] =3D "=C7=AF=B4=D6";
+$lang["MONTHS"] =3D "=A5=F5=B7=EE=B4=D6";
+$lang["WEEKS"] =3D "=BD=B5=B4=D6";
+$lang["DAYS"] =3D "=C6=FC=B4=D6";
+$lang["HOURS"] =3D "=BB=FE=B4=D6";
+$lang["MINUTES"] =3D "=CA=AC";
+
+$lang["GO"] =3D "GO";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "<nobr>";
+$lang["ENDNOBR"] =3D "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/japanese-jis.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/languages/japanese-jis.inc 2005-07-11 2=
1:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/languages/japanese-jis.inc 2005-08-02 2=
2: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"] =3D "=1B$B%m%0=1B(B";
+$lang["DIFF"] =3D "=1B$B:9J,=1B(B";
+
+$lang["NOREP"] =3D "=1B$B%j%]%8%H%j$,;XDj$5$l$F$$$^$;$s=1B(B";
+$lang["NOPATH"] =3D "=1B$B%Q%9$,8+IU$+$j$^$;$s=1B(B";
+
+$lang["DIFFREVS"] =3D "=1B$B%j%S%8%g%s4V$N:9J,=1B(B";
+$lang["AND"] =3D "=1B$B$H=1B(B";
+$lang["REV"] =3D "=1B$B%j%S%8%g%s=1B(B";
+$lang["LINE"] =3D "=1B$B9T=1B(B";
+$lang["SHOWENTIREFILE"] =3D "=1B$BA4$FI=3D<(=1B(B";
+$lang["SHOWCOMPACT"] =3D "=1B$B0[$J$k9T$N<~JU$@$1I=3D<(=1B(B";
+
+$lang["DIFFPREV"] =3D "=1B$BA0$N%j%S%8%g%s$H$N:9J,=1B(B";
+$lang["BLAME"] =3D "=1B$B>\:YI=3D<(=1B(B";
+
+$lang["REVINFO"] =3D "=1B$B%j%S%8%g%s>pJs=1B(B";
+$lang["GOYOUNGEST"] =3D "=1B$B:G?7$N%j%S%8%g%s$X=1B(B";
+$lang["LASTMOD"] =3D "=1B$B:G=3D*99?7F|;~=1B(B";
+$lang["LOGMSG"] =3D "=1B$B%m%0%a%C%;!<%8=1B(B";
+$lang["CHANGES"] =3D "=1B$BJQ99=1B(B";
+$lang["SHOWCHANGED"] =3D "=1B$BJQ99$5$l$?%U%!%$%k$N0lMw$rI=3D<($9$k=1B(B=
";
+$lang["HIDECHANGED"] =3D "=1B$BJQ99$5$l$?%U%!%$%k$N0lMw$rI=3D<($7$J$$=1B=
(B";
+$lang["NEWFILES"] =3D "=1B$BDI2C%U%!%$%k=1B(B";
+$lang["CHANGEDFILES"] =3D "=1B$B=3D$@5%U%!%$%k=1B(B";
+$lang["DELETEDFILES"] =3D "=1B$B:o=3D|%U%!%$%k=1B(B";
+$lang["VIEWLOG"] =3D "=1B$B%m%0$r8+$k=1B(B";
+$lang["PATH"] =3D "=1B$B%Q%9=1B(B";
+$lang["AUTHOR"] =3D "=1B$B=3D$@5<T=1B(B";
+$lang["AGE"] =3D "=1B$BL5=3D$@5;~4V=1B(B";
+$lang["LOG"] =3D "=1B$B%m%0=1B(B";
+$lang["CURDIR"] =3D "=1B$B%+%l%s%H%G%#%l%/%H%j=1B(B";
+
+$lang["PREV"] =3D "=1B$BA0=1B(B";
+$lang["NEXT"] =3D "=1B$B<!=1B(B";
+$lang["SHOWALL"] =3D "=1B$BA4$FI=3D<(=1B(B";
+
+$lang["BADCMD"] =3D "=1B$B%3%^%s%I<B9TCf$N%(%i!<=1B(B";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion =1B$B%W%m%8%'%/%H0lMw=1B(B";
+$lang["SERVER"] =3D "Subversion =1B$B%5!<%P=1B(B";
+
+$lang["SEARCHLOG"] =3D "=1B$B%m%0$r8!:w=1B(B";
+$lang["CLEARLOG"] =3D "=1B$B8!:w>r7o$r%/%j%"$9$k=1B(B";
+$lang["MORERESULTS"] =3D "=1B$B8!:w>r7o$r9J$j9~$`=1B(B";
+$lang["NORESULTS"] =3D "=1B$B8!:w>r7o$K%^%C%A$9$k$b$N$O$"$j$^$;$s$G$7$?=1B=
(B";
+$lang["NOMORERESULTS"] =3D "=1B$B$3$l0J>e8!:w>r7o$K%^%C%A$9$k$b$N$O$"$j$=
^$;$s=1B(B";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "=1B$B%U%!%$%k$,=3D$@5$5$l$^$7$?=1B(B";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=1B$B9THV9f=1B(B";
+$lang["BLAMEFOR"] =3D "=1B$B>\:YI=3D<(=1B(B =1B$BBP>]%j%S%8%g%s=1B(B";
+ =
=20
+$lang["YEARS"] =3D "=1B$BG/4V=1B(B";
+$lang["MONTHS"] =3D "=1B$B%u7n4V=1B(B";
+$lang["WEEKS"] =3D "=1B$B=3D54V=1B(B";
+$lang["DAYS"] =3D "=1B$BF|4V=1B(B";
+$lang["HOURS"] =3D "=1B$B;~4V=1B(B";
+$lang["MINUTES"] =3D "=1B$BJ,=1B(B";
+
+$lang["GO"] =3D "GO";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "<nobr>";
+$lang["ENDNOBR"] =3D "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/japanese-sjis.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D "=83=8D=83O";
+$lang["DIFF"] =3D "=8D=B7=95=AA";
+
+$lang["NOREP"] =3D "=83=8A=83|=83W=83g=83=8A=82=AA=8Ew=92=E8=82=B3=82=EA=
=82=C4=82=A2=82=DC=82=B9=82=F1";
+$lang["NOPATH"] =3D "=83p=83X=82=AA=8C=A9=95t=82=A9=82=E8=82=DC=82=B9=82=
=F1";
+
+$lang["DIFFREVS"] =3D "=83=8A=83r=83W=83=87=83=93=8A=D4=82=CC=8D=B7=95=AA=
";
+$lang["AND"] =3D "=82=C6";
+$lang["REV"] =3D "=83=8A=83r=83W=83=87=83=93";
+$lang["LINE"] =3D "=8Ds";
+$lang["SHOWENTIREFILE"] =3D "=91S=82=C4=95\=8E=A6";
+$lang["SHOWCOMPACT"] =3D "=88=D9=82=C8=82=E9=8Ds=82=CC=8E=FC=95=D3=82=BE=
=82=AF=95\=8E=A6";
+
+$lang["DIFFPREV"] =3D "=91O=82=CC=83=8A=83r=83W=83=87=83=93=82=C6=82=CC=8D=
=B7=95=AA";
+$lang["BLAME"] =3D "=8F=DA=8D=D7=95\=8E=A6";
+
+$lang["REVINFO"] =3D "=83=8A=83r=83W=83=87=83=93=8F=EE=95=F1";
+$lang["GOYOUNGEST"] =3D "=8D=C5=90V=82=CC=83=8A=83r=83W=83=87=83=93=82=D6=
";
+$lang["LASTMOD"] =3D "=8D=C5=8FI=8DX=90V=93=FA=8E=9E";
+$lang["LOGMSG"] =3D "=83=8D=83O=83=81=83b=83Z=81[=83W";
+$lang["CHANGES"] =3D "=95=CF=8DX";
+$lang["SHOWCHANGED"] =3D "=95=CF=8DX=82=B3=82=EA=82=BD=83t=83@=83C=83=8B=
=82=CC=88=EA=97=97=82=F0=95\=8E=A6=82=B7=82=E9";
+$lang["HIDECHANGED"] =3D "=95=CF=8DX=82=B3=82=EA=82=BD=83t=83@=83C=83=8B=
=82=CC=88=EA=97=97=82=F0=95\=8E=A6=82=B5=82=C8=82=A2";
+$lang["NEWFILES"] =3D "=92=C7=89=C1=83t=83@=83C=83=8B";
+$lang["CHANGEDFILES"] =3D "=8FC=90=B3=83t=83@=83C=83=8B";
+$lang["DELETEDFILES"] =3D "=8D=ED=8F=9C=83t=83@=83C=83=8B";
+$lang["VIEWLOG"] =3D "=83=8D=83O=82=F0=8C=A9=82=E9";
+$lang["PATH"] =3D "=83p=83X";
+$lang["AUTHOR"] =3D "=8FC=90=B3=8E=D2";
+$lang["AGE"] =3D "=96=B3=8FC=90=B3=8E=9E=8A=D4";
+$lang["LOG"] =3D "=83=8D=83O";
+$lang["CURDIR"] =3D "=83J=83=8C=83=93=83g=83f=83B=83=8C=83N=83g=83=8A";
+
+$lang["PREV"] =3D "=91O";
+$lang["NEXT"] =3D "=8E=9F";
+$lang["SHOWALL"] =3D "=91S=82=C4=95\=8E=A6";
+
+$lang["BADCMD"] =3D "=83R=83}=83=93=83h=8E=C0=8Ds=92=86=82=CC=83G=83=89=81=
[";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion =83v=83=8D=83W=83F=83N=83g=88=EA=97=
=97";
+$lang["SERVER"] =3D "Subversion =83T=81[=83o";
+
+$lang["SEARCHLOG"] =3D "=83=8D=83O=82=F0=8C=9F=8D=F5";
+$lang["CLEARLOG"] =3D "=8C=9F=8D=F5=8F=F0=8C=8F=82=F0=83N=83=8A=83A=82=B7=
=82=E9";
+$lang["MORERESULTS"] =3D "=8C=9F=8D=F5=8F=F0=8C=8F=82=F0=8Di=82=E8=8D=9E=
=82=DE";
+$lang["NORESULTS"] =3D "=8C=9F=8D=F5=8F=F0=8C=8F=82=C9=83}=83b=83`=82=B7=
=82=E9=82=E0=82=CC=82=CD=82=A0=82=E8=82=DC=82=B9=82=F1=82=C5=82=B5=82=BD"=
;
+$lang["NOMORERESULTS"] =3D "=82=B1=82=EA=88=C8=8F=E3=8C=9F=8D=F5=8F=F0=8C=
=8F=82=C9=83}=83b=83`=82=B7=82=E9=82=E0=82=CC=82=CD=82=A0=82=E8=82=DC=82=B9=
=82=F1";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "=83t=83@=83C=83=8B=82=AA=8FC=90=B3=82=B3=82=EA=
=82=DC=82=B5=82=BD";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=8Ds=94=D4=8D=86";
+$lang["BLAMEFOR"] =3D "=8F=DA=8D=D7=95\=8E=A6 =91=CE=8F=DB=83=8A=83r=83W=
=83=87=83=93";
+ =
=20
+$lang["YEARS"] =3D "=94N=8A=D4";
+$lang["MONTHS"] =3D "=83=95=8C=8E=8A=D4";
+$lang["WEEKS"] =3D "=8FT=8A=D4";
+$lang["DAYS"] =3D "=93=FA=8A=D4";
+$lang["HOURS"] =3D "=8E=9E=8A=D4";
+$lang["MINUTES"] =3D "=95=AA";
+
+$lang["GO"] =3D "GO";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "<nobr>";
+$lang["ENDNOBR"] =3D "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/japanese-utf8.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D "=E3=83=AD=E3=82=B0";
+$lang["DIFF"] =3D "=E5=B7=AE=E5=88=86";
+
+$lang["NOREP"] =3D "=E3=83=AA=E3=83=9D=E3=82=B8=E3=83=88=E3=83=AA=E3=81=8C=
=E6=8C=87=E5=AE=9A=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=BE=E3=81=9B=E3=
=82=93";
+$lang["NOPATH"] =3D "=E3=83=91=E3=82=B9=E3=81=8C=E8=A6=8B=E4=BB=98=E3=81=
=8B=E3=82=8A=E3=81=BE=E3=81=9B=E3=82=93";
+
+$lang["DIFFREVS"] =3D "=E3=83=AA=E3=83=93=E3=82=B8=E3=83=A7=E3=83=B3=E9=96=
=93=E3=81=AE=E5=B7=AE=E5=88=86";
+$lang["AND"] =3D "=E3=81=A8";
+$lang["REV"] =3D "=E3=83=AA=E3=83=93=E3=82=B8=E3=83=A7=E3=83=B3";
+$lang["LINE"] =3D "=E8=A1=8C";
+$lang["SHOWENTIREFILE"] =3D "=E5=85=A8=E3=81=A6=E8=A1=A8=E7=A4=BA";
+$lang["SHOWCOMPACT"] =3D "=E7=95=B0=E3=81=AA=E3=82=8B=E8=A1=8C=E3=81=AE=E5=
=91=A8=E8=BE=BA=E3=81=A0=E3=81=91=E8=A1=A8=E7=A4=BA";
+
+$lang["DIFFPREV"] =3D "=E5=89=8D=E3=81=AE=E3=83=AA=E3=83=93=E3=82=B8=E3=83=
=A7=E3=83=B3=E3=81=A8=E3=81=AE=E5=B7=AE=E5=88=86";
+$lang["BLAME"] =3D "=E8=A9=B3=E7=B4=B0=E8=A1=A8=E7=A4=BA";
+
+$lang["REVINFO"] =3D "=E3=83=AA=E3=83=93=E3=82=B8=E3=83=A7=E3=83=B3=E6=83=
=85=E5=A0=B1";
+$lang["GOYOUNGEST"] =3D "=E6=9C=80=E6=96=B0=E3=81=AE=E3=83=AA=E3=83=93=E3=
=82=B8=E3=83=A7=E3=83=B3=E3=81=B8";
+$lang["LASTMOD"] =3D "=E6=9C=80=E7=B5=82=E6=9B=B4=E6=96=B0=E6=97=A5=E6=99=
=82";
+$lang["LOGMSG"] =3D "=E3=83=AD=E3=82=B0=E3=83=A1=E3=83=83=E3=82=BB=E3=83=
=BC=E3=82=B8";
+$lang["CHANGES"] =3D "=E5=A4=89=E6=9B=B4";
+$lang["SHOWCHANGED"] =3D "=E5=A4=89=E6=9B=B4=E3=81=95=E3=82=8C=E3=81=9F=E3=
=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E4=B8=80=E8=A6=A7=E3=82=92=E8=A1=
=A8=E7=A4=BA=E3=81=99=E3=82=8B";
+$lang["HIDECHANGED"] =3D "=E5=A4=89=E6=9B=B4=E3=81=95=E3=82=8C=E3=81=9F=E3=
=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E4=B8=80=E8=A6=A7=E3=82=92=E8=A1=
=A8=E7=A4=BA=E3=81=97=E3=81=AA=E3=81=84";
+$lang["NEWFILES"] =3D "=E8=BF=BD=E5=8A=A0=E3=83=95=E3=82=A1=E3=82=A4=E3=83=
=AB";
+$lang["CHANGEDFILES"] =3D "=E4=BF=AE=E6=AD=A3=E3=83=95=E3=82=A1=E3=82=A4=
=E3=83=AB";
+$lang["DELETEDFILES"] =3D "=E5=89=8A=E9=99=A4=E3=83=95=E3=82=A1=E3=82=A4=
=E3=83=AB";
+$lang["VIEWLOG"] =3D "=E3=83=AD=E3=82=B0=E3=82=92=E8=A6=8B=E3=82=8B";
+$lang["PATH"] =3D "=E3=83=91=E3=82=B9";
+$lang["AUTHOR"] =3D "=E4=BF=AE=E6=AD=A3=E8=80=85";
+$lang["AGE"] =3D "=E7=84=A1=E4=BF=AE=E6=AD=A3=E6=99=82=E9=96=93";
+$lang["LOG"] =3D "=E3=83=AD=E3=82=B0";
+$lang["CURDIR"] =3D "=E3=82=AB=E3=83=AC=E3=83=B3=E3=83=88=E3=83=87=E3=82=
=A3=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA";
+
+$lang["PREV"] =3D "=E5=89=8D";
+$lang["NEXT"] =3D "=E6=AC=A1";
+$lang["SHOWALL"] =3D "=E5=85=A8=E3=81=A6=E8=A1=A8=E7=A4=BA";
+
+$lang["BADCMD"] =3D "=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E5=AE=9F=E8=A1=
=8C=E4=B8=AD=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion =E3=83=97=E3=83=AD=E3=82=B8=E3=82=
=A7=E3=82=AF=E3=83=88=E4=B8=80=E8=A6=A7";
+$lang["SERVER"] =3D "Subversion =E3=82=B5=E3=83=BC=E3=83=90";
+
+$lang["SEARCHLOG"] =3D "=E3=83=AD=E3=82=B0=E3=82=92=E6=A4=9C=E7=B4=A2";
+$lang["CLEARLOG"] =3D "=E6=A4=9C=E7=B4=A2=E6=9D=A1=E4=BB=B6=E3=82=92=E3=82=
=AF=E3=83=AA=E3=82=A2=E3=81=99=E3=82=8B";
+$lang["MORERESULTS"] =3D "=E6=A4=9C=E7=B4=A2=E6=9D=A1=E4=BB=B6=E3=82=92=E7=
=B5=9E=E3=82=8A=E8=BE=BC=E3=82=80";
+$lang["NORESULTS"] =3D "=E6=A4=9C=E7=B4=A2=E6=9D=A1=E4=BB=B6=E3=81=AB=E3=
=83=9E=E3=83=83=E3=83=81=E3=81=99=E3=82=8B=E3=82=82=E3=81=AE=E3=81=AF=E3=81=
=82=E3=82=8A=E3=81=BE=E3=81=9B=E3=82=93=E3=81=A7=E3=81=97=E3=81=9F";
+$lang["NOMORERESULTS"] =3D "=E3=81=93=E3=82=8C=E4=BB=A5=E4=B8=8A=E6=A4=9C=
=E7=B4=A2=E6=9D=A1=E4=BB=B6=E3=81=AB=E3=83=9E=E3=83=83=E3=83=81=E3=81=99=E3=
=82=8B=E3=82=82=E3=81=AE=E3=81=AF=E3=81=82=E3=82=8A=E3=81=BE=E3=81=9B=E3=82=
=93";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=8C=
=E4=BF=AE=E6=AD=A3=E3=81=95=E3=82=8C=E3=81=BE=E3=81=97=E3=81=9F";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=E8=A1=8C=E7=95=AA=E5=8F=B7";
+$lang["BLAMEFOR"] =3D "=E8=A9=B3=E7=B4=B0=E8=A1=A8=E7=A4=BA =E5=AF=BE=E8=
=B1=A1=E3=83=AA=E3=83=93=E3=82=B8=E3=83=A7=E3=83=B3";
+ =
=20
+$lang["YEARS"] =3D "=E5=B9=B4=E9=96=93";
+$lang["MONTHS"] =3D "=E3=83=B5=E6=9C=88=E9=96=93";
+$lang["WEEKS"] =3D "=E9=80=B1=E9=96=93";
+$lang["DAYS"] =3D "=E6=97=A5=E9=96=93";
+$lang["HOURS"] =3D "=E6=99=82=E9=96=93";
+$lang["MINUTES"] =3D "=E5=88=86";
+
+$lang["GO"] =3D "GO";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "<nobr>";
+$lang["ENDNOBR"] =3D "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/korean-euc.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D "=B7=CE=B1=D7";
+$lang["DIFF"] =3D "=BA=F1=B1=B3";
+
+$lang["NOREP"] =3D "=C0=FA=C0=E5=BC=D2=B0=A1 =C1=F6=C1=A4=B5=C7=BE=EE =C0=
=D6=C1=F6 =BE=CA=BD=C0=B4=CF=B4=D9.";
+$lang["NOPATH"] =3D "=B0=E6=B7=CE=B8=A6 =C3=A3=C0=BB =BC=F6 =BE=F8=BD=C0=
=B4=CF=B4=D9.";
+$lang["SUPPLYREP"] =3D "include/config.inc =C6=C4=C0=CF=C0=C7 \$config->=
parentPath =B6=C7=B4=C2 \$config->addRepository=BF=A1 =C0=FA=C0=E5=BC=D2=C0=
=C7 =B0=E6=B7=CE=B8=A6 =C1=F6=C1=A4=C7=D8 =C1=D6=BD=CA=BD=C3=BF=C0.<p>=BC=
=B3=C4=A1 =BC=B3=B8=ED=BC=AD=B8=A6 =C2=FC=C1=B6=C7=D8 =C1=D6=BD=CA=BD=C3=BF=
=C0.";
+
+$lang["DIFFREVS"] =3D "=B8=AE=BA=F1=C0=FC=B0=A3 =BA=F1=B1=B3";
+$lang["AND"] =3D "=BF=CD(=B0=FA)";
+$lang["REV"] =3D "=B8=AE=BA=F1=C0=FC";
+$lang["LINE"] =3D "=C7=E0";
+$lang["SHOWENTIREFILE"] =3D "=B8=F0=B5=CE =BA=B8=B1=E2";
+$lang["SHOWCOMPACT"] =3D "=B9=D9=B2=EF =BA=CE=BA=D0=B8=B8 =BA=B8=B1=E2";
+
+$lang["DIFFPREV"] =3D "=C0=CC=C0=FC =B8=AE=BA=F1=C0=FC=B0=FA =BA=F1=B1=B3=
";
+$lang["BLAME"] =3D "=BC=F6=C1=A4=C7=D1 =BB=E7=B6=F7 =BA=B8=B1=E2";
+
+$lang["REVINFO"] =3D "=B8=AE=BA=F1=C0=FC =C1=A4=BA=B8";
+$lang["GOYOUNGEST"] =3D "=C3=D6=BD=C5 =B8=AE=BA=F1=C0=FC=C0=B8=B7=CE =B0=
=A1=B1=E2";
+$lang["LASTMOD"] =3D "=B8=B6=C1=F6=B8=B7 =BA=AF=B0=E6";
+$lang["LOGMSG"] =3D "=B7=CE=B1=D7 =B8=DE=BD=C3=C1=F6";
+$lang["CHANGES"] =3D "=BA=AF=B0=E6";
+$lang["SHOWCHANGED"] =3D "=BA=AF=B0=E6=B5=C8 =C6=C4=C0=CF =BA=B8=B1=E2";
+$lang["HIDECHANGED"] =3D "=BA=AF=B0=E6=B5=C8 =C6=C4=C0=CF =BC=FB=B1=E2=B1=
=E2";
+$lang["NEWFILES"] =3D "=BB=F5 =C6=C4=C0=CF";
+$lang["CHANGEDFILES"] =3D "=BC=F6=C1=A4=B5=C8 =C6=C4=C0=CF";
+$lang["DELETEDFILES"] =3D "=BB=E8=C1=A6=B5=C8 =C6=C4=C0=CF";
+$lang["VIEWLOG"] =3D "=B7=CE=B1=D7 =BA=B8=B1=E2";
+$lang["PATH"] =3D "=B0=E6=B7=CE";
+$lang["AUTHOR"] =3D "=C0=DB=BC=BA=C0=DA";
+$lang["AGE"] =3D "=B1=E2=B0=A3";
+$lang["LOG"] =3D "=B7=CE=B1=D7";
+$lang["CURDIR"] =3D "=C7=F6=C0=E7 =B5=F0=B7=BA=C5=E4=B8=AE";
+$lang["TARBALL"] =3D "Tarball";
+
+$lang["PREV"] =3D "=C0=CC=C0=FC";
+$lang["NEXT"] =3D "=B4=D9=C0=BD";
+$lang["SHOWALL"] =3D "=B8=F0=B5=CE =BA=B8=B1=E2";
+
+$lang["BADCMD"] =3D "=B8=ED=B7=C9 =BD=C7=C7=E0 =BF=A1=B7=AF";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion =C7=C1=B7=CE=C1=A7=C6=AE";
+$lang["SERVER"] =3D "Subversion =BC=AD=B9=F6";
+
+$lang["SEARCHLOG"] =3D "=B7=CE=B1=D7 =B0=CB=BB=F6";
+$lang["CLEARLOG"] =3D "=B0=CB=BB=F6 =C1=B6=B0=C7 =BB=E8=C1=A6";
+$lang["MORERESULTS"] =3D "=B3=AA=B8=D3=C1=F6 =B0=CB=BB=F6 =B0=E1=B0=FA..=
.";
+$lang["NORESULTS"] =3D "=B0=CB=BB=F6 =C1=B6=B0=C7=BF=A1 =B8=C2=B4=C2 =B0=
=E1=B0=FA=B0=A1 =BE=F8=BD=C0=B4=CF=B4=D9.";
+$lang["NOMORERESULTS"] =3D "=B4=F5 =C0=CC=BB=F3 =B0=CB=BB=F6 =C1=B6=B0=C7=
=BF=A1 =B8=C2=B4=C2 =B0=E1=B0=FA=B0=A1 =BE=F8=BD=C0=B4=CF=B4=D9.";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "=C6=C4=C0=CF =BC=F6=C1=A4=B5=CA";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=C7=E0=B9=F8=C8=A3";
+$lang["BLAMEFOR"] =3D "=BC=F6=C1=A4=C7=D1 =BB=E7=B6=F7 =BA=B8=B1=E2, =B8=
=AE=BA=F1=C0=FC ";
+
+$lang["YEARS"] =3D "=B3=E2";
+$lang["MONTHS"] =3D "=B0=B3=BF=F9";
+$lang["WEEKS"] =3D "=C1=D6=C0=CF";
+$lang["DAYS"] =3D "=C0=CF";
+$lang["HOURS"] =3D "=BD=C3=B0=A3";
+$lang["MINUTES"] =3D "=BA=D0";
+
+$lang["GO"] =3D "Go";
+
+$lang["PATHCOMPARISON"] =3D "=B0=E6=B7=CE =BA=F1=B1=B3";
+$lang["COMPAREPATHS"] =3D "=B0=E6=B7=CE =BA=F1=B1=B3=C7=CF=B1=E2";
+$lang["COMPAREREVS"] =3D "=B8=AE=BA=F1=C0=FC =BA=F1=B1=B3=C7=CF=B1=E2";
+$lang["PROPCHANGES"] =3D "=C6=AF=BC=BA =BA=AF=B0=E6 :";
+$lang["CONVFROM"] =3D "=C0=CC =BA=F1=B1=B3=B4=C2 =B9=D9=B2=EF =B0=E6=B7=CE=
=B8=A6 =BA=B8=BF=A9 =C1=DD=B4=CF=B4=D9.";
+$lang["TO"] =3D "=BF=A1=BC=AD";
+$lang["REVCOMP"] =3D "=BF=AA =BA=F1=B1=B3";
+$lang["COMPPATH"] =3D "=BA=F1=B1=B3 =B0=E6=B7=CE:";
+$lang["WITHPATH"] =3D "=B0=E6=B7=CE:";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "";
+$lang["ENDNOBR"] =3D "";
+
+// $lang["NOBR"] =3D "<nobr>";
+// $lang["ENDNOBR"] =3D "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/korean-utf8.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D "=EB=A1=9C=EA=B7=B8";
+$lang["DIFF"] =3D "=EB=B9=84=EA=B5=90";
+
+$lang["NOREP"] =3D "=EC=A0=80=EC=9E=A5=EC=86=8C=EA=B0=80 =EC=A7=80=EC=A0=
=95=EB=90=98=EC=96=B4 =EC=9E=88=EC=A7=80 =EC=95=8A=EC=8A=B5=EB=8B=88=EB=8B=
=A4.";
+$lang["NOPATH"] =3D "=EA=B2=BD=EB=A1=9C=EB=A5=BC =EC=B0=BE=EC=9D=84 =EC=88=
=98 =EC=97=86=EC=8A=B5=EB=8B=88=EB=8B=A4.";
+$lang["SUPPLYREP"] =3D "include/config.inc =ED=8C=8C=EC=9D=BC=EC=9D=98 \=
$config->parentPath =EB=98=90=EB=8A=94 \$config->addRepository=EC=97=90 =EC=
=A0=80=EC=9E=A5=EC=86=8C=EC=9D=98 =EA=B2=BD=EB=A1=9C=EB=A5=BC =EC=A7=80=EC=
=A0=95=ED=95=B4 =EC=A3=BC=EC=8B=AD=EC=8B=9C=EC=98=A4.<p>=EC=84=A4=EC=B9=98=
=EC=84=A4=EB=AA=85=EC=84=9C=EB=A5=BC =EC=B0=B8=EC=A1=B0=ED=95=B4 =EC=A3=BC=
=EC=8B=AD=EC=8B=9C=EC=98=A4.";
+
+$lang["DIFFREVS"] =3D "=EB=A6=AC=EB=B9=84=EC=A0=84=EA=B0=84 =EB=B9=84=EA=
=B5=90";
+$lang["AND"] =3D "=EC=99=80(=EA=B3=BC)";
+$lang["REV"] =3D "=EB=A6=AC=EB=B9=84=EC=A0=84";
+$lang["LINE"] =3D "=ED=96=89";
+$lang["SHOWENTIREFILE"] =3D "=EB=AA=A8=EB=91=90 =EB=B3=B4=EA=B8=B0";
+$lang["SHOWCOMPACT"] =3D "=EB=B0=94=EB=80=90 =EB=B6=80=EB=B6=84=EB=A7=8C=
=EB=B3=B4=EA=B8=B0";
+
+$lang["DIFFPREV"] =3D "=EC=9D=B4=EC=A0=84 =EB=A6=AC=EB=B9=84=EC=A0=84=EA=
=B3=BC =EB=B9=84=EA=B5=90";
+$lang["BLAME"] =3D "=EC=88=98=EC=A0=95=ED=95=9C =EC=82=AC=EB=9E=8C =EB=B3=
=B4=EA=B8=B0";
+
+$lang["REVINFO"] =3D "=EB=A6=AC=EB=B9=84=EC=A0=84 =EC=A0=95=EB=B3=B4";
+$lang["GOYOUNGEST"] =3D "=EC=B5=9C=EC=8B=A0 =EB=A6=AC=EB=B9=84=EC=A0=84=EC=
=9C=BC=EB=A1=9C =EA=B0=80=EA=B8=B0";
+$lang["LASTMOD"] =3D "=EB=A7=88=EC=A7=80=EB=A7=89 =EB=B3=80=EA=B2=BD";
+$lang["LOGMSG"] =3D "=EB=A1=9C=EA=B7=B8 =EB=A9=94=EC=8B=9C=EC=A7=80";
+$lang["CHANGES"] =3D "=EB=B3=80=EA=B2=BD";
+$lang["SHOWCHANGED"] =3D "=EB=B3=80=EA=B2=BD=EB=90=9C =ED=8C=8C=EC=9D=BC=
=EB=B3=B4=EA=B8=B0";
+$lang["HIDECHANGED"] =3D "=EB=B3=80=EA=B2=BD=EB=90=9C =ED=8C=8C=EC=9D=BC=
=EC=88=A8=EA=B8=B0=EA=B8=B0";
+$lang["NEWFILES"] =3D "=EC=83=88 =ED=8C=8C=EC=9D=BC";
+$lang["CHANGEDFILES"] =3D "=EC=88=98=EC=A0=95=EB=90=9C =ED=8C=8C=EC=9D=BC=
";
+$lang["DELETEDFILES"] =3D "=EC=82=AD=EC=A0=9C=EB=90=9C =ED=8C=8C=EC=9D=BC=
";
+$lang["VIEWLOG"] =3D "=EB=A1=9C=EA=B7=B8 =EB=B3=B4=EA=B8=B0";
+$lang["PATH"] =3D "=EA=B2=BD=EB=A1=9C";
+$lang["AUTHOR"] =3D "=EC=9E=91=EC=84=B1=EC=9E=90";
+$lang["AGE"] =3D "=EA=B8=B0=EA=B0=84";
+$lang["LOG"] =3D "=EB=A1=9C=EA=B7=B8";
+$lang["CURDIR"] =3D "=ED=98=84=EC=9E=AC =EB=94=94=EB=A0=89=ED=86=A0=EB=A6=
=AC";
+$lang["TARBALL"] =3D "Tarball";
+
+$lang["PREV"] =3D "=EC=9D=B4=EC=A0=84";
+$lang["NEXT"] =3D "=EB=8B=A4=EC=9D=8C";
+$lang["SHOWALL"] =3D "=EB=AA=A8=EB=91=90 =EB=B3=B4=EA=B8=B0";
+
+$lang["BADCMD"] =3D "=EB=AA=85=EB=A0=B9 =EC=8B=A4=ED=96=89 =EC=97=90=EB=9F=
=AC";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion =ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=
=B8";
+$lang["SERVER"] =3D "Subversion =EC=84=9C=EB=B2=84";
+
+$lang["SEARCHLOG"] =3D "=EB=A1=9C=EA=B7=B8 =EA=B2=80=EC=83=89";
+$lang["CLEARLOG"] =3D "=EA=B2=80=EC=83=89 =EC=A1=B0=EA=B1=B4 =EC=82=AD=EC=
=A0=9C";
+$lang["MORERESULTS"] =3D "=EB=82=98=EB=A8=B8=EC=A7=80 =EA=B2=80=EC=83=89=
=EA=B2=B0=EA=B3=BC...";
+$lang["NORESULTS"] =3D "=EA=B2=80=EC=83=89 =EC=A1=B0=EA=B1=B4=EC=97=90 =EB=
=A7=9E=EB=8A=94 =EA=B2=B0=EA=B3=BC=EA=B0=80 =EC=97=86=EC=8A=B5=EB=8B=88=EB=
=8B=A4.";
+$lang["NOMORERESULTS"] =3D "=EB=8D=94 =EC=9D=B4=EC=83=81 =EA=B2=80=EC=83=
=89 =EC=A1=B0=EA=B1=B4=EC=97=90 =EB=A7=9E=EB=8A=94 =EA=B2=B0=EA=B3=BC=EA=B0=
=80 =EC=97=86=EC=8A=B5=EB=8B=88=EB=8B=A4.";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "=ED=8C=8C=EC=9D=BC =EC=88=98=EC=A0=95=EB=90=A8=
";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=ED=96=89=EB=B2=88=ED=98=B8";
+$lang["BLAMEFOR"] =3D "=EC=88=98=EC=A0=95=ED=95=9C =EC=82=AC=EB=9E=8C =EB=
=B3=B4=EA=B8=B0, =EB=A6=AC=EB=B9=84=EC=A0=84 ";
+
+$lang["YEARS"] =3D "=EB=85=84";
+$lang["MONTHS"] =3D "=EA=B0=9C=EC=9B=94";
+$lang["WEEKS"] =3D "=EC=A3=BC=EC=9D=BC";
+$lang["DAYS"] =3D "=EC=9D=BC";
+$lang["HOURS"] =3D "=EC=8B=9C=EA=B0=84";
+$lang["MINUTES"] =3D "=EB=B6=84";
+
+$lang["GO"] =3D "Go";
+
+$lang["PATHCOMPARISON"] =3D "=EA=B2=BD=EB=A1=9C =EB=B9=84=EA=B5=90";
+$lang["COMPAREPATHS"] =3D "=EA=B2=BD=EB=A1=9C =EB=B9=84=EA=B5=90=ED=95=98=
=EA=B8=B0";
+$lang["COMPAREREVS"] =3D "=EB=A6=AC=EB=B9=84=EC=A0=84 =EB=B9=84=EA=B5=90=
=ED=95=98=EA=B8=B0";
+$lang["PROPCHANGES"] =3D "=ED=8A=B9=EC=84=B1 =EB=B3=80=EA=B2=BD :";
+$lang["CONVFROM"] =3D "=EC=9D=B4 =EB=B9=84=EA=B5=90=EB=8A=94 =EB=B0=94=EB=
=80=90 =EA=B2=BD=EB=A1=9C=EB=A5=BC =EB=B3=B4=EC=97=AC =EC=A4=8D=EB=8B=88=EB=
=8B=A4.";
+$lang["TO"] =3D "=EC=97=90=EC=84=9C";
+$lang["REVCOMP"] =3D "=EC=97=AD =EB=B9=84=EA=B5=90";
+$lang["COMPPATH"] =3D "=EB=B9=84=EA=B5=90 =EA=B2=BD=EB=A1=9C:";
+$lang["WITHPATH"] =3D "=EA=B2=BD=EB=A1=9C:";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "";
+$lang["ENDNOBR"] =3D "";
+
+// $lang["NOBR"] =3D "<nobr>";
+// $lang["ENDNOBR"] =3D "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/portuguese.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D "Log";
+$lang["DIFF"] =3D "Diff";
+
+$lang["NOREP"] =3D "Não foi indicado um repositório";
+$lang["NOPATH"] =3D "Path Inválida";
+
+$lang["DIFFREVS"] =3D "Diferenças entre revisões";
+$lang["AND"] =3D "e";
+$lang["REV"] =3D "Rev";
+$lang["LINE"] =3D "Linha";
+$lang["SHOWENTIREFILE"] =3D "Mostrar todo o ficheiro";
+$lang["SHOWCOMPACT"] =3D "Mostrar apenas áreas com diferenç=
;as";
+
+$lang["DIFFPREV"] =3D "Diferenças com a anterior";
+
+$lang["REVINFO"] =3D "Notas desta revisão";
+$lang["GOYOUNGEST"] =3D "Revisão mais recente";
+$lang["LASTMOD"] =3D "Última alteração";
+$lang["LOGMSG"] =3D "Mensagem de Log";
+$lang["CHANGES"] =3D "Alterações";
+$lang["SHOWCHANGED"] =3D "Mostrar ficheiros alterados";
+$lang["HIDECHANGED"] =3D "Esconder ficheiros alterados";
+$lang["NEWFILES"] =3D "Novos ficheiros";
+$lang["CHANGEDFILES"] =3D "Ficheiros alterados";
+$lang["DELETEDFILES"] =3D "Ficheiros apagados";
+$lang["VIEWLOG"] =3D "Ver Log";
+$lang["PATH"] =3D "Path";
+$lang["AUTHOR"] =3D "Autor";
+$lang["AGE"] =3D "Idade";
+$lang["LOG"] =3D "Log";
+$lang["CURDIR"] =3D "Directoria Currente";
+
+$lang["PREV"] =3D "Anterior";
+$lang["NEXT"] =3D "Seguinte";
+$lang["SHOWALL"] =3D "Mostrar todos";
+
+$lang["BADCMD"] =3D "Erro ao correr este comando";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion Projectos";
+$lang["SERVER"] =3D "Subversion Servidor";
+
+$lang["SEARCHLOG"] =3D "Pesquisar o Search log por";
+$lang["CLEARLOG"] =3D "Limpar pesquisa";
+$lang["MORERESULTS"] =3D "Encontrar mais...";
+$lang["NORESULTS"] =3D "A pesquisa não devolveu nenhum log";
+$lang["NOMORERESULTS"] =3D "Não existem mais resultados (logs) pa=
ra a pesquisa";
+
+$lang["YEARS"] =3D "anos";
+$lang["MONTHS"] =3D "meses";
+$lang["WEEKS"] =3D "semanas";
+$lang["DAYS"] =3D "dias";
+$lang["HOURS"] =3D "horas";
+$lang["MINUTES"] =3D "minutos";
+
+$lang["GO"] =3D "Go";
Added: trunk/svn.matroska.org/WebSVN/languages/russian.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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)
+//=20
+
+$lang["LOG"] =3D "=CF=F0=EE=F2=EE=EA=EE=EB";
+$lang["DIFF"] =3D "=D1=F0=E0=E2=ED=E5=ED=E8=E5";
+
+$lang["NOREP"] =3D "=D0=E5=EF=EE=E7=E8=F2=EE=F0=E8=E9 =ED=E5 =E7=E0=E4=E0=
=ED";
+$lang["NOPATH"] =3D "=CF=F3=F2=FC =ED=E5 =ED=E0=E9=E4=E5=ED";
+
+$lang["DIFFREVS"] =3D "=D1=F0=E0=E2=ED=E5=ED=E8=E5 =F0=E5=E2=E8=E7=E8=E9=
";
+$lang["AND"] =3D "=E8";
+$lang["REV"] =3D "=F0=E5=E2.";
+$lang["LINE"] =3D "=D1=F2=F0=EE=EA=E0";
+$lang["SHOWENTIREFILE"] =3D "=CF=EE=EA=E0=E7=E0=F2=FC =F6=E5=EB=FB=E9 =F4=
=E0=E9=EB";
+$lang["SHOWCOMPACT"] =3D "=CE=F2=EE=E1=F0=E0=E6=E0=F2=FC =F2=EE=EB=FC=EA=
=EE =EE=E1=EB=E0=F1=F2=E8 =F1 =F0=E0=E7=EB=E8=F7=E8=FF=EC=E8";
+
+$lang["DIFFPREV"] =3D "=D1=F0=E0=E2=ED=E5=ED=E8=E5 =F1 =EF=F0=E5=E4=FB=E4=
=F3=F9=E8=EC";
+$lang["BLAME"] =3D "Blame";
+
+$lang["REVINFO"] =3D "=C8=ED=F4=EE=F0=EC=E0=F6=E8=FF =EE =F0=E5=E2=E8=E7=
=E8=E8";
+$lang["GOYOUNGEST"] =3D "=C8=E4=F2=E8 =EA =EF=EE=F1=EB=E5=E4=ED=E5=E9 =F0=
=E5=E2=E8=E7=E8=E8";
+$lang["LASTMOD"] =3D "=CF=EE=F1=EB=E5=E4=ED=E5=E5 =E8=E7=EC=E5=ED=E5=ED=E8=
=E5";
+$lang["LOGMSG"] =3D "=D0=E5=E3=E8=F1=F2=F0=E0=F6=E8=EE=ED=ED=EE=E5 =F1=EE=
=EE=E1=F9=E5=ED=E8=E5";
+$lang["CHANGES"] =3D "=C8=E7=EC=E5=ED=E5=ED=E8=FF";
+$lang["SHOWCHANGED"] =3D "=CF=EE=EA=E0=E7 =E8=E7=EC=E5=ED=E8=E2=F8=E8=E5=
=F1=FF =F4=E0=E9=EB=FB";
+$lang["HIDECHANGED"] =3D "=D1=EA=F0=FB=F2=FC =E8=E7=EC=E5=ED=E8=E2=F8=E8=
=E5=F1=FF =F4=E0=E9=EB=FB";
+$lang["NEWFILES"] =3D "=CD=EE=E2=FB=E5 =F4=E0=E9=EB=FB";
+$lang["CHANGEDFILES"] =3D "=C8=E7=EC=E5=ED=E5=ED=ED=FB=E5 =F4=E0=E9=EB=FB=
";
+$lang["DELETEDFILES"] =3D "=D3=E4=E0=EB=E5=ED=ED=FB=E5 =F4=E0=E9=EB=FB";
+$lang["VIEWLOG"] =3D "=D1=EC=EE=F2=F0=E5=F2=FC =EF=F0=EE=F2=EE=EA=EE=
=EB";
+$lang["PATH"] =3D "=CF=F3=F2=FC";
+$lang["AUTHOR"] =3D "=C0=E2=F2=EE=F0";
+$lang["AGE"] =3D "=C2=EE=E7=F0=E0=F1=F2";
+$lang["LOG"] =3D "=CF=F0=EE=F2=EE=EA=EE=EB";
+$lang["CURDIR"] =3D "=D2=E5=EA=F3=F9=E8=E9 =EA=E0=F2=E0=EB=EE=E3";
+
+$lang["PREV"] =3D "=CF=F0=E5=E4.";
+$lang["NEXT"] =3D "=D1=EB=E5=E4.";
+$lang["SHOWALL"] =3D "=CF=EE=EA=E0=E7=E0=F2=FC =E2=F1=B8";
+
+$lang["BADCMD"] =3D "=CE=F8=E8=E1=EA=E0 =E2=FB=EF=EE=EB=ED=E5=ED=E8=FF =FD=
=F2=EE=E9 =EA=EE=EC=EC=E0=ED=E4=FB";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion Projects";
+$lang["SERVER"] =3D "Subversion Server";
+
+$lang["SEARCHLOG"] =3D "=C8=F1=EA=E0=F2=FC log for";
+$lang["CLEARLOG"] =3D "=CE=F7=E8=F1=F2=E8=F2=FC =F2=E5=EA=F3=F9=E8=E9 =EF=
=EE=E8=F1=EA";
+$lang["MORERESULTS"] =3D "=C8=F1=EA=E0=F2=FC =E5=F9=E5 =F1=EE=E2=EF=E0=E4=
=E5=ED=E8=FF...";
+$lang["NORESULTS"] =3D "There are no logs matching your query";
+$lang["NOMORERESULTS"] =3D "There are no more logs matching your query";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "=D4=E0=E8=E9=EB(=FB) =E8=E7=EC=E5=ED=E5=ED=FB=
";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=D1=F2=F0=EE=EA=E0 #.";
+$lang["BLAMEFOR"] =3D "Blame information for rev";
+
+$lang["YEARS"] =3D "=E3=EE=E4";
+$lang["MONTHS"] =3D "=EC=E5=F1=FF=F6";
+$lang["WEEKS"] =3D "=ED=E5=E4=E5=EB=FF";
+$lang["DAYS"] =3D "=E4=E5=ED=FC";
+$lang["HOURS"] =3D "=F7=E0=F1";
+$lang["MINUTES"] =3D "=EC=E8=ED=F3=F2=E0";
+
+$lang["GO"] =3D "Go";
Added: trunk/svn.matroska.org/WebSVN/languages/spanish.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D "Log";
+$lang["DIFF"] =3D "Diff";
+
+$lang["NOREP"] =3D "No se especific=F3 un repositorio";
+$lang["NOPATH"] =3D "Ruta no encontrada";
+$lang["SUPPLYREP"] =3D "Por Favor, configure una ruta a un repositorio e=
n include/config.inc usando \$config->parentPath o \$config->addRepositor=
y<p>Verifique la gu=EDa de instalaci=F3n para mas detalles";
+
+$lang["DIFFREVS"] =3D "Diff entre versiones";
+$lang["AND"] =3D "y";
+$lang["REV"] =3D "Rev";
+$lang["LINE"] =3D "L=EDnea";
+$lang["SHOWENTIREFILE"] =3D "Mostrar el archivo completo";
+$lang["SHOWCOMPACT"] =3D "Solo mostrar =E1reas con diferencias";
+
+$lang["DIFFPREV"] =3D "Comparar con el anterior";
+$lang["BLAME"] =3D "Autor=EDa";
+
+$lang["REVINFO"] =3D "Informaci=F3n sobre la revisi=F3n";
+$lang["GOYOUNGEST"] =3D "Ir a la =FAltima revisi=F3n";
+$lang["LASTMOD"] =3D "Ultima modificaci=F3n";
+$lang["LOGMSG"] =3D "Mensaje de Log";
+$lang["CHANGES"] =3D "Cambios";
+$lang["SHOWCHANGED"] =3D "Mostrar archivos modificados";
+$lang["HIDECHANGED"] =3D "Ocultar archivos modificados";
+$lang["NEWFILES"] =3D "Archivos Nuevos";
+$lang["CHANGEDFILES"] =3D "Archivos modificados";
+$lang["DELETEDFILES"] =3D "Archivos borrados";
+$lang["VIEWLOG"] =3D "Ver Log";
+$lang["PATH"] =3D "Ruta";
+$lang["AUTHOR"] =3D "Autor";
+$lang["AGE"] =3D "Antig=FCedad";
+$lang["LOG"] =3D "Log";
+$lang["CURDIR"] =3D "Directorio Actual";
+$lang["TARBALL"] =3D "Tarball";
+
+$lang["PREV"] =3D "Ant";
+$lang["NEXT"] =3D "Sig";
+$lang["SHOWALL"] =3D "Mostrar todo";
+
+$lang["BADCMD"] =3D "Error ejecutando ese comando";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Proyectos de Subversion";
+$lang["SERVER"] =3D "Servidor de Subversion";
+
+$lang["SEARCHLOG"] =3D "Buscar en el log";
+$lang["CLEARLOG"] =3D "Limpiar la b=FAsqueda actual";
+$lang["MORERESULTS"] =3D "Buscar mas coincidencias";
+$lang["NORESULTS"] =3D "Ning=FAn log coincide con su b=FAsqueda";
+$lang["NOMORERESULTS"] =3D "No hay mas logs que coincidan con su b=FAsqu=
eda";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "Archivo(s) modificados";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "L=EDnea Nro.";
+$lang["BLAMEFOR"] =3D "Informaci=F3n de culpa para rev";
+
+$lang["YEARS"] =3D "A=F1os";
+$lang["MONTHS"] =3D "meses";
+$lang["WEEKS"] =3D "semanas";
+$lang["DAYS"] =3D "d=EDas";
+$lang["HOURS"] =3D "horas";
+$lang["MINUTES"] =3D "minutos";
+
+$lang["GO"] =3D "Ir";
+
+$lang["PATHCOMPARISON"] =3D "Comparaci=F3n de rutas";
+$lang["COMPAREPATHS"] =3D "Comparar Rutas";
+$lang["COMPAREREVS"] =3D "Comparar Revisiones";
+$lang["PROPCHANGES"] =3D "Cambios de propiedades :";
+$lang["CONVFROM"] =3D "Esta Comparaci=F3n muestra los cambios necesarios=
para convertir la ruta";
+$lang["TO"] =3D "a";
+$lang["REVCOMP"] =3D "Revertir comparaci=F3n";
+$lang["COMPPATH"] =3D "Comparar Ruta:";
+$lang["WITHPATH"] =3D "Con Ruta:";
+$lang["FILEDELETED"] =3D "Archivo Eliminado";
+$lang["FILEADDED"] =3D "Archivo Nuevo";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.
+
+$lang["NOBR"] =3D "";
+$lang["ENDNOBR"] =3D "";
+
+// $lang["NOBR"] =3D "<nobr>";
+// $lang["ENDNOBR"] =3D "</nobr>";
Added: trunk/svn.matroska.org/WebSVN/languages/swedish.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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"] =3D "Logg";
+$lang["DIFF"] =3D "Skillnad";
+
+$lang["NOREP"] =3D "Inget arkiv angivet"; //repository
+$lang["NOPATH"] =3D "Sökvägen saknas";
+$lang["SUPPLYREP"] =3D "Vänligen sätt upp en söväg t=
ill arkivet i include/config.inc med \$config->parentPath eller \$config-=
>addRepository<p>Se installationsanvisningen för mer detaljer";
+
+$lang["DIFFREVS"] =3D "Skillnad mellan rev.";
+$lang["AND"] =3D "och";
+$lang["REV"] =3D "Rev";
+$lang["LINE"] =3D "Rad";
+$lang["SHOWENTIREFILE"] =3D "Visa hela filen";
+$lang["SHOWCOMPACT"] =3D "Visa bara områden med skillnader";
+
+$lang["DIFFPREV"] =3D "Skillnad mot föregående";
+$lang["BLAME"] =3D "Ansvarig";
+
+$lang["REVINFO"] =3D "Revisionsinformation";
+$lang["GOYOUNGEST"] =3D "Gå till senaste revision";
+$lang["LASTMOD"] =3D "Senast ändrad";
+$lang["LOGMSG"] =3D "Loggmeddelande";
+$lang["CHANGES"] =3D "ändringar";
+$lang["SHOWCHANGED"] =3D "Visa ändrade filer";
+$lang["HIDECHANGED"] =3D "Göm ändrade filer";
+$lang["NEWFILES"] =3D "Nya filer";
+$lang["CHANGEDFILES"] =3D "Ändrade filer";
+$lang["DELETEDFILES"] =3D "Raderade filer";
+$lang["VIEWLOG"] =3D "Visa Logg";
+$lang["PATH"] =3D "Sökväg";
+$lang["AUTHOR"] =3D "Författare";
+$lang["AGE"] =3D "Ålder";
+$lang["LOG"] =3D "Logg";
+$lang["CURDIR"] =3D "Nuvarande folder";
+$lang["TARBALL"] =3D "Tarball";
+
+$lang["PREV"] =3D "Föreg.";
+$lang["NEXT"] =3D "Nästa";
+$lang["SHOWALL"] =3D "Visa alla";
+
+$lang["BADCMD"] =3D "Fel vid körning av kommande";
+
+$lang["POWERED"] =3D "Powered by <a href=3D\"http://websvn.tigris.org/\"=
>WebSVN</a>";
+$lang["PROJECTS"] =3D "Subversion Projekt";
+$lang["SERVER"] =3D "Subversion Server";
+
+$lang["SEARCHLOG"] =3D "Sök i logg efter";
+$lang["CLEARLOG"] =3D "Rensa nuvarande sökning";
+$lang["MORERESULTS"] =3D "Hitta fler träffar...";
+$lang["NORESULTS"] =3D "Det finns ingen logg som motsvarar din sökn=
ing";
+$lang["NOMORERESULTS"] =3D "Det finns inga fler loggar i din söknin=
g";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "fil(er) ändrade";=20
+$lang["RSSFEED"] =3D "RSS";=20
+
+$lang["LINENO"] =3D "Radnr.";
+$lang["BLAMEFOR"] =3D "Ansvariginformation för rev";
+
+$lang["YEARS"] =3D "år";
+$lang["MONTHS"] =3D "månader";
+$lang["WEEKS"] =3D "veckor";
+$lang["DAYS"] =3D "dagar";
+$lang["HOURS"] =3D "timmar";
+$lang["MINUTES"] =3D "minuter";
+
+$lang["GO"] =3D "Utför";
+
+$lang["PATHCOMPARISON"] =3D "Sökvägsjämförelse";
+$lang["COMPAREPATHS"] =3D "Jämför sökvägar";
+$lang["COMPAREREVS"] =3D "Jämför revisioner";
+$lang["PROPCHANGES"] =3D "Egenskapsändringar :";
+$lang["CONVFROM"] =3D "Denna jämf=F6relse visar ändringarna so=
m behövs f=F6r att konvertera sökväg ";=20
+$lang["TO"] =3D "till";
+$lang["REVCOMP"] =3D "Växla jämförelse";
+$lang["COMPPATH"] =3D "Jämför sökväg:";
+$lang["WITHPATH"] =3D "Med sökväg:";
+$lang["FILEDELETED"] =3D "Filen raderad";
+$lang["FILEADDED"] =3D "Ny fil";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "";
+$lang["ENDNOBR"] =3D "";
+
+// $lang["NOBR"] =3D "<nobr>";
+// $lang["ENDNOBR"] =3D "</nobr>";
+
+
Added: trunk/svn.matroska.org/WebSVN/languages/tchinese-utf8.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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
+//=20
+// Author: Yuan-Chung Hsiao <ychsiao at ychsiao.idv.tw>
+//
+
+$lang["LOG"] =3D "=E6=AD=B7=E5=8F=B2=E8=A8=98=E9??";
+$lang["DIFF"] =3D "=E6=AF=94=E5??";
+
+$lang["NOREP"] =3D "=E6=B2=92=E6?=89=E6?=94=E6??=E5=BA?";
+$lang["NOPATH"] =3D "?=89=BE=E4=B8=8D=E5?=B0=E8=B7=AF=E5=BE?";
+$lang["SUPPLYREP"] =3D "=E8=AB=8B=E5=9C=A8include/config.inc=E4=B8=AD=E8=
=A8=AD=E5=AE=9A=E6?=94=E6??=E5=BA=AB=E4?=8D=E7=BD=AE??? \$config->parentP=
ath ??? \$config->addRepository<p>?=9B=B4=E8=A9=B3=E7=B4=B0?????=A7=E5=AE=
=B9=E8=AB=8B=E8?=8B=E5?=89=E8?=9D=E6?=8B=E5??";
+
+$lang["DIFFREVS"] =3D "=E4=B8=8D=E5??????=9C=AC??=93=E7??=E5=B7=AE=E7=95=
=B0";
+$lang["AND"] =3D "???";
+$lang["REV"] =3D "=E4=BF=AE=E8????????";
+$lang["LINE"] =3D "=E8=A1?";
+$lang["SHOWALL"] =3D "=E9=A1=AF=E7=A4=BA=E5=AE??=95=B4???=E6=AA=94=E6??"=
;
+$lang["SHOWCOMPACT"] =3D "?=8F=AA=E9=A1=AF=E7=A4=BA=E4=B8=8D=E5?????";
+
+$lang["DIFFPREV"] =3D "?????=8D=E4?????=E6=AC=A1=E6?=94=E8??";
+$lang["BLAME"] =3D "=E8=AD=B4=E8=B2=AC";
+
+$lang["REVINFO"] =3D "=E4=BF=AE=E8?????=E6=AC=A1=E8??=E8=A8?";
+$lang["GOYOUNGEST"] =3D "??=B0=E6???=96=B0???=E4=BF=AE=E8??";
+$lang["LASTMOD"] =3D "???=E5=BE??=9B=B4???";
+$lang["LOGMSG"] =3D "=E8=A8=8A=E6?=AF=E8?=98=E9??";
+$lang["CHANGES"] =3D "?=94=B9=E8=AE?";
+$lang["SHOWCHANGED"] =3D "=E9=A1=AF=E7=A4=BA=E5=B7=B2=E8?=8A=E5?=95=E6?=94=
=E6??";
+$lang["HIDECHANGED"] =3D "?=9A=B1??=8F=E5=B7=B2=E8=AE=8A=E5?=95=E6?=94=E6=
??";
+$lang["NEWFILES"] =3D "?=96=B0=E6=AA=94=E6??";
+$lang["CHANGEDFILES"] =3D "=E5=B7=B2=E8?=8A=E5?=95=E6?=94=E6??";
+$lang["DELETEDFILES"] =3D "=E5=B7=B2=E5=88=AA?=99=A4=E6=AA=94=E6??";
+$lang["VIEWLOG"] =3D "??=8B=E6=AD=B7?=8F=B2=E8=A8=98=E9??";
+$lang["PATH"] =3D "=E8=B7=AF=E5??";
+$lang["AUTHOR"] =3D "=E4=BD=9C=E8??";
+$lang["AGE"] =3D "?=9B=B4??=95=E6?????";
+$lang["LOG"] =3D "=E6=AD=B7=E5=8F=B2=E8=A8=98=E9??";
+$lang["CURDIR"] =3D "?=9B=AE??=8D=E7=9B=AE???";
+$lang["TARBALL"] =3D "Tarball ?=A0=BC=E5=BC?";
+
+$lang["PREV"] =3D "=E4=B8=8A=E4??=E7=AD?";
+$lang["NEXT"] =3D "=E4=B8=8B=E4??=E7=AD?";
+$lang["SHOWALL"] =3D "=E9=A1=AF=E7=A4=BA??=A8=E9??";
+
+$lang["BADCMD"] =3D "?=9F=B7=E8=A1???=AF=E8=AA=A4";
+
+$lang["POWERED"] =3D "?=8E=A1?=94=A8 <a href=3D\"http://websvn.tigris.or=
g/\">WebSVN</a>?=9E=B6=E8=A8?";
+$lang["PROJECTS"] =3D "Subversion =E5=B0?=E6=A1?";
+$lang["SERVER"] =3D "Subversion Server";
+
+$lang["SEARCHLOG"] =3D "??=9C=E5?=8B=E8?=98=E9????=A7=E5=AE=B9";
+$lang["CLEARLOG"] =3D "=E6=B8??=99=A4?=9B=AE??=8D=E6?=9C=E5??";
+$lang["MORERESULTS"] =3D "?=89=BE??=B0=E6=9B=B4=E5=A4=9A=E7??=E7=AC=A6=E5=
?????...";
+$lang["NORESULTS"] =3D "?=9F=A5=E8=A9=A2=E7?=90=E6?=9C=E4=B8=A6=E6=B2=92=
=E6?=89=E7=AC=A6??????=E7=B4????";
+$lang["NOMORERESULTS"] =3D "=E6=B2=92=E6?=89=E6=9B=B4=E5=A4=9A=E7?????=E7=
=AC=A6=E5??=E4=BD=A0=E7???=9F=A5=E8=A9?";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "??=8B=E6?=94=E6??=E8=AE=8A=E5??";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=E8=A1?";
+$lang["BLAMEFOR"] =3D "????=9C=AC=E8=AD=B4=E8=B2=AC=E8=B3?=E8=A8?";
+
+$lang["YEARS"] =3D "=E5=B9=B4=E5??";
+$lang["MONTHS"] =3D "??????";
+$lang["WEEKS"] =3D "??=B1=E5??";
+$lang["DAYS"] =3D "?=97=A5???";
+$lang["HOURS"] =3D "=E5=B0=8F=E6?????";
+$lang["MINUTES"] =3D "?????=98=E5??";
+
+$lang["GO"] =3D "???";
+
+$lang["COMPAREPATHS"] =3D "=E6=AF=94=E5?=8D=E8=B7=AF=E5=BE?";
+$lang["COMPAREREVS"] =3D "=E6=AF=94=E5?=8D=E4=BF=AE=E8=A8????";
+$lang["PROPCHANGES"] =3D "?=94=B9=E8=AE=8A=E5=B1=AC??? :";
+$lang["CONVFROM"] =3D "??=99=E5?=8B=E6?=94=E5?=8D=E9=A1=AF=E7=A4=BA=E5??=
????=94=B9=E8=AE=8A=E8?=89=E6?=9B=E8=B7=AF=E5=BE?";
+$lang["TO"] =3D "???";
+$lang["REVCOMP"] =3D "=E9=A1=9B=E5?=92=E6?=94=E5??";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "";
+$lang["ENDNOBR"] =3D "";
Added: trunk/svn.matroska.org/WebSVN/languages/tchinese.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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
+//=20
+// Author: Yuan-Chung Hsiao <ychsiao at ychsiao.idv.tw>
+//
+
+$lang["LOG"] =3D "=BE=FA=A5v=B0O=BF=FD";
+$lang["DIFF"] =3D "=A4=F1=B9=EF";
+
+$lang["NOREP"] =3D "=A8S=A6=B3=C0=C9=AE=D7=AEw";
+$lang["NOPATH"] =3D "=A7=E4=A4=A3=A8=EC=B8=F4=AE|";
+$lang["SUPPLYREP"] =3D "=BD=D0=A6binclude/config.inc=A4=A4=B3]=A9w=C0=C9=
=AE=D7=AEw=A6=EC=B8m=AC=B0 \$config->parentPath =A9=CE \$config->addRepos=
itory<p>=A7=F3=B8=D4=B2=D3=AA=BA=A4=BA=AEe=BD=D0=A8=A3=A6w=B8=CB=A4=E2=A5=
U";
+
+$lang["DIFFREVS"] =3D "=A4=A3=A6P=AA=A9=A5=BB=B6=A1=AA=BA=AEt=B2=A7";
+$lang["AND"] =3D "=BBP";
+$lang["REV"] =3D "=AD=D7=ADq=AA=A9=B8=B9";
+$lang["LINE"] =3D "=A6=E6";
+$lang["SHOWALL"] =3D "=C5=E3=A5=DC=A7=B9=BE=E3=AA=BA=C0=C9=AE=D7";
+$lang["SHOWCOMPACT"] =3D "=A5u=C5=E3=A5=DC=A4=A3=A6P=B3B";
+
+$lang["DIFFPREV"] =3D "=BBP=ABe=A4@=AA=A9=A6=B8=A4=F1=B8=FB";
+$lang["BLAME"] =3D "=C4=FE=B3d";
+
+$lang["REVINFO"] =3D "=AD=D7=ADq=AA=A9=A6=B8=B8=EA=B0T";
+$lang["GOYOUNGEST"] =3D "=A8=EC=B3=CC=B7s=AA=BA=AD=D7=ADq";
+$lang["LASTMOD"] =3D "=B3=CC=AB=E1=A7=F3=B0=CA";
+$lang["LOGMSG"] =3D "=B0T=AE=A7=B0O=BF=FD";
+$lang["CHANGES"] =3D "=A7=EF=C5=DC";
+$lang["SHOWCHANGED"] =3D "=C5=E3=A5=DC=A4w=C5=DC=B0=CA=C0=C9=AE=D7";
+$lang["HIDECHANGED"] =3D "=C1=F4=C2=C3=A4w=C5=DC=B0=CA=C0=C9=AE=D7";
+$lang["NEWFILES"] =3D "=B7s=C0=C9=AE=D7";
+$lang["CHANGEDFILES"] =3D "=A4w=C5=DC=B0=CA=C0=C9=AE=D7";
+$lang["DELETEDFILES"] =3D "=A4w=A7R=B0=A3=C0=C9=AE=D7";
+$lang["VIEWLOG"] =3D "=AC=DD=BE=FA=A5v=B0O=BF=FD";
+$lang["PATH"] =3D "=B8=F4=AE|";
+$lang["AUTHOR"] =3D "=A7@=AA=CC";
+$lang["AGE"] =3D "=A7=F3=B0=CA=AE=C9=B6=A1";
+$lang["LOG"] =3D "=BE=FA=A5v=B0O=BF=FD";
+$lang["CURDIR"] =3D "=A5=D8=ABe=A5=D8=BF=FD";
+$lang["TARBALL"] =3D "Tarball =AE=E6=A6=A1";
+
+$lang["PREV"] =3D "=A4W=A4@=B5=A7";
+$lang["NEXT"] =3D "=A4U=A4@=B5=A7";
+$lang["SHOWALL"] =3D "=C5=E3=A5=DC=A5=FE=B3=A1";
+
+$lang["BADCMD"] =3D "=B0=F5=A6=E6=BF=F9=BB~";
+
+$lang["POWERED"] =3D "=B1=C4=A5=CE <a href=3D\"http://websvn.tigris.org/=
\">WebSVN</a>=AC[=B3]";
+$lang["PROJECTS"] =3D "Subversion =B1M=AE=D7";
+$lang["SERVER"] =3D "Subversion Server";
+
+$lang["SEARCHLOG"] =3D "=B7j=B4M=B0O=BF=FD=A4=BA=AEe";
+$lang["CLEARLOG"] =3D "=B2M=B0=A3=A5=D8=ABe=B7j=B4M";
+$lang["MORERESULTS"] =3D "=A7=E4=A8=EC=A7=F3=A6h=AA=BA=B2=C5=A6X=AA=BA..=
.";
+$lang["NORESULTS"] =3D "=ACd=B8=DF=B5=B2=AAG=A8=C3=A8S=A6=B3=B2=C5=A6X=AA=
=BA=AC=F6=BF=FD";
+$lang["NOMORERESULTS"] =3D "=A8S=A6=B3=A7=F3=A6h=AC=F6=BF=FD=B2=C5=A6X=A7=
A=AA=BA=ACd=B8=DF";
+
+$lang["RSSFEEDTITLE"] =3D "WebSVN RSS feed";=20
+$lang["FILESMODIFIED"] =3D "=AD=D3=C0=C9=AE=D7=C5=DC=B0=CA";=20
+$lang["RSSFEED"] =3D "RSS feed";=20
+
+$lang["LINENO"] =3D "=A6=E6";
+$lang["BLAMEFOR"] =3D "=AA=A9=A5=BB=C4=FE=B3d=B8=EA=B0T";
+
+$lang["YEARS"] =3D "=A6~=ABe";
+$lang["MONTHS"] =3D "=A4=EB=ABe";
+$lang["WEEKS"] =3D "=B6g=ABe";
+$lang["DAYS"] =3D "=A4=E9=ABe";
+$lang["HOURS"] =3D "=A4p=AE=C9=ABe";
+$lang["MINUTES"] =3D "=A4=C0=C4=C1=ABe";
+
+$lang["GO"] =3D "=A8=EC";
+
+$lang["COMPAREPATHS"] =3D "=A4=F1=B9=EF=B8=F4=AE|";
+$lang["COMPAREREVS"] =3D "=A4=F1=B9=EF=AD=D7=ADq=AA=A9";
+$lang["PROPCHANGES"] =3D "=A7=EF=C5=DC=C4=DD=A9=CA :";
+$lang["CONVFROM"] =3D "=B3o=AD=D3=A4=F1=B9=EF=C5=E3=A5=DC=A5=B2=BB=DD=A7=
=EF=C5=DC=C2=E0=B4=AB=B8=F4=AE|";
+$lang["TO"] =3D "=A8=EC";
+$lang["REVCOMP"] =3D "=C4A=AD=CB=A4=F1=B9=EF";
+
+// The following are defined by some languages to stop unwanted line spl=
itting
+// in the template files.=20
+
+$lang["NOBR"] =3D "";
+$lang["ENDNOBR"] =3D "";
+
Added: trunk/svn.matroska.org/WebSVN/licence.txt
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/licence.txt 2005-07-11 21:06:24 UTC (re=
v 965)
+++ trunk/svn.matroska.org/WebSVN/licence.txt 2005-08-02 22:50:12 UTC (re=
v 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-130=
7 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 version=
s
+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 condition=
s
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number o=
f
+this License, you may choose any version ever published by the Free Soft=
ware
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the autho=
r
+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 an=
d
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRAN=
TY
+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 EXPRESS=
ED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK A=
S
+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 WRIT=
ING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGE=
S,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARIS=
ING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITE=
D
+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 OTH=
ER
+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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/listing.php 2005-07-11 21:06:24 UTC (re=
v 965)
+++ trunk/svn.matroska.org/WebSVN/listing.php 2005-08-02 22:50:12 UTC (re=
v 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 =3D false)
+{
+ global $rep, $passrev, $showchanged, $config;
+ =20
+ if ($path =3D=3D "" || $path{0} !=3D "/")
+ $ppath =3D "/".$path;
+ else
+ $ppath =3D $path;
+
+ if ($returnjoin)
+ return $ppath.$file;
+
+ $isDir =3D $file{strlen($file) - 1} =3D=3D "/";
+ =20
+ if ($isDir)
+ {
+ $url =3D $config->getURL($rep, $ppath.$file, "dir");
+ return "<a href=3D\"${url}rev=3D$passrev&sc=3D$showchanged\">$=
file</a>";
+ }
+ else
+ {
+ $url =3D $config->getURL($rep, $ppath.$file, "file");
+ return "<a href=3D\"${url}rev=3D$passrev&sc=3D$showchanged\">$=
file</a>";
+ }
+}
+
+function showDirFiles($svnrep, $subs, $level, $limit, $rev, $listing, $i=
ndex)
+{
+ global $rep, $passrev, $showchanged, $config, $lang;
+
+ $path =3D "";
+
+ for ($n =3D 0; $n <=3D $level; $n++)
+ {
+ $path .=3D $subs[$n]."/";
+ }
+
+ $contents =3D $svnrep->dirContents($path, $rev);
+
+ // List each file in the current directory
+ $loop =3D 0;
+ $last_index =3D 0;
+ foreach($contents as $file)
+ {
+ $isDir =3D ($file{strlen($file) - 1} =3D=3D "/"?1:0);
+
+ if ($isDir)
+ {
+ $listing[$index]["filetype"] =3D "dir";
+
+ if ($rep->getAllowDownload())
+ {
+ $dlurl =3D $config->getURL($rep, $path.$file, "dl");=20
+ $listing[$index]["fileviewdllink"] =3D "<a href=3D\"${dlurl}=
rev=3D$passrev&isdir=3D1\">${lang["TARBALL"]}</a>";
+ }
+ else=20
+ $listing[$index]["fileviewdllink"] =3D " ";
+ }
+ else
+ {
+ if ($level !=3D $limit)
+ {
+ // List directories only, skip all files
+ continue;
+ }
+ =20
+ $listing[$index]["fileviewdllink"] =3D " ";
+ $listing[$index]["filetype"] =3D strrchr($file, ".");
+ } =20
+
+ $listing[$index]["rowparity"] =3D ($index % 2)?"1":"0";
+ =20
+ $listing[$index]["compare_box"] =3D "<input type=3D\"checkbox\" na=
me=3D\"compare[]\" value=3D\"".fileLink($path, $file, true)."@$passrev\" =
onClick=3D\"checkCB(this)\">";
+ =20
+ if (!strcmp($subs[$level+1]."/", $file) || !strcmp($subs[$level+1]=
, $file))
+ $listing[$index]["filelink"] =3D "<b>".fileLink($path, $file)."=
</b>";
+ else
+ $listing[$index]["filelink"] =3D fileLink($path, $file);
+
+ // The history command doesn't return with a trailing slash. We n=
eed to remember here if the
+ // file is a directory or not!=20
+ =20
+ $listing[$index]["isDir"] =3D $isDir;
+ =20
+ $listing[$index]["level"] =3D $level;
+ $listing[$index]["node"] =3D 0; // t-node
+ =20
+ $fileurl =3D $config->getURL($rep, $path.$file, "log");
+ $listing[$index]["fileviewloglink"] =3D "<a href=3D\"${fileurl}rev=
=3D$passrev&sc=3D$showchanged&isdir=3D$isDir\">${lang["VIEWLOG"]}=
</a>";
+ =20
+ $rssurl =3D $config->getURL($rep, $path.$file, "rss");
+ if ($rep->getHideRss())
+ {
+ $listing[$index]["rsslink"] =3D "<a href=3D\"${rssurl}rev=3D$pa=
ssrev&sc=3D$showchanged&isdir=3D$isDir\">${lang["RSSFEED"]}</a>";
+ $listing[$index]["rssanchor"] =3D "<a href=3D\"${rssurl}rev=3D$=
passrev&sc=3D$showchanged&isdir=3D$isDir\">";
+ }
+ =20
+ $index++;
+ $loop++;
+ $last_index =3D $index;
+
+ if (($level !=3D $limit) && ($isDir))
+ {
+ if (!strcmp($subs[$level + 1]."/", $file))
+ {
+ $listing =3D showDirFiles($svnrep, $subs, $level + 1, $limit=
, $rev, $listing, $index);
+ $index =3D count($listing);
+ }
+ } =20
+ }
+
+ if ($last_index !=3D 0)
+ {
+ $listing[$last_index - 1]["node"] =3D 1; // l-node
+ }
+
+ return $listing;
+}
+
+function showTreeDir($svnrep, $path, $rev, $listing)
+{
+ global $vars;
+
+ $subs =3D 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 =3D count($subs) - 2;
+
+ for ($n =3D 0; $n < $limit; $n++)
+ {
+ $vars["last_i_node"][$n] =3D 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 =3D new SVNRepository($rep->path);
+
+// Revision info to pass along chain
+$passrev =3D $rev;
+
+// Get the directory contents of the given revision, or HEAD if not defi=
ned
+$contents =3D $svnrep->dirContents($path, @$rev);
+
+$history =3D $svnrep->getHistory($path);
+
+if (!empty($history[0]))
+ $youngest =3D $history[0]["rev"];
+else
+ $youngest =3D -1;
+
+// Unless otherwise specified, we get the log details of the latest chan=
ge
+if (empty($rev))
+ $logrev =3D $youngest;
+else
+ $logrev =3D $rev;
+
+$log =3D $svnrep->getLogDetails($path, $logrev);
+
+$headlog =3D $svnrep->getLogDetails($path);
+$headrev =3D $headlog["rev"];
+
+// If we're not looking at a specific revision, get the HEAD revision nu=
mber
+// (the revision of the rest of the tree display)
+
+if (empty($rev))
+{
+ $rev =3D $headrev;
+}
+
+if ($path =3D=3D "" || $path{0} !=3D "/")
+ $ppath =3D "/".$path;
+else
+ $ppath =3D $path;
+
+$vars["repname"] =3D $rep->name;
+
+$dirurl =3D $config->getURL($rep, $path, "dir");
+$logurl =3D $config->getURL($rep, $path, "log");
+$rssurl =3D $config->getURL($rep, $path, "rss");
+$dlurl =3D $config->getURL($rep, $path, "dl");
+$compurl =3D $config->getURL($rep, "", "comp");
+
+if ($passrev !=3D 0 && $passrev !=3D $headrev && $youngest !=3D -1)
+ $vars["goyoungestlink"] =3D "<a href=3D\"${dirurl}opt=3Ddir&sc=3D=
1\">${lang["GOYOUNGEST"]}</a>";
+else
+ $vars["goyoungestlink"] =3D "";
+
+$bugtraq =3D new Bugtraq($rep, $svnrep, $ppath);
+
+$vars["action"] =3D "";
+$vars["author"] =3D $log['author'];
+$vars["date"] =3D $log['date'];
+$vars["log"] =3D nl2br($bugtraq->replaceIDs(create_anchors($log['message=
'])));
+$vars["rev"] =3D $rev;
+$vars["lastchangedrev"] =3D $logrev;
+$vars["path"] =3D $ppath;
+
+if (!$showchanged)
+{
+ $vars["showchangeslink"] =3D "<a href=3D\"${dirurl}rev=3D$passrev&=
;sc=3D1\">${lang["SHOWCHANGED"]}</a>";
+ $vars["hidechangeslink"] =3D "";
+
+ $vars["hidechanges"] =3D true;
+ $vars["showchanges"] =3D false;
+}
+else
+{
+ $vars["showchangeslink"] =3D "";
+ =20
+ $changes =3D $svnrep->getChangedFiles($rev);
+
+ $first =3D true;
+ $vars["newfilesbr"] =3D "";
+ $vars["newfiles"] =3D "";
+ foreach ($changes["added"] as $file)
+ {
+ if (!$first) $vars["newfilesbr"] .=3D "<br>";
+ $first =3D false;
+ $vars["newfilesbr"] .=3D fileLink("", $file);
+ $vars["newfiles"] .=3D " ".fileLink("", $file);
+ }
+ =20
+ $first =3D true;
+ $vars["changedfilesbr"] =3D "";
+ $vars["changedfiles"] =3D "";
+ foreach ($changes["updated"] as $file)
+ {
+ if (!$first) $vars["changedfilesbr"] .=3D "<br>";
+ $first =3D false;
+ $vars["changedfilesbr"] .=3D fileLink("", $file);
+ $vars["changedfiles"] .=3D " ".fileLink("", $file);
+ }
+
+ $first =3D true;
+ $vars["deletedfilesbr"] =3D "";
+ $vars["deletedfiles"] =3D "";
+ foreach ($changes["deleted"] as $file)
+ {
+ if (!$first) $vars["deletedfilesbr"] .=3D "<br>";
+ $first =3D false;
+ $vars["deletedfilesbr"] .=3D $file;
+ $vars["deletedfiles"] .=3D " ".$file;
+ }
+
+ $vars["hidechangeslink"] =3D "<a href=3D\"${dirurl}rev=3D$passrev&=
;sc=3D0\">${lang["HIDECHANGED"]}</a>";
+ =20
+ $vars["hidechanges"] =3D false;
+ $vars["showchanges"] =3D true;
+}
+
+createDirLinks($rep, $ppath, $passrev, $showchanged);
+$vars["curdirloglink"] =3D "<a href=3D\"${logurl}rev=3D$passrev&sc=3D=
$showchanged&isdir=3D1\">${lang["VIEWLOG"]}</a>";
+$vars["curdircomplink"] =3D "<a href=3D\"${compurl}compare%5B%5D=3D".url=
encode($history[1]["path"])."@".$history[1]["rev"]."&compare%5B%5D=3D=
".urlencode($history[0]["path"])."@".$history[0]["rev"]."\">${lang["DIFFP=
REV"]}</a>";
+if (isset($history[1]))
+ $vars["curdircomplink"] =3D "<a href=3D\"${compurl}compare%5B%5D=3D".ur=
lencode($history[1]["path"])."@".$history[1]["rev"]."&compare%5B%5D=3D=
".urlencode($history[0]["path"])."@".$history[0]["rev"]."\">${lang["DIFFP=
REV"]}</a>";
+else
+ $vars["curdircomplink"] =3D "";
+=20
+if ($rep->getHideRss())
+{
+ $vars["curdirrsslink"] =3D "<a href=3D\"${rssurl}rev=3D$passrev&s=
c=3D$showchanged&isdir=3D1\">${lang["RSSFEED"]}</a>";
+ $vars["curdirrssanchor"] =3D "<a href=3D\"${rssurl}rev=3D$passrev&=
;sc=3D$showchanged&isdir=3D1\">";
+}
+
+if ($rep->getAllowDownload())
+ $vars["curdirdllink"] =3D "<a href=3D\"${dlurl}rev=3D$passrev&isd=
ir=3D1\">${lang["TARBALL"]}</a>";
+
+$url =3D $config->getURL($rep, "", "comp");
+$vars["compare_form"] =3D "<form action=3D\"$url\" method=3D\"post\" nam=
e=3D\"compareform\">";
+$vars["compare_submit"] =3D "<input name=3D\"comparesubmit\" type=3D\"su=
bmit\" value=3D\"${lang["COMPAREPATHS"]}\">";
+$vars["compare_endform"] =3D "<input type=3D\"hidden\" name=3D\"op\" val=
ue=3D\"comp\"><input type=3D\"hidden\" name=3D\"sc\" value=3D\"$showchang=
ed\"></form>"; =20
+
+$listing =3D array();
+$listing =3D showTreeDir($svnrep, $path, $rev, $listing);
+
+$vars["version"] =3D $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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/log.php 2005-07-11 21:06:24 UTC (rev 96=
5)
+++ trunk/svn.matroska.org/WebSVN/log.php 2005-08-02 22:50:12 UTC (rev 96=
6)
@@ -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 =3D (int)@$_REQUEST["page"];
+$all =3D (@$_REQUEST["all"] =3D=3D 1)?1:0;
+$isDir =3D (@$_REQUEST["isdir"] =3D=3D 1)?1:0;
+$dosearch =3D (@$_REQUEST["logsearch"] =3D=3D 1)?1:0;
+$search =3D trim(@$_REQUEST["search"]);
+$words =3D explode(" ", $search);
+
+$fromRev =3D (int)@$_REQUEST["fr"];
+
+// Max number of results to find at a time
+$numSearchResults =3D 10;
+
+if ($search =3D=3D "")
+ $dosearch =3D false; =20
+
+// 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)
+{=20
+ return strtr($string,
+ "=C0=C1=C2=C3=C4=C5=E0=E1=E2=E3=E4=E5=D2=D3=D4=D5=D6=D8=F2=
=F3=F4=F5=F6=F8=C8=C9=CA=CB=E8=E9=EA=EB=C7=E7=CC=CD=CE=CF=EC=ED=EE=EF=D9=DA=
=DB=DC=F9=FA=FB=FC=FF=D1=F1",
+ "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn")=
;=20
+}=20
+
+// Normalise the search words
+foreach ($words as $index =3D> $word)
+{
+ $words[$index] =3D strtolower(removeAccents($word));
+ =20
+ // Remove empty string introduced by multiple spaces
+ if ($words[$index] =3D=3D "")
+ unset($words[$index]);
+}
+
+if (empty($page)) $page =3D 1;
+
+// If searching, display all the results
+if ($dosearch) $all =3D true;
+
+$maxperpage =3D 20;
+
+// Make sure that we have a repository
+if (!isset($rep))
+{
+ echo $lang["NOREP"];
+ exit;
+}
+
+$svnrep =3D new SVNRepository($rep->path);
+
+$passrev =3D $rev;
+
+// If there's no revision info, go to the lastest revision for this path
+$history =3D $svnrep->getHistory($path);
+$youngest =3D $history[0]["rev"];
+
+if (empty($rev))
+ $rev =3D $youngest;
+
+if ($path =3D=3D "" || $path{0} !=3D "/")
+ $ppath =3D "/".$path;
+else
+ $ppath =3D $path;
+
+$vars["action"] =3D $lang["LOG"];
+$vars["repname"] =3D $rep->name;
+$vars["rev"] =3D $rev;
+$vars["path"] =3D $ppath;
+
+createDirLinks($rep, $ppath, $passrev, $showchanged);
+
+$logurl =3D $config->getURL($rep, $path, "log");
+
+if ($rev !=3D $youngest)
+ $vars["goyoungestlink"] =3D "<a href=3D\"${logurl}sc=3D1\">${lang["GO=
YOUNGEST"]}</a>";
+else
+ $vars["goyoungestlink"] =3D "";
+
+// We get the bugtraq variable just once based on the HEAD
+$bugtraq =3D new Bugtraq($rep, $svnrep, $ppath);
+
+$history =3D $svnrep->getHistory($path, $rev);
+
+// Get the number of separate revisions
+$revisions =3D count($history);
+
+if ($all)
+{
+ $firstrevindex =3D 0;
+ $lastrevindex =3D $revisions - 1;
+ $pages =3D 1;
+}
+else
+{
+ // Calculate the number of pages
+ $pages =3D floor($revisions / $maxperpage);
+ if (($revisions % $maxperpage) > 0) $pages++;
+ =20
+ if ($page > $pages) $page =3D $pages;
+ =20
+ // Word out where to start and stop
+ $firstrevindex =3D ($page - 1) * $maxperpage;
+ $lastrevindex =3D $firstrevindex + $maxperpage - 1;
+ if ($lastrevindex > $revisions - 1) $lastrevindex =3D $revisions - 1;
+}
+
+$vars["logsearch_moreresultslink"] =3D "";
+
+$row =3D 0;
+$index =3D 0;
+$listing =3D array();
+$found =3D false;
+
+for ($n =3D $firstrevindex; $n <=3D $lastrevindex; $n++)
+{
+ $r =3D $history[$n];
+ =20
+ // Assume a good match
+ $match =3D true;
+ =20
+ $log =3D $svnrep->getLogDetails($path, $r["rev"]);
+ =20
+ // 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. =20
+ =20
+ if (version_compare(phpversion(), "4.1.0", "<"))
+ $msg =3D html_entity_decode($log["message"]);
+ else
+ $msg =3D html_entity_decode($log["message"], ENT_COMPAT, $co=
nfig->outputEnc);
+ =20
+ // Make sure that each word in the search in also in the log
+ foreach($words as $word)
+ {
+ if (strpos(strtolower(removeAccents($msg)), $word) =3D=3D=3D=
false)
+ {
+ $match =3D false;
+ break;
+ }
+ }
+ =20
+ if ($match)
+ {
+ $numSearchResults--;
+ $found =3D true;
+ }
+ }
+ else
+ $match =3D false;
+ }
+ =20
+ if ($match)
+ {
+ // Add the trailing slash if we need to (svnlook history doesn't r=
eturn trailing slashes!)
+ $rpath =3D $r["path"];
+ if ($isDir && $rpath{strlen($rpath) - 1} !=3D "/")
+ $rpath .=3D "/";
+ =20
+ // Find the parent path (or the whole path if it's already a direc=
tory)
+ $pos =3D strrpos($rpath, "/");
+ $parent =3D substr($rpath, 0, $pos + 1);
+ =20
+ $url =3D $config->getURL($rep, $parent, "dir");
+ $listing[$index]["compare_box"] =3D "<input type=3D\"checkbox\" na=
me=3D\"compare[]\" value=3D\"$parent@${r["rev"]}\" onClick=3D\"checkCB(th=
is)\">";
+ $listing[$index]["revlink"] =3D "<a href=3D\"${url}rev=3D${r["rev"=
]}&sc=3D1\">${r["rev"]}</a>";
+ =20
+ if ($isDir)
+ {
+ $url =3D $config->getURL($rep, $rpath, "dir");=20
+ $listing[$index]["revpathlink"] =3D "<a href=3D\"${url}rev=3D${=
r["rev"]}&sc=3D$showchanged\">$rpath</a>";
+ }
+ else
+ {
+ $url =3D $config->getURL($rep, $rpath, "file");=20
+ $listing[$index]["revpathlink"] =3D "<a href=3D\"${url}rev=3D${=
r["rev"]}&sc=3D$showchanged\">$rpath</a>";
+ }
+ =20
+ $listing[$index]["revauthor"] =3D $log["author"];
+ $listing[$index]["revage"] =3D $log["age"];
+ $listing[$index]["revlog"] =3D nl2br($bugtraq->replaceIDs(create_a=
nchors($log["message"])));
+ $listing[$index]["rowparity"] =3D "$row";
+ =20
+ $row =3D 1 - $row;
+ $index++;
+ }
+ =20
+ // If we've reached the search limit, stop here...
+ if (!$numSearchResults)
+ {
+ $url =3D $config->getURL($rep, $path, "log");
+ $vars["logsearch_moreresultslink"] =3D "<a href=3D\"${url}rev=3D$r=
evamp;&sc=3D$showchanged&isdir=3D$isDir&logsearch=3D1&search=3D$searc=
h&fr=3D${r["rev"]}\">${lang["MORERESULTS"]}</a>";
+ break;
+ }
+}
+
+$vars["logsearch_resultsfound"] =3D true;
+
+if ($dosearch && !$found)
+{
+ if ($fromRev =3D=3D 0)
+ {
+ $vars["logsearch_nomatches"] =3D true;
+ $vars["logsearch_resultsfound"] =3D false;
+ }
+ else
+ $vars["logsearch_nomorematches"] =3D true;
+}
+else if ($dosearch && $numSearchResults > 0)
+{
+ $vars["logsearch_nomorematches"] =3D true;
+}
+
+// Work out the paging options
+
+$vars["pagelinks"] =3D "";
+$vars["showalllink"] =3D "";
+
+if ($pages > 1)
+{
+ $prev =3D $page - 1;
+ $next =3D $page + 1;
+ echo "<p><center>";
+ =20
+ if ($page > 1) $vars["pagelinks"] .=3D "<a href=3D\"${logurl}rev=3D$r=
ev&sc=3D$showchanged&page=3D$prev\">< ${lang["PREV"]}</a> ";
+ for ($p =3D 1; $p <=3D $pages; $p++)
+ {
+ if ($p !=3D $page)
+ $vars["pagelinks"].=3D "<a href=3D\"${logurl}rev=3D$rev&sc=3D=
$showchanged&page=3D$p\">$p</a> ";=20
+ else
+ $vars["pagelinks"] .=3D "<b>$p </b>";
+ }
+ if ($page < $pages) $vars["pagelinks"] .=3D" <a href=3D\"${logurl}rev=
=3D$rev&sc=3D$showchanged&page=3D$next\">${lang["NEXT"]} ></=
a>"; =20
+ =20
+ $vars["showalllink"] =3D "<a href=3D\"${logurl}rev=3D$rev&sc=3D$s=
howchanged&all=3D1\">${lang["SHOWALL"]}</a>";
+ echo "</center>";
+}
+
+// Create the project change combo box
+=20
+$url =3D $config->getURL($rep, $path, "log");
+$vars["logsearch_form"] =3D "<form action=3D\"$url\" method=3D\"post\" n=
ame=3D\"logsearchform\">";
+
+$vars["logsearch_inputbox"] =3D "<input name=3D\"search\" value=3D\"$sea=
rch\">";
+
+$vars["logsearch_submit"] =3D "<input type=3D\"submit\" value=3D\"${lang=
["GO"]}\">";
+$vars["logsearch_endform"] =3D "<input type=3D\"hidden\" name=3D\"logsea=
rch\" value=3D\"1\">".
+ "<input type=3D\"hidden\" name=3D\"op\" val=
ue=3D\"log\">".
+ "<input type=3D\"hidden\" name=3D\"rev\" va=
lue=3D\"$rev\">".
+ "<input type=3D\"hidden\" name=3D\"sc\" val=
ue=3D\"$showchanged\">".
+ "<input type=3D\"hidden\" name=3D\"isdir\" =
value=3D\"$isDir\">".
+ "</form>"; =20
+
+if ($search !=3D "")
+{
+ $url =3D $config->getURL($rep, $path, "log");
+ $vars["logsearch_clearloglink"] =3D "<a href=3D\"${url}rev=3D$rev&=
;sc=3D$showchanged&isdir=3D$isDir\">${lang["CLEARLOG"]}</a>";
+}
+else
+ $vars["logsearch_clearloglink"] =3D "";
+
+$url =3D $config->getURL($rep, "", "comp");
+$vars["compare_form"] =3D "<form action=3D\"$url\" method=3D\"post\" nam=
e=3D\"compareform\">";
+$vars["compare_submit"] =3D "<input name=3D\"comparesubmit\" type=3D\"su=
bmit\" value=3D\"${lang["COMPAREREVS"]}\">";
+$vars["compare_endform"] =3D "<input type=3D\"hidden\" name=3D\"op\" val=
ue=3D\"comp\"><input type=3D\"hidden\" name=3D\"sc\" value=3D\"$showchang=
ed\"></form>"; =20
+
+$vars["version"] =3D $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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/rss.php 2005-07-11 21:06:24 UTC (rev 96=
5)
+++ trunk/svn.matroska.org/WebSVN/rss.php 2005-08-02 22:50:12 UTC (rev 96=
6)
@@ -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=FCbbe 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 =3D (@$_REQUEST["isdir"] =3D=3D 1)?1:0;
+
+$maxmessages =3D 20;
+
+// Find the base URL name
+if ($config->multiViews)
+{
+ $baseurl =3D "";
+}
+else
+{
+ $baseurl =3D dirname($_SERVER["PHP_SELF"]);
+ if ($baseurl !=3D "" && $baseurl !=3D DIRECTORY_SEPARATOR && $baseurl=
!=3D "\\" && $baseurl !=3D "/" )
+ $baseurl .=3D "/";
+ else
+ $baseurl =3D "/";
+}
+
+$svnrep =3D new SVNRepository($rep->path);
+
+if ($path =3D=3D "" || $path{0} !=3D "/")
+ $ppath =3D "/".$path;
+else
+ $ppath =3D $path;
+
+$url =3D $config->getURL($rep, $path, "log");
+$listurl =3D $config->getURL($rep, $path, "dir");
+
+$history =3D $svnrep->getHistory($path, $rev);
+
+$cachename =3D strtr($svnrep->repPath, ":/\\", "___");
+$cachename =3D $locwebsvnreal.DIRECTORY_SEPARATOR."cache".DIRECTORY_SEPA=
RATOR.$cachename."_rssfeed";
+
+$rss =3D new UniversalFeedCreator();
+$rss->useCached($cachename);
+$rss->title =3D $rep->name;
+$rss->description =3D "${lang["RSSFEEDTITLE"]} - $repname";
+$rss->link =3D getFullURL($baseurl.$listurl);
+$rss->syndicationURL =3D $rss->link;
+
+//$divbox =3D "<div>";
+//$divfont =3D "<span>";
+
+if ($maxmessages > count($history))
+ $maxmessages =3D count($history);
+
+for ($n =3D 0; $n < $maxmessages; $n++)
+{
+ $r =3D $history[$n];
+ =20
+ $log =3D $svnrep->getLogDetails($path, $r["rev"]);
+ $changes =3D $svnrep->getChangedFiles($r["rev"]);
+ $files =3D count($changes["added"]) + count($changes["deleted"]) + co=
unt($changes["updated"]);
+
+ // Add the trailing slash if we need to (svnlook history doesn't retu=
rn trailing slashes!)
+ $rpath =3D $r["path"];
+ if ($isDir && $rpath{strlen($rpath) - 1} !=3D "/")
+ $rpath .=3D "/";
+ =20
+ // Find the parent path (or the whole path if it's already a director=
y)
+ $pos =3D strrpos($rpath, "/");
+ $parent =3D substr($rpath, 0, $pos + 1);
+=20
+ $url =3D $config->getURL($rep, $parent, "dir");
+ =20
+ $desc =3D $log["message"];
+ $item =3D new FeedItem();
+ =20
+ // For the title, we show the first 10 words of the description
+ $pos =3D 0;
+ $len =3D strlen($desc);
+ for ($i =3D 0; $i < 10; $i++)
+ {
+ if ($pos >=3D $len) break;
+ =20
+ $pos =3D strpos($desc, " ", $pos);
+ =20
+ if ($pos =3D=3D=3D FALSE) break;
+ $pos++;
+ }
+ =20
+ if ($pos !=3D=3D FALSE)
+ {
+ $sdesc =3D substr($desc, 0, $pos) . "...";
+ }
+ else
+ {
+ $sdesc =3D $desc;
+ }
+ =20
+ if ($desc =3D=3D "") $sdesc =3D "${lang["REV"]} ${r["rev"]}";
+ =20
+ $item->title =3D "$sdesc";
+ $item->link =3D getFullURL($baseurl."${url}rev=3D${r["rev"]}&sc=3D=
$showchanged");
+ $item->description =3D "<div><strong>${lang["REV"]} ${r["rev"]} - ${l=
og["author"]}</strong> ($files ${lang["FILESMODIFIED"]})</div><div>".nl2b=
r(create_anchors($desc))."</div>";
+ $item->date =3D $log["committime"];
+ $item->author =3D $log["author"];
+ =20
+ $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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/blame.tmpl 2005-07-1=
1 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/blame.tmpl 2005-08-0=
2 22:50:12 UTC (rev 966)
@@ -0,0 +1,23 @@
+<div align=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+[websvn:curdirlinks] - <h2> [lang:BLAMEFOR] [websvn:rev]</h2>
+<p>
+
+<table cellpadding=3D"2px" cellspacing=3D"0" width=3D"100%">
+ <tr>
+ <th class=3D"HdrClmn"><b>[lang:LINENO]</b></th>
+ <th class=3D"HdrClmn"><b>[lang:REV]</b></th>
+ <th class=3D"HdrClmn"><b>[lang:AUTHOR]</b></th>
+ <th class=3D"HdrClmnEnd"><b>[lang:LINE]</b></th>
+ </tr>
+
+ [websvn-startlisting]
+ <tr>
+ <td class=3D"CatClmn0" style=3D"border-right: 1px solid black" =
valign=3D"top">[websvn:lineno]</td>
+ <td class=3D"CatClmn0" style=3D"border-right: 1px solid black" =
valign=3D"top">[websvn:revision]</td>
+ <td class=3D"CatClmn0" style=3D"border-right: 1px solid black" =
valign=3D"top">[websvn:author]</td>
+ <td style=3D"border-right: 1px solid black" valign=3D"top">[web=
svn:line]</td>
+ </tr>
+ [websvn-endlisting]
+
+</table>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/compare.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+<p>
+[websvn:compare_form]
+<table>
+ <tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1input] [lan=
g: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=3D"newpath">
+ <b>[websvn:newpath]</b><br>
+ [websvn-endtest]
+
+ [websvn-test:info]
+ [websvn:info]<br>
+ [websvn-endtest]
+
+ [websvn-test:difflines]
+ <div class=3D"difflines">
+ <p>
+ [websvn:difflines]<br>
+ <table class=3D"diff" cellspacing=3D"0">
+ [websvn-endtest]
+ =20
+ [websvn-test:diffclass]
+ <tr><td class=3D"[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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][w=
ebsvn: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>
+ =20
+ <p><center>
+ [websvn:showcompactlink]
+ [websvn:showalllink]
+ </center>
+ <p>
+ <table class=3D"diff" width=3D"100%" cellspacing=3D"0">
+ <tr>
+ <th class=3D"HdrClmnEnd" style=3D"padding-bottom: 5px" width=3D=
"50%" align=3D"left"><b>[lang:REV] [websvn:rev2]</b></th>
+ <th rowspan=3D100000 width=3D"5"></th>
+ <th class=3D"HdrClmnEnd" style=3D"padding-bottom: 5px" width=3D=
"50%" align=3D"left"><b>[lang:REV] [websvn:rev1]</b></th>
+ </tr>
+ =20
+ [websvn-startlisting]
+ [websvn-test:rev1lineno]
+ <tr>
+ <td width=3D"50%" style=3D"padding: 3px 0 3px 0" align=3D=
"center" class=3D"row1"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
+ <td width=3D"50%" style=3D"padding: 3px 0 3px 0" align=3D=
"center" class=3D"row1"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
+ <tr>
+ [websvn-else]
+ <tr><td class=3D"[websvn:rev1diffclass]">[websvn:rev1line]</=
td>
+ <td class=3D"[websvn:rev2diffclass]">[websvn:rev2line]</td><=
/tr>
+ [websvn-endtest]
+ [websvn-endlisting]
+ =20
+ </table>
+[websvn-endtest]
+
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/directory.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn:projects_submit][websvn:projects_endform]</div>
+<h1>[websvn:repname]</h1>
+
+<table border=3D0 cellpadding=3D2 cellspacing=3D0>
+<tr><th colspan=3D2 class=3D"HdrClmnEnd">[lang:REVINFO]</th></tr>
+<tr><td class=3D"CatClmn0" valign=3D"top">[lang:CURDIR]:</td><td class=3D=
"row0">[websvn:path]</td></tr>
+<tr><td class=3D"CatClmn1">[lang:REV]:</td><td class=3D"row1">[websvn:re=
v]
+[websvn-test:goyoungestlink]
+ - [websvn:goyoungestlink]
+[websvn-endtest]
+</td></tr>
+<tr><td class=3D"CatClmn0" valign=3D"top">[lang:AUTHOR]:</td><td class=3D=
"row0">[websvn:author]</td></tr>
+<tr><td class=3D"CatClmn1" valign=3D"top">[lang:LASTMOD]:</td><td class=3D=
"row1">[lang:REV] [websvn:lastchangedrev] - [websvn:date]</td></tr>
+<tr><td class=3D"CatClmn0" valign=3D"top">[lang:LOGMSG]:</td><td class=3D=
"row0">[websvn:log]</td></tr>
+[websvn-test:hidechanges]
+ <tr><td class=3D"CatClmn1" valign=3D"top"> </td><td class=3D"row=
1">([websvn:showchangeslink])</td></tr>
+[websvn-else]
+[websvn:showchangeslink]
+ <tr><td class=3D"CatClmn1" valign=3D"top"> </td><td class=3D"row=
1">([websvn:hidechangeslink])</td></tr>
+ [websvn-test:changedfilesbr]
+ <tr><td class=3D"CatClmn0" valign=3D"top">[lang:CHANGEDFILES]:</td><t=
d class=3D"row0">[websvn:changedfilesbr]</td></tr>
+ [websvn-endtest]
+ [websvn-test:newfilesbr]
+ [websvn-test:changedfilesbr]
+ <tr><td class=3D"CatClmn1" valign=3D"top">[lang:NEWFILES]:</td>=
<td class=3D"row1">[websvn:newfilesbr]</td></tr>
+ [websvn-else]
+ <tr><td class=3D"CatClmn0" valign=3D"top">[lang:NEWFILES]:</td>=
<td class=3D"row0">[websvn:newfilesbr]</td></tr>
+ [websvn-endtest]
+ [websvn-endtest]
+ [websvn-test:deletedfilesbr]
+ [websvn-test:changedfilesbr]
+ [websvn-test:newfilesbr]
+ <tr><td class=3D"CatClmn0" valign=3D"top">[lang:DELETEDFILES=
]:</td><td class=3D"row0">[websvn:deletedfilesbr]</td></tr>
+ [websvn-else]
+ <tr><td class=3D"CatClmn1" valign=3D"top">[lang:DELETEDFILES=
]:</td><td class=3D"row1">[websvn:deletedfilesbr]</td></tr>
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:newfilesbr]
+ <tr><td class=3D"CatClmn1" valign=3D"top">[lang:DELETEDFILES=
]:</td><td class=3D"row1">[websvn:deletedfilesbr]</td></tr>
+ [websvn-else]
+ <tr><td class=3D"CatClmn0" valign=3D"top">[lang:DELETEDFILES=
]:</td><td class=3D"row0">[websvn:deletedfilesbr]</td></tr>
+ [websvn-endtest]
+ [websvn-endtest]
+ [websvn-endtest] =20
+[websvn-endtest]
+</table>
+
+[websvn-defineicons]
+dir=3D<img align=3D"middle" valign=3D"center" src=3D"[websvn:locwebsvnht=
tp]/templates/BlueGrey/folder.png" alt=3D"[FOLDER]">
+*=3D<img align=3D"middle" src=3D"[websvn:locwebsvnhttp]/templates/BlueGr=
ey/file.png" alt=3D"[FILE]">
+.c=3D<img align=3D"middle" src=3D"[websvn:locwebsvnhttp]/templates/BlueG=
rey/filec.png" alt=3D"[C-FILE]">
+.h=3D<img align=3D"middle" src=3D"[websvn:locwebsvnhttp]/templates/BlueG=
rey/fileh.png" alt=3D"[H-FILE]">
+.s=3D<img align=3D"middle" src=3D"[websvn:locwebsvnhttp]/templates/BlueG=
rey/files.png" alt=3D"[S-FILE]">
+
+i-node=3D<img align=3D"middle" border=3D"0" width=3D"24" height=3D"26" s=
rc=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/i-node.png" alt=3D"[NODE]=
">
+t-node=3D<img align=3D"middle" border=3D"0" width=3D"24" height=3D"26" s=
rc=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/t-node.png" alt=3D"[NODE]=
">
+l-node=3D<img align=3D"middle" border=3D"0" width=3D"24" height=3D"26" s=
rc=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/l-node.png" alt=3D"[NODE]=
">
+e-node=3D<img align=3D"middle" border=3D"0" width=3D"24" height=3D"26" s=
rc=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/e-node.png" alt=3D"[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=3D"border: 0;" src=3D"[websvn:locw=
ebsvnhttp]/templates/BlueGrey/xml.gif" width=3D"36" height=3D"14" alt=3D"=
[lang:RSSFEED]"></a>
+[websvn-endtest]
+<p>
+[websvn:compare_form]
+ <table cellpadding=3D"0px" cellspacing=3D"0px" width=3D"100%">
+ <tr>
+ <th class=3D"HdrClmn" width=3D"100%"><b>[lang:PATH]</b></th>
+ [websvn-test:allowdownload]
+ [websvn-test:curdirrsslink]
+ <th class=3D"HdrClmn"><b>[lang:NOBR][lang:LOG][lang:ENDNO=
BR]</b></th>
+ <th class=3D"HdrClmn"><b>[lang:TARBALL]</b></th>
+ <th class=3D"HdrClmnEnd"><b>[lang:RSSFEED]</b></th>
+ [websvn-else]
+ <th class=3D"HdrClmn"><b>[lang:NOBR][lang:LOG][lang:ENDNO=
BR]</b></th>
+ <th class=3D"HdrClmnEnd"><b>[lang:TARBALL]</b></th>
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:curdirrsslink]
+ <th class=3D"HdrClmn"><b>[lang:LOG]</b></th>
+ <th class=3D"HdrClmnEnd"><b>[lang:RSSFEED]</b></th>
+ [websvn-else]
+ <th class=3D"HdrClmnEnd"><b>[lang:NOBR][lang:LOG][lang:EN=
DNOBR]</b></th>
+ [websvn-endtest]
+ [websvn-endtest]
+ </tr>
+ [websvn-startlisting]
+ <tr>
+ <td valign=3D"middle" style=3D"border-right: 1px solid black; p=
adding: 0 2px 0 2px;" class=3D"row[websvn:rowparity]">
+ [websvn:compare_box]
+ [websvn-treenode]
+ [websvn-icon]
+ [websvn:filelink]
+ </td>
+ [websvn-test:allowdownload]
+ [websvn-test:curdirrsslink]
+ <td style=3D"border-right: 1px solid black; padding: 0 2p=
x 0 2px;" class=3D"row[websvn:rowparity]">[lang:NOBR][websvn:fileviewlogl=
ink][lang:ENDNOBR]</td>
+ <td style=3D"border-right: 1px solid black; padding: 0 2p=
x 0 2px;" class=3D"row[websvn:rowparity]">[websvn:fileviewdllink]</td>
+ <td style=3D"padding: 0 2px 0 2px;" class=3D"row[websvn:r=
owparity]">[websvn:rssanchor]<img style=3D"border: 0;" src=3D"[websvn:loc=
websvnhttp]/templates/BlueGrey/xml.gif" width=3D"36" height=3D"14" alt=3D=
"[lang:RSSFEED]"></a></td>
+ [websvn-else]
+ <td style=3D"border-right: 1px solid black; padding: 0 2p=
x 0 2px;" class=3D"row[websvn:rowparity]">[lang:NOBR][websvn:fileviewlogl=
ink][lang:ENDNOBR]</td>
+ <td style=3D"padding: 0 2px 0 2px;" class=3D"row[websvn:r=
owparity]">[websvn:fileviewdllink]</td>
+ [websvn-endtest]
+ [websvn-else]
+ [websvn-test:curdirrsslink]
+ <td style=3D"border-right: 1px solid black; padding: 0 2p=
x 0 2px;" class=3D"row[websvn:rowparity]">[lang:NOBR][websvn:fileviewlogl=
ink][lang:ENDNOBR]</td>
+ <td style=3D"padding: 0 2px 0 2px;" class=3D"row[websvn:r=
owparity]">[websvn:rssanchor]<img style=3D"border: 0;" src=3D"[websvn:loc=
websvnhttp]/templates/BlueGrey/xml.gif" width=3D"36" height=3D"14" alt=3D=
"[lang:RSSFEED]"></a></td>
+ [websvn-else]
+ <td style=3D"padding: 0 2px 0 2px;" class=3D"row[websvn:r=
owparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
+ [websvn-endtest]
+ [websvn-endtest] =20
+ </tr>
+ [websvn-endlisting]
+ </table>
+<p>
+[websvn:compare_submit] =20
+[websvn:compare_endform]
+<hr>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/e-node.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/e-n=
ode.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fil=
e.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/file.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn: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=3D"100%" border=3D0><tr><td class=3D"row0">
+[websvn-getlisting]
+</td></tr></table>
+<hr>
+
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/filec.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fil=
ec.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fileh.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fil=
eh.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/files.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fil=
es.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/folder.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/fol=
der.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/footer.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"-1"><i><b>[lang:POWERED] v[websvn:version=
]</b></i></font></center>
+ </body>
+</html>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/header.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"content-type" content=3D"text/html;charset=3D[webs=
vn:charset]">
+ <link href=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/styles.css" =
rel=3D"stylesheet" media=3D"screen">
+ <!--[if gte IE 5.5000]>
+ <script type=3D"text/javascript" src=3D"[websvn:locwebsvnhttp]/tem=
plates/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] [web=
svn: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 =3D 0
+ first =3D null
+ f =3D chBox.form
+ for (i =3D 0 ; i < f.elements.length ; i++)
+ if (f.elements[i].type =3D=3D 'checkbox' && f.elements[i].ch=
ecked)
+ {
+ if (first =3D=3D null && f.elements[i] !=3D chBox)
+ first =3D f.elements[i]
+ count +=3D 1
+ }
+ =20
+ if (count > 2)=20
+ {
+ first.checked =3D false
+ count -=3D 1
+ }
+ }
+ </script>
+
+ </head>
+ <body>
+
+ <div style=3D"text-align: center">
+ <a href=3D"http://subversion.tigris.org/"><img style=3D"border: =
0; width: 468px; height: 64px" src=3D"[websvn:locwebsvnhttp]/templates/Bl=
ueGrey/subversion.png" alt=3D"Subversion" /></a>
+ </div>
+ =20
+ <hr>
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/i-node.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/i-n=
ode.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/index.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/index.tmpl 2005-07-1=
1 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/index.tmpl 2005-08-0=
2 22:50:12 UTC (rev 966)
@@ -0,0 +1,8 @@
+<p>
+<table align=3D"center" border=3D0 cellspacing=3D0 cellpadding=3D0 width=
=3D"50%">
+ <tr><th align=3D"left" colspan=3D2 class=3D"HdrClmnEnd">[lang:PROJECT=
S]</th></tr>
+ [websvn-startlisting]
+ <tr><td class=3D"row[websvn:rowparity]"><img align=3D"middle" src=3D=
"[websvn:locwebsvnhttp]/templates/BlueGrey/repo.png" alt=3D"[FOLDER]"> [w=
ebsvn:projlink]</td></tr>
+ [websvn-endlisting]
+</table>
+<hr>
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/l-node.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/l-n=
ode.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/log.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn: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][web=
svn:logsearch_submit]
+[websvn-test:logsearch_clearloglink]
+<p><font size=3D"-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=3D"2px" cellspacing=3D"0" width=3D"100%">
+ <tr>
+ <th class=3D"HdrClmn">[lang:REV]</th>
+ <th class=3D"HdrClmn">[lang:PATH]</th>
+ <th class=3D"HdrClmn">[lang:AUTHOR]</th>
+ <th class=3D"HdrClmn">[lang:AGE]</th>
+ <th class=3D"HdrClmnEnd">[lang:LOGMSG]</th>
+ </tr>
+ =20
+ [websvn-startlisting]
+ <tr>
+ <td style=3D"border-right: 1px solid black" valign=3D"top" c=
lass=3D"row[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]=
</nobr></td>
+ <td style=3D"border-right: 1px solid black" valign=3D"top" c=
lass=3D"row[websvn:rowparity]">[websvn:revpathlink]</td>
+ <td style=3D"border-right: 1px solid black" valign=3D"top" c=
lass=3D"row[websvn:rowparity]">[websvn:revauthor]</td>
+ <td style=3D"border-right: 1px solid black" valign=3D"top" c=
lass=3D"row[websvn:rowparity]">[websvn:revage]</td>
+ <td valign=3D"top" class=3D"row[websvn:rowparity]">[websvn:r=
evlog]</td>
+ </tr>
+ [websvn-endlisting]
+ </table>
+ <p>
+ [websvn:compare_submit] =20
+ [websvn:compare_endform]
+[websvn-endtest]
+
+[websvn-test:logsearch_nomorematches]
+ <p><center>[lang:NOMORERESULTS]</center>
+[websvn-endtest]
+ =20
+<p><center>[websvn:logsearch_moreresultslink]</center>
+
+<hr>
+<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center>
+ =20
\ No newline at end of file
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/png.js
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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.
+=20
+function correctPNG()
+{
+ for(var i =3D 0; i < document.images.length; i++)
+ {
+ var img =3D document.images[i]
+ var imgName =3D img.src.toUpperCase()
+ if (imgName.substring(imgName.length-3, imgName.length) =3D=3D "PN=
G")
+ {
+ var imgID =3D (img.id) ? "id=3D'" + img.id + "' " : ""
+ var imgClass =3D (img.className) ? "class=3D'" + img.className =
+ "' " : ""
+ var imgTitle =3D (img.title) ? "title=3D'" + img.title + "' " :=
"title=3D'" + img.alt + "' "
+ var imgStyle =3D "display:inline-block;" + img.style.cssText=20
+ var imgAttribs =3D img.attributes;
+ for (var j=3D0; j<imgAttribs.length; j++)
+ {
+ var imgAttrib =3D imgAttribs[j];
+ if (imgAttrib.nodeName =3D=3D "align")
+ { =20
+ if (imgAttrib.nodeValue =3D=3D "left") imgStyle =3D "floa=
t:left;" + imgStyle
+ if (imgAttrib.nodeValue =3D=3D "right") imgStyle =3D "flo=
at:right;" + imgStyle
+ break
+ }
+ }
+ var strNewHTML =3D "<span " + imgID + imgClass + imgTitle
+ strNewHTML +=3D " style=3D\"" + "width:" + img.width + "px; hei=
ght:" + img.height + "px;" + imgStyle + ";"
+ strNewHTML +=3D "filter:progid:DXImageTransform.Microsoft.Alpha=
ImageLoader"
+ strNewHTML +=3D "(src=3D\'" + img.src + "\', sizingMethod=3D'sc=
ale');\"></span>"=20
+ img.outerHTML =3D strNewHTML
+ i =3D i-1
+ }
+ }
+}
+
+var supported =3D /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navi=
gator.platform =3D=3D "Win32";
+
+if (supported)
+ window.attachEvent("onload", correctPNG);
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/repo.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/rep=
o.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/styles.css
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/BlueGrey/styles.css 2005-07-1=
1 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/BlueGrey/styles.css 2005-08-0=
2 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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/sub=
version.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/t-node.png
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)
Property changes on: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/t-n=
ode.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/svn.matroska.org/WebSVN/templates/BlueGrey/xml.gif
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/Standard/blame.tmpl 2005-07-1=
1 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/blame.tmpl 2005-08-0=
2 22:50:12 UTC (rev 966)
@@ -0,0 +1,24 @@
+<div align=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+[websvn:curdirlinks] - <h2> [lang:BLAMEFOR] [websvn:rev]</h2>
+<p>
+
+<table border=3D"1" class=3D"blame" width=3D"100%">
+ <tr>
+ <th style=3D"padding-bottom: 5px" align=3D"left"><b>[lang:LINENO]<=
/b></th>
+ <th style=3D"padding-bottom: 5px" align=3D"left"><b>[lang:REV]</b>=
</th>
+ <th style=3D"padding-bottom: 5px" align=3D"left"><b>[lang:AUTHOR]<=
/b></th>
+ <th style=3D"padding-bottom: 5px" align=3D"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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn:projects_submit][websvn:projects_endform]</div>
+<h2>[websvn:repname]</h2>
+<p>
+<center>
+ [websvn:compare_form]
+ <table>
+ <tr><td>
+ <table class=3D"outlined">
+ <tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1i=
nput] [lang:REV] [websvn:compare_rev1input]</td></tr>
+ <tr><td>[lang:WITHPATH] </td><td>[websvn:compare_path2i=
nput] [lang:REV] [websvn:compare_rev2input]</td></tr>
+ </table>
+ </td><tr>
+ <tr><td align=3D"center">[websvn:compare_submit]</td></tr> =20
+ </table>
+ [websvn:compare_endform]
+</center>
+<hr>
+[websvn-test:success]
+ [lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lan=
g:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b>
+ <p>
+ [websvn:revlink]
+[websvn-endtest]
+<p>
+
+[websvn-startlisting]
+ [websvn-test:newpath]
+ <p>
+ <div class=3D"newpath">
+ <b>[websvn:newpath]</b><br>
+ [websvn-endtest]
+
+ [websvn-test:info]
+ [websvn:info]<br>
+ [websvn-endtest]
+
+ [websvn-test:difflines]
+ <div class=3D"difflines">
+ <p>
+ [websvn:difflines]<br>
+ <table class=3D"diff" cellspacing=3D"0">
+ [websvn-endtest]
+ =20
+ [websvn-test:diffclass]
+ <tr><td class=3D"[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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][w=
ebsvn: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>
+ =20
+ <p><center>
+ [websvn:showcompactlink]
+ [websvn:showalllink]
+ </center>
+ <p>
+ <table class=3D"diff" width=3D"100%">
+ <tr>
+ <th style=3D"padding-bottom: 5px" width=3D"50%" align=3D"left">=
<b>[lang:REV] [websvn:rev2]</b></th>
+ <th rowspan=3D100000 width=3D5></th>
+ <th style=3D"padding-bottom: 5px" width=3D"50%" align=3D"left">=
<b>[lang:REV] [websvn:rev1]</b></th>
+ </tr>
+ =20
+ [websvn-startlisting]
+ [websvn-test:rev1lineno]
+ <tr>
+ <td width=3D"50%" style=3D"padding: 3px 0 3px 0" align=3D=
"center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
+ <td width=3D"50%" style=3D"padding: 3px 0 3px 0" align=3D=
"center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
+ <tr>
+ [websvn-else]
+ <tr><td class=3D"[websvn:rev1diffclass]">[websvn:rev1line]</=
td>
+ <td class=3D"[websvn:rev2diffclass]">[websvn:rev2line]</td><=
/tr>
+ [websvn-endtest]
+ [websvn-endlisting]
+ =20
+ </table>
+[websvn-endtest]
+
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/directory.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn: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=3D1 class=3D"bordered" cellpadding=3D4>
+ <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> =20
+ <td valign=3D"top">
+ [websvn-test:newfilesbr]
+ [websvn:newfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ <td valign=3D"top">
+ [websvn-test:changedfilesbr]
+ [websvn:changedfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ <td valign=3D"top">
+ [websvn-test:deletedfilesbr]
+ [websvn:deletedfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ </tr>
+ </table>
+ </center>
+[websvn-endtest]
+
+[websvn-defineicons]
+dir=3D
+i-node=3D
+t-node=3D
+l-node=3D
+e-node=3D
+*=3D
+[websvn-enddefineicons]
+
+<p><hr>
+<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink] - [w=
ebsvn:curdircomplink]
+[websvn-test:allowdownload]
+ - [websvn:curdirdllink]
+[websvn-endtest]
+[websvn-test:curdirrsslink]
+ - [websvn:curdirrssanchor]<img style=3D"border: 0;" src=3D"[websvn:locw=
ebsvnhttp]/templates/Standard/xml.gif" width=3D"36" height=3D"14" alt=3D"=
[lang:RSSFEED]"></a>
+[websvn-endtest]
+<p>
+
+[websvn:compare_form]
+ <table class=3D"outlined" width=3D"100%" cellpadding=3D2>
+ <tr>
+ <th width=3D"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=3D"[websvn:rowparity]">
+ [websvn:compare_box]
+ [websvn-treenode]
+ [websvn:filelink]
+ </td>
+ <td class=3D"[websvn:rowparity]">[lang:NOBR][websvn:fileviewlog=
link][lang:ENDNOBR]</td>
+ [websvn-test:allowdownload]
+ <td class=3D"[websvn:rowparity]">[websvn:fileviewdllink]</td=
>
+ [websvn-endtest]
+ [websvn-test:curdirrsslink]
+ <td class=3D"row[websvn:rowparity]">[websvn:rssanchor]<img s=
tyle=3D"border: 0;" src=3D"[websvn:locwebsvnhttp]/templates/Standard/xml.=
gif" width=3D"36" height=3D"14" alt=3D"[lang:RSSFEED]"></a></td>
+ [websvn-endtest]
+ </tr>
+ [websvn-endlisting]
+ </table>
+<p>
+[websvn:compare_submit] =20
+[websvn:compare_endform]
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/file.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn: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=3D"100%" border=3D0><tr><td>
+[websvn-getlisting]
+</td></tr></table>
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/footer.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"-1"><i><b>[lang:POWERED] v[websvn:version=
]</b></i></font></center>
+ </body>
+</html>
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/header.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"content-type" content=3D"text/html;charset=3D[webs=
vn:charset]">
+ <link href=3D"[websvn:locwebsvnhttp]/templates/Standard/styles.css" =
rel=3D"stylesheet" media=3D"screen">
+ <script>
+ function checkCB(chBox)
+ {
+ count =3D 0
+ first =3D null
+ f =3D chBox.form
+ for (i =3D 0 ; i < f.elements.length ; i++)
+ if (f.elements[i].type =3D=3D 'checkbox' && f.elements[i].ch=
ecked)
+ {
+ if (first =3D=3D null && f.elements[i] !=3D chBox)
+ first =3D f.elements[i]
+ count +=3D 1
+ }
+ =20
+ if (count > 2)=20
+ {
+ first.checked =3D false
+ count -=3D 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] [web=
svn: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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/Standard/index.tmpl 2005-07-1=
1 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/index.tmpl 2005-08-0=
2 22:50:12 UTC (rev 966)
@@ -0,0 +1,16 @@
+
+<table border=3D0 cellspacing=3D0 cellpadding=3D0 align=3D"center">
+ <tr>
+ <td align=3D"center">
+ <br><h2>[lang:PROJECTS]:</h2>
+ <table border=3D0>
+ <tr><td><ul>
+ [websvn-startlisting]
+ <li><strong>[websvn:projlink]</strong></li>
+ [websvn-endlisting]
+ </ul></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+ =20
Added: trunk/svn.matroska.org/WebSVN/templates/Standard/log.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"right">[websvn:projects_form][websvn:projects_select][webs=
vn: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][web=
svn:logsearch_submit]
+[websvn-test:logsearch_clearloglink]
+<p><font size=3D"-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=3D1 class=3D"outlined" width=3D"100%" cellpadding=3D=
2>
+ <tr>
+ <th>[lang:REV]</th>
+ <th>[lang:PATH]</th>
+ <th>[lang:AUTHOR]</th>
+ <th>[lang:AGE]</th>
+ <th>[lang:LOGMSG]</th>
+ </tr>
+ =20
+ [websvn-startlisting]
+ <tr>
+ <td valign=3D"top" class=3D"[websvn:rowparity]"><nobr>[websv=
n:compare_box][websvn:revlink]</nobr></td>
+ <td valign=3D"top" class=3D"[websvn:rowparity]">[websvn:revp=
athlink]</td>
+ <td valign=3D"top" class=3D"[websvn:rowparity]">[websvn:reva=
uthor]</td>
+ <td valign=3D"top" class=3D"[websvn:rowparity]">[websvn:reva=
ge]</td>
+ <td valign=3D"top" class=3D"[websvn:rowparity]">[websvn:revl=
og]</td>
+ </tr>
+ [websvn-endlisting]
+ </table>
+ <p>
+ [websvn:compare_submit] =20
+ [websvn:compare_endform]
+[websvn-endtest]
+ =20
+[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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/Standard/styles.css 2005-07-1=
1 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Standard/styles.css 2005-08-0=
2 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
+{=20
+ 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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"100%" border=3D"0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align=3D"right">[websvn:projects_form][websvn:projects_sel=
ect][websvn:projects_submit][websvn:projects_endform]</div>
+ </td>
+ </tr>
+</table>
+[websvn:curdirlinks] - [lang:BLAMEFOR] [websvn:rev]
+<p>
+
+<table border=3D"1" class=3D"blame" width=3D"100%" cellpadding=3D"2">
+ <tr>
+ <th style=3D"padding-bottom: 5px" align=3D"left"><b>[lang:LINENO]<=
/b></th>
+ <th style=3D"padding-bottom: 5px" align=3D"left"><b>[lang:REV]</b>=
</th>
+ <th style=3D"padding-bottom: 5px" align=3D"left"><b>[lang:AUTHOR]<=
/b></th>
+ <th style=3D"padding-bottom: 5px" align=3D"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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"100%" border=3D"0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align=3D"right">[websvn:projects_form][websvn:projects_sel=
ect][websvn:projects_submit][websvn:projects_endform]</div>
+ </td>
+ </tr>
+</table>
+
+<center>
+ [websvn:compare_form]
+ <table>
+ <tr><td>
+ <table class=3D"outlined">
+ <tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1i=
nput] [lang:REV] [websvn:compare_rev1input]</td></tr>
+ <tr><td>[lang:WITHPATH] </td><td>[websvn:compare_path2i=
nput] [lang:REV] [websvn:compare_rev2input]</td></tr>
+ </table>
+ </td><tr>
+ <tr><td align=3D"center">[websvn:compare_submit]</td></tr> =20
+ </table>
+ [websvn:compare_endform]
+ <hr>
+</center>
+<p>
+[websvn-test:success]
+ [lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lan=
g:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b>
+ <p>
+ [websvn:revlink]
+[websvn-endtest]
+<p>
+
+[websvn-startlisting]
+ [websvn-test:newpath]
+ <p>
+ <div class=3D"newpath">
+ <b>[websvn:newpath]</b><br>
+ [websvn-endtest]
+
+ [websvn-test:info]
+ [websvn:info]<br>
+ [websvn-endtest]
+
+ [websvn-test:difflines]
+ <div class=3D"difflines">
+ <p>
+ [websvn:difflines]<br>
+ <table class=3D"diff" cellspacing=3D"0">
+ [websvn-endtest]
+ =20
+ [websvn-test:diffclass]
+ <tr><td class=3D"[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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"100%" border=3D"0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align=3D"right">[websvn:projects_form][websvn:projects_sel=
ect][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>
+ =20
+ <p><center>
+ [websvn:showcompactlink]
+ [websvn:showalllink]
+ </center>
+ <p>
+ <table class=3D"diff" width=3D"100%">
+ <tr>
+ <th style=3D"padding-bottom: 5px" width=3D"50%" align=3D"left">=
<b>[lang:REV] [websvn:rev2]</b></th>
+ <th rowspan=3D100000 width=3D5></th>
+ <th style=3D"padding-bottom: 5px" width=3D"50%" align=3D"left">=
<b>[lang:REV] [websvn:rev1]</b></th>
+ </tr>
+ =20
+ [websvn-startlisting]
+ [websvn-test:rev1lineno]
+ <tr>
+ <td width=3D"50%" style=3D"padding: 3px 0 3px 0" align=3D=
"center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
+ <td width=3D"50%" style=3D"padding: 3px 0 3px 0" align=3D=
"center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
+ <tr>
+ [websvn-else]
+ <tr><td class=3D"[websvn:rev1diffclass]">[websvn:rev1line]</=
td>
+ <td class=3D"[websvn:rev2diffclass]">[websvn:rev2line]</td><=
/tr>
+ [websvn-endtest]
+ [websvn-endlisting]
+ =20
+ </table>
+[websvn-endtest]
+
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/directory.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/directory.tmpl 2005-07-1=
1 21:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/directory.tmpl 2005-08-0=
2 22:50:12 UTC (rev 966)
@@ -0,0 +1,114 @@
+<table width=3D"100%" border=3D"0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align=3D"right">[websvn:projects_form][websvn:projects_sel=
ect][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] - [w=
ebsvn:curdircomplink]
+[websvn-test:allowdownload]
+ - [websvn:curdirdllink]
+[websvn-endtest]
+[websvn-test:curdirrsslink]
+ - [websvn:curdirrssanchor]<img style=3D"border: 0;" src=3D"[websvn:locw=
ebsvnhttp]/templates/Standard/xml.gif" width=3D"36" height=3D"14" alt=3D"=
[lang:RSSFEED]"></a>
+[websvn-endtest]
+
+[websvn-defineicons]
+dir=3D
+i-node=3D
+t-node=3D
+l-node=3D
+e-node=3D
+*=3D
+[websvn-enddefineicons]
+
+<p>
+[websvn:compare_form]
+ <table class=3D"outlined" width=3D"100%" cellpadding=3D"2">
+ <tr>
+ <th width=3D"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=3D"[websvn:rowparity]">
+ [websvn:compare_box]
+ [websvn-treenode]
+ [websvn:filelink]
+ </td>
+ <td class=3D"[websvn:rowparity]">[lang:NOBR][websvn:fileviewlog=
link][lang:ENDNOBR]</td>
+ [websvn-test:allowdownload]
+ <td class=3D"[websvn:rowparity]">[websvn:fileviewdllink]</td=
>
+ [websvn-endtest]
+ [websvn-test:curdirrsslink]
+ <td class=3D"row[websvn:rowparity]">[websvn:rssanchor]<img s=
tyle=3D"border: 0;" src=3D"[websvn:locwebsvnhttp]/templates/Standard/xml.=
gif" width=3D"36" height=3D"14" alt=3D"[lang:RSSFEED]"></a></td>
+ [websvn-endtest]
+ </tr>
+ [websvn-endlisting]
+ </table>
+<p>
+[websvn:compare_submit] =20
+[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=3D1 class=3D"bordered" cellpadding=3D4>
+ <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> =20
+ <td valign=3D"top">
+ [websvn-test:newfilesbr]
+ [websvn:newfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ <td valign=3D"top">
+ [websvn-test:changedfilesbr]
+ [websvn:changedfilesbr]
+ [websvn-else]
+
+ [websvn-endtest]
+ </td>
+ <td valign=3D"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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D"100%" border=3D"0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align=3D"right">[websvn:projects_form][websvn:projects_sel=
ect][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=3D"100%" border=3D1><tr><td>
+[websvn-getlisting]
+</td></tr></table>
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/footer.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/footer.tmpl 2005-07-11 2=
1:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/footer.tmpl 2005-08-02 2=
2:50:12 UTC (rev 966)
@@ -0,0 +1,2 @@
+ </body>
+</html>
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/header.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/header.tmpl 2005-07-11 2=
1:06:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/header.tmpl 2005-08-02 2=
2:50:12 UTC (rev 966)
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv=3D"content-type" content=3D"text/html;charset=3D[webs=
vn:charset]">
+ <link href=3D"[websvn:locwebsvnhttp]/templates/zinn/styles.css" rel=3D=
"stylesheet" media=3D"screen">
+ <script>
+ function checkCB(chBox)
+ {
+ count =3D 0
+ first =3D null
+ f =3D chBox.form
+ for (i =3D 0 ; i < f.elements.length ; i++)
+ if (f.elements[i].type =3D=3D 'checkbox' && f.elements[i].ch=
ecked)
+ {
+ if (first =3D=3D null && f.elements[i] !=3D chBox)
+ first =3D f.elements[i]
+ count +=3D 1
+ }
+ =20
+ if (count > 2)=20
+ {
+ first.checked =3D false
+ count -=3D 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] [web=
svn: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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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=3D0 cellspacing=3D0 cellpadding=3D0 align=3D"center">
+ <tr>
+ <td align=3D"center">
+ <br><h1>[lang:PROJECTS]:</h1>
+ <p><hr><p>
+ <table width=3D"100%" class=3D"outlined" cellpadding=3D"2">
+ [websvn-startlisting]
+ <tr><td>[websvn:projlink]</td></tr>
+ [websvn-endlisting]
+ </table>
+ </td>
+ </tr>
+</table>
+ =20
Added: trunk/svn.matroska.org/WebSVN/templates/Zinn/log.tmpl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/templates/Zinn/log.tmpl 2005-07-11 21:0=
6:24 UTC (rev 965)
+++ trunk/svn.matroska.org/WebSVN/templates/Zinn/log.tmpl 2005-08-02 22:5=
0:12 UTC (rev 966)
@@ -0,0 +1,62 @@
+<table width=3D"100%" border=3D"0">
+ <tr>
+ <td>
+ <h1>[websvn:repname]</h1>
+ </td>
+ <td>
+ <div align=3D"right">[websvn:projects_form][websvn:projects_sel=
ect][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][web=
svn:logsearch_submit]
+[websvn-test:logsearch_clearloglink]
+<p><font size=3D"-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=3D1 class=3D"outlined" width=3D"100%" cellpadding=3D=
2>
+ <tr>
+ <th>[lang:REV]</th>
+ <th>[lang:PATH]</th>
+ <th>[lang:AUTHOR]</th>
+ <th>[lang:AGE]</th>
+ <th>[lang:LOGMSG]</th>
+ </tr>
+ =20
+ [websvn-startlisting]
+ <tr>
+ <td valign=3D"top" class=3D"[websvn:rowparity]"><nobr>[websv=
n:compare_box][websvn:revlink]</nobr></td>
+ <td valign=3D"top" class=3D"[websvn:rowparity]">[websvn:revp=
athlink]</td>
+ <td valign=3D"top" class=3D"[websvn:rowparity]">[websvn:reva=
uthor]</td>
+ <td valign=3D"top" class=3D"[websvn:rowparity]">[websvn:reva=
ge]</td>
+ <td valign=3D"top" class=3D"[websvn:rowparity]">[websvn:revl=
og]</td>
+ </tr>
+ [websvn-endlisting]
+ </table>
+ <p>
+ [websvn:compare_submit] =20
+ [websvn:compare_endform]
+[websvn-endtest]
+ =20
+[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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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-Regula=
r;
+ background-color: white;
+ margin: 20px;
+ padding: 0px;
+ font-size: 76%;
+}
+
+H1
+{=20
+ color: #8c0000;
+ font-size: 30px;
+ font-weight: normal;
+ font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regula=
r;
+ 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=20
+{
+ 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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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 f=
ile 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 sec=
ond
+
+---
+
+[websvn-startlisting]
+...
+[websvn-endlisting]
+
+
+Used in pages that contain listings of files, logs, etc. Everything bet=
ween
+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 ty=
pes 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>=3D<HTML code>
+
+There are also some special filetypes:
+
+dir=3D<HTML code> is used for directory icons
+*=3D<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=3D<img align=3D"middle" valign=3D"center" src=3D"[websvn:locwebsvnht=
tp]/templates/BlueGrey/folder.png" alt=3D"[FOLDER]">
+*=3D<img align=3D"middle" src=3D"[websvn:locwebsvnhttp]/templates/BlueGr=
ey/file.png" alt=3D"[FILE]">
+.c=3D<img align=3D"middle" src=3D"[websvn:locwebsvnhttp]/templates/BlueG=
rey/filec.png" alt=3D"[C-FILE]">
+.h=3D<img align=3D"middle" src=3D"[websvn:locwebsvnhttp]/templates/BlueG=
rey/fileh.png" alt=3D"[H-FILE]">
+.s=3D<img align=3D"middle" src=3D"[websvn:locwebsvnhttp]/templates/BlueG=
rey/files.png" alt=3D"[S-FILE]">
+
+i-node=3D<img align=3D"middle" border=3D"0" width=3D"24" height=3D"26" s=
rc=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/i-node.png" alt=3D"[NODE]=
">
+t-node=3D<img align=3D"middle" border=3D"0" width=3D"24" height=3D"26" s=
rc=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/t-node.png" alt=3D"[NODE]=
">
+l-node=3D<img align=3D"middle" border=3D"0" width=3D"24" height=3D"26" s=
rc=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/l-node.png" alt=3D"[NODE]=
">
+e-node=3D<img align=3D"middle" border=3D"0" width=3D"24" height=3D"26" s=
rc=3D"[websvn:locwebsvnhttp]/templates/BlueGrey/e-node.png" alt=3D"[NODE]=
">
+[websvn-enddefineicons]
+
+Inside the [websvn-startlisting] block, the command [websvn-treeview] wi=
ll
+output the HTML code defined for the appropriate tree view icon.
+[websvn-icon] will output the HTML code defined for the type of the curr=
ent
+file.
+
+---
+
+[websvn-getlisting] (used in file.tmpl only)
+=20
+Get the contents of the file being viewed and output it exactly (surroun=
ded
+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 var=
iable
+required.
+
+The variables available are described below for each template.
+You may also access the language file using [lang:varname] is order to k=
eep 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 exampl=
e:
+
+<link href=3D"[websvn:locwebsvnhttp]/templates/tmptname/styles.css" ...
+
+You may imagine that simply using . in place should work, however this i=
sn'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 projec=
t
+ 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=3D...> 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:i=
sDir]
+ to display icons)=20
+rsslink - Link to the RSS feed for this file/directory
+rssanchor - The <a href=3D...> tag to the RSS feed for this file/directo=
ry
+
+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 butt=
on
+logsearch_endform - HTML </form> specification for the log search box b=
ox
+ (includes hidden field declarations)
+logsearch_clearloglink - Link to unfiltered display (remove current sear=
ch
+ criteria)
+ =20
+logsearch_resultsfound - true when there are logs to display
+logsearch_nomatches - true when there are no matches for the current req=
uest
+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. Onl=
y
+ defined at the start of the block.
+rev2diffclass / rev2diffclass - Class name of the diff block used for co=
louring
+ 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=20
+rev1 - Revision of first path
+path2 - Second path being compared=20
+rev2 - Revision of second path
+
+success =3D 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 revisi=
on input areas =20
+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 bl=
ock)
+difflines - Lines changed information for this file. Start of diff line=
s.
+ (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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/svn.matroska.org/WebSVN/wsvn.php 2005-07-11 21:06:24 UTC (rev 9=
65)
+++ trunk/svn.matroska.org/WebSVN/wsvn.php 2005-08-02 22:50:12 UTC (rev 9=
66)
@@ -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 =3D "/websvn"; =20
+
+// Physical location of websvn directory
+$locwebsvnreal =3D "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"] =3D 1;
+
+if ($config->multiViews)
+{
+ // If this is a form handling request, deal with it
+ if (@$_REQUEST["op"] =3D=3D "form")
+ {
+ include("$locwebsvnreal/form.php");
+ exit;
+ }
+
+ $path =3D @$_SERVER["PATH_INFO"];
+
+ // Remove initial slash
+ $path =3D substr($path, 1);
+ if (empty($path))
+ {
+ include("$locwebsvnreal/index.php");
+ exit;
+ }
+ =20
+ // Get the repository name
+ $pos =3D strpos($path, "/");
+
+ if ($pos =3D=3D=3D false)
+ {
+ $name =3D substr($path, 0);
+ $path =3D "/";
+ }
+ else
+ {
+ $name =3D substr($path, 0, $pos);
+ $path =3D substr($path, $pos);
+ }
+ =20
+ $rep =3D $config->findRepository($name);
+ createProjectSelectionForm();
+ $vars["allowdownload"] =3D $rep->getAllowDownload();
+
+ // find the operation type
+ $op =3D @$_REQUEST["op"];
+ switch ($op)
+ {
+ case "dir":
+ $file =3D "listing.php";
+ break;
+ =20
+ case "file":
+ $file =3D "filedetails.php";
+ break;
+
+ case "log":
+ $file =3D "log.php";
+ break;
+
+ case "diff":
+ $file =3D "diff.php";
+ break;
+
+ case "blame":
+ $file =3D "blame.php";
+ break;
+
+ case "rss":
+ $file =3D "rss.php";
+ break;
+ =20
+ case "dl":
+ $file =3D "dl.php";
+ break;
+
+ case "comp":
+ $file =3D "comp.php";
+ break;
+
+ default:
+ $file =3D "listing.php";
+ }
+ =20
+ // 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;
+}
More information about the Matroska-cvs
mailing list