<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.web.pel.cvs">
    <title>gmane.comp.web.pel.cvs</title>
    <link>http://blog.gmane.org/gmane.comp.web.pel.cvs</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/534"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/533"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/532"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/531"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/530"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/529"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/528"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/527"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/526"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/525"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/524"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/523"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/522"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/521"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/520"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/519"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/518"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/517"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/516"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.web.pel.cvs/515"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/534">
    <title>[513] trunk/build.xml</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/534</link>
    <description>Revision: 513
          http://pel.svn.sourceforge.net/pel/?rev=513&amp;view=rev
Author:   lsolesen
Date:     2008-06-08 03:28:07 -0700 (Sun, 08 Jun 2008)

Log Message:
-----------
Started a build file so it is easier to make a pear package.

Added Paths:
-----------
    trunk/build.xml

Added: trunk/build.xml
===================================================================
--- trunk/build.xml                        (rev 0)
+++ trunk/build.xml2008-06-08 10:28:07 UTC (rev 513)
&lt; at &gt;&lt; at &gt; -0,0 +1,117 &lt; at &gt;&lt; at &gt;
+&lt;?xml version="1.0" ?&gt;
+&lt;project name="PEL" basedir="." default="build"&gt;
+    &lt;taskdef classname="phing.tasks.ext.d51PearPkg2Task" name="d51pearpkg2" /&gt;
+    &lt;taskdef classname="phing.tasks.ext.IlibPearDeployerTask" name="peardeploy" /&gt;
+    &lt;taskdef classname="phing.tasks.ext.FtpDeployTask" name="ftpdeploy" /&gt;
+
+    &lt;property name="package-name" value="${phing.project.name}" /&gt;
+    &lt;property name="version" value="0.9.3" /&gt;
+    &lt;property name="stability" value="beta" /&gt;
+    &lt;property name="pear.channel" value="public.intraface.dk" /&gt;
+
+    &lt;property name="source.dir" value="." /&gt;
+    &lt;property name="tests.dir" value="./tests" /&gt;
+    &lt;property name="build.dir" value="../build" /&gt;
+    &lt;property name="reports.phpcs.dir" value="../build/logs" /&gt;
+    &lt;property name="reports.dir" value="../build/logs" /&gt;
+    &lt;property name="reports.phpunit.dir" value="../../build/logs" /&gt;
+    &lt;property name="reports.coverage.dir" value="../../build/logs/coverage" /&gt;
+    &lt;property name="api.dir" value="../build/api" /&gt;
+
+    &lt;target name="prepare"&gt;
+        &lt;delete dir="${build.dir}" /&gt;
+    &lt;/target&gt;
+
+    &lt;target name="export"&gt;
+        &lt;echo msg="Exporting SVN files" /&gt;
+        &lt;exec command="svn export ${source.dir} ${build.dir}" /&gt;
+
+        &lt;mkdir dir="${build.dir}/package/${package-name}-${version}" /&gt;
+        &lt;copy todir="${build.dir}/package/${package-name}-${version}"&gt;
+            &lt;filterchain&gt;
+                &lt;replacetokens begintoken="&lt; at &gt;&lt; at &gt;" endtoken="&lt; at &gt;&lt; at &gt;"&gt;
+                    &lt;token key="VERSION" value="${version}" /&gt;
+                &lt;/replacetokens&gt;
+            &lt;/filterchain&gt;
+
+            &lt;fileset dir="${build.dir}"&gt;
+                &lt;include name="**/**" /&gt;
+            &lt;/fileset&gt;
+        &lt;/copy&gt;
+
+    &lt;/target&gt;
+
+    &lt;target name="pear" depends="export"&gt;
+        &lt;d51pearpkg2 dir="${build.dir}/package/${package-name}-${version}/" baseinstalldir="PEL/"&gt;
+            &lt;name&gt;${package-name}&lt;/name&gt;
+            &lt;summary&gt;The PHP Exif Library (PEL) lets you fully manipulate Exif (Exchangeable Image File Format) data.&lt;/summary&gt;
+            &lt;channel&gt;${pear.channel}&lt;/channel&gt;
+            &lt;description&gt;
+                &lt;!--        Don't exceed this width         --&gt;
+                The PHP Exif Library (PEL) lets you fully
+                manipulate Exif (Exchangeable Image File Format)
+                data. This is the data that digital cameras
+                place in their images, such as the date and time,
+                shutter speed, ISO value and so on.
+
+                Using PEL, one can fully modify the Exif data,
+                meaning that it can be both read and written.
+                Completely new Exif data can also be added to
+                images. PEL is written completely in PHP and
+                depends on nothing except a standard installation
+                of PHP, version 5. PEL is hosted on SourceForge.
+            &lt;/description&gt;
+
+            &lt;lead user="lsolesen" name="Lars Olesen" email="lars&lt; at &gt;legestue.net" /&gt;
+            &lt;lead user="mgeisler" name="Martin Geisler" email="mgeisler&lt; at &gt;mgeisler.net" active="false" /&gt;
+            &lt;license&gt;GPL License&lt;/license&gt;
+
+            &lt;version release="${version}" api="${version}" /&gt;
+            &lt;stability release="${stability}" api="${stability}" /&gt;
+
+            &lt;dependencies&gt;
+                &lt;php minimum_version="5.2.0" /&gt;
+
+                &lt;pear minimum_version="1.6.0"
+                      recommended_version="1.6.1" /&gt;
+            &lt;/dependencies&gt;
+            &lt;notes&gt;
+                * Something
+            &lt;/notes&gt;
+        &lt;/d51pearpkg2&gt;
+    &lt;/target&gt;
+
+    &lt;target name="build" depends="prepare, export, test, phpcs, php-documentor, make-pear-package"&gt;
+    &lt;/target&gt;
+
+    &lt;target name="make-pear-package" depends="pear"&gt;
+        &lt;tar compression="gzip" destfile="${build.dir}/${package-name}-${version}.tgz" basedir="${build.dir}/package" /&gt;
+    &lt;/target&gt;
+
+    &lt;target name="deploy" depends="pear"&gt;
+        &lt;property file="./build.properties" /&gt;
+        &lt;peardeploy uri="${pear.channel.uri}" username="${pear.channel.username}" password="${pear.channel.password}"&gt;
+              &lt;fileset dir="${build.dir}"&gt;
+                &lt;include name="${package-name}-${version}.tgz"/&gt;
+              &lt;/fileset&gt;
+        &lt;/peardeploy&gt;
+        &lt;ftpdeploy host="${ftp.host}" username="${ftp.user}" password="${ftp.password}" port="21" dir="./public.intraface.dk/docs/${package-name}" mode="binary" clearfirst="false"&gt;
+            &lt;fileset dir="${api.dir}"&gt;
+                &lt;include name="*/**" /&gt;
+            &lt;/fileset&gt;
+        &lt;/ftpdeploy&gt;
+    &lt;/target&gt;
+
+    &lt;target name="phpcs"&gt;
+        &lt;exec output="${reports.phpcs.dir}/checkstyle.xml" dir="${source.dir}"
+          command="phpcs --report=checkstyle . --standard=PEAR" /&gt;
+    &lt;/target&gt;
+
+    &lt;target name="php-documentor" depends="export"&gt;
+        &lt;exec dir="${source.dir}" command="phpdoc -ue on -t ${api.dir} -d ./" passthru="true" /&gt;
+    &lt;/target&gt;
+
+    &lt;target name="test"&gt;
+&lt;!--         &lt;exec dir="${tests.dir}" command="" passthru="true" checkreturn="true" /&gt;   --&gt;
+    &lt;/target&gt;
+&lt;/project&gt;
\ No newline at end of file


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
</description>
    <dc:creator>lsolesen&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2008-06-08T10:28:09</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/533">
    <title>[512] trunk/test</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/533</link>
    <description>Revision: 512
          http://pel.svn.sourceforge.net/pel/?rev=512&amp;view=rev
Author:   lsolesen
Date:     2008-04-28 08:29:26 -0700 (Mon, 28 Apr 2008)

Log Message:
-----------
Added test for bug 1730993. Haven't figured out what the expected behavior should be.

Added Paths:
-----------
    trunk/test/bug1730993.php
    trunk/test/images/
    trunk/test/images/bug1730993_large.jpg
    trunk/test/images/bug1730993_tmp.jpg

Added: trunk/test/bug1730993.php
===================================================================
--- trunk/test/bug1730993.php                        (rev 0)
+++ trunk/test/bug1730993.php2008-04-28 15:29:26 UTC (rev 512)
&lt; at &gt;&lt; at &gt; -0,0 +1,43 &lt; at &gt;&lt; at &gt;
+&lt;?php
+
+/*  PEL: PHP Exif Library.  A library with support for reading and
+ *  writing all Exif headers in JPEG and TIFF images using PHP.
+ *
+ *  Copyright (C) 2004, 2006, 2007  Martin Geisler.
+ *
+ *  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 in the file COPYING; if not, write to the
+ *  Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ *  Boston, MA 02110-1301 USA
+ */
+
+class Bug1730993TestCase extends UnitTestCase {
+
+  function __construct() {
+    parent::__construct('Bug1730993 Test');
+  }
+
+  function testThisDoesNotWorkAsExpected() {
+    $tmpfile = dirname(__FILE__) . '/images/bug1730993_tmp.jpg';
+    $bigfile = dirname(__FILE__) . '/images/bug1730993_large.jpg';
+    $jpeg = new PelJpeg($tmpfile);
+    $exif = $jpeg-&gt;getExif();
+    if ($exif != null) {
+      $jpeg1 = new PelJpeg($bigfile);
+      $jpeg1-&gt;setExif( $exif);
+      file_put_contents($bigfile, $jpeg1-&gt;getBytes());
+    }
+  }
+}
+
+?&gt;
\ No newline at end of file

Added: trunk/test/images/bug1730993_large.jpg
===================================================================
(Binary files differ)


Property changes on: trunk/test/images/bug1730993_large.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/test/images/bug1730993_tmp.jpg
===================================================================
(Binary files differ)


Property changes on: trunk/test/images/bug1730993_tmp.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
</description>
    <dc:creator>lsolesen&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2008-04-28T15:29:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/532">
    <title>[511] web/htdocs/links.php</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/532</link>
    <description>Revision: 511
          http://pel.svn.sourceforge.net/pel/?rev=511&amp;view=rev
Author:   mgeisler
Date:     2008-02-24 12:45:15 -0800 (Sun, 24 Feb 2008)

Log Message:
-----------
Added link to PEAR channel.

Modified Paths:
--------------
    web/htdocs/links.php

Modified: web/htdocs/links.php
===================================================================
--- web/htdocs/links.php2008-01-17 18:40:22 UTC (rev 510)
+++ web/htdocs/links.php2008-02-24 20:45:15 UTC (rev 511)
&lt; at &gt;&lt; at &gt; -50,6 +50,10 &lt; at &gt;&lt; at &gt;
   &lt;/li&gt;
 
   &lt;li&gt;
+    &lt;p&gt;PEAR channel at &lt;tt&gt;pear.sharedlog.com&lt;/tt&gt;, maintained by Dmitri.&lt;/p&gt;
+  &lt;/li&gt;
+
+  &lt;li&gt;
     &lt;p&gt;The Exif specification from &lt;a
     href="http://exif.org/"&gt;EXIF.org&lt;/a&gt;.&lt;/p&gt;
   &lt;/li&gt;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2008-02-24T20:45:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/531">
    <title>[510] trunk/PelIfd.php</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/531</link>
    <description>Revision: 510
          http://pel.svn.sourceforge.net/pel/?rev=510&amp;view=rev
Author:   mgeisler
Date:     2008-01-17 10:40:22 -0800 (Thu, 17 Jan 2008)

Log Message:
-----------
Throw an exception in addEntry() if the entry does not belong to the
IFD as per the isValidTag() method.

Modified Paths:
--------------
    trunk/PelIfd.php

