[36407] trunk/dports/perl/p5-cam-pdf

ricci at macports.org ricci at macports.org
Wed Apr 30 14:37:51 PDT 2008


Revision: 36407
          http://trac.macosforge.org/projects/macports/changeset/36407
Author:   ricci at macports.org
Date:     2008-04-30 14:37:50 -0700 (Wed, 30 Apr 2008)

Log Message:
-----------
bump revision
add patch that improves node traversal (submitted to upstream)
change my email addr to my MP addr

Modified Paths:
--------------
    trunk/dports/perl/p5-cam-pdf/Portfile

Added Paths:
-----------
    trunk/dports/perl/p5-cam-pdf/files/
    trunk/dports/perl/p5-cam-pdf/files/patch-lib-CAM-PDF.pm

Modified: trunk/dports/perl/p5-cam-pdf/Portfile
===================================================================
--- trunk/dports/perl/p5-cam-pdf/Portfile	2008-04-30 21:06:28 UTC (rev 36406)
+++ trunk/dports/perl/p5-cam-pdf/Portfile	2008-04-30 21:37:50 UTC (rev 36407)
@@ -2,20 +2,25 @@
 
 PortSystem                      1.0
 PortGroup                       perl5 1.0
-version                         1.12
+version                         1.13
+revision                        0
 perl5.setup                     CAM-PDF ${version}
-revision                        0
-maintainers                     opendarwin.org at darkart.com
+maintainers                     ricci
 description                     Reads and writes any document that conforms to PDF v1.4
 long_description                This package reads and writes any document that \
 	conforms to the PDF specification generously provided by Adobe at \
 	http://partners.adobe.com/asn/developer/acrosdk/docs/filefmtspecs/PDFReference.pdf \
 	(3rd edition, for PDF v1.4 as of May 2002)
 
-checksums                       md5     f0c7d5fbe03ae08d82fcfbb7a7d88656 \
-                                sha1    de74b10b040db27e2013cad2e291bb03d6702854 \
-                                rmd160  6b49c3afa9fef6c75ac5e0503485becc08fcd421
+platforms                 darwin
 
+patchfiles			patch-lib-CAM-PDF.pm
+
+checksums           md5     497e1b2b5d84defd0b39c262be832915 \
+                    sha1    ccda2d9482e53911ff31045a54b701e16e62c1f5 \
+                    rmd160  abab079bdf72e7179e415e88be97790c86eeee15
+
+
 depends_lib-append              port:p5-crypt-rc4 \
                                 port:p5-text-pdf
 

