- handle image creation failures when reading tga files
- set i_format to tiff when reading tiff images and test for it
- handle image creation failures when reading tiff files
+- test t/t35ttfont.t no longer requires TTFONTTEST to be set (and
+ hasn't for a long time,) removed that requirement from README
+- updated home page URLs throughout the .pods
+- added information on reporting bugs to the SUPPORT section of Imager.pm
+- regops.perl now sorts the dumped data structure to produce minimal diffs
=================================================================
where you can also find the mailing list archive.
If you're into IRC, you can typically find the developers in #Imager
-on irc.rhizomatic.net. As with any IRC channel, the participants
-could be occupied or asleep, so please be patient.
+on irc.perl.org. As with any IRC channel, the participants could be
+occupied or asleep, so please be patient.
+
+You can report bugs either by sending email to:
+
+ bug-Imager@rt.cpan.org
+
+or by pointing your browser at:
+
+ https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Imager
+
+Please remember to include the versions of Imager, perl, supporting
+libraries, and any relevant code. If you have specific images that
+cause the problems, please include those too.
=head1 BUGS
Imager::Expr(3), Imager::Matrix2d(3), Imager::Fountain(3)
Affix::Infix2Postfix(3), Parse::RecDescent(3)
-http://imager.perl.org/~addi/perl/Imager/
+http://imager.perl.org/
=cut
================================================================
Copyright (c) 1999-2001 Arnar M. Hrafnkelsson. All rights reserved.
+Copyright (c) 2004 Anthony Cook.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
================================================================
can never see the malloc information that way.
-========================
-5. Truetype information
-========================
-
-If you enable the truetype part and want it to be TESTED you MUST set
-the environment variable TTFONTTEST to a complete path to a truetype
-font.
-
-
=================
-6. Win32 Support
+5. Win32 Support
=================
Imager can be installed on Win32 systems. This was ported and tested
tony@develop-help.com (don't forget to use nmake instead of make).
=======================
-7. General information
+6. General information
=======================
The Imager module homepage is currently at:
========================
-8. Thanks
+7. Thanks
========================
Thanks go to:
=head1 SEE ALSO
Imager(3)
-http://www.eecs.umich.edu/~addi/perl/Imager/
+http://imager.perl.org/
=cut
=head1 SEE ALSO
Imager(3)
-http://www.eecs.umich.edu/~addi/perl/Imager/
+
+http://imager.perl.org/
=cut
Imager(3), Imager::Font::FreeType2(3), Imager::Font::Type1(3),
Imager::Font::Win32(3), Imager::Font::Truetype(3), Imager::Font::BBox(3)
-
-http://www.eecs.umich.edu/~addi/perl/Imager/
+ http://imager.perl.org/
=cut
Imager(3), Imager::Font(3)
-http://www.eecs.umich.edu/~addi/perl/Imager/
+http://imager.perl.org/
=cut
@EXPORT = qw(RBC_ADD RBC_SUBTRACT RBC_MULT RBC_DIV RBC_MOD RBC_POW RBC_UMINUS RBC_MULTP RBC_ADDP RBC_SUBTRACTP RBC_SIN RBC_COS RBC_ATAN2 RBC_SQRT RBC_DISTANCE RBC_GETP1 RBC_GETP2 RBC_GETP3 RBC_VALUE RBC_HUE RBC_SAT RBC_HSV RBC_RED RBC_GREEN RBC_BLUE RBC_RGB RBC_INT RBC_IF RBC_IFP RBC_LE RBC_LT RBC_GE RBC_GT RBC_EQ RBC_NE RBC_AND RBC_OR RBC_NOT RBC_ABS RBC_RET RBC_JUMP RBC_JUMPZ RBC_JUMPNZ RBC_SET RBC_SETP RBC_PRINT RBC_RGBA RBC_HSVA RBC_ALPHA RBC_LOG RBC_EXP RBC_OP_COUNT);
%Attr = (
- 'setp' => {
- 'result' => 'p',
- 'parms' => 1,
- 'opcode' => 44,
- 'func' => 0,
- 'types' => 'p'
- },
- 'green' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 23,
- 'func' => 1,
- 'types' => 'p'
- },
'abs' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 38,
'func' => 1,
- 'types' => 'r'
- },
- 'le' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 29,
- 'func' => 0,
- 'types' => 'rr'
- },
- 'cos' => {
- 'result' => 'r',
+ 'opcode' => 38,
'parms' => 1,
- 'opcode' => 11,
- 'func' => 1,
+ 'result' => 'r',
'types' => 'r'
},
- 'not' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 37,
+ 'add' => {
'func' => 0,
- 'types' => 'r'
+ 'opcode' => 0,
+ 'parms' => 2,
+ 'result' => 'r',
+ 'types' => 'rr'
},
- 'ne' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 34,
- 'func' => 0,
- 'types' => 'rr'
- },
- 'blue' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 24,
- 'func' => 1,
- 'types' => 'p'
+ 'addp' => {
+ 'func' => 0,
+ 'opcode' => 8,
+ 'parms' => 2,
+ 'result' => 'p',
+ 'types' => 'pp'
},
+ 'alpha' => {
+ 'func' => 1,
+ 'opcode' => 48,
+ 'parms' => 1,
+ 'result' => 'r',
+ 'types' => 'p'
+ },
'and' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 35,
'func' => 0,
+ 'opcode' => 35,
+ 'parms' => 2,
+ 'result' => 'r',
'types' => 'rr'
},
- 'mult' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 2,
- 'func' => 0,
- 'types' => 'rr'
- },
- 'rgba' => {
- 'result' => 'p',
- 'parms' => 4,
- 'opcode' => 46,
+ 'atan2' => {
+ 'func' => 1,
+ 'opcode' => 12,
+ 'parms' => 2,
+ 'result' => 'r',
+ 'types' => 'rr'
+ },
+ 'blue' => {
'func' => 1,
- 'types' => 'rrrr'
+ 'opcode' => 24,
+ 'parms' => 1,
+ 'result' => 'r',
+ 'types' => 'p'
},
- 'pow' => {
+ 'cos' => {
+ 'func' => 1,
+ 'opcode' => 11,
+ 'parms' => 1,
'result' => 'r',
- 'parms' => 2,
- 'opcode' => 5,
+ 'types' => 'r'
+ },
+ 'distance' => {
+ 'func' => 1,
+ 'opcode' => 14,
+ 'parms' => 4,
+ 'result' => 'r',
+ 'types' => 'rrrr'
+ },
+ 'div' => {
'func' => 0,
+ 'opcode' => 3,
+ 'parms' => 2,
+ 'result' => 'r',
'types' => 'rr'
},
- 'lt' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 30,
+ 'eq' => {
'func' => 0,
+ 'opcode' => 33,
+ 'parms' => 2,
+ 'result' => 'r',
'types' => 'rr'
},
- 'mod' => {
+ 'exp' => {
+ 'func' => 1,
+ 'opcode' => 50,
+ 'parms' => 1,
'result' => 'r',
- 'parms' => 2,
- 'opcode' => 4,
- 'func' => 0,
- 'types' => 'rr'
+ 'types' => 'r'
},
+ 'ge' => {
+ 'func' => 0,
+ 'opcode' => 31,
+ 'parms' => 2,
+ 'result' => 'r',
+ 'types' => 'rr'
+ },
'getp1' => {
- 'result' => 'p',
- 'parms' => 2,
- 'opcode' => 15,
'func' => 1,
- 'types' => 'rr'
- },
- 'atan2' => {
- 'result' => 'r',
+ 'opcode' => 15,
'parms' => 2,
- 'opcode' => 12,
- 'func' => 1,
+ 'result' => 'p',
'types' => 'rr'
},
'getp2' => {
- 'result' => 'p',
- 'parms' => 2,
- 'opcode' => 16,
'func' => 1,
+ 'opcode' => 16,
+ 'parms' => 2,
+ 'result' => 'p',
'types' => 'rr'
},
'getp3' => {
- 'result' => 'p',
- 'parms' => 2,
- 'opcode' => 17,
'func' => 1,
+ 'opcode' => 17,
+ 'parms' => 2,
+ 'result' => 'p',
'types' => 'rr'
},
- 'value' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 18,
+ 'green' => {
'func' => 1,
+ 'opcode' => 23,
+ 'parms' => 1,
+ 'result' => 'r',
'types' => 'p'
},
- 'subtractp' => {
- 'result' => 'p',
- 'parms' => 2,
- 'opcode' => 9,
- 'func' => 0,
- 'types' => 'pp'
- },
- 'ge' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 31,
+ 'gt' => {
'func' => 0,
+ 'opcode' => 32,
+ 'parms' => 2,
+ 'result' => 'r',
'types' => 'rr'
},
- 'sat' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 20,
+ 'hsv' => {
'func' => 1,
- 'types' => 'p'
+ 'opcode' => 21,
+ 'parms' => 3,
+ 'result' => 'p',
+ 'types' => 'rrr'
},
- 'jump' => {
- 'result' => undef,
- 'parms' => 0,
- 'opcode' => 40,
- 'func' => 0,
- 'types' => ''
+ 'hsva' => {
+ 'func' => 1,
+ 'opcode' => 47,
+ 'parms' => 4,
+ 'result' => 'p',
+ 'types' => 'rrrr'
},
+ 'hue' => {
+ 'func' => 1,
+ 'opcode' => 19,
+ 'parms' => 1,
+ 'result' => 'r',
+ 'types' => 'p'
+ },
'if' => {
- 'result' => 'r',
- 'parms' => 3,
- 'opcode' => 27,
'func' => 1,
+ 'opcode' => 27,
+ 'parms' => 3,
+ 'result' => 'r',
'types' => 'rrr'
},
- 'div' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 3,
- 'func' => 0,
- 'types' => 'rr'
- },
'ifp' => {
- 'result' => 'p',
- 'parms' => 3,
- 'opcode' => 28,
'func' => 1,
+ 'opcode' => 28,
+ 'parms' => 3,
+ 'result' => 'p',
'types' => 'rpp'
},
- 'set' => {
- 'result' => 'r',
+ 'int' => {
+ 'func' => 1,
+ 'opcode' => 26,
'parms' => 1,
- 'opcode' => 43,
- 'func' => 0,
+ 'result' => 'r',
'types' => 'r'
},
- 'eq' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 33,
- 'func' => 0,
- 'types' => 'rr'
- },
- 'multp' => {
- 'result' => 'p',
- 'parms' => 2,
- 'opcode' => 7,
- 'func' => 0,
- 'types' => 'pr'
- },
- 'sin' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 10,
- 'func' => 1,
- 'types' => 'r'
- },
- 'sqrt' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 13,
- 'func' => 1,
- 'types' => 'r'
+ 'jump' => {
+ 'func' => 0,
+ 'opcode' => 40,
+ 'parms' => 0,
+ 'result' => undef,
+ 'types' => ''
},
- 'alpha' => {
- 'result' => 'r',
+ 'jumpnz' => {
+ 'func' => 0,
+ 'opcode' => 42,
+ 'parms' => 1,
+ 'result' => undef,
+ 'types' => 'r'
+ },
+ 'jumpz' => {
+ 'func' => 0,
+ 'opcode' => 41,
'parms' => 1,
- 'opcode' => 48,
- 'func' => 1,
- 'types' => 'p'
+ 'result' => undef,
+ 'types' => 'r'
},
- 'distance' => {
- 'result' => 'r',
- 'parms' => 4,
- 'opcode' => 14,
- 'func' => 1,
- 'types' => 'rrrr'
- },
- 'gt' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 32,
+ 'le' => {
'func' => 0,
+ 'opcode' => 29,
+ 'parms' => 2,
+ 'result' => 'r',
'types' => 'rr'
},
- 'red' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 22,
- 'func' => 1,
- 'types' => 'p'
- },
- 'rgb' => {
- 'result' => 'p',
- 'parms' => 3,
- 'opcode' => 25,
+ 'log' => {
'func' => 1,
- 'types' => 'rrr'
- },
- 'hue' => {
- 'result' => 'r',
+ 'opcode' => 49,
'parms' => 1,
- 'opcode' => 19,
- 'func' => 1,
- 'types' => 'p'
- },
- 'log' => {
'result' => 'r',
- 'parms' => 1,
- 'opcode' => 49,
- 'func' => 1,
'types' => 'r'
},
- 'hsva' => {
- 'result' => 'p',
- 'parms' => 4,
- 'opcode' => 47,
- 'func' => 1,
- 'types' => 'rrrr'
+ 'lt' => {
+ 'func' => 0,
+ 'opcode' => 30,
+ 'parms' => 2,
+ 'result' => 'r',
+ 'types' => 'rr'
+ },
+ 'mod' => {
+ 'func' => 0,
+ 'opcode' => 4,
+ 'parms' => 2,
+ 'result' => 'r',
+ 'types' => 'rr'
+ },
+ 'mult' => {
+ 'func' => 0,
+ 'opcode' => 2,
+ 'parms' => 2,
+ 'result' => 'r',
+ 'types' => 'rr'
},
- 'print' => {
- 'result' => undef,
- 'parms' => 1,
- 'opcode' => 45,
+ 'multp' => {
'func' => 0,
- 'types' => 'r'
+ 'opcode' => 7,
+ 'parms' => 2,
+ 'result' => 'p',
+ 'types' => 'pr'
},
- 'jumpnz' => {
- 'result' => undef,
- 'parms' => 1,
- 'opcode' => 42,
- 'func' => 0,
- 'types' => 'r'
- },
- 'addp' => {
- 'result' => 'p',
- 'parms' => 2,
- 'opcode' => 8,
- 'func' => 0,
- 'types' => 'pp'
- },
- 'int' => {
- 'result' => 'r',
+ 'ne' => {
+ 'func' => 0,
+ 'opcode' => 34,
+ 'parms' => 2,
+ 'result' => 'r',
+ 'types' => 'rr'
+ },
+ 'not' => {
+ 'func' => 0,
+ 'opcode' => 37,
'parms' => 1,
- 'opcode' => 26,
- 'func' => 1,
+ 'result' => 'r',
'types' => 'r'
},
'op_count' => {
- 'result' => undef,
- 'parms' => 0,
- 'opcode' => 51,
'func' => 0,
+ 'opcode' => 51,
+ 'parms' => 0,
+ 'result' => undef,
'types' => ''
},
'or' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 36,
'func' => 0,
+ 'opcode' => 36,
+ 'parms' => 2,
+ 'result' => 'r',
'types' => 'rr'
},
- 'jumpz' => {
- 'result' => undef,
- 'parms' => 1,
- 'opcode' => 41,
+ 'pow' => {
+ 'func' => 0,
+ 'opcode' => 5,
+ 'parms' => 2,
+ 'result' => 'r',
+ 'types' => 'rr'
+ },
+ 'print' => {
'func' => 0,
+ 'opcode' => 45,
+ 'parms' => 1,
+ 'result' => undef,
'types' => 'r'
},
- 'add' => {
+ 'red' => {
+ 'func' => 1,
+ 'opcode' => 22,
+ 'parms' => 1,
'result' => 'r',
- 'parms' => 2,
- 'opcode' => 0,
+ 'types' => 'p'
+ },
+ 'ret' => {
'func' => 0,
- 'types' => 'rr'
+ 'opcode' => 39,
+ 'parms' => 1,
+ 'result' => undef,
+ 'types' => 'p'
},
- 'exp' => {
+ 'rgb' => {
+ 'func' => 1,
+ 'opcode' => 25,
+ 'parms' => 3,
+ 'result' => 'p',
+ 'types' => 'rrr'
+ },
+ 'rgba' => {
+ 'func' => 1,
+ 'opcode' => 46,
+ 'parms' => 4,
+ 'result' => 'p',
+ 'types' => 'rrrr'
+ },
+ 'sat' => {
+ 'func' => 1,
+ 'opcode' => 20,
+ 'parms' => 1,
'result' => 'r',
+ 'types' => 'p'
+ },
+ 'set' => {
+ 'func' => 0,
+ 'opcode' => 43,
'parms' => 1,
- 'opcode' => 50,
+ 'result' => 'r',
+ 'types' => 'r'
+ },
+ 'setp' => {
+ 'func' => 0,
+ 'opcode' => 44,
+ 'parms' => 1,
+ 'result' => 'p',
+ 'types' => 'p'
+ },
+ 'sin' => {
'func' => 1,
+ 'opcode' => 10,
+ 'parms' => 1,
+ 'result' => 'r',
'types' => 'r'
},
+ 'sqrt' => {
+ 'func' => 1,
+ 'opcode' => 13,
+ 'parms' => 1,
+ 'result' => 'r',
+ 'types' => 'r'
+ },
'subtract' => {
- 'result' => 'r',
- 'parms' => 2,
- 'opcode' => 1,
'func' => 0,
+ 'opcode' => 1,
+ 'parms' => 2,
+ 'result' => 'r',
'types' => 'rr'
},
- 'ret' => {
- 'result' => undef,
- 'parms' => 1,
- 'opcode' => 39,
- 'func' => 0,
- 'types' => 'p'
- },
- 'hsv' => {
- 'result' => 'p',
- 'parms' => 3,
- 'opcode' => 21,
- 'func' => 1,
- 'types' => 'rrr'
- },
+ 'subtractp' => {
+ 'func' => 0,
+ 'opcode' => 9,
+ 'parms' => 2,
+ 'result' => 'p',
+ 'types' => 'pp'
+ },
'uminus' => {
- 'result' => 'r',
- 'parms' => 1,
- 'opcode' => 6,
'func' => 0,
+ 'opcode' => 6,
+ 'parms' => 1,
+ 'result' => 'r',
'types' => 'r'
- }
+ },
+ 'value' => {
+ 'func' => 1,
+ 'opcode' => 18,
+ 'parms' => 1,
+ 'result' => 'r',
+ 'types' => 'p'
+ }
);
$MaxOperands = 4;
$PackCode = "i";
=head1 SEE ALSO
-perl(1), Imager(3), http://imager.perl.org/~addi/perl/Imager/
+perl(1), Imager(3), http://imager.perl.org/
=cut
}
}
print OUT "\n\@EXPORT = qw(@ops);\n\n";
-print OUT Data::Dumper->Dump([\%attr],["*Attr"]);
+my $dumper = Data::Dumper->new([\%attr],["*Attr"]);
+$dumper->Sortkeys(1);
+print OUT $dumper->Dump;
print OUT "\$MaxOperands = $max_opr;\n";
print OUT qq/\$PackCode = "$reg_pack";\n/;
print OUT <<'EOS';
=head1 SEE ALSO
-perl(1), Imager(3), http://imager.perl.org/~addi/perl/Imager/
+perl(1), Imager(3), http://imager.perl.org/
=cut