Modified: trunk/PelIfd.php
===================================================================
--- trunk/PelIfd.php2007-10-25 15:28:15 UTC (rev 509)
+++ trunk/PelIfd.php2008-01-17 18:40:22 UTC (rev 510)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007, 2008  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -267,18 +267,13 &lt; at &gt;&lt; at &gt;
         }
 
         try {
-            $entry = $this-&gt;newEntryFromData($tag, $format, $components, $data);
-            if ($this-&gt;isValidTag($tag))
-              $this-&gt;addEntry($entry);
-            else
-              Pel::maybeThrow(new PelInvalidDataException("IFD %s cannot hold\n%s",
-                                                          $this-&gt;getName(),
-                                                          $entry-&gt;__toString()));
-          } catch (PelException $e) {
-            /* Throw the exception when running in strict mode, store
-             * otherwise. */
-            Pel::maybeThrow($e);
-          }
+          $entry = $this-&gt;newEntryFromData($tag, $format, $components, $data);
+          $this-&gt;addEntry($entry);
+        } catch (PelException $e) {
+          /* Throw the exception when running in strict mode, store
+           * otherwise. */
+          Pel::maybeThrow($e);
+        }
 
         /* The format of the thumbnail is stored in this tag. */
 //         TODO: handle TIFF thumbnail.
&lt; at &gt;&lt; at &gt; -793,15 +788,22 &lt; at &gt;&lt; at &gt;
   /**
    * Adds an entry to the directory.
    *
-   * &lt; at &gt;param PelEntry the entry that will be added.
+   * &lt; at &gt;param PelEntry the entry that will be added. If the entry is not
+   * valid in this IFD (as per {&lt; at &gt;link isValidTag()}) an
+   * {&lt; at &gt;link PelInvalidDataException} is thrown.
    *
    * &lt; at &gt;todo The entry will be identified with its tag, so each
    * directory can only contain one entry with each tag.  Is this a
    * bug?
    */
   function addEntry(PelEntry $e) {
-    $e-&gt;setIfdType($this-&gt;type);
-    $this-&gt;entries[$e-&gt;getTag()] = $e;
+    if ($this-&gt;isValidTag($e-&gt;getTag())) {
+      $e-&gt;setIfdType($this-&gt;type);
+      $this-&gt;entries[$e-&gt;getTag()] = $e;
+    } else {
+      throw new PelInvalidDataException("IFD %s cannot hold\n%s",
+                                        $this-&gt;getName(), $e-&gt;__toString());
+    }
   }
 
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2008-01-17T18:40:22</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/530">
    <title>[509] trunk</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/530</link>
    <description>Revision: 509
          http://pel.svn.sourceforge.net/pel/?rev=509&amp;view=rev
Author:   mgeisler
Date:     2007-10-25 08:28:15 -0700 (Thu, 25 Oct 2007)

Log Message:
-----------
Added GPS example.

Modified Paths:
--------------
    trunk/NEWS

Added Paths:
-----------
    trunk/examples/gps.php

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS2007-10-21 19:44:41 UTC (rev 508)
+++ trunk/NEWS2007-10-25 15:28:15 UTC (rev 509)
&lt; at &gt;&lt; at &gt; -13,10 +13,14 &lt; at &gt;&lt; at &gt;
 Added a static method, Pel::setJPEGQuality(), for controlling the
 quality for encoding JPEG images. Fixed bug in conversion between
 Julian Day count and UNIX timestamps and removed dependency on the
-calendar PHP extension. Fixed placement of Windows XP tags.
+calendar PHP extension. Fixed placement of Windows XP tags. Added GPS
+example.
 
 Changes:
 
+* Added an example of how GPS information can be added. Thanks Andac
+  Aydin for contributing and testing this.
+
 * Fixed PelJpegComment::getBytes(): it didn't return anything! Thanks
   macondos.
 

Added: trunk/examples/gps.php
===================================================================
--- trunk/examples/gps.php                        (rev 0)
+++ trunk/examples/gps.php2007-10-25 15:28:15 UTC (rev 509)
&lt; at &gt;&lt; at &gt; -0,0 +1,180 &lt; at &gt;&lt; at &gt;
+&lt;?php
+
+/*  PEL: PHP Exif Library.  A library with support for reading and
+ *  writing all Exif headers in JPEG and TIFF images using PHP.
+ *
+ *  Copyright (C) 2007  Martin Geisler.
+ *
+ *  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 in the file COPYING; if not, write to the
+ *  Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ *  Boston, MA 02110-1301 USA
+ */
+ 
+/* $Id$ */
+
+/* Contributed by Andac Aydin (aandac&lt; at &gt;gmx.de).
+ *
+ * This example shows how one can add GPS information to a JPEG image.
+ * Any Exif information in the image will be overwritten by the new
+ * information.
+ *
+ * This example includes two functions:
+ *
+ * - convertDecimalTpDMS() converts decimal GPS coordinates (how you use them
+ *   in Google Maps for example) to the conventional coordinate-system
+ *   used in Exif data.
+ *
+ * - addGpsInfo() adds several Exif tags to your JPEG file.
+ */
+
+error_reporting(E_ALL);
+
+require_once(dirname(__FILE__) . '/../PelJpeg.php');
+
+/**
+ * Convert a decimal degree into degrees, minutes, and seconds.
+ *
+ * &lt; at &gt;param int the degree in the form 123.456. Must be in the interval
+ * [-180, 180].
+ *
+ * &lt; at &gt;return array a triple with the degrees, minutes, and seconds. Each
+ * value is an array itself, suitable for passing to a
+ * PelEntryRational. If the degree is outside the allowed interval,
+ * null is returned instead.
+ */
+function convertDecimalToDMS($degree) {
+  if ($degree &gt; 180 || $degree &lt; -180)
+    return null;
+
+  $degree = abs($degree);            // make sure number is positive
+                                     // (no distinction here for N/S
+                                     // or W/E).
+  
+  $seconds = $degree * 3600;         // Total number of seconds.
+
+  $degrees = floor($degree);         // Number of whole degrees.
+  $seconds -= $degrees * 3600;       // Subtract the number of seconds
+                                     // taken by the degrees.
+
+  $minutes = floor($seconds / 60);   // Number of whole minutes.
+  $seconds -= $minutes * 60;         // Subtract the number of seconds
+                                     // taken by the minutes.
+
+  $seconds = round($seconds*100, 0); // Round seconds with a 1/100th
+                                     // second precision.
+
+  return array(array($degrees, 1), array($minutes, 1), array($seconds, 100));
+}
+
+/**
+ * Add GPS information to an image basic metadata. Any old Exif data
+ * is discarded.
+ *
+ * &lt; at &gt;param string the input filename.
+ *
+ * &lt; at &gt;param string the output filename. An updated copy of the input
+ * image is saved here.
+ *
+ * &lt; at &gt;param string image description.
+ *
+ * &lt; at &gt;param string user comment.
+ *
+ * &lt; at &gt;param string camera model.
+ *
+ * &lt; at &gt;param float longitude expressed as a fractional number of degrees,
+ * e.g. 12.345\xB0. Negative values denotes degrees west of Greenwich.
+ *
+ * &lt; at &gt;param float latitude expressed as for longitude. Negative values
+ * denote degrees south of equator.
+ *
+ * &lt; at &gt;param float the altitude, negative values express an altitude
+ * below sea level.
+ *
+ * &lt; at &gt;param string the date and time.
+ */
+function addGpsInfo($input, $output, $description, $comment, $model,
+                    $longitude, $latitude, $altitude, $date_time) {
+  /* Load the given image into a PelJpeg object */
+  $jpeg = new PelJpeg($input);
+
+  /* Create and add empty Exif data to the image (this throws away any
+   * old Exif data in the image). */
+  $exif = new PelExif();
+  $jpeg-&gt;setExif($exif);
+
+  /* Create and add TIFF data to the Exif data (Exif data is actually
+   * stored in a TIFF format). */
+  $tiff = new PelTiff();
+  $exif-&gt;setTiff($tiff);
+
+  /* Create first Image File Directory and associate it with the TIFF
+   * data. */
+  $ifd0 = new PelIfd(PelIfd::IFD0); 
+  $tiff-&gt;setIfd($ifd0);             
+
+  /* Create a sub-IFD for holding GPS information. GPS data must be
+   * below the first IFD. */
+  $gps_ifd = new PelIfd(PelIfd::GPS);
+  $ifd0-&gt;addSubIfd($gps_ifd);
+
+  /* The USER_COMMENT tag must be put in a Exif sub-IFD under the
+   * first IFD. */
+  $exif_ifd = new PelIfd(PelIfd::EXIF);
+  $exif_ifd-&gt;addEntry(new PelEntryUserComment($comment));
+  $ifd0-&gt;addSubIfd($exif_ifd);
+  
+  $inter_ifd = new PelIfd(PelIfd::INTEROPERABILITY);
+  $ifd0-&gt;addSubIfd($inter_ifd);
+
+  $ifd0-&gt;addEntry(new PelEntryAscii(PelTag::MODEL, $model));
+  $ifd0-&gt;addEntry(new PelEntryAscii(PelTag::DATE_TIME, $date_time));
+  $ifd0-&gt;addEntry(new PelEntryAscii(PelTag::IMAGE_DESCRIPTION, $description));
+
+  $gps_ifd-&gt;addEntry(new PelEntryByte(PelTag::GPS_VERSION_ID, 2, 2, 0, 0));
+
+  /* Use the convertDecimalToDMS function to convert the latitude from
+   * something like 12.34\xB0 to 12\xB0 20' 42" */
+  list($hours, $minutes, $seconds) = convertDecimalToDMS($latitude);
+
+  /* We interpret a negative latitude as being south. */
+  $latitude_ref = ($latitude &lt; 0) ? 'S' : 'N';
+
+  $gps_ifd-&gt;addEntry(new PelEntryAscii(PelTag::GPS_LATITUDE_REF,
+                                       $latitude_ref));
+  $gps_ifd-&gt;addEntry(new PelEntryRational(PelTag::GPS_LATITUDE,
+                                          $hours, $minutes, $seconds));
+
+  /* The longitude works like the latitude. */
+  list($hours, $minutes, $seconds) = convertDecimalToDMS($longitude);
+  $longitude_ref = ($longitude &lt; 0) ? 'W' : 'E';
+
+  $gps_ifd-&gt;addEntry(new PelEntryAscii(PelTag::GPS_LONGITUDE_REF,
+                                       $longitude_ref));
+  $gps_ifd-&gt;addEntry(new PelEntryRational(PelTag::GPS_LONGITUDE,
+                                          $hours, $minutes, $seconds));
+
+  /* Add the altitude. The absolute value is stored here, the sign is
+   * stored in the GPS_ALTITUDE_REF tag below. */
+  $gps_ifd-&gt;addEntry(new PelEntryRational(PelTag::GPS_ALTITUDE,
+                                          array(abs($altitude), 1)));
+  /* The reference is set to 1 (true) if the altitude is below sea
+   * level, or 0 (false) otherwise. */
+  $gps_ifd-&gt;addEntry(new PelEntryByte(PelTag::GPS_ALTITUDE_REF,
+                                      (int)($altitude &lt; 0)));
+
+  /* Finally we store the data in the output file. */
+  file_put_contents($output, $jpeg-&gt;getBytes());
+}
+
+?&gt;
\ No newline at end of file


Property changes on: trunk/examples/gps.php
___________________________________________________________________
Name: svn:keywords
   + Revision Date Author Id


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now &gt;&gt; http://get.splunk.com/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-10-25T15:28:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/529">
    <title>[508] trunk/PelIfd.php</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/529</link>
    <description>Revision: 508
          http://pel.svn.sourceforge.net/pel/?rev=508&amp;view=rev
Author:   mgeisler
Date:     2007-10-21 12:44:41 -0700 (Sun, 21 Oct 2007)

Log Message:
-----------
Make sure to set the IFD type on all entries added.

Modified Paths:
--------------
    trunk/PelIfd.php