Added: trunk/dports/perl/p5-cam-pdf/files/patch-lib-CAM-PDF.pm
===================================================================
--- trunk/dports/perl/p5-cam-pdf/files/patch-lib-CAM-PDF.pm	                        (rev 0)
+++ trunk/dports/perl/p5-cam-pdf/files/patch-lib-CAM-PDF.pm	2008-04-30 21:37:50 UTC (rev 36407)
@@ -0,0 +1,148 @@
+--- lib/CAM/PDF.pm.orig	2007-11-28 21:42:46.000000000 -0800
++++ lib/CAM/PDF.pm	2008-03-27 20:06:54.000000000 -0700
+@@ -566,6 +566,9 @@
+             $CAM::PDF::errstr = "Could not decipher xref row:\n" . $self->trimstr($row);
+             return;
+          }
++		if ((0 == $1) && (0 == $2)) {
++			next;
++		}
+          if ($type eq 'n')
+          {
+             $index->{$objnum} = $indexnum;
+@@ -3785,6 +3788,7 @@
+    my $otherdoc = shift;
+    my $otherkey = shift;
+    my $follow = shift;
++   my %traversedNodes = ();
+ 
+    # careful! 'undef' means something different from '0' here!
+    if (!defined $follow)
+@@ -3838,10 +3842,10 @@
+          my $newkey = $self->appendObject($otherdoc, $oldrefkey, 0);
+          $newrefkeys{$oldrefkey} = $newkey;
+       }
+-      $self->changeRefKeys($objnode, \%newrefkeys);
++      $self->changeRefKeys($objnode, \%newrefkeys, \%traversedNodes);
+       for my $newkey (values %newrefkeys)
+       {
+-         $self->changeRefKeys($self->dereference($newkey), \%newrefkeys);
++         $self->changeRefKeys($self->dereference($newkey), \%newrefkeys, \%traversedNodes);
+       }
+    }
+    return (%newrefkeys);
+@@ -5040,7 +5044,7 @@
+    if ($stream)
+    {
+       $stream = $self->{crypt}->encrypt($self, $stream, $objnode->{objnum}, $objnode->{gennum});
+-      $str .= "\nstream\n" . $stream . 'endstream';
++      $str .= "\nstream\n" . $stream . '\nendstream';
+    }
+    return "obj\n$str\nendobj\n";
+ }
+@@ -5072,6 +5076,7 @@
+    my $objnode = shift;
+    my $func = shift;
+    my $funcdata = shift;
++   my $funcResult = undef;
+ 
+    my $traversed = {};
+    my @stack = ($objnode);
+@@ -5080,7 +5085,8 @@
+    while ($i < @stack)
+    {
+       my $objnode = $stack[$i++];
+-      $self->$func($objnode, $funcdata);
++      $funcResult = undef;
++      $funcResult = $self->$func($objnode, $funcdata);
+ 
+       my $type = $objnode->{type};
+       my $val = $objnode->{value};
+@@ -5108,6 +5114,62 @@
+    return;
+ }
+ 
++sub recurseTraverse {
++	my ($self, $deref, $objnode, $traversedRef, $func, $funcdata, $objnum) = @_;
++	
++	my $type;
++	my $val;
++	my @nodes = ();
++	my $node = undef;
++	my $newObjNum = undef;
++	
++	if ((!defined($objnode)) || (! ref $objnode )) {
++		return;
++	}
++	
++	if (defined($objnum)) {
++		$newObjNum = $objnum;
++	}
++
++	$type = $objnode->{type};
++	$val = $objnode->{value};
++	
++	if (exists $objnode->{objnum}) {
++		$newObjNum = $objnode->{objnum};
++	}
++	
++	if ((defined($newObjNum)) && 
++	    (exists ($traversedRef->{$newObjNum}))) {
++		return;
++	} else {
++		$self->$func($objnode, $funcdata);
++	}
++	
++	if ($type eq 'dictionary') {
++		push (@nodes, values %{$val});
++	} elsif ($type eq 'array') {
++		push (@nodes, @{$val});
++	} elsif ($type eq 'object') {
++		push (@nodes, $val);
++	} elsif ($type eq 'reference') {
++		if ($deref) {
++			push (@nodes, $self->dereference($val));
++		} else {
++			return;
++		}
++	} 
++
++	for $node (@nodes) {
++		recurseTraverse($self, $deref, $node, $traversedRef, $func, $funcdata, $newObjNum);
++	}
++	
++	if (($type eq 'object')) {
++		$traversedRef->{$newObjNum} = 1;
++	} 
++
++	return;
++}
++
+ # decodeObject and decodeAll differ from each other like this:
+ #
+ #  decodeObject JUST decodes a single stream directly below the object
+@@ -5538,10 +5600,11 @@
+    my $self = shift;
+    my $objnode = shift;
+    my $newrefkeys = shift;
++   my $traversedRef = shift;
+ 
+    my $follow = shift || 0;   # almost always false
+ 
+-   $self->traverse($follow, $objnode, \&_changeRefKeysCB, $newrefkeys);
++   $self->recurseTraverse($follow, $objnode, $traversedRef, \&_changeRefKeysCB, $newrefkeys, 0);
+    return;
+ }
+ 
+@@ -5558,9 +5621,10 @@
+       if (exists $newrefkeys->{$objnode->{value}})
+       {
+          $objnode->{value} = $newrefkeys->{$objnode->{value}};
++         return 1;
+       }
+    }
+-   return;
++   return 0;
+ }
+ 
+ =item $doc->abbrevInlineImage($object)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20080430/35073edf/attachment.html


More information about the macports-changes mailing list