Modified: trunk/PelIfd.php
===================================================================
--- trunk/PelIfd.php2007-06-17 17:02:40 UTC (rev 507)
+++ trunk/PelIfd.php2007-10-21 19:44:41 UTC (rev 508)
&lt; at &gt;&lt; at &gt; -268,15 +268,12 &lt; at &gt;&lt; at &gt;
 
         try {
             $entry = $this-&gt;newEntryFromData($tag, $format, $components, $data);
-
-            if ($this-&gt;isValidTag($tag)) {
-              $entry-&gt;setIfdType($this-&gt;type);
-              $this-&gt;entries[$tag] = $entry;
-            } else {
+            if ($this-&gt;isValidTag($tag))
+              $this-&gt;addEntry($entry);
+            else
               Pel::maybeThrow(new PelInvalidDataException("IFD %s cannot hold\n%s",
                                                           $this-&gt;getName(),
                                                           $entry-&gt;__toString()));
-            }
           } catch (PelException $e) {
             /* Throw the exception when running in strict mode, store
              * otherwise. */
&lt; at &gt;&lt; at &gt; -803,6 +800,7 &lt; at &gt;&lt; at &gt;
    * bug?
    */
   function addEntry(PelEntry $e) {
+    $e-&gt;setIfdType($this-&gt;type);
     $this-&gt;entries[$e-&gt;getTag()] = $e;
   }
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now &gt;&gt; http://get.splunk.com/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-10-21T19:44:41</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/528">
    <title>[507] trunk/makepackagexml.php</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/528</link>
    <description>Revision: 507
          http://svn.sourceforge.net/pel/?rev=507&amp;view=rev
Author:   lsolesen
Date:     2007-06-17 10:02:40 -0700 (Sun, 17 Jun 2007)

Log Message:
-----------
Changed the stated license from LGPL to GPL as Martin wrote on pel-devel.

Modified Paths:
--------------
    trunk/makepackagexml.php

Modified: trunk/makepackagexml.php
===================================================================
--- trunk/makepackagexml.php2007-06-11 17:06:26 UTC (rev 506)
+++ trunk/makepackagexml.php2007-06-17 17:02:40 UTC (rev 507)
&lt; at &gt;&lt; at &gt; -62,7 +62,7 &lt; at &gt;&lt; at &gt;
 
 Using PEL, one can fully modify the Exif data, meaning that it can be both read and written. Completely new Exif data can also be added to images. PEL is written completely in PHP and depends on nothing except a standard installation of PHP, version 5. PEL is hosted on SourceForge.');
 $pfm-&gt;setUri($url);
-$pfm-&gt;setLicense('LGPL License', 'http://www.gnu.org/licenses/lgpl.html');
+$pfm-&gt;setLicense('GPL License', 'http://www.gnu.org/licenses/gpl.html');
 $pfm-&gt;addMaintainer('lead', 'mgeisler', 'Martin Geisler', 'mgeisler&lt; at &gt;mgeisler.net');
 $pfm-&gt;addMaintainer('helper', 'lsolesen', 'Lars Olesen', 'lars&lt; at &gt;legestue.net');
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
</description>
    <dc:creator>lsolesen&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-06-17T17:02:40</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/527">
    <title>[506] trunk/makepackagexml.php</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/527</link>
    <description>Revision: 506
          http://svn.sourceforge.net/pel/?rev=506&amp;view=rev
Author:   lsolesen
Date:     2007-06-11 10:06:26 -0700 (Mon, 11 Jun 2007)

Log Message:
-----------
Added a php script to generate a package.xml file which can be used to create a PEAR package.

Added Paths:
-----------
    trunk/makepackagexml.php

Added: trunk/makepackagexml.php
===================================================================
--- trunk/makepackagexml.php                        (rev 0)
+++ trunk/makepackagexml.php2007-06-11 17:06:26 UTC (rev 506)
&lt; at &gt;&lt; at &gt; -0,0 +1,91 &lt; at &gt;&lt; at &gt;
+&lt;?php
+/**
+ * package.xml generation script
+ *
+ * To create a package you need to do the following. Before making the package
+ * PEL should be compiled so the .mo files are created.
+ *
+ * &lt;code&gt;
+ * $ php makepackagexml.php make
+ * $ pear package package.xml
+ * &lt;/code&gt;
+ *
+ * &lt; at &gt;package PEL
+ * &lt; at &gt;author  Lars Olesen &lt;lars&lt; at &gt;legestue.net&gt;
+ * &lt; at &gt;version &lt; at &gt;package-version&lt; at &gt;
+ * &lt; at &gt;license http://www.gnu.org/licenses/gpl.html GNU General Public
+ */
+
+require_once 'PEAR/PackageFileManager2.php';
+
+$version = '0.9.2';
+$stability = 'beta';
+$notes = '* initial release as a PEAR package';
+$url = 'http://downloads.sf.net/pel/PEL-' . $version . '.tgz';
+
+PEAR::setErrorHandling(PEAR_ERROR_DIE);
+$pfm = new PEAR_PackageFileManager2();
+$pfm-&gt;setOptions(
+  array(
+    'baseinstalldir'    =&gt; 'PEL',
+    'filelistgenerator' =&gt; 'file',
+    'packagedirectory'  =&gt; dirname(__FILE__),
+    'packagefile'       =&gt; 'package.xml',
+    'ignore'            =&gt; array(
+      'makepackagexml.php',
+      '*.tgz',
+      '*.sh',
+      'test/',
+      'tutorials/',
+      'authors.xml'
+    ),
+    'dir_roles'  =&gt; array(
+      'doc'      =&gt; 'doc',
+      'examples' =&gt; 'doc',
+      'test'     =&gt; 'test'
+    ),
+    'exceptions'        =&gt; array(
+      'README'  =&gt; 'doc',
+      'AUTHORS' =&gt; 'doc',
+      'COPYING' =&gt; 'doc',
+      'INSTALL' =&gt; 'doc',
+      'NEWS'    =&gt; 'doc',
+      'TODO'    =&gt; 'doc'
+    ),
+    'simpleoutput' =&gt; true,
+  )
+);
+
+$pfm-&gt;setPackage('PEL');
+$pfm-&gt;setSummary('The PHP Exif Library (PEL) lets you fully manipulate Exif (Exchangeable Image File Format) data.');
+$pfm-&gt;setDescription('The PHP Exif Library (PEL) lets you fully manipulate Exif (Exchangeable Image File Format) data. This is the data that digital cameras place in their images, such as the date and time, shutter speed, ISO value and so on.
+
+Using PEL, one can fully modify the Exif data, meaning that it can be both read and written. Completely new Exif data can also be added to images. PEL is written completely in PHP and depends on nothing except a standard installation of PHP, version 5. PEL is hosted on SourceForge.');
+$pfm-&gt;setUri($url);
+$pfm-&gt;setLicense('LGPL License', 'http://www.gnu.org/licenses/lgpl.html');
+$pfm-&gt;addMaintainer('lead', 'mgeisler', 'Martin Geisler', 'mgeisler&lt; at &gt;mgeisler.net');
+$pfm-&gt;addMaintainer('helper', 'lsolesen', 'Lars Olesen', 'lars&lt; at &gt;legestue.net');
+
+$pfm-&gt;setPackageType('php');
+
+$pfm-&gt;setAPIVersion($version);
+$pfm-&gt;setReleaseVersion($version);
+$pfm-&gt;setAPIStability($stability);
+$pfm-&gt;setReleaseStability($stability);
+$pfm-&gt;setNotes($notes);
+$pfm-&gt;addRelease();
+
+$pfm-&gt;clearDeps();
+$pfm-&gt;setPhpDep('5.0.0');
+$pfm-&gt;setPearinstallerDep('1.5.0');
+
+$pfm-&gt;generateContents();
+
+if (isset($_GET['make']) || (isset($_SERVER['argv']) &amp;&amp; &lt; at &gt;$_SERVER['argv'][1] == 'make')) {
+  if ($pfm-&gt;writePackageFile()) {
+    exit('package created');
+  }
+} else {
+  $pfm-&gt;debugPackageFile();
+}
+?&gt;
\ No newline at end of file


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
</description>
    <dc:creator>lsolesen&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-06-11T17:06:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/526">
    <title>[505] trunk/tutorials/PEL/using.pkg</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/526</link>
    <description>Revision: 505
          http://svn.sourceforge.net/pel/?rev=505&amp;view=rev
Author:   mgeisler
Date:     2007-06-06 13:09:51 -0700 (Wed, 06 Jun 2007)

Log Message:
-----------
Found another example that should use saveFile().

Modified Paths:
--------------
    trunk/tutorials/PEL/using.pkg

Modified: trunk/tutorials/PEL/using.pkg
===================================================================
--- trunk/tutorials/PEL/using.pkg2007-06-06 20:07:57 UTC (rev 504)
+++ trunk/tutorials/PEL/using.pkg2007-06-06 20:09:51 UTC (rev 505)
&lt; at &gt;&lt; at &gt; -167,7 +167,7 &lt; at &gt;&lt; at &gt;
 
     &lt;programlisting role="php"&gt;
       &lt;![CDATA[
-file_put_contents('new-' . $filename, $jpeg-&gt;getBytes());
+$jpeg-&gt;saveFile('new-' . $filename);
       ]]&gt;
     &lt;/programlisting&gt;
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-06-06T20:09:51</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/525">
    <title>[504] trunk</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/525</link>
    <description>Revision: 504
          http://svn.sourceforge.net/pel/?rev=504&amp;view=rev
Author:   mgeisler
Date:     2007-06-06 13:07:57 -0700 (Wed, 06 Jun 2007)

Log Message:
-----------
Introduced a new PelJpeg convenience method: saveFile(), which does
what it says it does. Suggested by Lars Olesen, thanks.

Modified Paths:
--------------
    trunk/INSTALL
    trunk/PelJpeg.php
    trunk/examples/edit-description.php
    trunk/examples/resize.php
    trunk/test/image-tests/read-write.php

Modified: trunk/INSTALL
===================================================================
--- trunk/INSTALL2007-04-28 09:47:51 UTC (rev 503)
+++ trunk/INSTALL2007-06-06 20:07:57 UTC (rev 504)
&lt; at &gt;&lt; at &gt; -1,7 +1,7 &lt; at &gt;&lt; at &gt;
 INSTALL file for PEL: PHP Exif Library.  A library with support for
 reading and writing Exif headers in JPEG and TIFF images using PHP.
 
-Copyright (C) 2004, 2005, 2006  Martin Geisler.
+Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
 Licensed under the GNU GPL, see COPYING for details.
 
 
&lt; at &gt;&lt; at &gt; -65,11 +65,10 &lt; at &gt;&lt; at &gt;
   require_once('PelJpeg.php');
   
   $jpeg = new PelJpeg($argv[1]);
-  
   $ifd0 = $jpeg-&gt;getExif()-&gt;getTiff()-&gt;getIfd();
   $entry = $ifd0-&gt;getEntry(PelTag::IMAGE_DESCRIPTION);
   $entry-&gt;setValue('Edited by PEL');
-  file_put_contents($argv[1], $jpeg-&gt;getBytes());
+  $jpeg-&gt;saveFile($argv[1]);
   ?&gt;
 
 See the examples directory for this example (or rather a more

Modified: trunk/PelJpeg.php
===================================================================
--- trunk/PelJpeg.php2007-04-28 09:47:51 UTC (rev 503)
+++ trunk/PelJpeg.php2007-06-06 20:07:57 UTC (rev 504)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -496,7 +496,8 &lt; at &gt;&lt; at &gt;
    * Turn this JPEG object into bytes.
    *
    * The bytes returned by this method is ready to be stored in a file
-   * as a valid JPEG image.
+   * as a valid JPEG image. Use the {&lt; at &gt;link saveFile()} convenience
+   * method to do this.
    *
    * &lt; at &gt;return string bytes representing this JPEG object, including all
    * its sections and their associated data.
&lt; at &gt;&lt; at &gt; -531,6 +532,17 &lt; at &gt;&lt; at &gt;
 
 
   /**
+   * Save the JPEG object as a JPEG image in a file.
+   *
+   * &lt; at &gt;param string the filename to save in. An existing file with the
+   * same name will be overwritten!
+   */
+  function saveFile($filename) {
+    file_put_contents($filename, $this-&gt;getBytes());
+  }
+
+
+  /**
    * Make a string representation of this JPEG object.
    *
    * This is mainly usefull for debugging.  It will show the structure

Modified: trunk/examples/edit-description.php
===================================================================
--- trunk/examples/edit-description.php2007-04-28 09:47:51 UTC (rev 503)
+++ trunk/examples/edit-description.php2007-06-06 20:07:57 UTC (rev 504)
&lt; at &gt;&lt; at &gt; -4,7 +4,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -205,7 +205,7 &lt; at &gt;&lt; at &gt;
  * bytes with the getBytes method, and saving this in the output file
  * completes the script. */
 println('Writing file "%s".', $output);
-file_put_contents($output, $file-&gt;getBytes());
+$file-&gt;saveFile($output);
 
 /* The End. */
 ?&gt;
\ No newline at end of file

Modified: trunk/examples/resize.php
===================================================================
--- trunk/examples/resize.php2007-04-28 09:47:51 UTC (rev 503)
+++ trunk/examples/resize.php2007-06-06 20:07:57 UTC (rev 504)
&lt; at &gt;&lt; at &gt; -4,7 +4,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2006  Martin Geisler.
+ *  Copyright (C) 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -124,7 +124,7 &lt; at &gt;&lt; at &gt;
 
 /* We can now save the scaled image. */
 println('Writing file "%s".', $output);
-file_put_contents($output, $output_jpeg-&gt;getBytes());
+$output_jpeg-&gt;saveFile($output);
 
 /* The End. */
 ?&gt;
\ No newline at end of file

Modified: trunk/test/image-tests/read-write.php
===================================================================
--- trunk/test/image-tests/read-write.php2007-04-28 09:47:51 UTC (rev 503)
+++ trunk/test/image-tests/read-write.php2007-06-06 20:07:57 UTC (rev 504)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -48,19 +48,16 &lt; at &gt;&lt; at &gt;
     $exif-&gt;setTiff($tiff);
     $this-&gt;assertNotNull($exif-&gt;getTiff());
 
-
     $jpeg = new PelJpeg(dirname(__FILE__) . '/no-exif.jpg');
-
     $this-&gt;assertNull($jpeg-&gt;getExif());
     $jpeg-&gt;setExif($exif);
     $this-&gt;assertNotNull($jpeg-&gt;getExif());
 
-    file_put_contents('test-output.jpg', $jpeg-&gt;getBytes());
+    $jpeg-&gt;saveFile('test-output.jpg');
     $this-&gt;assertTrue(file_exists('test-output.jpg'));
     $this-&gt;assertTrue(filesize('test-output.jpg') &gt; 0);
 
     /* Now read the file and see if the entries are still there. */
-
     $jpeg = new PelJpeg('test-output.jpg');
 
     $exif = $jpeg-&gt;getExif();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-06-06T20:07:58</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/524">
    <title>[503] trunk</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/524</link>
    <description>Revision: 503
          http://svn.sourceforge.net/pel/?rev=503&amp;view=rev
Author:   mgeisler
Date:     2007-04-28 02:47:51 -0700 (Sat, 28 Apr 2007)

Log Message:
-----------
Fixed getBytes() so that it returns... Thanks macondos.

Modified Paths:
--------------
    trunk/NEWS
    trunk/PelJpegComment.php

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS2007-04-24 18:52:22 UTC (rev 502)
+++ trunk/NEWS2007-04-28 09:47:51 UTC (rev 503)
&lt; at &gt;&lt; at &gt; -17,6 +17,9 &lt; at &gt;&lt; at &gt;
 
 Changes:
 
+* Fixed PelJpegComment::getBytes(): it didn't return anything! Thanks
+  macondos.
+
 * Fixed SF bug #1699489: Incorrect UNIX/Julian conversion.
 
 * PEL 0.9.1 introduced a dependency on the calendar extension for PHP.

Modified: trunk/PelJpegComment.php
===================================================================
--- trunk/PelJpegComment.php2007-04-24 18:52:22 UTC (rev 502)
+++ trunk/PelJpegComment.php2007-04-28 09:47:51 UTC (rev 503)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2005  Martin Geisler.
+ *  Copyright (C) 2005, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -103,7 +103,7 &lt; at &gt;&lt; at &gt;
    * &lt; at &gt;return string bytes representing this comment.
    */
   function getBytes() {
-    $this-&gt;comment;
+    return $this-&gt;comment;
   }
 
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-04-28T09:47:52</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/523">
    <title>[502] trunk</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/523</link>
    <description>Revision: 502
          http://svn.sourceforge.net/pel/?rev=502&amp;view=rev
Author:   mgeisler
Date:     2007-04-24 11:52:22 -0700 (Tue, 24 Apr 2007)

Log Message:
-----------
Fixed SF bug #1699489.

Modified Paths:
--------------
    trunk/NEWS
    trunk/PelEntryAscii.php
    trunk/test/ascii.php

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS2007-04-22 22:41:59 UTC (rev 501)
+++ trunk/NEWS2007-04-24 18:52:22 UTC (rev 502)
&lt; at &gt;&lt; at &gt; -11,15 +11,18 &lt; at &gt;&lt; at &gt;
 Notes:
 
 Added a static method, Pel::setJPEGQuality(), for controlling the
-quality for encoding JPEG images. Enabled work around in case PHP
-lacks the calendar extension. Fixed placement of Windows XP tags.
+quality for encoding JPEG images. Fixed bug in conversion between
+Julian Day count and UNIX timestamps and removed dependency on the
+calendar PHP extension. Fixed placement of Windows XP tags.
 
 Changes:
 
-* If PHP was compiled without the calendar extension, we now enable
-  pure-PHP implementations of the necessary functions. The patch was
-  supplied by Fran\xE7ois Pirsch, thanks.
+* Fixed SF bug #1699489: Incorrect UNIX/Julian conversion.
 
+* PEL 0.9.1 introduced a dependency on the calendar extension for PHP.
+  The necessary functions have now been reimplemented in pure PHP. The
+  patch was supplied by Fran\xE7ois Pirsch, thanks.
+
 * Fixed doc comment for PelEntryTime, the variables for date() was
   swapped. Thanks Fran\xE7ois Pirsch.
 

Modified: trunk/PelEntryAscii.php
===================================================================
--- trunk/PelEntryAscii.php2007-04-22 22:41:59 UTC (rev 501)
+++ trunk/PelEntryAscii.php2007-04-24 18:52:22 UTC (rev 502)
&lt; at &gt;&lt; at &gt; -92,7 +92,7 &lt; at &gt;&lt; at &gt;
   function __construct($tag, $str = '') {
     $this-&gt;tag    = $tag;
     $this-&gt;format = PelFormat::ASCII;
-    $this-&gt;setValue($str);
+    self::setValue($str);
   }
 
 
&lt; at &gt;&lt; at &gt; -145,54 +145,6 &lt; at &gt;&lt; at &gt;
 }
 
 
-/*
- * The PelEntryTime class below uses the calendar extension, but if
- * that is not available we can enumate the functions we need.
- *
- * Reference: http://www.hermetic.ch/cal_stud/jdn.htm#comp
- */
-
-if (!function_exists('gregoriantojd')) {
-  // The Julian day number of 1/1/1970 is 2440588.
-  function gregoriantojd($month, $day, $year){
-    $m1412 = ($month &lt;= 2) ? -1 : 0;
-    return floor(( 1461 * ( $year + 4800 + $m1412 ) ) / 4) +
-      floor(( 367 * ( $month - 2 - 12 * $m1412 ) ) / 12) -
-      floor(( 3 * floor( ( $year + 4900 + $m1412 ) / 100 ) ) / 4) +
-      $day - 32075;
-  }
-}
-
-if (!function_exists('unixtojd')){
-  function unixtojd($timestamp){
-    $unix_day = floor($timestamp / 86400);
-    return $unix_day + 2440588;
-  }
-}
-
-if (!function_exists('jdtounix')) {
-  function jdtounix($jday){
-    return ($jday - 2440588) * 86400;
-  }
-}
-
-if (!function_exists('jdtogregorian')) {
-  function jdtogregorian($jd){
-    $l = $jd + 68569;
-    $n = floor(( 4 * $l ) / 146097);
-    $l = $l - floor(( 146097 * $n + 3 ) / 4);
-    $i = floor(( 4000 * ( $l + 1 ) ) / 1461001);
-    $l = $l - floor(( 1461 * $i ) / 4) + 31;
-    $j = floor(( 80 * $l ) / 2447);
-    $d = $l - floor(( 2447 * $j ) / 80);
-    $l = floor($j / 11);
-    $m = $j + 2 - ( 12 * $l );
-    $y = 100 * ( $n - 49 ) + $i + $l;
-    return "$m/$d/$y";
-  }
-}
-
-
 /**
  * Class for holding a date and time.
  *
&lt; at &gt;&lt; at &gt; -306,16 +258,16 &lt; at &gt;&lt; at &gt;
   function getValue($type = self::UNIX_TIMESTAMP) {
     switch ($type) {
     case self::UNIX_TIMESTAMP:
-      $seconds = jdtounix($this-&gt;day_count);
+      $seconds = $this-&gt;convertJdToUnix($this-&gt;day_count);
       if ($seconds === false)
-        /* jdtounix() return false if the Julian Day Count is outside
-         * the range of a UNIX timestamp. */ 
+        /* We get false if the Julian Day Count is outside the range
+         * of a UNIX timestamp. */ 
         return false;
       else
         return $seconds + $this-&gt;seconds;
 
     case self::EXIF_STRING:
-      list($month, $day, $year) = explode('/', jdtogregorian($this-&gt;day_count));
+      list($year, $month, $day) = $this-&gt;convertJdToGregorian($this-&gt;day_count);
       $hours   = (int)($this-&gt;seconds / 3600);
       $minutes = (int)($this-&gt;seconds % 3600 / 60);
       $seconds = $this-&gt;seconds % 60;
&lt; at &gt;&lt; at &gt; -332,7 +284,7 &lt; at &gt;&lt; at &gt;
                                             self::EXIF_STRING,
                                             self::JULIAN_DAY_COUNT,
                                             $type);
-        }
+    }
   }
 
 
&lt; at &gt;&lt; at &gt; -351,14 +303,14 &lt; at &gt;&lt; at &gt;
    * &lt; at &gt;param int the type of the timestamp. This must be one of
    * {&lt; at &gt;link UNIX_TIMESTAMP}, {&lt; at &gt;link EXIF_STRING}, or
    * {&lt; at &gt;link JULIAN_DAY_COUNT}.
-   *
-   * &lt; at &gt;todo How to deal with timezones? Use the TimeZoneOffset tag
-   * 0x882A?
    */
   function setValue($timestamp, $type = self::UNIX_TIMESTAMP) {
+    #if (empty($timestamp))
+    #  debug_print_backtrace();
+
     switch ($type) {
     case self::UNIX_TIMESTAMP:
-      $this-&gt;day_count = unixtojd($timestamp);
+      $this-&gt;day_count = $this-&gt;convertUnixToJd($timestamp);
       $this-&gt;seconds   = $timestamp % 86400;
       break;
 
&lt; at &gt;&lt; at &gt; -366,7 +318,7 &lt; at &gt;&lt; at &gt;
       /* Clean the timestamp: some timestamps are broken other
        * separators than ':' and ' '. */
       $d = split('[^0-9]+', $timestamp);
-      $this-&gt;day_count = gregoriantojd($d[1], $d[2], $d[0]);
+      $this-&gt;day_count = $this-&gt;convertGregorianToJd($d[0], $d[1], $d[2]);
       $this-&gt;seconds   = $d[3]*3600 + $d[4]*60 + $d[5];
       break;
 
&lt; at &gt;&lt; at &gt; -390,6 +342,85 &lt; at &gt;&lt; at &gt;
      * turned into bytes. */
     parent::setValue($this-&gt;getValue(self::EXIF_STRING));
   }
+
+
+  // The following four functions are used for converting back and
+  // forth between the date formats. They are used in preference to
+  // the ones from the PHP calendar extension to avoid having to
+  // fiddle with timezones and to avoid depending on the extension.
+  //
+  // See http://www.hermetic.ch/cal_stud/jdn.htm#comp for a reference.
+
+  /**
+   * Converts a date in year/month/day format to a Julian Day count.
+   *
+   * &lt; at &gt;param int $year  the year.
+   * &lt; at &gt;param int $month the month, 1 to 12.
+   * &lt; at &gt;param int $day   the day in the month.
+   * &lt; at &gt;return int the Julian Day count.
+   */
+  function convertGregorianToJd($year, $month, $day) {
+    // Special case mapping 0/0/0 -&gt; 0
+    if ($year == 0 || $month == 0 || $day == 0)
+      return 0;
+
+    $m1412 = ($month &lt;= 2) ? -1 : 0;
+    return floor(( 1461 * ( $year + 4800 + $m1412 ) ) / 4) +
+      floor(( 367 * ( $month - 2 - 12 * $m1412 ) ) / 12) -
+      floor(( 3 * floor( ( $year + 4900 + $m1412 ) / 100 ) ) / 4) +
+      $day - 32075;
+  }
+
+  /**
+   * Converts a Julian Day count to a year/month/day triple.
+   * 
+   * &lt; at &gt;param int the Julian Day count.
+   * &lt; at &gt;return array an array with three entries: year, month, day.
+   */
+  function convertJdToGregorian($jd) {
+    // Special case mapping 0 -&gt; 0/0/0
+    if ($jd == 0)
+      return array(0,0,0);
+
+    $l = $jd + 68569;
+    $n = floor(( 4 * $l ) / 146097);
+    $l = $l - floor(( 146097 * $n + 3 ) / 4);
+    $i = floor(( 4000 * ( $l + 1 ) ) / 1461001);
+    $l = $l - floor(( 1461 * $i ) / 4) + 31;
+    $j = floor(( 80 * $l ) / 2447);
+    $d = $l - floor(( 2447 * $j ) / 80);
+    $l = floor($j / 11);
+    $m = $j + 2 - ( 12 * $l );
+    $y = 100 * ( $n - 49 ) + $i + $l;
+    return array($y, $m, $d);
+  }
+
+  /**
+   * Converts a UNIX timestamp to a Julian Day count.
+   *
+   * &lt; at &gt;param int $timestamp the timestamp.
+   * &lt; at &gt;return int the Julian Day count.
+   */
+  function convertUnixToJd($timestamp) {
+    return (int)(floor($timestamp / 86400) + 2440588);
+  }
+
+  /**
+   * Converts a Julian Day count to a UNIX timestamp.
+   *
+   * &lt; at &gt;param int $jd the Julian Day count.
+
+   * &lt; at &gt;return mixed $timestamp the integer timestamp or false if the
+   * day count cannot be represented as a UNIX timestamp.
+   */
+  function convertJdToUnix($jd) {
+    $timestamp = ($jd - 2440588) * 86400;
+    if ($timestamp != (int)$timestamp)
+      return false;
+    else
+      return $timestamp;
+  }
+
 }
 
 

Modified: trunk/test/ascii.php
===================================================================
--- trunk/test/ascii.php2007-04-22 22:41:59 UTC (rev 501)
+++ trunk/test/ascii.php2007-04-24 18:52:22 UTC (rev 502)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -101,6 +101,14 &lt; at &gt;&lt; at &gt;
                        '9999:12:31 23:59:59');
     $this-&gt;assertEqual($entry-&gt;getValue(PelEntryTime::JULIAN_DAY_COUNT),
                        5373484 + 86399/86400);
+
+    // Check day roll-over for SF bug #1699489.
+    $entry-&gt;setValue('2007:04:23 23:30:00', PelEntryTime::EXIF_STRING);
+    $t = $entry-&gt;getValue(PelEntryTime::UNIX_TIMESTAMP);
+    $entry-&gt;setValue($t + 3600);
+
+    $this-&gt;assertEqual($entry-&gt;getValue(PelEntryTime::EXIF_STRING),
+                       '2007:04:24 00:30:00');
   }
 
   function testCopyright() {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-04-24T18:52:22</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/522">
    <title>[501] trunk</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/522</link>
    <description>Revision: 501
          http://svn.sourceforge.net/pel/?rev=501&amp;view=rev
Author:   mgeisler
Date:     2007-04-22 15:41:59 -0700 (Sun, 22 Apr 2007)

Log Message:
-----------
Patch by Fran?\195?\167ois Pirsch which implements PHP work arounds for the
calendar functions we use.

Modified Paths:
--------------
    trunk/NEWS
    trunk/PelEntryAscii.php

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS2007-03-24 19:49:11 UTC (rev 500)
+++ trunk/NEWS2007-04-22 22:41:59 UTC (rev 501)
&lt; at &gt;&lt; at &gt; -10,13 +10,21 &lt; at &gt;&lt; at &gt;
 
 Notes:
 
-Added static method for controlling the quality for encoding JPEG
-images. Fixed placement of Windows XP tags.
+Added a static method, Pel::setJPEGQuality(), for controlling the
+quality for encoding JPEG images. Enabled work around in case PHP
+lacks the calendar extension. Fixed placement of Windows XP tags.
 
 Changes:
 
+* If PHP was compiled without the calendar extension, we now enable
+  pure-PHP implementations of the necessary functions. The patch was
+  supplied by Fran\xE7ois Pirsch, thanks.
+
+* Fixed doc comment for PelEntryTime, the variables for date() was
+  swapped. Thanks Fran\xE7ois Pirsch.
+
 * Added static Pel::setJPEGQuality() and Pel::getJPEGQuality() method
-  for setting and getting the quailty used when PelJpeg automatically
+  for setting and getting the quality used when PelJpeg automatically
   converts an image resource to a JPEG image. Thanks Csaba Gabor for
   asking about this.
 

Modified: trunk/PelEntryAscii.php
===================================================================
--- trunk/PelEntryAscii.php2007-03-24 19:49:11 UTC (rev 500)
+++ trunk/PelEntryAscii.php2007-04-22 22:41:59 UTC (rev 501)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -145,6 +145,54 &lt; at &gt;&lt; at &gt;
 }
 
 
+/*
+ * The PelEntryTime class below uses the calendar extension, but if
+ * that is not available we can enumate the functions we need.
+ *
+ * Reference: http://www.hermetic.ch/cal_stud/jdn.htm#comp
+ */
+
+if (!function_exists('gregoriantojd')) {
+  // The Julian day number of 1/1/1970 is 2440588.
+  function gregoriantojd($month, $day, $year){
+    $m1412 = ($month &lt;= 2) ? -1 : 0;
+    return floor(( 1461 * ( $year + 4800 + $m1412 ) ) / 4) +
+      floor(( 367 * ( $month - 2 - 12 * $m1412 ) ) / 12) -
+      floor(( 3 * floor( ( $year + 4900 + $m1412 ) / 100 ) ) / 4) +
+      $day - 32075;
+  }
+}
+
+if (!function_exists('unixtojd')){
+  function unixtojd($timestamp){
+    $unix_day = floor($timestamp / 86400);
+    return $unix_day + 2440588;
+  }
+}
+
+if (!function_exists('jdtounix')) {
+  function jdtounix($jday){
+    return ($jday - 2440588) * 86400;
+  }
+}
+
+if (!function_exists('jdtogregorian')) {
+  function jdtogregorian($jd){
+    $l = $jd + 68569;
+    $n = floor(( 4 * $l ) / 146097);
+    $l = $l - floor(( 146097 * $n + 3 ) / 4);
+    $i = floor(( 4000 * ( $l + 1 ) ) / 1461001);
+    $l = $l - floor(( 1461 * $i ) / 4) + 31;
+    $j = floor(( 80 * $l ) / 2447);
+    $d = $l - floor(( 2447 * $j ) / 80);
+    $l = floor($j / 11);
+    $m = $j + 2 - ( 12 * $l );
+    $y = 100 * ( $n - 49 ) + $i + $l;
+    return "$m/$d/$y";
+  }
+}
+
+
 /**
  * Class for holding a date and time.
  *
&lt; at &gt;&lt; at &gt; -153,7 +201,7 &lt; at &gt;&lt; at &gt;
  * &lt;code&gt;
  * $entry = $ifd-&gt;getEntry(PelTag::DATE_TIME_ORIGINAL);
  * $time = $entry-&gt;getValue();
- * print('The image was taken on the ' . date($time, 'jS'));
+ * print('The image was taken on the ' . date('jS', $time));
  * $entry-&gt;setValue($time + 7 * 24 * 3600);
  * &lt;/code&gt;
  *


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-04-22T22:42:00</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/521">
    <title>[500] trunk</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/521</link>
    <description>Revision: 500
          http://svn.sourceforge.net/pel/?rev=500&amp;view=rev
Author:   mgeisler
Date:     2007-03-24 12:49:11 -0700 (Sat, 24 Mar 2007)

Log Message:
-----------
Better documentation for the Windows XP tags. Gave more credit to
people in the NEWS file.

Modified Paths:
--------------
    trunk/NEWS
    trunk/PelEntryByte.php
    trunk/PelTag.php

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS2007-03-10 00:18:23 UTC (rev 499)
+++ trunk/NEWS2007-03-24 19:49:11 UTC (rev 500)
&lt; at &gt;&lt; at &gt; -11,7 +11,7 &lt; at &gt;&lt; at &gt;
 Notes:
 
 Added static method for controlling the quality for encoding JPEG
-images.
+images. Fixed placement of Windows XP tags.
 
 Changes:
 
&lt; at &gt;&lt; at &gt; -21,8 +21,13 &lt; at &gt;&lt; at &gt;
   asking about this.
 
 * Moved the XP specific tags from the Exif IFD to the IFD0/1 IFD.
+  Thanks Piotr Golebiowski for noticing this.
 
+* Added links from PelTag::XP_* tags to the PelEntryWindowsString
+  class. Thanks Garrison Locke for indirectly pointing out the need
+  for this.
 
+
 PEL Version 0.9.1  December 19th 2006
 *************************************
 

Modified: trunk/PelEntryByte.php
===================================================================
--- trunk/PelEntryByte.php2007-03-10 00:18:23 UTC (rev 499)
+++ trunk/PelEntryByte.php2007-03-24 19:49:11 UTC (rev 500)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -179,10 +179,15 &lt; at &gt;&lt; at &gt;
  *
  * This class is to be used as in
  * &lt;code&gt;
- * $entry = $ifd-&gt;getEntry(PelTag::XP_TITLE);
- * print($entry-&gt;getValue());
- * $entry-&gt;setValue('My favorite cat');
+ * $title = $ifd-&gt;getEntry(PelTag::XP_TITLE);
+ * print($title-&gt;getValue());
+ * $title-&gt;setValue('My favorite cat');
  * &lt;/code&gt;
+ * or if no entry is present one can add a new one with
+ * &lt;code&gt;
+ * $title = new PelEntryWindowsString(PelTag::XP_TITLE, 'A cute dog.');
+ * $ifd-&gt;addEntry($title);
+ * &lt;/code&gt;
  *
  * &lt; at &gt;author Martin Geisler &lt;mgeisler&lt; at &gt;users.sourceforge.net&gt;
  * &lt; at &gt;package PEL

Modified: trunk/PelTag.php
===================================================================
--- trunk/PelTag.php2007-03-10 00:18:23 UTC (rev 499)
+++ trunk/PelTag.php2007-03-24 19:49:11 UTC (rev 500)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -720,7 +720,8 &lt; at &gt;&lt; at &gt;
   /**
    * Windows XP Title
    *
-   * Format: {&lt; at &gt;link PelFormat::BYTE}.
+   * Format: {&lt; at &gt;link PelFormat::BYTE}, modelled by the
+   * {&lt; at &gt;link PelEntryWindowsString} class.
    *
    * Components: any number.
    */
&lt; at &gt;&lt; at &gt; -730,7 +731,8 &lt; at &gt;&lt; at &gt;
   /**
    * Windows XP Comment
    *
-   * Format: {&lt; at &gt;link PelFormat::BYTE}.
+   * Format: {&lt; at &gt;link PelFormat::BYTE}, modelled by the
+   * {&lt; at &gt;link PelEntryWindowsString} class.
    *
    * Components: any number.
    */
&lt; at &gt;&lt; at &gt; -740,7 +742,8 &lt; at &gt;&lt; at &gt;
   /**
    * Windows XP Author
    *
-   * Format: {&lt; at &gt;link PelFormat::BYTE}.
+   * Format: {&lt; at &gt;link PelFormat::BYTE}, modelled by the
+   * {&lt; at &gt;link PelEntryWindowsString} class.
    *
    * Components: any number.
    */
&lt; at &gt;&lt; at &gt; -750,7 +753,8 &lt; at &gt;&lt; at &gt;
   /**
    * Windows XP Keywords
    *
-   * Format: {&lt; at &gt;link PelFormat::BYTE}.
+   * Format: {&lt; at &gt;link PelFormat::BYTE}, modelled by the
+   * {&lt; at &gt;link PelEntryWindowsString} class.
    *
    * Components: any number.
    */
&lt; at &gt;&lt; at &gt; -760,7 +764,8 &lt; at &gt;&lt; at &gt;
   /**
    * Windows XP Subject
    *
-   * Format: {&lt; at &gt;link PelFormat::BYTE}.
+   * Format: {&lt; at &gt;link PelFormat::BYTE}, modelled by the
+   * {&lt; at &gt;link PelEntryWindowsString} class.
    *
    * Components: any number.
    */


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT &amp; business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-03-24T19:49:11</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/520">
    <title>[499] trunk</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/520</link>
    <description>Revision: 499
          http://svn.sourceforge.net/pel/?rev=499&amp;view=rev
Author:   mgeisler
Date:     2007-03-09 16:18:23 -0800 (Fri, 09 Mar 2007)

Log Message:
-----------
Moved XP_* tags from Exif IFD to the IFD0/1 IFD as per the discussion
with Piotr Golebiowski pel-devel. Please see

  http://permalink.gmane.org/gmane.comp.web.pel.devel/146

for the full discussion.

Modified Paths:
--------------
    trunk/NEWS
    trunk/PelIfd.php

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS2007-01-27 19:14:07 UTC (rev 498)
+++ trunk/NEWS2007-03-10 00:18:23 UTC (rev 499)
&lt; at &gt;&lt; at &gt; -20,7 +20,9 &lt; at &gt;&lt; at &gt;
   converts an image resource to a JPEG image. Thanks Csaba Gabor for
   asking about this.
 
+* Moved the XP specific tags from the Exif IFD to the IFD0/1 IFD.
 
+
 PEL Version 0.9.1  December 19th 2006
 *************************************
 

Modified: trunk/PelIfd.php
===================================================================
--- trunk/PelIfd.php2007-01-27 19:14:07 UTC (rev 498)
+++ trunk/PelIfd.php2007-03-10 00:18:23 UTC (rev 499)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -636,7 +636,12 &lt; at &gt;&lt; at &gt;
                    PelTag::COPYRIGHT,
                    PelTag::EXIF_IFD_POINTER,
                    PelTag::GPS_INFO_IFD_POINTER,
-                   PelTag::PRINT_IM);
+                   PelTag::PRINT_IM,
+                   PelTag::XP_TITLE,
+                   PelTag::XP_COMMENT,
+                   PelTag::XP_AUTHOR,
+                   PelTag::XP_KEYWORDS,
+                   PelTag::XP_SUBJECT);
 
     case PelIfd::EXIF:
       return array(PelTag::EXPOSURE_TIME,
&lt; at &gt;&lt; at &gt; -665,11 +670,6 &lt; at &gt;&lt; at &gt;
                    PelTag::SUB_SEC_TIME,
                    PelTag::SUB_SEC_TIME_ORIGINAL,
                    PelTag::SUB_SEC_TIME_DIGITIZED,
-                   PelTag::XP_TITLE,
-                   PelTag::XP_COMMENT,
-                   PelTag::XP_AUTHOR,
-                   PelTag::XP_KEYWORDS,
-                   PelTag::XP_SUBJECT,
                    PelTag::FLASH_PIX_VERSION,
                    PelTag::COLOR_SPACE,
                    PelTag::PIXEL_X_DIMENSION,


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT &amp; business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-03-10T00:18:23</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/519">
    <title>[498] trunk</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/519</link>
    <description>Revision: 498
          http://svn.sourceforge.net/pel/?rev=498&amp;view=rev
Author:   mgeisler
Date:     2007-01-27 11:14:07 -0800 (Sat, 27 Jan 2007)

Log Message:
-----------
Added the JPEG encoding quality controls.

Modified Paths:
--------------
    trunk/NEWS
    trunk/Pel.php
    trunk/PelDataWindow.php

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS2006-12-29 14:57:59 UTC (rev 497)
+++ trunk/NEWS2007-01-27 19:14:07 UTC (rev 498)
&lt; at &gt;&lt; at &gt; -1,10 +1,26 &lt; at &gt;&lt; at &gt;
 NEWS file for PEL: PHP Exif Library.  A library with support for
 reading and writing Exif headers in JPEG and TIFF images using PHP.
 
-Copyright (C) 2004, 2005, 2006  Martin Geisler.
+Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
 Licensed under the GNU GPL, see COPYING for details.
 
 
+PEL Version 0.9.2  (Not yet released)
+*************************************
+
+Notes:
+
+Added static method for controlling the quality for encoding JPEG
+images.
+
+Changes:
+
+* Added static Pel::setJPEGQuality() and Pel::getJPEGQuality() method
+  for setting and getting the quailty used when PelJpeg automatically
+  converts an image resource to a JPEG image. Thanks Csaba Gabor for
+  asking about this.
+
+
 PEL Version 0.9.1  December 19th 2006
 *************************************
 

Modified: trunk/Pel.php
===================================================================
--- trunk/Pel.php2006-12-29 14:57:59 UTC (rev 497)
+++ trunk/Pel.php2007-01-27 19:14:07 UTC (rev 498)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -119,8 +119,43 &lt; at &gt;&lt; at &gt;
    */
   private static $exceptions = array();
 
+  /**
+   * Quality setting for encoding JPEG images.
+   *
+   * This controls the quality used then PHP image resources are
+   * encoded into JPEG images. This happens when you create a
+   * {&lt; at &gt;link PelJpeg} object based on an image resource.
+   *
+   * The default is 75 for average quality images, but you can change
+   * this to an integer between 0 and 100.
+   *
+   * &lt; at &gt;var int
+   */
+  private static $quality = 75;
 
+
   /**
+   * Set the JPEG encoding quality.
+   *
+   * &lt; at &gt;param int $quality an integer between 0 and 100 with 75 being
+   * average quality and 95 very good quality.
+   */
+  function setJPEGQuality($quality) {
+    self::$quality = $quality;
+  }
+
+
+  /**
+   * Get current setting for JPEG encoding quality.
+   *
+   * &lt; at &gt;return int the quality.
+   */
+  function getJPEGQuality() {
+    return self::$quality;
+  }
+
+
+  /**
    * Return list of stored exceptions.
    *
    * When PEL is parsing in non-strict mode, it will store most

Modified: trunk/PelDataWindow.php
===================================================================
--- trunk/PelDataWindow.php2006-12-29 14:57:59 UTC (rev 497)
+++ trunk/PelDataWindow.php2007-01-27 19:14:07 UTC (rev 498)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 /*  PEL: PHP Exif Library.  A library with support for reading and
  *  writing all Exif headers in JPEG and TIFF images using PHP.
  *
- *  Copyright (C) 2004, 2005, 2006  Martin Geisler.
+ *  Copyright (C) 2004, 2005, 2006, 2007  Martin Geisler.
  *
  *  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
&lt; at &gt;&lt; at &gt; -131,7 +131,7 &lt; at &gt;&lt; at &gt;
        * instead of returning them in a more civil way as a string, so
        * we have to buffer the output... */
       ob_start();
-      ImageJpeg($data);
+      ImageJpeg($data, null, Pel::$quality);
       $this-&gt;data = ob_get_clean();
     } else {
       throw new PelInvalidArgumentException('Bad type for $data: %s', 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT &amp; business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2007-01-27T19:14:07</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/518">
    <title>[497]phpdocumentor/pel/templates/media/stylesheet.css</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/518</link>
    <description>Revision: 497
          http://svn.sourceforge.net/pel/?rev=497&amp;view=rev
Author:   mgeisler
Date:     2006-12-29 06:57:59 -0800 (Fri, 29 Dec 2006)

Log Message:
-----------
Use a less aggresive highlight on link hover.

Modified Paths:
--------------
    phpdocumentor/pel/templates/media/stylesheet.css

Modified: phpdocumentor/pel/templates/media/stylesheet.css
===================================================================
--- phpdocumentor/pel/templates/media/stylesheet.css2006-12-29 14:39:05 UTC (rev 496)
+++ phpdocumentor/pel/templates/media/stylesheet.css2006-12-29 14:57:59 UTC (rev 497)
&lt; at &gt;&lt; at &gt; -1,5 +1,5 &lt; at &gt;&lt; at &gt;
 a { color: #000090; text-decoration: none; }
-a:hover, a:active, a:focus { color: highlighttext; background-color: highlight; text-decoration: none; }
+a:hover, a:active, a:focus { color: #3030D0; text-decoration: underline; }
 
 body { background: #FFFFFF; }
 body, table { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT &amp; business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2006-12-29T14:57:59</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/517">
    <title>[496] phpdocumentor/pel/templates/classtrees.tpl</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/517</link>
    <description>Revision: 496
          http://svn.sourceforge.net/pel/?rev=496&amp;view=rev
Author:   mgeisler
Date:     2006-12-29 06:39:05 -0800 (Fri, 29 Dec 2006)

Log Message:
-----------
Lower-case H2 element.

Modified Paths:
--------------
    phpdocumentor/pel/templates/classtrees.tpl

Modified: phpdocumentor/pel/templates/classtrees.tpl
===================================================================
--- phpdocumentor/pel/templates/classtrees.tpl2006-12-29 14:37:49 UTC (rev 495)
+++ phpdocumentor/pel/templates/classtrees.tpl2006-12-29 14:39:05 UTC (rev 496)
&lt; at &gt;&lt; at &gt; -1,9 +1,9 &lt; at &gt;&lt; at &gt;
 {include file="header.tpl" top1=true}
 
 &lt;!-- Start of Class Data --&gt;
-&lt;H2&gt;
+&lt;h2&gt;
   {$smarty.capture.title}
-&lt;/H2&gt;
+&lt;/h2&gt;
 {if $interfaces}
 {section name=classtrees loop=$interfaces}
 &lt;h2&gt;Root interface {$interfaces[classtrees].class}&lt;/h2&gt;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT &amp; business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2006-12-29T14:39:06</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/516">
    <title>[495] phpdocumentor/pel/templates/basicindex.tpl</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/516</link>
    <description>Revision: 495
          http://svn.sourceforge.net/pel/?rev=495&amp;view=rev
Author:   mgeisler
Date:     2006-12-29 06:37:49 -0800 (Fri, 29 Dec 2006)

Log Message:
-----------
Again an extra a element removed, removed a bunch of close tags for
some title elements which should never have been there...

Modified Paths:
--------------
    phpdocumentor/pel/templates/basicindex.tpl

Modified: phpdocumentor/pel/templates/basicindex.tpl
===================================================================
--- phpdocumentor/pel/templates/basicindex.tpl2006-12-29 14:28:03 UTC (rev 494)
+++ phpdocumentor/pel/templates/basicindex.tpl2006-12-29 14:37:49 UTC (rev 495)
&lt; at &gt;&lt; at &gt; -5,8 +5,7 &lt; at &gt;&lt; at &gt;
 &lt;/div&gt;
 
 {section name=index loop=$index}
-  &lt;a name="{$index[index].letter}"&gt;&lt;/a&gt;
-  &lt;div class="index-letter-section"&gt;
+  &lt;div id="{$index[index].letter}" class="index-letter-section"&gt;
     &lt;div style="float: left" class="index-letter-title"&gt;{$index[index].letter}&lt;/div&gt;
     &lt;div style="float: right"&gt;&lt;a href="#top"&gt;top&lt;/a&gt;&lt;/div&gt;
     &lt;div style="clear: both"&gt;&lt;/div&gt;
&lt; at &gt;&lt; at &gt; -15,29 +14,45 &lt; at &gt;&lt; at &gt;
   {section name=contents loop=$index[index].index}
     &lt;dt class="field"&gt;
       {if ($index[index].index[contents].title == "Variable")}
-      &lt;img src="{$subdir}media/images/{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /&gt;&lt;/title&gt;
-      &lt;span class="var-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
+        &lt;img src="{$subdir}media/images/{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}.png"
+             alt="{$index[index].index[contents].title}"
+             title="{$index[index].index[contents].title}" /&gt;
+        &lt;span class="var-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
       {elseif ($index[index].index[contents].title == "Global")}
-      &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /&gt;&lt;/title&gt;
-      &lt;span class="var-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
+        &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png"
+             alt="{$index[index].index[contents].title}"
+             title="{$index[index].index[contents].title}" /&gt;
+        &lt;span class="var-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
       {elseif ($index[index].index[contents].title == "Method")}
-      &lt;img src="{$subdir}media/images/{if $index[index].index[contents].constructor}Constructor{elseif $index[index].index[contents].destructor}Destructor{else}{if $index[index].index[contents].abstract}Abstract{/if}{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}{/if}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /&gt;&lt;/title&gt;
-      &lt;span class="method-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
+        &lt;img src="{$subdir}media/images/{if $index[index].index[contents].constructor}Constructor{elseif $index[index].index[contents].destructor}Destructor{else}{if $index[index].index[contents].abstract}Abstract{/if}{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}{/if}.png"
+             alt="{$index[index].index[contents].title}"
+             title="{$index[index].index[contents].title}" /&gt;
+        &lt;span class="method-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
       {elseif ($index[index].index[contents].title == "Function")}
-      &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /&gt;&lt;/title&gt;
-      &lt;span class="method-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
+        &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png"
+             alt="{$index[index].index[contents].title}"
+             title="{$index[index].index[contents].title}" /&gt;
+        &lt;span class="method-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
       {elseif ($index[index].index[contents].title == "Constant")}
-      &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /&gt;&lt;/title&gt;
-      &lt;span class="const-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
+        &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png"
+             alt="{$index[index].index[contents].title}"
+             title="{$index[index].index[contents].title}" /&gt;
+        &lt;span class="const-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
       {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")}
-      &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /&gt;&lt;/title&gt;
-      &lt;span class="include-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
+        &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png"
+             alt="{$index[index].index[contents].title}"
+             title="{$index[index].index[contents].title}" /&gt;
+        &lt;span class="include-title"&gt;{$index[index].index[contents].name}&lt;/span&gt;
       {elseif ($index[index].index[contents].title == "Class")}
-      &lt;img src="{$subdir}media/images/{if $index[index].index[contents].abstract}Abstract{/if}{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /&gt;&lt;/title&gt;
-      {$index[index].index[contents].name}
+        &lt;img src="{$subdir}media/images/{if $index[index].index[contents].abstract}Abstract{/if}{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}.png"
+             alt="{$index[index].index[contents].title}"
+             title="{$index[index].index[contents].title}" /&gt;
+        {$index[index].index[contents].name}
       {else}
-      &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /&gt;&lt;/title&gt;
-      {$index[index].index[contents].name}
+        &lt;img src="{$subdir}media/images/{$index[index].index[contents].title}.png"
+             alt="{$index[index].index[contents].title}"
+             title="{$index[index].index[contents].title}" /&gt;
+        {$index[index].index[contents].name}
       {/if}
     &lt;/dt&gt;
     &lt;dd class="index-item-body"&gt;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT &amp; business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2006-12-29T14:37:49</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/515">
    <title>[494] phpdocumentor/pel/templates</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/515</link>
    <description>Revision: 494
          http://svn.sourceforge.net/pel/?rev=494&amp;view=rev
Author:   mgeisler
Date:     2006-12-29 06:28:03 -0800 (Fri, 29 Dec 2006)

Log Message:
-----------
Add alt attributes to img elements, remove close tags for unopened
span elements, remove some unnecessary a elements, probably some more.

Modified Paths:
--------------
    phpdocumentor/pel/templates/class.tpl
    phpdocumentor/pel/templates/const.tpl
    phpdocumentor/pel/templates/define.tpl
    phpdocumentor/pel/templates/function.tpl
    phpdocumentor/pel/templates/global.tpl
    phpdocumentor/pel/templates/method.tpl
    phpdocumentor/pel/templates/var.tpl

Modified: phpdocumentor/pel/templates/class.tpl
===================================================================
--- phpdocumentor/pel/templates/class.tpl2006-12-29 14:25:29 UTC (rev 493)
+++ phpdocumentor/pel/templates/class.tpl2006-12-29 14:28:03 UTC (rev 494)
&lt; at &gt;&lt; at &gt; -1,9 +1,12 &lt; at &gt;&lt; at &gt;
 {include file="header.tpl" top3=true}
 
-&lt;h2 class="class-name"&gt;&lt;img src="{$subdir}media/images/{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if}{if $is_interface}Interface{else}Class{/if}_logo.png"
-                            alt="{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if} Class"
-                            title="{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if} Class"
-                            style="vertical-align: middle"&gt;{if $is_interface}Interface{/if} {$class_name}&lt;/h2&gt;
+&lt;h2 class="class-name"&gt;
+  &lt;img src="{$subdir}media/images/{if $abstract}Abstract{/if}{if $access == 'private'}Private{/if}{if $is_interface}Interface{else}Class{/if}_logo.png"
+       alt="{if $abstract}Abstract {/if}{if $access == 'private'}Private {/if}{if $is_interface}Interface{else}Class{/if}"
+       title="{if $abstract}Abstract {/if}{if $access == 'private'}Private {/if}{if $is_interface}Interface{else}Class{/if}"
+       style="vertical-align: middle" /&gt;
+  {if $is_interface}Interface{/if} {$class_name}
+&lt;/h2&gt;
 
 &lt;a name="sec-description"&gt;&lt;/a&gt;
 &lt;div class="info-box"&gt;
&lt; at &gt;&lt; at &gt; -40,17 +43,20 &lt; at &gt;&lt; at &gt;
     {/if}
   &lt;/div&gt;
   &lt;div class="info-box-body"&gt;
-        {if $implements}
-        &lt;p class="implements"&gt;
-            Implements interfaces:
-            &lt;ul&gt;
-                {foreach item="int" from=$implements}&lt;li&gt;{$int}&lt;/li&gt;{/foreach}
-            &lt;/ul&gt;
-        &lt;/p&gt;
-        {/if}
+    {if $implements}
+      &lt;p class="implements"&gt;
+        Implements interfaces:
+        &lt;ul&gt;
+          {foreach item="int" from=$implements}&lt;li&gt;{$int}&lt;/li&gt;{/foreach}
+        &lt;/ul&gt;
+      &lt;/p&gt;
+    {/if}
     {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc}
     &lt;p class="notes"&gt;
-      Located in &lt;a class="field" href="{$page_link}"&gt;{$source_location}&lt;/a&gt; (line &lt;span class="field"&gt;{if $class_slink}{$class_slink}{else}{$line_number}{/if}&lt;/span&gt;)
+      Located in &lt;a class="field"
+      href="{$page_link}"&gt;{$source_location}&lt;/a&gt; (line &lt;span
+      class="field"&gt;{if
+      $class_slink}{$class_slink}{else}{$line_number}{/if}&lt;/span&gt;)
     &lt;/p&gt;
     
     {if $tutorial}
&lt; at &gt;&lt; at &gt; -72,8 +78,7 &lt; at &gt;&lt; at &gt;
 &lt;/div&gt;
 
 {if $children}
-  &lt;a name="sec-descendents"&gt;&lt;/a&gt;
-  &lt;div class="info-box"&gt;
+  &lt;div id="sec-descendents" class="info-box"&gt;
     &lt;div class="info-box-title"&gt;Direct descendents&lt;/div&gt;
     &lt;div class="nav-bar"&gt;
       &lt;a href="#sec-description"&gt;Description&lt;/a&gt; |
&lt; at &gt;&lt; at &gt; -112,8 +117,8 &lt; at &gt;&lt; at &gt;
         &lt;tr&gt;
           &lt;td style="padding-right: 2em; white-space: nowrap"&gt;
             &lt;img src="{$subdir}media/images/{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if}Class.png"
-                 alt="{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if} class"
-                 title="{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if} class"
+                 alt="{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if} Class"
+                 title="{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if} Class"
                  style="vertical-align: center"/&gt;
             {$children[kids].link}
           &lt;/td&gt;
&lt; at &gt;&lt; at &gt; -134,7 +139,7 &lt; at &gt;&lt; at &gt;
 {if $consts}
   &lt;a name="sec-const-summary"&gt;&lt;/a&gt;
   &lt;div class="info-box"&gt;
-    &lt;div class="info-box-title"&gt;Class Constant Summary&lt;/span&gt;&lt;/div&gt;
+    &lt;div class="info-box-title"&gt;Class Constant Summary&lt;/div&gt;
     &lt;div class="nav-bar"&gt;
       &lt;a href="#sec-description"&gt;Description&lt;/a&gt; |
       {if $children}
&lt; at &gt;&lt; at &gt; -163,8 +168,9 &lt; at &gt;&lt; at &gt;
         {section name=consts loop=$consts}
         &lt;div class="const-title"&gt;
           &lt;img src="{$subdir}media/images/Constant.png" alt=" " /&gt;
-          &lt;a href="#{$consts[consts].const_name}" title="details" class="const-name"&gt;{$consts[consts].const_name}&lt;/a&gt; =           &lt;span class="var-type"&gt;{$consts[consts].const_value}&lt;/span&gt;
-
+          &lt;a href="#{$consts[consts].const_name}" title="details"
+             class="const-name"&gt;{$consts[consts].const_name}&lt;/a&gt; = &lt;span
+             class="var-type"&gt;{$consts[consts].const_value}&lt;/span&gt;
         &lt;/div&gt;
         {/section}
       &lt;/div&gt;
&lt; at &gt;&lt; at &gt; -212,7 +218,7 &lt; at &gt;&lt; at &gt;
         {section name=vars loop=$vars}
         {if !$vars[vars].static}
         &lt;div class="var-title"&gt;
-          &lt;img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" alt=" " /&gt;
+          &lt;img src="{$subdir}media/images/{if $vars[vars].access == 'private'}Private{/if}Variable.png" alt=" " /&gt;
           &lt;span class="var-type"&gt;{$vars[vars].var_type}&lt;/span&gt;
           &lt;a href="#{$vars[vars].var_name}" title="details" class="var-name"&gt;{$vars[vars].var_name}&lt;/a&gt;
         &lt;/div&gt;
&lt; at &gt;&lt; at &gt; -226,7 +232,7 &lt; at &gt;&lt; at &gt;
 {if $methods}
   &lt;a name="sec-method-summary"&gt;&lt;/a&gt;
   &lt;div class="info-box"&gt;
-    &lt;div class="info-box-title"&gt;Method Summary&lt;/span&gt;&lt;/div&gt;
+    &lt;div class="info-box-title"&gt;Method Summary&lt;/div&gt;
     &lt;div class="nav-bar"&gt;
       &lt;a href="#sec-description"&gt;Description&lt;/a&gt; |
       {if $children}
&lt; at &gt;&lt; at &gt; -322,13 +328,12 &lt; at &gt;&lt; at &gt;
     &lt;div class="info-box-body"&gt;
       {include file="var.tpl"}
       {if $ivars}
-        &lt;h4&gt;Inherited Variables&lt;/h4&gt;
-        &lt;A NAME='inherited_vars'&gt;&lt;!-- --&gt;&lt;/A&gt;
+        &lt;h4 id="inherited_vars"&gt;Inherited Variables&lt;/h4&gt;
         {section name=ivars loop=$ivars}
           &lt;p&gt;Inherited from &lt;span class="classname"&gt;{$ivars[ivars].parent_class}&lt;/span&gt;&lt;/p&gt;
           &lt;blockquote&gt;
             {section name=ivars2 loop=$ivars[ivars].ivars}
-              &lt;img src="{$subdir}media/images/{if $ivars[ivars].ivars[ivars2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /&gt;
+              &lt;img src="{$subdir}media/images/{if $ivars[ivars].ivars[ivars2].access == 'private'}PrivateVariable{else}Variable{/if}.png" alt="" /&gt;
               &lt;span class="var-title"&gt;
                 &lt;span class="var-name"&gt;{$ivars[ivars].ivars[ivars2].link}&lt;/span&gt;{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}&lt;br&gt;
               &lt;/span&gt;
&lt; at &gt;&lt; at &gt; -416,13 +421,12 &lt; at &gt;&lt; at &gt;
     &lt;div class="info-box-body"&gt;
       {include file="const.tpl"}
       {if $iconsts}
-        &lt;h4&gt;Inherited Constants&lt;/h4&gt;
-        &lt;A NAME='inherited_consts'&gt;&lt;!-- --&gt;&lt;/A&gt;
+        &lt;h4 id="inherited_consts"&gt;Inherited Constants&lt;/h4&gt;
         {section name=iconsts loop=$iconsts}
           &lt;p&gt;Inherited from &lt;span class="classname"&gt;{$iconsts[iconsts].parent_class}&lt;/span&gt;&lt;/p&gt;
           &lt;blockquote&gt;
             {section name=iconsts2 loop=$iconsts[iconsts].iconsts}
-              &lt;img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /&gt;
+              &lt;img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" alt="" /&gt;
               &lt;span class="const-title"&gt;
                 &lt;span class="const-name"&gt;{$iconsts[iconsts].iconsts[iconsts2].link}&lt;/span&gt;{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}&lt;br&gt;
               &lt;/span&gt;

Modified: phpdocumentor/pel/templates/const.tpl
===================================================================
--- phpdocumentor/pel/templates/const.tpl2006-12-29 14:25:29 UTC (rev 493)
+++ phpdocumentor/pel/templates/const.tpl2006-12-29 14:28:03 UTC (rev 494)
&lt; at &gt;&lt; at &gt; -1,9 +1,8 &lt; at &gt;&lt; at &gt;
 {section name=consts loop=$consts}
-&lt;a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"&gt;&lt;!-- --&gt;&lt;/A&gt;
-&lt;div class="{cycle values="evenrow,oddrow"}"&gt;
+&lt;div id="{$consts[consts].const_name}" class="{cycle values="evenrow,oddrow"}"&gt;
 
   &lt;div class="const-header"&gt;
-    &lt;img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /&gt;
+    &lt;img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" alt="" /&gt;
     &lt;span class="const-title"&gt;
       &lt;span class="const-name"&gt;{$consts[consts].const_name}&lt;/span&gt;
        = &lt;span class="const-default"&gt;{$consts[consts].const_value|replace:"\n":"&lt;br /&gt;"}&lt;/span&gt;

Modified: phpdocumentor/pel/templates/define.tpl
===================================================================
--- phpdocumentor/pel/templates/define.tpl2006-12-29 14:25:29 UTC (rev 493)
+++ phpdocumentor/pel/templates/define.tpl2006-12-29 14:28:03 UTC (rev 494)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 &lt;div class="{cycle values="evenrow,oddrow"}"&gt;
   
   &lt;div&gt;
-    &lt;img src="{$subdir}media/images/Constant.png" /&gt;
+    &lt;img src="{$subdir}media/images/Constant.png" alt="Constant" /&gt;
     &lt;span class="const-title"&gt;
       &lt;span class="const-name"&gt;{$defines[def].define_name}&lt;/span&gt; = {$defines[def].define_value|replace:"\n":"&lt;br /&gt;"}
       (line &lt;span class="line-number"&gt;{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}&lt;/span&gt;)

Modified: phpdocumentor/pel/templates/function.tpl
===================================================================
--- phpdocumentor/pel/templates/function.tpl2006-12-29 14:25:29 UTC (rev 493)
+++ phpdocumentor/pel/templates/function.tpl2006-12-29 14:28:03 UTC (rev 494)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 &lt;div class="{cycle values="evenrow,oddrow"}"&gt;
   
   &lt;div&gt;
-    &lt;img src="{$subdir}media/images/Function.png" /&gt;
+    &lt;img src="{$subdir}media/images/Function.png" alt="Function" /&gt;
     &lt;span class="method-title"&gt;{$functions[func].function_name}&lt;/span&gt; (line &lt;span class="line-number"&gt;{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}&lt;/span&gt;)
   &lt;/div&gt; 
 

Modified: phpdocumentor/pel/templates/global.tpl
===================================================================
--- phpdocumentor/pel/templates/global.tpl2006-12-29 14:25:29 UTC (rev 493)
+++ phpdocumentor/pel/templates/global.tpl2006-12-29 14:28:03 UTC (rev 494)
&lt; at &gt;&lt; at &gt; -3,7 +3,7 &lt; at &gt;&lt; at &gt;
 &lt;div class="{cycle values="evenrow,oddrow"}"&gt;
   
   &lt;div&gt;
-    &lt;img src="{$subdir}media/images/Global.png" /&gt;
+    &lt;img src="{$subdir}media/images/Global.png" alt="Global" /&gt;
     &lt;span class="var-title"&gt;
       &lt;span class="var-type"&gt;{$globals[glob].global_type}&lt;/span&gt;
       &lt;span class="var-name"&gt;{$globals[glob].global_name}&lt;/span&gt;

Modified: phpdocumentor/pel/templates/method.tpl
===================================================================
--- phpdocumentor/pel/templates/method.tpl2006-12-29 14:25:29 UTC (rev 493)
+++ phpdocumentor/pel/templates/method.tpl2006-12-29 14:28:03 UTC (rev 494)
&lt; at &gt;&lt; at &gt; -1,11 +1,10 &lt; at &gt;&lt; at &gt;
-&lt;A NAME='method_detail'&gt;&lt;/A&gt;
+&lt;a name="method_detail"&gt;&lt;/a&gt;
 {section name=methods loop=$methods}
 {if $methods[methods].static}
-&lt;a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"&gt;&lt;!-- --&gt;&lt;/a&gt;
-&lt;div class="{cycle values="evenrow,oddrow"}"&gt;
+&lt;div id="{$methods[methods].function_name}" class="{cycle values="evenrow,oddrow"}"&gt;
   
   &lt;div class="method-header"&gt;
-    &lt;img src="{$subdir}media/images/StaticMethod.png" /&gt;
+    &lt;img src="{$subdir}media/images/StaticMethod.png" alt="Static Method" /&gt;
     &lt;span class="method-title"&gt;static {$methods[methods].function_name}&lt;/span&gt; (line &lt;span class="line-number"&gt;{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}&lt;/span&gt;)
   &lt;/div&gt; 
   
&lt; at &gt;&lt; at &gt; -80,7 +79,7 &lt; at &gt;&lt; at &gt;
 &lt;div class="{cycle values="evenrow,oddrow"}"&gt;
   
   &lt;div class="method-header"&gt;
-    &lt;img src="{$subdir}media/images/{if $methods[methods].ifunction_call.constructor}Constructor{elseif $methods[methods].ifunction_call.destructor}Destructor{else}{if $methods[methods].abstract}Abstract{/if}{if $methods[methods].access == 'private'}Private{/if}Method{/if}.png" /&gt;
+    &lt;img src="{$subdir}media/images/{if $methods[methods].ifunction_call.constructor}Constructor{elseif $methods[methods].ifunction_call.destructor}Destructor{else}{if $methods[methods].abstract}Abstract{/if}{if $methods[methods].access == 'private'}Private{/if}Method{/if}.png"  alt="" /&gt;
     &lt;span class="method-title"&gt;{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}&lt;/span&gt; (line &lt;span class="line-number"&gt;{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}&lt;/span&gt;)
   &lt;/div&gt; 
   

Modified: phpdocumentor/pel/templates/var.tpl
===================================================================
--- phpdocumentor/pel/templates/var.tpl2006-12-29 14:25:29 UTC (rev 493)
+++ phpdocumentor/pel/templates/var.tpl2006-12-29 14:28:03 UTC (rev 494)
&lt; at &gt;&lt; at &gt; -1,10 +1,9 &lt; at &gt;&lt; at &gt;
 {section name=vars loop=$vars}
 {if $vars[vars].static}
-&lt;a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"&gt;&lt;!-- --&gt;&lt;/A&gt;
-&lt;div class="{cycle values="evenrow,oddrow"}"&gt;
+&lt;div id="{$vars[vars].var_name}" class="{cycle values="evenrow,oddrow"}"&gt;
 
   &lt;div class="var-header"&gt;
-    &lt;img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" /&gt;
+    &lt;img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" alt="" /&gt;
     &lt;span class="var-title"&gt;
       static &lt;span class="var-type"&gt;{$vars[vars].var_type}&lt;/span&gt;
       &lt;span class="var-name"&gt;{$vars[vars].var_name}&lt;/span&gt;
&lt; at &gt;&lt; at &gt; -47,11 +46,10 &lt; at &gt;&lt; at &gt;
 
 {section name=vars loop=$vars}
 {if !$vars[vars].static}
-&lt;a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"&gt;&lt;!-- --&gt;&lt;/A&gt;
-&lt;div class="{cycle values="evenrow,oddrow"}"&gt;
+&lt;div id="{$vars[vars].var_name}" class="{cycle values="evenrow,oddrow"}"&gt;
 
   &lt;div class="var-header"&gt;
-    &lt;img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" /&gt;
+    &lt;img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" alt="" /&gt;
     &lt;span class="var-title"&gt;
       &lt;span class="var-type"&gt;{$vars[vars].var_type}&lt;/span&gt;
       &lt;span class="var-name"&gt;{$vars[vars].var_name}&lt;/span&gt;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT &amp; business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2006-12-29T14:28:04</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.web.pel.cvs/514">
    <title>[493] phpdocumentor/pel/templates/page.tpl</title>
    <link>http://permalink.gmane.org/gmane.comp.web.pel.cvs/514</link>
    <description>Revision: 493
          http://svn.sourceforge.net/pel/?rev=493&amp;view=rev
Author:   mgeisler
Date:     2006-12-29 06:25:29 -0800 (Fri, 29 Dec 2006)

Log Message:
-----------
Close img element properly, remove extra a element.

Modified Paths:
--------------
    phpdocumentor/pel/templates/page.tpl

Modified: phpdocumentor/pel/templates/page.tpl
===================================================================
--- phpdocumentor/pel/templates/page.tpl2006-12-29 14:24:00 UTC (rev 492)
+++ phpdocumentor/pel/templates/page.tpl2006-12-29 14:25:29 UTC (rev 493)
&lt; at &gt;&lt; at &gt; -1,9 +1,13 &lt; at &gt;&lt; at &gt;
 {include file="header.tpl" top3=true}
 
-&lt;h2 class="file-name"&gt;&lt;img src="{$subdir}media/images/Page_logo.png" alt="File" style="vertical-align: middle"&gt;{$source_location}&lt;/h2&gt;
+&lt;h2 class="file-name"&gt;
+  &lt;img src="{$subdir}media/images/Page_logo.png"
+       alt="File"
+       style="vertical-align: middle" /&gt;
+  {$source_location}
+&lt;/h2&gt;
 
-&lt;a name="sec-description"&gt;&lt;/a&gt;
-&lt;div class="info-box"&gt;
+&lt;div id="sec-description" class="info-box"&gt;
   &lt;div class="info-box-title"&gt;Description&lt;/div&gt;
   &lt;div class="nav-bar"&gt;
     {if $classes || $includes || $defines || $globals || $functions}


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT &amp; business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV
</description>
    <dc:creator>mgeisler&lt; at &gt;users.sourceforge.net</dc:creator>
    <dc:date>2006-12-29T14:25:29</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.web.pel.cvs">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.web.pel.cvs</link>
  </textinput>
</rdf:RDF>
