Image-LibRSVG-0.07/0002755000226200027340000000000010405516413012223 5ustar tomprogImage-LibRSVG-0.07/t/0002755000226200027340000000000010405516124012465 5ustar tomprogImage-LibRSVG-0.07/t/1.t0000644000226200027340000000507410405515750013022 0ustar tomprog# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl 1.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 27; BEGIN { use_ok('Image::LibRSVG') }; ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. my $rsvg = new Image::LibRSVG(); open( FILE, "< examples/artscontrol.svg" ); my $content = join "", ; close( FILE ); ok( defined $rsvg ); ## convert ok( $rsvg->convert( "examples/artscontrol.svg", "examples/test.png" ) ); ok( ! $rsvg->convert( "examples/artscontrol.sv", "examples/test.png" ) ); ok( $rsvg->loadFromString( $content ) ); ## convertAtZoom ok( $rsvg->convertAtZoom( "examples/artscontrol.svg", "examples/test.png", 1.5, 1.5 ) ); ok( ! $rsvg->convertAtZoom( "examples/artscontrol.sv", "examples/test.png", 1.5, 1.5 ) ); ok( $rsvg->loadFromStringAtZoom( $content, 1.5, 1.5 ) ); ## convertAtMaxSize ok( $rsvg->convertAtMaxSize( "examples/artscontrol.svg", "examples/test.png", 200, 300 ) ); ok( ! $rsvg->convertAtMaxSize( "examples/artscontrol.sv", "examples/test.png", 200, 300 ) ); ok( $rsvg->loadFromStringAtMaxSize( $content, 200, 300 ) ); ## convertAtSize ok( $rsvg->convertAtSize( "examples/artscontrol.svg", "examples/test.png", 200, 300 ) ); ok( ! $rsvg->convertAtSize( "examples/artscontrol.sv", "examples/test.png", 200, 300 ) ); ok( $rsvg->loadFromStringAtSize( $content, 200, 300 ) ); ## convertAtZoomWithMax ok( $rsvg->convertAtZoomWithMax( "examples/artscontrol.svg", "examples/test.png", 1.5, 1.5, 200, 300 ) ); ok( ! $rsvg->convertAtZoomWithMax( "examples/artscontrol.sv", "examples/test.png", 1.5, 1.5, 200, 300 ) ); ok( $rsvg->loadFromStringAtZoomWithMax( $content, 1.5, 1.5, 200, 300 ) ); ## loading & saving ok( $rsvg->loadImage( "examples/artscontrol.svg" ) ); ok( $rsvg->saveAs( "examples/test.png" ) ); ## get pictures as scalar ok( $rsvg->getImageBitmap() ); ## check when loading fails ok( ! $rsvg->loadImage( "examples/artscontrol.sv" ) ); ok( ! $rsvg->saveAs( "examples/test.png" ) ); ## if we use z-lib let's give it a try if( Image::LibRSVG->isGzCompressionSupported() ) { ok( $rsvg->loadImage( "examples/artscontrol.svg.gz" ) ); ok( $rsvg->saveAs( "examples/test.png" ) ); } else { ok(1); ok(1); } ## formats ok( ref( Image::LibRSVG->getKnownFormats() ) eq "ARRAY" ); ok( ref( Image::LibRSVG->getSupportedFormats() ) eq "ARRAY" ); ok( Image::LibRSVG->isFormatSupported("png") ); Image-LibRSVG-0.07/lib/0002755000226200027340000000000010405516124012770 5ustar tomprogImage-LibRSVG-0.07/lib/Image/0002755000226200027340000000000010405516413014013 5ustar tomprogImage-LibRSVG-0.07/lib/Image/LibRSVG.pm0000644000226200027340000002102610405515750015563 0ustar tomprogpackage Image::LibRSVG; # ---------------------------------------------------------------- # Original File Name: Image/LibRSVG.pm # Creation Date: 04.02.2004 # Description: Loadable Perl-Package # ----------------------------------------------------------------- # # ----------------------------------------------------------------- # Copyright (c) 2004 bestsolution.at Systemhaus GmbH # ----------------------------------------------------------------- use strict; use warnings; require Exporter; our @ISA = qw(Exporter); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. # This allows declaration use SVGLibRSVG ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( 'all' => [ qw( ) ] ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); our @EXPORT = qw( ); our $VERSION = '0.07'; require XSLoader; XSLoader::load('Image::LibRSVG', $VERSION); # Preloaded methods go here. sub loadImage { my $self = shift; my $file_path = shift; my $dpi = shift; my $args = shift; my $rv; if( ! defined $args || (scalar keys %{ $args }) == 0 ) { $rv = $self->loadFromFile( $file_path ); } elsif ( $args->{zoom} ) { $rv = $self->loadFromFileAtZoom( $file_path, $args->{zoom}->[0], $args->{zoom}->[1], $dpi ); } elsif( $args->{dimesion} ) { if( defined $args->{dimension}->[2] && $args->{dimension}->[2] ) { $rv = $self->loadFromFileAtMaxSize( $file_path, $args->{dimension}->[0], $args->{dimension}->[1], $dpi ); } else { $rv = $self->loadFromFileAtSize( $file_path, $args->{dimension}->[0], $args->{dimension}->[1], $dpi ); } } else { $rv = $self->loadFromFileAtZoomWithMax( $file_path, $args->{zoom}->[0], $args->{zoom}->[1], $args->{dimension}->[0], $args->{dimension}->[1], $dpi ); } return $rv; } sub loadImageFromString { my $self = shift; my $file_path = shift; my $dpi = shift; my $args = shift; my $rv; if( ! defined $args || (scalar keys %{ $args }) == 0 ) { $rv = $self->loadFromString( $file_path ); } elsif ( $args->{zoom} ) { $rv = $self->loadFromStringAtZoom( $file_path, $args->{zoom}->[0], $args->{zoom}->[1], $dpi ); } elsif( $args->{dimesion} ) { if( defined $args->{dimension}->[2] && $args->{dimension}->[2] ) { $rv = $self->loadFromStringAtMaxSize( $file_path, $args->{dimension}->[0], $args->{dimension}->[1], $dpi ); } else { $rv = $self->loadFromStringAtSize( $file_path, $args->{dimension}->[0], $args->{dimension}->[1], $dpi ); } } else { $rv = $self->loadFromStringAtZoomWithMax( $file_path, $args->{zoom}->[0], $args->{zoom}->[1], $args->{dimension}->[0], $args->{dimension}->[1], $dpi ); } return $rv; } 1; __END__ # Below is stub documentation for your module. You'd better edit it! =head1 NAME Image::LibRSVG - Perl extension for librsvg =head1 SYNOPSIS use Image::LibRSVG; ## static Methods my $known_formats = Image::LibRSVG->getKnownFormats(); my $formats = Image::LibRSVG->getSupportedFormats(); my $isSupported = Image::LibRSVG->isFormatSupported("tiff"); my $rsvg = new Image::LibRSVG(); $rsvg->convert("my.svg", "my.png" ); $rsvg->convertAtZoom("my.svg", "my.png", 1.5, 1.5 ); $rsvg->convertAtMaxSize("my.svg", "my.png", 200, 300 ); $rsvg->convertAtSize("my.svg", "my.png", 200, 300 ); $rsvg->convertAtZoomWithMax("my.svg", "my.png", 1.5, 1.5, 200, 300 ); $formats = $rsvg->getSupportedFormats(); $isSupported = $rsvg->isFormatSupported("tiff"); $rsvg->loadImage( "my.svg" ); open( SVGFILE, "< my.svg" ); local( $/ ) ; $rsvg->loadImageFromString( ); close SVGFILE; $rsvg->saveAs( "my.png" ); $rsvg->saveAs( "my.jpg", "jpeg" ); $rsvg->loadImage( "my.svg", 0, { zoom => [ 1.5, 1.5 ] } ); $rsvg->saveAs( "zoomed.png" ); my $bitmap = $rsvg->getImageBitmap(); =head1 ABSTRACT This module provides an Perl-Interface towards the gnome-lib librsvg-2. =head1 DESCRIPTION This module provides an Perl-Interface towards the gnome-lib librsvg-2 which is able to convert SVG(Scaleable Vector Graphics) into bitmapformats like (PNG,JPG,...). To which formats you can convert the svg-files depends on your gdk-pixbuf configuration. Still at least PNG and JPG should be available. =head2 EXPORT None by default. =head2 Methods =head3 Constructor =over =item * new() =back =head3 static methods =over =item * B getKnownFormats() returns all formats known to gdk-pixbuf =item * B getSupportedFormats() returns all formats you can store your svg image into =item * B isFormatSupported( String format ) returns true if you can store your image in this format else false =back =head3 member methods =over =item * B loadImage( B svgfile[, B dpi=0, B args] ) This is function provides a common call mechanism to for all functions below, the args-variable can hold the following values: =over =item Case 1( = loadFromFile ): undef =item Case 2( = loadFromFile ): empty hashref =item Case 3( = loadFromFileAtZoom ) zoom->[0] ... x_zoom zoom->[1] ... y_zoom =item Case 4( = loadFromFileAtMaxSize ): dimension->[0] ... x-size dimension->[1] ... y-size =item Case 5( = loadFromFileAtSize ): dimension->[0] ... x-size dimension->[1] ... y-size dimension->[2] ... max-size-flag =item Case 6( = loadFromFileAtZoomWithMax ): zoom->[0] ........ x_zoom zoom->[1] ........ y_zoom dimension->[0] ... x-size dimension->[1] ... y-size =back =item * B loadImageFromString( B svgfile[, B dpi=0, B args] ) Loads the image from an String containing a plain SVG. For information about args see loadImage. =item * B loadFromFile(B svgfile,[B dpi=0]) =item * B loadFromFileAtZoom( B svgfile, B x_zoom, B y_zoom[, B dpi=0] ) =item * B loadFromFileAtMaxSize( B svgfile, B width, B[, B dpi=0] ) =item * B loadFromFileAtSize( B svgfile, B width, B height[, B dpi=0] ) =item * B loadFromFileAtZoomWithMax( B svgfile, B x_zoom, B y_zoom, B width, B height[, B dpi=0] ) =item * B loadFromString(B svgfile,[B dpi=0]) =item * B loadFromStringAtZoom( B svgfile, B x_zoom, B y_zoom[, B dpi=0] ) =item * B loadFromStringAtMaxSize( B svgfile, B width, B[, B dpi=0] ) =item * B loadFromStringAtSize( B svgfile, B width, B height[, B dpi=0] ) =item * B loadFromStringAtZoomWithMax( B svgfile, B x_zoom, B y_zoom, B width, B height[, B dpi=0] ) =item * B convert( B svgfile, B bitmapfile[, B dpi=0, B format="png", B quality=100] ) =item * B convertAtZoom( B svgfile, B bitmapfile, B x_zoom, B y_zoom[, B dpi=0, B format="png", B quality=100] ) =item * B convertAtMaxSize( B svgfile, B bitmapfile, B width, B height[, B dpi=0, B format="png", B quality=100] ) =item * B convertAtSize( B svgfile, B bitmapfile, B width, B height[, B dpi=0, B format="png", B quality=100] ) =item * B convertAtZoomWithMax( B svgfile, B bitmapfile, B x_zoom, B y_zoom, B width, B height[, B dpi=0, B format="png", B quality=100] ) =item * B saveAs( B filename, [ B type, B quality ] ) Saves the image to a file =item * B getBitmap( [ B type, B quality ] ) Saves the image to a scalar which can be passed on to other applications. This only return a useful value if you have compiled it with a gdk-pixbuf greater than or equal to 2.4 =back =head1 SEE ALSO http://librsvg.sf.net =head1 AUTHOR Tom Schindl, Etom.schindl@bestsolution.atE =head1 COPYRIGHT AND LICENSE Copyright 2004 by Tom Schindl and bestsolution Systemhaus GmbH This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut Image-LibRSVG-0.07/examples/0002755000226200027340000000000010405516124014040 5ustar tomprogImage-LibRSVG-0.07/examples/wine.svg0000644000226200027340000000671110405515750015532 0ustar tomprog ]> Image-LibRSVG-0.07/examples/kate.svg0000644000226200027340000022632510405515750015521 0ustar tomprog ]> Image-LibRSVG-0.07/examples/konsole.svgz0000644000226200027340000001251510405515750016433 0ustar tomprog ]moǑ pf]޲@)ˀ'9Ap8j-!,{rW 鬓׀=]]]TuUjfyv~|zro.ϖ''/͏OۜCie?7w׶o'˳ggwfs9vz}~f3_bۓ٬m_>G7/foÃçZ猛=xzl6yq۷o;={q?X4s=?=x>oO>;0ǫ՝gg,,al׸ݪ`GpMj+Z={?/N^_m>?G_۾=~~nu|<[PXl~mBlՈ#m6~{i526ø ck%S"IaGH/װXifJޘ/e!yd}o;I;pQxdK 12lvݯVaK^# >=v۞ %Fc\SRTC{b>{<~ӟ3h;X&{WgٛeƋ{['cϨBQߠ7jo˵6}=~\[gC]h$E|)iv%FT]LMJcX^[$׮/ K8\$BV(҈vFBr\No+=^~Jt޷6v-+ `8+|}aCSJ]p @$[BAVF ì=ڇU&q+XY *:_I^*VJ*($"&0\)?{"6o=ٞ8aA,NKGކ:IvE]$6UJ{ B@PC k.2 FmR_f T#G$:r,: r / 4 ZVŪ%GKrY,0E$|CEU/Wr\DFu%*rVؐn{cRQ c8y12^%mܖiPd Yc HHJ g$1qQKɋ+θaM5{R*c5U+na:_|l%U&Wj;ώ/"N GW$RX|2%PHhj6kGǀo:3aR&#F-4X;W灯7j&2QX-|*+jcay>NBKvx CC`"QwyEpm5Kg1 7Ao]FuuW_l&Y{6 \ԗ@#UXvݭ81P^VL2:2FL=:( P:$XvQS k-> W-m><}8OW6muJ\iG䝳زSɭziش\{$*tI;LD?m LL݄{-Mr*}nr5B4q͎Rԫnt:ϼðg%} 8C6.BTջQoq*U!ZB3EnUBrj[*%SCSgKVد*4&C~ 2Ec݂bl5Z$lv,㒧~Lg +`X~bdr׮zrCdz| #q;qa][;9܃"?MNAxtx1'nלXv=Pv?^kΏ^qo>J'=Lݓ5Enhk趪lpa{L٢ηEA{$qF{CN@J&CㅒœXDK%?x}\M'Щ"y]%{ Z F,xsI}W~d [x֏=*[&FQstG;;i%2a^ys=4@G~^h$3s,6{p}V7<aH! ԓ@MOߥсZ^/,qJ]x'ڶz|uxY%n@*ˮC=$C/]9TGm5" <@;§D2E ]Z(gdra_qUj Ld <ݼRQ T0%i U5)܋P}\9&Gm8Jz9jtK ëM +KThjTS'u !D8kbP CXИ<e`7 =D!)3qR˄/cc( {KO|oOD| t͒S.Z4?(6d;ͦ.3KZL2`7Ft6S`Cx,JhԀä`$FBCkEԛ}c@y. \B}{Y_,Db>Cxn8|d^K5~;!EF7UtUt-Vz '궃l{9hiW8y;x3™mї(M|  Es\ZNWC(kZBa,!1靶&fL:MOhTBhgxɴȸc*<}D֎F*\\÷]iodu'-:(R iPǷ` rV_sMw3z7 ~OeaGtk5w{ر{Ž!ɮ@45] Szlhd &A3aiSLa< =m_E.0J)´ \74laO8o*ϸ-_ mI æ}͚,nd1Eqŋ55[&ķ&$UJboMmaxMW6 Ngm0&ift{fIlԐgX~5ƶG3[ Ld3B&㷈3fcD7Jx\xAOHDRGŒJp-&׮OZc?~|9菵<-tl3ϸ>l4# l dryI*IiO *ޤ0[2Z8"=^!F?JaS f/ODbzqqhfMQcIt#aW`V?eP빇,wUEͪuе<q0ڪ0eMVI{vmZ`1uâ Û>HASv)[M ?PXٟ Ũטz'3`'pAH wOvMu7J,Qc#0aXovb 32pY[ᙓD_[nF}~ǵC!DFcQ+*뉙zVJCSN|NI1zZY#U_3Q)r?^ @(7^*#TI=cFf`F[U0m 7n&'1 Fa[06ӏg:(l 񔟙A^x͞5@$GuN#1Zgyrǁ" M$M</=߄I}H (pl@=Gٿq7Mm9n>ȄÕ HonLO@!Gq<:  ]> Image-LibRSVG-0.07/examples/staroffice.svg0000644000226200027340000041214710405515750016721 0ustar tomprog ]> Image-LibRSVG-0.07/examples/klipper.svg0000644000226200027340000002002010405515750016223 0ustar tomprog ]> k Image-LibRSVG-0.07/examples/artscontrol.svg.gz0000644000226200027340000000454510405515750017564 0ustar tomprogwAartscontrol.svg.tmpZksH_#I@ؙJT:.{6:b~z{ENyw}Lr.y(ʲnsssߨ8:uLgm\^_:Yx \\xxԞλwvvӇn#\4z}ߠ}fI/Kf]0ًjO?wƵ/p3ZjelI ]41_o :1yW*-4#Npg'"Ihf?zq2bITo˷2TMZ6J%6 gG˵OqǧK4Pmz_/Ivb`ilgJ ٷ tκvޯgߺUT\$kT_\JG]/Uxp_w5X]':,~< ojG{l|$L@B%W9E1IjB/73"+纗]sN¤ y!a'Ι*ì41^3bdtb^Z8|kŬU UIcWa=R?A֡^Z" :EM?XiY9tG6@EϗB\)o[ uVz9 XiDqd(A\RSX&@(8dE #) :Yb+JnPZr6(&ʶ 8{$au3*70-=JkXwʭ 1Ewh Іe'M<>G$aADB ȐS!u + TU+jeYCP0h!X++=k5Sp+ƷB'f*Z0~/neTp]\?Bq%K'BX׸@#nWzLY/1?XƬϕMwwl)$I]/9[jW+|AvaޡJ)P{ j+7Fxޥ 5Az䘛4M/ ʦ9pW_a!4ޜU7 lAOm=k{y4)cAwNU%]QdhLkފj^sĊB]U ûZ1,%H["-= p< |0"!3e.Image-LibRSVG-0.07/examples/artscontrol.svg0000644000226200027340000002714510405515750017146 0ustar tomprog ]> Image-LibRSVG-0.07/examples/konsole.svg0000644000226200027340000006460210405515750016245 0ustar tomprog ]> Image-LibRSVG-0.07/examples/kmail.svg0000644000226200027340000002222710405515750015665 0ustar tomprog ]> Image-LibRSVG-0.07/examples/openoffice.svg0000644000226200027340000001133510405515750016703 0ustar tomprog ]> Image-LibRSVG-0.07/examples/test.png0000644000226200027340000003354210405515750015536 0ustar tomprogPNG  IHDR sBIT|d IDATx}{EUOP7%7Bp]u \UP. AP"DȊb]WJd\999zjzggzΙs[~Uu"D!B"D!* p弜t$p'@ 6x- 9 B_{ÉPcy!wMt2&9@}=7#2Iv [{ jo| ƠdpiLR mݝ4xWhi Iv蹕U'BB. 2 Չ`H= ЂgVJPT*d N5Fq!yyE r'!"%2 W5 cW$2 ' 'z!FwVuf@Hq_'Y$2S'O2HϖR.95"R,E<F~mnOT %|,cp$&*A2HS%j1QLj`JZ!G,&ZAxmtZe $T/!̠|i*dR14!q_eБ >L6IDSHS%"[ MJυdN'CB?aRsPي,EoVBBUG18ZDE DɓG'·Bb9 ~ (sNSBK+,O2s4zw;tuPep/ >'5MBl;''pXQ U@$?;VH2b13(KmtgӴg*<]4@hp+D "ɣ4lr8)Ds2NB剫שmSĔ':.Ċ`dڳ{]՜xCH(\3x@oQD"P#͜HTT ZNyz>I8v5eAc܎V e94"s~Bwo |q'¬+,:@R!JHC,TB␣OV-n$seI1'錐ڨkq%\~ukߓ? e2P -m"A(" k\IF qP. A]xVm"Y2`Y&Q&2HBZ" '6(T!0^Vz *u5W;BeME$c6& b%|A :5aU| @X@0r1HX0ؐ ȼoC ,`,t aG ikd1ΆUql-W Gaŋ` Yx.0 ")6`bmPL@q r¼CBbGioHҮey~k*X!ȡ`dtyS:2Ȓ$DV6g˷pKPnNneIH vAntdUu%&wM "R@z=GE>N\Ɩ-51RD"fi٫zYB!,Nw.wK A EB'-'FH0 *"I M ICʽF >f:gLN*6e$R[4d$1QH('BBiM>Jyoy;x 0> Hd9$AJr0s$-0@VF0̦!e3EY^;*`r DH( -Jf.T/  M d htP(Lw?dˁfH \шYYVf"a2 (͌):ڪ^z%^{'}=RG&8q`t@o̕ ɕwLX2嗘LZl{>M:FBQ?`:mp&}98?2xdUK-XW^ M"4B-Ydƛo?wy&/{nkk_~e,=<''GM#4{?P:Dz[J'r9Lm/4 iӦ6nLg>j)%ytIU10``鎳kg؂ЄzMpQG3y}2+Bɠ`h\*(^b4$6obG͛7/~,,7XA(MMh8Bk iIW_%l `Pj3Cʆvv:P۶m&\YiBFH)4 C۷z#42T(P\vA]^;M U kvq.d?\.W39$TH96o|r6y8B*MիWc֭Űnݺ Nm0ro1z+4E9B N@KKKE=^ƜPGuԎM60?U&TP|!3_P&BH҄ҕR _!Ū>BC 8㟒--zrfU+TyLr@EJd2C=4G C(^x#u䖎rxxxg:2#sF'h/ʧYQ=zFѸ=mSOcyiN.8o߾ɞmv*!Hď9YӧOem7u`QO>0ZzwE=ӧo9#>u4Rl===l޼%FFFR>#{3fBDCBz8%Խm\ C(Xz? Go߾m۶mwuwwOꚚJvر}lorkG= *T@BkJ6;͞;%=F>@Jhh!LҀ5i[1yd9Ht vc:k2 $)b˒f'I)=;36א?D*:͞S{z(JD$[&Ex,KcT63tb85+ZJx9Ad/ZR#9N/?ۋ "gX~ނpk80j06!DD mƋ\l%qso3gάawƍ DTp K^6І~0u#.ݳ'ML$[-mm}xd"">kIY89o߾vWC,}%g17R mhB:͊\hΤA m&cQ>>J9a1H01gxN 0N׍1B%'u:a={tOz-g@#0@1HG[m-K^#g-ɖ-;<4"DDkXBҳe<І6vw04))2-"Uᄑ"b\*H,={َ6~럺cq; Y&E~s]iMaՖՌ4ɬ€\9"W,ZGxf 5~5;5pM0g!`KJe~bbx&LA/e~B=}cv{VB'Xz!U|D}:VYij$YFE $#\1uW*ΜTj>\iQXb@ dkN\$l'ƑISc־ |PD0`1 ciIaz2Y7ay(O K5b aZnn| nδN&zS~WE6Cذl͟k" L/4Ex@}>M–(A2E F"`D ̆$9RJG'3YIU)56Nw'H5 "ieu2$%K!L;R+)BZ4$IN~rZ'<&Ox޾l.[fOg1s5 ` )3CeJ ݛy0vPBH(cW:ie( `f .Lg83i,!2"7:9e װ%EU$$\!l $db"9t溰:$LFv &*^qjZCo+L#m \2%ۤj`rXfM.)0d 9vP khmj5֗5ֳ>WaN,I%,2Yεd)!7C.%e5)eY)a$EfYPf☩^ _]JV1Nzg8ZL^"(L>tWKS)N#yU \LلYdE&jejBHq5O_[njG:5E´LRY>sX!jxXX]LSR! JE X5H0+2 USvuK/*Mh bD'8Dyݺu;V9i>2# d9sj$A,^Bǡfmɪ}jv42蓔3ϜTVw9|0" u<(ʥT̳=B)1ʫZPwAD3JDhQ+,X }'Dz!׾V3*^&!ߝF>pdYdrSݿzL&uA?&*PЇZhpF=yq Z"~+]*^1%?cx KʌBf&)Gon B]{!>;"YD4! HBſa "o7V bi) u9dz̔+L뗓8_:1Ps;h.:0!PG~HDOp R?[+I#}0nrB#TP7nfxxXա~裏n*Che˖HD@Dp:N6En5^y89uʕ\Yn*/1$:NaLYg%yKD'D ׉뮻{[ xELB.K!̐3ǧLx~7q3ϜID@Q'P5i ˫W֦|* .ҽD`BգZtDI @CBCZ7\\{?#/ __khVDt%a " 'g1D2qJAD{_cn ^s591ڭx[P!ҥK; XBDU8|MDۮUW_}w*{*屆־WP ugƘ>,<@A ~0ݷf͚%+WZכʯhA5;|3<!pEm5 Ӿ^&ۯꪚW I߷gO1sj Q_ڈ"x7Xs!)r'1Af/~Wx?i馛g?٪zRP͝l $T(\4>roA/T ^Os c|+wRyFKjI[*>ഇ#k׮g>S%TPBUK&} 2XnKi񂈮#WZ-uqJY iW-iKM[c^cr!E`MM(!D_2x&*I[8n5y9ҞHDOz뭋*xM|%Ht%@i+<.mv J` D"oD2lY%~'ѧ/_n㎛Ŝ ;v&T"hDž)":;Xr%8ǹ`>,E+W&RTt<fȫDw[]t=}7N ׄ‘G9*E(fX ;ϸ `O8&8WMV Q{L4j +v u]I tJ _ EDSx#u.mx7ׯ_hWKɭjAjZҖҼ*I?iuQؚUo0Q?[ɂBT D"H M=G7Wo&3Lf\f;n稑+D E(!D'b>sF,͐Wm_P emٷj5W|5i+N4%T;3߸q+OMAр_aШ 'm#+L-iCB eՅ>n7}h UC{a2z uhPIf3# r^+ȹV{JjjDD\"QFOjsB/(5bJ'Oݻ=ӗS=ִ^nyyJkɫ6B*T03c6y IDATҤIivE *TDC;::Ff[/Vl~VWP*, pu(! `+D=b֭Eyy?e]O?s/,Xk3_Hʈh =XWWWGjRj *_/)_M^\qarOp!d/0v`z*L_'"bG}  xG&M*fҤI,ٿk jFxVrg̼h+yhr!?鉕 ?CtS(E΢^~[roz?i+ɫi%W-hrTL(!D_&Qk^w4z;my-~JDj+\W?}ʥoi˽ J5ꕶ<6ԡZ+1bZZZ*VzJ#'PÉJDBcJ&ʣW郭$>xgZuJ[~ҖCe`pɗPzotYkW&j$hUA|qރf@PBW\7D###Ư3><ihoh2i؍qJHH7h(HPomyyÏꙖDgg'?~*T7.3#!Naü6H)P00J^^դ*MFJlc8%R LXα᧷FLFQ_ᩢRJRK^?"gaK z@Bmmmbbyx:l6\.l6k/*MVM[s\7QmIzt`,CKK ZZZL&!ӕ2;HEDsRR cqfB 5*y)T92bXJ=x{|妦^-ۋVZ+PPxgM*>%U4{9k}ʙu9JT ^r޽ LV.PY~xbfoCOO>htvven9wK=AdY̘1lJ: IdܣB-*W# [ApV~<u+/q3K7˝|`pp`okVS/R*eY2Wj OBs=O"& (En`flݺ7nĮ]*r@d*W*Usb޽/iƍEa]===MdR8#QDFcf gSO=~W'SRʥQX@u ܹCCC*3-d2#/3;f*s+\H$*w{WOdV|IlڴXBUBJԊld2Eozu]փL[K^af~%K^(&SVxB]Or3v܉̜9|ȵj]wyduVuQXt|5y9=8wMWB}T Mz[[ fTY`ޖ:v؁3f`̙V*T1+%z%aٳS䇱+eZҌWS) &Ug-^al&x)Ա\0&2; !0<<8npƗΝ;{nL:p:mkRnkǎ}zVkuJ_:. 3`3VZVbڮXJ2Lvz>z{t#UaW۵WPjٳgFߩD/.X`/BPwuסRʷRj]bd2@'7x#@)&PmuU\ Doo/Njc<ԿN9e3/?Ϊ2kkzg28Zߺ,zZUTnf qVpvZU\RBhp|ԊJL?HB{ñ0Jo>͜aT$YG֗"2 y=eTEiCW8FUʍY N7aR'1es} !*m\y1a՘g@0*!&ٳ`'uR땆UBd ΝrBq?Xp+̙sXxP\.cUS?Ōt&N304j6n={ ?uQ5{, n^u̞=R o`ڔ+X3,TGsE79+BpvTjS?k֬k kdF"R"l0ONM$f&L p ="%fϞ=tjFX|ffrzl{DNrYzaP.#~Isu/!Bw+vAB? STKuqj"uܹs6MK/4˫) mV+:#)o1$D$gܹ!J__ fXו;]9AJ& |}x޼ys(*)+V23cIT/B, ۟.}<+V>^3o.? @gVI5+?nuzma:}1?~LRw s4[npe3kuM腲Զ2 8$dz5: !7+tBX\uU̼1Vd gDyX,xh(0}u?ax0.?RiQ=JֶWZ=*g_B4ʢ]di R%z&F٧{5d̼M43"<F{{;ZZZH$ŊF8\HL=3 ą 66&\{ ګz33=Al73m涭x1W9L-/>!F믿;l~%١e@WW&Ol̼MJy{"6o$pxqFaVy0~~6D|n3 3Jk;7Q2-YO<&ڵkc3"xW;xcݺu0ΈKЕzA>ա.ׯ_f>ʾ M#97{.gCn358SÞ w,{_wIf~;3WBg[ j[ca-Z!SKy63e_Έ+.\x+ 1o'~,a<=#-.Λa浣BĘ \ `.dPp-B_䍉1}?'?[DEI3y֚feçrJOO!DPsB)G?~$;7כhL er|a+w/CP 6ls/ S * ysn;`/c>0 |}cs\LDQˬ ZȳE7`Ο??p {_h:}^ 6byr|޻]cBG*~7.zXQsFX ϛ7!ĸ"u=y\z'j:f~쎄h[B[OV]qp.sOgD.{G͛ A(7|30=[rDtsP?Z%<i{sn; Dҗ_BÉhLDUqΜ9 Nܰzj|K_aDt-LaMu. Vb1)5sgB +W` of"-MD1R=>4gΜߢ000tynJB+y_;8,'EDСQ]%X'|򄙢SJ-[x<~P---?"0qwa!%G!$#S0nC+Wb9snk'-ZG>'k,4BU .l?BD"N"&I֢[hF%emo&?џ͛<6GHqfvc哄bB!2@> IENDB`Image-LibRSVG-0.07/typemap0000644000226200027340000000057710405515750013637 0ustar tomprogTYPEMAP SVGLibRSVG * T_OBJECT OUTPUT T_OBJECT sv_setref_pv($arg, CLASS, (void*)$var); INPUT T_OBJECT if (sv_isobject($arg) && SvTYPE(SvRV($arg)) == SVt_PVMG) { IV tmp = SvIV((SV*)SvRV($arg)); $var = INT2PTR($type, tmp); } else Perl_croak(aTHX_ \"${Package}::$func_name(): $var is not a blessed SV reference\");Image-LibRSVG-0.07/LibRSVG.xs0000644000226200027340000006030310405515750014012 0ustar tomprog/* ---------------------------------------------------------------- * Original File Name: LibRSVG.xs * Creation Date: 04.02.2004 * Description: XS Glue for Perl * ----------------------------------------------------------------- * ----------------------------------------------------------------- * Copyright (c) 2004 bestsolution.at Systemhaus GmbH * ---------------------------------------------------------------- */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" /** * Methods below are copied from the librsvg2-package * from the file "rsvg-file-util.c" * */ #include "librsvg/rsvg.h" #include #include #include #include #include #define SVG_BUFFER_SIZE (1024 * 8) typedef enum { RSVG_SIZE_ZOOM, RSVG_SIZE_WH, RSVG_SIZE_WH_MAX, RSVG_SIZE_ZOOM_MAX } RsvgSizeType; struct RsvgSizeCallbackData { RsvgSizeType type; double x_zoom; double y_zoom; gint width; gint height; }; static void rsvg_size_callback (int *width, int *height, gpointer data) { struct RsvgSizeCallbackData *real_data = (struct RsvgSizeCallbackData *) data; double zoomx, zoomy, zoom; switch (real_data->type) { case RSVG_SIZE_ZOOM: if (*width < 0 || *height < 0) return; *width = floor (real_data->x_zoom * *width + 0.5); *height = floor (real_data->y_zoom * *height + 0.5); return; case RSVG_SIZE_ZOOM_MAX: if (*width < 0 || *height < 0) return; *width = floor (real_data->x_zoom * *width + 0.5); *height = floor (real_data->y_zoom * *height + 0.5); if (*width > real_data->width || *height > real_data->height) { zoomx = (double) real_data->width / *width; zoomy = (double) real_data->height / *height; zoom = MIN (zoomx, zoomy); *width = floor (zoom * *width + 0.5); *height = floor (zoom * *height + 0.5); } return; case RSVG_SIZE_WH_MAX: if (*width < 0 || *height < 0) return; zoomx = (double) real_data->width / *width; zoomy = (double) real_data->height / *height; zoom = MIN (zoomx, zoomy); *width = floor (zoom * *width + 0.5); *height = floor (zoom * *height + 0.5); return; case RSVG_SIZE_WH: if (real_data->width != -1) *width = real_data->width; if (real_data->height != -1) *height = real_data->height; return; } g_assert_not_reached (); } static GdkPixbuf * rsvg_pixbuf_from_file_with_size_data_ex (RsvgHandle * handle, const gchar * file_name, struct RsvgSizeCallbackData * data, GError ** error) { guchar chars[SVG_BUFFER_SIZE]; GdkPixbuf *retval; gint result; FILE *f = fopen (file_name, "rb"); if (!f) { g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno)); return NULL; } rsvg_handle_set_size_callback (handle, rsvg_size_callback, data, NULL); while ((result = fread (chars, 1, SVG_BUFFER_SIZE, f)) > 0) rsvg_handle_write (handle, chars, result, error); rsvg_handle_close (handle, error); retval = rsvg_handle_get_pixbuf (handle); fclose (f); return retval; } static GdkPixbuf * rsvg_pixbuf_from_file_with_size_data (const gchar * file_name, struct RsvgSizeCallbackData * data, GError ** error) { RsvgHandle * handle = rsvg_handle_new (); GdkPixbuf * retval = rsvg_pixbuf_from_file_with_size_data_ex (handle, file_name, data, error); rsvg_handle_free (handle); return retval; } static GdkPixbuf * rsvg_pixbuf_from_chars_with_size_data (const guchar * svg, struct RsvgSizeCallbackData * data, GError ** error) { RsvgHandle * handle = rsvg_handle_new (); rsvg_handle_set_size_callback (handle, rsvg_size_callback, data, NULL); rsvg_handle_write (handle, svg, strlen( svg ), error); rsvg_handle_close (handle, error); GdkPixbuf *retval = rsvg_handle_get_pixbuf (handle); rsvg_handle_free (handle); return retval; } GdkPixbuf * rsvg_pixbuf_from_file (const gchar *file_name, GError **error) { return rsvg_pixbuf_from_file_at_size (file_name, -1, -1, error); } /*GdkPixbuf * rsvg_pixbuf_from_chars (const gchar *svg, GError **error) { return rsvg_pixbuf_from_chars_at_size (svg, -1, -1, error); }*/ GdkPixbuf * rsvg_pixbuf_from_file_at_zoom (const gchar *file_name, double x_zoom, double y_zoom, GError **error) { struct RsvgSizeCallbackData data; g_return_val_if_fail (file_name != NULL, NULL); g_return_val_if_fail (x_zoom > 0.0 && y_zoom > 0.0, NULL); data.type = RSVG_SIZE_ZOOM; data.x_zoom = x_zoom; data.y_zoom = y_zoom; return rsvg_pixbuf_from_file_with_size_data (file_name, &data, error); } GdkPixbuf * rsvg_pixbuf_from_chars_at_zoom (const gchar *file_name, double x_zoom, double y_zoom, GError **error) { struct RsvgSizeCallbackData data; g_return_val_if_fail (file_name != NULL, NULL); g_return_val_if_fail (x_zoom > 0.0 && y_zoom > 0.0, NULL); data.type = RSVG_SIZE_ZOOM; data.x_zoom = x_zoom; data.y_zoom = y_zoom; return rsvg_pixbuf_from_chars_with_size_data (file_name, &data, error); } GdkPixbuf * rsvg_pixbuf_from_file_at_zoom_with_max (const gchar *file_name, double x_zoom, double y_zoom, gint max_width, gint max_height, GError **error) { struct RsvgSizeCallbackData data; g_return_val_if_fail (file_name != NULL, NULL); g_return_val_if_fail (x_zoom > 0.0 && y_zoom > 0.0, NULL); data.type = RSVG_SIZE_ZOOM_MAX; data.x_zoom = x_zoom; data.y_zoom = y_zoom; data.width = max_width; data.height = max_height; return rsvg_pixbuf_from_file_with_size_data (file_name, &data, error); } GdkPixbuf * rsvg_pixbuf_from_chars_at_zoom_with_max (const gchar *file_name, double x_zoom, double y_zoom, gint max_width, gint max_height, GError **error) { struct RsvgSizeCallbackData data; g_return_val_if_fail (file_name != NULL, NULL); g_return_val_if_fail (x_zoom > 0.0 && y_zoom > 0.0, NULL); data.type = RSVG_SIZE_ZOOM_MAX; data.x_zoom = x_zoom; data.y_zoom = y_zoom; data.width = max_width; data.height = max_height; return rsvg_pixbuf_from_chars_with_size_data (file_name, &data, error); } GdkPixbuf * rsvg_pixbuf_from_file_at_size (const gchar *file_name, gint width, gint height, GError **error) { struct RsvgSizeCallbackData data; data.type = RSVG_SIZE_WH; data.width = width; data.height = height; return rsvg_pixbuf_from_file_with_size_data (file_name, &data, error); } GdkPixbuf * rsvg_pixbuf_from_chars_at_size (const gchar *svg, gint width, gint height, GError **error) { struct RsvgSizeCallbackData data; data.type = RSVG_SIZE_WH; data.width = width; data.height = height; return rsvg_pixbuf_from_chars_with_size_data (svg, &data, error); } GdkPixbuf * rsvg_pixbuf_from_chars (const gchar *svg, GError **error) { return rsvg_pixbuf_from_chars_at_size (svg, -1, -1, error); } GdkPixbuf * rsvg_pixbuf_from_file_at_max_size (const gchar *file_name, gint max_width, gint max_height, GError **error) { struct RsvgSizeCallbackData data; data.type = RSVG_SIZE_WH_MAX; data.width = max_width; data.height = max_height; return rsvg_pixbuf_from_file_with_size_data (file_name, &data, error); } GdkPixbuf * rsvg_pixbuf_from_chars_at_max_size (const gchar *file_name, gint max_width, gint max_height, GError **error) { struct RsvgSizeCallbackData data; data.type = RSVG_SIZE_WH_MAX; data.width = max_width; data.height = max_height; return rsvg_pixbuf_from_chars_with_size_data (file_name, &data, error); } int save( int quality, char * format, GdkPixbuf * pixbuf, char * filename ) { char * quality_str; int rv; if (strcmp (format, "jpeg") != 0 || (quality < 1 || quality > 100)) /* is a png or is an invalid quality */ { rv = gdk_pixbuf_save (pixbuf, filename, format, NULL, NULL); } else { quality_str = g_strdup_printf ("%d", quality); rv = gdk_pixbuf_save (pixbuf, filename, format, NULL, "quality", quality_str, NULL); g_free (quality_str); } return rv; } void add_if_writable(GdkPixbufFormat *data, AV *formats) { if (gdk_pixbuf_format_is_writable (data)) { av_push( formats, newSVpv( gdk_pixbuf_format_get_name ( data ), 0 ) ); } } void add_to_formats_list(GdkPixbufFormat *data, AV *formats){ av_push( formats, newSVpv( gdk_pixbuf_format_get_name ( data ), 0 ) ); } /*void add_mimetypes_to_formats(GdkPixbufFormat *data, HV *formats){ char *name = gdk_pixbuf_format_get_name ( data ); // gchar **mime_types = gdk_pixbuf_format_get_mime_types(data); // AV *mime_types = (AV *)newAV(); // g_strfreev( mime_types ); // hv_store( ); } void add_mime_type_to_list( ){ } */ typedef struct { GdkPixbuf *pixbuf; } SVGLibRSVG; MODULE = Image::LibRSVG PACKAGE = Image::LibRSVG PROTOTYPES: ENABLE ## ------------------------------------------------------- ## CONSTRUCTOR AND DESTRUCTOR ## ------------------------------------------------------- SVGLibRSVG * new( CLASS ) char *CLASS CODE: Newz(0, RETVAL, 1, SVGLibRSVG); RETVAL->pixbuf = NULL; OUTPUT: RETVAL void SVGLibRSVG::DESTROY() CODE: if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); THIS->pixbuf = NULL; } ## ------------------------------------------------------- ## SOME STATIC METHODS ## ------------------------------------------------------- static SV * SVGLibRSVG::getSupportedFormats() CODE: GSList *formats = gdk_pixbuf_get_formats (); AV * results = (AV *)sv_2mortal( (SV *)newAV() ); g_slist_foreach ( formats, add_if_writable, results ); g_slist_free (formats); RETVAL = newRV((SV *)results); OUTPUT: RETVAL static SV * SVGLibRSVG::getKnownFormats() CODE: GSList *formats = gdk_pixbuf_get_formats (); AV * results = (AV *)sv_2mortal( (SV *)newAV() ); g_slist_foreach ( formats, add_to_formats_list, results ); g_slist_free (formats); RETVAL = newRV((SV *)results); OUTPUT: RETVAL static int SVGLibRSVG::isFormatSupported( format_string ) char *format_string CODE: I32 formatsi = 0; int i; AV * results = (AV *)sv_2mortal( (SV *)newAV() ); GSList *formats = gdk_pixbuf_get_formats (); g_slist_foreach ( formats, add_if_writable, results ); g_slist_free (formats); formatsi = av_len( results ); RETVAL = 0; for( i = 0; i <= formatsi; i++ ){ STRLEN l; char * fn = SvPV( *av_fetch(results, i, 0), l); if( strcmp( fn, format_string ) == 0 ) { RETVAL = 1; break; } } OUTPUT: RETVAL static bool SVGLibRSVG::isGzCompressionSupported() CODE: RETVAL = 1; OUTPUT: RETVAL ## ------------------------------------------------------- ## CONVERT FUNCTIONS ## ------------------------------------------------------- int SVGLibRSVG::convert( svgfile, bitmapfile, dpi=0, format="png", quality=100 ) char * svgfile char * bitmapfile double dpi char * format int quality CODE: GdkPixbuf *pixbuf; g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } pixbuf = rsvg_pixbuf_from_file( svgfile, NULL ); if( pixbuf ) { RETVAL = save( quality, format, pixbuf, bitmapfile ); g_object_unref ( G_OBJECT (pixbuf) ); } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::convertAtZoom( svgfile, bitmapfile, x_zoom, y_zoom, dpi=0, format="png", quality=100 ) char * svgfile char * bitmapfile double x_zoom double y_zoom double dpi char * format int quality CODE: GdkPixbuf *pixbuf; g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } pixbuf = rsvg_pixbuf_from_file_at_zoom( svgfile, x_zoom, y_zoom, NULL ); if( pixbuf ){ RETVAL = save( quality, format, pixbuf, bitmapfile ); g_object_unref ( G_OBJECT (pixbuf) ); } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::convertAtMaxSize( svgfile, bitmapfile, width, height, dpi=0, format="png", quality=100 ) char * svgfile char * bitmapfile int width int height double dpi char * format int quality CODE: GdkPixbuf *pixbuf; g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } pixbuf = rsvg_pixbuf_from_file_at_max_size( svgfile, width, height, NULL ); if( pixbuf ){ RETVAL = save( quality, format, pixbuf, bitmapfile ); g_object_unref ( G_OBJECT (pixbuf) ); } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::convertAtSize( svgfile, bitmapfile, width, height, dpi=0, format="png", quality=100 ) char * svgfile char * bitmapfile int width int height double dpi char * format int quality CODE: GdkPixbuf *pixbuf; g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } pixbuf = rsvg_pixbuf_from_file_at_size( svgfile, width, height, NULL ); if( pixbuf ){ RETVAL = save( quality, format, pixbuf, bitmapfile ); g_object_unref ( G_OBJECT (pixbuf) ); } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::convertAtZoomWithMax( svgfile, bitmapfile, x_zoom, y_zoom, width, height, dpi=0, format="png", quality=100 ) char * svgfile char * bitmapfile double x_zoom double y_zoom int width int height double dpi char * format int quality CODE: GdkPixbuf *pixbuf; g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } pixbuf = rsvg_pixbuf_from_file_at_zoom_with_max( svgfile, x_zoom, y_zoom, width, height, NULL ); if( pixbuf ){ RETVAL = save( quality, format, pixbuf, bitmapfile ); g_object_unref ( G_OBJECT (pixbuf) ); } else { RETVAL = 0; } OUTPUT: RETVAL ## ------------------------------------------------------- ## LOAD FUNCTIONS ## ------------------------------------------------------- int SVGLibRSVG::loadFromFile( svgfile, dpi=0 ) char * svgfile double dpi CODE: g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_file( svgfile, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::loadFromString( svg, dpi=0 ) char * svg double dpi CODE: g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_chars( svg, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL ## ------------------------------------------------------- ## ------------------------------------------------------- int SVGLibRSVG::loadFromFileAtZoom( svgfile, x_zoom, y_zoom, dpi=0 ) char * svgfile double x_zoom double y_zoom double dpi CODE: g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_file_at_zoom( svgfile, x_zoom, y_zoom, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::loadFromStringAtZoom( svg, x_zoom, y_zoom, dpi=0 ) char * svg double x_zoom double y_zoom double dpi CODE: g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_chars_at_zoom( svg, x_zoom, y_zoom, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL ## ------------------------------------------------------- ## ------------------------------------------------------- int SVGLibRSVG::loadFromFileAtMaxSize( svgfile, width, height, dpi=0 ) char * svgfile int width int height double dpi CODE: g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_file_at_max_size( svgfile, width, height, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::loadFromStringAtMaxSize( svgfile, width, height, dpi=0 ) char * svgfile int width int height double dpi CODE: g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_chars_at_max_size( svgfile, width, height, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL ## ------------------------------------------------------- ## ------------------------------------------------------- int SVGLibRSVG::loadFromFileAtSize( svgfile, width, height, dpi=0 ) char * svgfile int width int height double dpi CODE: g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_file_at_size( svgfile, width, height, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::loadFromStringAtSize( svgfile, width, height, dpi=0 ) char * svgfile int width int height double dpi CODE: g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_chars_at_size( svgfile, width, height, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL ## ------------------------------------------------------- ## ------------------------------------------------------- int SVGLibRSVG::loadFromFileAtZoomWithMax( svgfile, x_zoom, y_zoom, width, height, dpi=0 ) char * svgfile double x_zoom double y_zoom int width int height double dpi CODE: GdkPixbuf *pixbuf; g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_file_at_zoom_with_max( svgfile, x_zoom, y_zoom, width, height, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL int SVGLibRSVG::loadFromStringAtZoomWithMax( svgfile, x_zoom, y_zoom, width, height, dpi=0 ) char * svgfile double x_zoom double y_zoom int width int height double dpi CODE: GdkPixbuf *pixbuf; g_type_init (); if (dpi > 0.) { rsvg_set_default_dpi (dpi); } if( THIS->pixbuf ) { g_object_unref ( G_OBJECT (THIS->pixbuf) ); } THIS->pixbuf = rsvg_pixbuf_from_chars_at_zoom_with_max( svgfile, x_zoom, y_zoom, width, height, NULL ); if( THIS->pixbuf ) { RETVAL = 1; } else { RETVAL = 0; } OUTPUT: RETVAL ## ------------------------------------------------------- ## SAVE-FUNCTIONS ## ------------------------------------------------------- int SVGLibRSVG::saveAs( bitmapfile, format="png", quality=100 ) char * bitmapfile char * format int quality CODE: if( THIS->pixbuf ) { RETVAL = save( quality, format, THIS->pixbuf, bitmapfile ); } else { ## carp( "There's no image loaded into memory. Maybe you forgot to load or last loading returned with an error" ); RETVAL = 0; } OUTPUT: RETVAL ## ------------------------------------------------------- ## getImageBitmap ## !!!! This is only available from GDK-PIXBUF 2.4 !!!! ## ------------------------------------------------------- #if GDK_PIXBUF_MAJOR > 2 || ( GDK_PIXBUF_MAJOR == 2 && GDK_PIXBUF_MINOR >= 4 ) SV * SVGLibRSVG::getImageBitmap( format="png", quality=100 ) char * format int quality CODE: GError * my_error_p = NULL; gboolean ret; gsize buffer_size; gchar * buffer; buffer_size = SVG_BUFFER_SIZE; char * quality_str; if (strcmp (format, "jpeg") != 0 || (quality < 1 || quality > 100)) { if( ! gdk_pixbuf_save_to_buffer (THIS->pixbuf, &buffer, &buffer_size, format, &my_error_p, "tEXt::Software", "testpixbuf-save",NULL) ) { fprintf (stderr, "%s", my_error_p->message); g_error_free (my_error_p); } else { RETVAL = newSVpv( buffer, buffer_size ); g_free( buffer ); } } else { quality_str = g_strdup_printf ("%d", quality); if( ! gdk_pixbuf_save_to_buffer (THIS->pixbuf, &buffer, &buffer_size, format, &my_error_p, "quality", quality_str, NULL) ) { fprintf (stderr, "%s", my_error_p->message); g_error_free (my_error_p); } else { RETVAL = newSVpv( buffer, buffer_size ); g_free( buffer ); } g_free (quality_str); } OUTPUT: RETVAL #else SV * SVGLibRSVG::getImageBitmap( format="png", quality=100 ) char * format int quality CODE: RETVAL = NULL; OUTPUT: RETVAL #endif Image-LibRSVG-0.07/MANIFEST0000644000226200027340000000047210405515750013360 0ustar tomprogChanges Makefile.PL MANIFEST ppport.h README lib/Image/LibRSVG.pm LibRSVG.xs t/1.t typemap examples.pl examples/artscontrol.svg examples/kate.svg examples/klipper.svg examples/kmail.svg examples/konsole.svg examples/konsole.svgz examples/kwrite.svg examples/openoffice.svg examples/staroffice.svg examples/wine.svgImage-LibRSVG-0.07/Makefile.PL0000644000226200027340000000070410405515750014177 0ustar tomproguse ExtUtils::MakeMaker; my %config; $config{INC} = ' ' . `pkg-config --cflags librsvg-2.0`; $config{LIBS} = ' ' . `pkg-config --libs-only-l librsvg-2.0`; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Image::LibRSVG', 'VERSION_FROM' => 'lib/Image/LibRSVG.pm', # finds $VERSION 'PREREQ_PM' => {}, # e.g., Module::Name => 1.1 %config, ); Image-LibRSVG-0.07/examples.pl0000755000226200027340000000233610405515750014406 0ustar tomprog#!/usr/bin/perl use Image::LibRSVG; use strict; my $known_formats = Image::LibRSVG->getKnownFormats(); print "KNOWN FORMATS:\n"; foreach( @{ $known_formats } ) { print " * $_\n"; } my $formats = Image::LibRSVG->getSupportedFormats(); print "SUPPORTED FORMATS:\n"; foreach( @{ $formats } ) { print " * $_\n"; } my $rsvg = new Image::LibRSVG(); $rsvg->convert( "examples/artscontrol.svg", "examples/artscontrol_convert.png" ); $rsvg->convert( "examples/kate.svg", "examples/kate_convert.png" ); $rsvg->convert( "examples/klipper.svg", "examples/klipper_convert.png" ); $rsvg->convert( "examples/kmail.svg", "examples/kmail_convert.png" ); $rsvg->convert( "examples/konsole.svg", "examples/konsole_convert.png" ); $rsvg->convert( "examples/kwrite.svg", "examples/kwrite_convert.png" ); $rsvg->convert( "examples/openoffice.svg", "examples/openoffice_convert.png" ); $rsvg->convert( "examples/staroffice.svg", "examples/staroffice_convert.png" ); $rsvg->convert( "examples/wine.svg", "examples/wine_convert.png" ); ## and a compressed one $rsvg->convert( "examples/konsole.svgz", "examples/konsole_convert_gzipped.png" ); $rsvg->loadImage( "examples/artscontrol.svg" ); $rsvg->saveAs( "examples/artscontrol.svg.load.png" ); Image-LibRSVG-0.07/ppport.h0000644000226200027340000003574310405515750013735 0ustar tomprog /* ppport.h -- Perl/Pollution/Portability Version 2.0002 * * Automatically Created by Devel::PPPort on Tue Feb 17 12:34:40 2004 * * Do NOT edit this file directly! -- Edit PPPort.pm instead. * * Version 2.x, Copyright (C) 2001, Paul Marquess. * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. * This code may be used and distributed under the same license as any * version of Perl. * * This version of ppport.h is designed to support operation with Perl * installations back to 5.004, and has been tested up to 5.8.0. * * If this version of ppport.h is failing during the compilation of this * module, please check if a newer version of Devel::PPPort is available * on CPAN before sending a bug report. * * If you are using the latest version of Devel::PPPort and it is failing * during compilation of this module, please send a report to perlbug@perl.com * * Include all following information: * * 1. The complete output from running "perl -V" * * 2. This file. * * 3. The name & version of the module you were trying to build. * * 4. A full log of the build that failed. * * 5. Any other information that you think could be relevant. * * * For the latest version of this code, please retreive the Devel::PPPort * module from CPAN. * */ /* * In order for a Perl extension module to be as portable as possible * across differing versions of Perl itself, certain steps need to be taken. * Including this header is the first major one, then using dTHR is all the * appropriate places and using a PL_ prefix to refer to global Perl * variables is the second. * */ /* If you use one of a few functions that were not present in earlier * versions of Perl, please add a define before the inclusion of ppport.h * for a static include, or use the GLOBAL request in a single module to * produce a global definition that can be referenced from the other * modules. * * Function: Static define: Extern define: * newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL * */ /* To verify whether ppport.h is needed for your module, and whether any * special defines should be used, ppport.h can be run through Perl to check * your source code. Simply say: * * perl -x ppport.h *.c *.h *.xs foo/bar*.c [etc] * * The result will be a list of patches suggesting changes that should at * least be acceptable, if not necessarily the most efficient solution, or a * fix for all possible problems. It won't catch where dTHR is needed, and * doesn't attempt to account for global macro or function definitions, * nested includes, typemaps, etc. * * In order to test for the need of dTHR, please try your module under a * recent version of Perl that has threading compiled-in. * */ /* #!/usr/bin/perl @ARGV = ("*.xs") if !@ARGV; %badmacros = %funcs = %macros = (); $replace = 0; foreach () { $funcs{$1} = 1 if /Provide:\s+(\S+)/; $macros{$1} = 1 if /^#\s*define\s+([a-zA-Z0-9_]+)/; $replace = $1 if /Replace:\s+(\d+)/; $badmacros{$2}=$1 if $replace and /^#\s*define\s+([a-zA-Z0-9_]+).*?\s+([a-zA-Z0-9_]+)/; $badmacros{$1}=$2 if /Replace (\S+) with (\S+)/; } foreach $filename (map(glob($_),@ARGV)) { unless (open(IN, "<$filename")) { warn "Unable to read from $file: $!\n"; next; } print "Scanning $filename...\n"; $c = ""; while () { $c .= $_; } close(IN); $need_include = 0; %add_func = (); $changes = 0; $has_include = ($c =~ /#.*include.*ppport/m); foreach $func (keys %funcs) { if ($c =~ /#.*define.*\bNEED_$func(_GLOBAL)?\b/m) { if ($c !~ /\b$func\b/m) { print "If $func isn't needed, you don't need to request it.\n" if $changes += ($c =~ s/^.*#.*define.*\bNEED_$func\b.*\n//m); } else { print "Uses $func\n"; $need_include = 1; } } else { if ($c =~ /\b$func\b/m) { $add_func{$func} =1 ; print "Uses $func\n"; $need_include = 1; } } } if (not $need_include) { foreach $macro (keys %macros) { if ($c =~ /\b$macro\b/m) { print "Uses $macro\n"; $need_include = 1; } } } foreach $badmacro (keys %badmacros) { if ($c =~ /\b$badmacro\b/m) { $changes += ($c =~ s/\b$badmacro\b/$badmacros{$badmacro}/gm); print "Uses $badmacros{$badmacro} (instead of $badmacro)\n"; $need_include = 1; } } if (scalar(keys %add_func) or $need_include != $has_include) { if (!$has_include) { $inc = join('',map("#define NEED_$_\n", sort keys %add_func)). "#include \"ppport.h\"\n"; $c = "$inc$c" unless $c =~ s/#.*include.*XSUB.*\n/$&$inc/m; } elsif (keys %add_func) { $inc = join('',map("#define NEED_$_\n", sort keys %add_func)); $c = "$inc$c" unless $c =~ s/^.*#.*include.*ppport.*$/$inc$&/m; } if (!$need_include) { print "Doesn't seem to need ppport.h.\n"; $c =~ s/^.*#.*include.*ppport.*\n//m; } $changes++; } if ($changes) { open(OUT,">/tmp/ppport.h.$$"); print OUT $c; close(OUT); open(DIFF, "diff -u $filename /tmp/ppport.h.$$|"); while () { s!/tmp/ppport\.h\.$$!$filename.patched!; print STDOUT; } close(DIFF); unlink("/tmp/ppport.h.$$"); } else { print "Looks OK\n"; } } __DATA__ */ #ifndef _P_P_PORTABILITY_H_ #define _P_P_PORTABILITY_H_ #ifndef PERL_REVISION # ifndef __PATCHLEVEL_H_INCLUDED__ # include "patchlevel.h" # endif # ifndef PERL_REVISION # define PERL_REVISION (5) /* Replace: 1 */ # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION /* Replace PERL_PATCHLEVEL with PERL_VERSION */ /* Replace: 0 */ # endif #endif #define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION) /* It is very unlikely that anyone will try to use this with Perl 6 (or greater), but who knows. */ #if PERL_REVISION != 5 # error ppport.h only works with Perl version 5 #endif /* PERL_REVISION != 5 */ #ifndef ERRSV # define ERRSV perl_get_sv("@",FALSE) #endif #if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)) /* Replace: 1 */ # define PL_Sv Sv # define PL_compiling compiling # define PL_copline copline # define PL_curcop curcop # define PL_curstash curstash # define PL_defgv defgv # define PL_dirty dirty # define PL_dowarn dowarn # define PL_hints hints # define PL_na na # define PL_perldb perldb # define PL_rsfp_filters rsfp_filters # define PL_rsfpv rsfp # define PL_stdingv stdingv # define PL_sv_no sv_no # define PL_sv_undef sv_undef # define PL_sv_yes sv_yes /* Replace: 0 */ #endif #ifdef HASATTRIBUTE # if defined(__GNUC__) && defined(__cplusplus) # define PERL_UNUSED_DECL # else # define PERL_UNUSED_DECL __attribute__((unused)) # endif #else # define PERL_UNUSED_DECL #endif #ifndef dNOOP # define NOOP (void)0 # define dNOOP extern int Perl___notused PERL_UNUSED_DECL #endif #ifndef dTHR # define dTHR dNOOP #endif #ifndef dTHX # define dTHX dNOOP # define dTHXa(x) dNOOP # define dTHXoa(x) dNOOP #endif #ifndef pTHX # define pTHX void # define pTHX_ # define aTHX # define aTHX_ #endif /* IV could also be a quad (say, a long long), but Perls * capable of those should have IVSIZE already. */ #if !defined(IVSIZE) && defined(LONGSIZE) # define IVSIZE LONGSIZE #endif #ifndef IVSIZE # define IVSIZE 4 /* A bold guess, but the best we can make. */ #endif #ifndef UVSIZE # define UVSIZE IVSIZE #endif #ifndef NVTYPE # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) # define NVTYPE long double # else # define NVTYPE double # endif typedef NVTYPE NV; #endif #ifndef INT2PTR #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) #else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) #endif #define NUM2PTR(any,d) (any)(PTRV)(d) #define PTR2IV(p) INT2PTR(IV,p) #define PTR2UV(p) INT2PTR(UV,p) #define PTR2NV(p) NUM2PTR(NV,p) #if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) #else # define PTR2ul(p) INT2PTR(unsigned long,p) #endif #endif /* !INT2PTR */ #ifndef boolSV # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #endif #ifndef gv_stashpvn # define gv_stashpvn(str,len,flags) gv_stashpv(str,flags) #endif #ifndef newSVpvn # define newSVpvn(data,len) ((len) ? newSVpv ((data), (len)) : newSVpv ("", 0)) #endif #ifndef newRV_inc /* Replace: 1 */ # define newRV_inc(sv) newRV(sv) /* Replace: 0 */ #endif /* DEFSV appears first in 5.004_56 */ #ifndef DEFSV # define DEFSV GvSV(PL_defgv) #endif #ifndef SAVE_DEFSV # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #endif #ifndef newRV_noinc # ifdef __GNUC__ # define newRV_noinc(sv) \ ({ \ SV *nsv = (SV*)newRV(sv); \ SvREFCNT_dec(sv); \ nsv; \ }) # else # if defined(USE_THREADS) static SV * newRV_noinc (SV * sv) { SV *nsv = (SV*)newRV(sv); SvREFCNT_dec(sv); return nsv; } # else # define newRV_noinc(sv) \ (PL_Sv=(SV*)newRV(sv), SvREFCNT_dec(sv), (SV*)PL_Sv) # endif # endif #endif /* Provide: newCONSTSUB */ /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ #if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63)) #if defined(NEED_newCONSTSUB) static #else extern void newCONSTSUB(HV * stash, char * name, SV *sv); #endif #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) void newCONSTSUB(stash,name,sv) HV *stash; char *name; SV *sv; { U32 oldhints = PL_hints; HV *old_cop_stash = PL_curcop->cop_stash; HV *old_curstash = PL_curstash; line_t oldline = PL_curcop->cop_line; PL_curcop->cop_line = PL_copline; PL_hints &= ~HINT_BLOCK_SCOPE; if (stash) PL_curstash = PL_curcop->cop_stash = stash; newSUB( #if (PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22)) /* before 5.003_22 */ start_subparse(), #else # if (PERL_VERSION == 3) && (PERL_SUBVERSION == 22) /* 5.003_22 */ start_subparse(0), # else /* 5.003_23 onwards */ start_subparse(FALSE, 0), # endif #endif newSVOP(OP_CONST, 0, newSVpv(name,0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); PL_hints = oldhints; PL_curcop->cop_stash = old_cop_stash; PL_curstash = old_curstash; PL_curcop->cop_line = oldline; } #endif #endif /* newCONSTSUB */ #ifndef START_MY_CXT /* * Boilerplate macros for initializing and accessing interpreter-local * data from C. All statics in extensions should be reworked to use * this, if you want to make the extension thread-safe. See ext/re/re.xs * for an example of the use of these macros. * * Code that uses these macros is responsible for the following: * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" * 2. Declare a typedef named my_cxt_t that is a structure that contains * all the data that needs to be interpreter-local. * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. * 4. Use the MY_CXT_INIT macro such that it is called exactly once * (typically put in the BOOT: section). * 5. Use the members of the my_cxt_t structure everywhere as * MY_CXT.member. * 6. Use the dMY_CXT macro (a declaration) in all the functions that * access MY_CXT. */ #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) /* This must appear in all extensions that define a my_cxt_t structure, * right after the definition (i.e. at file scope). The non-threads * case below uses it to declare the data as static. */ #define START_MY_CXT #if (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION < 68 )) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ SV *my_cxt_sv = perl_get_sv(MY_CXT_KEY, FALSE) #else /* >= perl5.004_68 */ #define dMY_CXT_SV \ SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ sizeof(MY_CXT_KEY)-1, TRUE) #endif /* < perl5.004_68 */ /* This declaration should be used within all functions that use the * interpreter-local data. */ #define dMY_CXT \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ #define MY_CXT_INIT \ dMY_CXT_SV; \ /* newSV() allocates one more than needed */ \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Zero(my_cxtp, 1, my_cxt_t); \ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) /* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */ #define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT * is used. Use is similar to pTHX, aTHX etc. */ #define pMY_CXT my_cxt_t *my_cxtp #define pMY_CXT_ pMY_CXT, #define _pMY_CXT ,pMY_CXT #define aMY_CXT my_cxtp #define aMY_CXT_ aMY_CXT, #define _aMY_CXT ,aMY_CXT #else /* single interpreter */ #define START_MY_CXT static my_cxt_t my_cxt; #define dMY_CXT_SV dNOOP #define dMY_CXT dNOOP #define MY_CXT_INIT NOOP #define MY_CXT my_cxt #define pMY_CXT void #define pMY_CXT_ #define _pMY_CXT #define aMY_CXT #define aMY_CXT_ #define _aMY_CXT #endif #endif /* START_MY_CXT */ #ifndef IVdf # if IVSIZE == LONGSIZE # define IVdf "ld" # define UVuf "lu" # define UVof "lo" # define UVxf "lx" # define UVXf "lX" # else # if IVSIZE == INTSIZE # define IVdf "d" # define UVuf "u" # define UVof "o" # define UVxf "x" # define UVXf "X" # endif # endif #endif #ifndef NVef # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ # define NVef PERL_PRIeldbl # define NVff PERL_PRIfldbl # define NVgf PERL_PRIgldbl # else # define NVef "e" # define NVff "f" # define NVgf "g" # endif #endif #ifndef AvFILLp /* Older perls (<=5.003) lack AvFILLp */ # define AvFILLp AvFILL #endif #ifdef SvPVbyte # if PERL_REVISION == 5 && PERL_VERSION < 7 /* SvPVbyte does not work in perl-5.6.1, borrowed version for 5.7.3 */ # undef SvPVbyte # define SvPVbyte(sv, lp) \ ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : my_sv_2pvbyte(aTHX_ sv, &lp)) static char * my_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp) { sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } # endif #else # define SvPVbyte SvPV #endif #ifndef SvPV_nolen # define SvPV_nolen(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_nolen(sv)) static char * sv_2pv_nolen(pTHX_ register SV *sv) { STRLEN n_a; return sv_2pv(sv, &n_a); } #endif #endif /* _P_P_PORTABILITY_H_ */ /* End of File ppport.h */ Image-LibRSVG-0.07/README0000644000226200027340000000227710405515750013114 0ustar tomprogImage::LibRSVG version 0.04 ======================= The README is used to introduce the module and provide instructions on how to install the module, any machine dependencies it may have (for example C compilers and installed libraries) and any other information that should be provided before the module is installed. A README file is required for CPAN modules since CPAN extracts the README file from a module distribution so that people browsing the archive can use it get an idea of the modules uses. It is usually a good idea to provide version information here so that people can decide whether fixes for the module are worth downloading. INSTALLATION To install this module type the following: perl Makefile.PL [DEFINE=DHAVE_SVGZ=0] make make test make install DEPENDENCIES This module requires these other modules and libraries: * librsvg-2.0 (http://librsvg.sf.net) * zlib (http://www.gzip.org/zlib/) [optional] on by default COPYRIGHT AND LICENCE Put the correct copyright and licence information here. Copyright (C) 2004 Tom Schindl and bestsolution Systemhaus GmbH This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Image-LibRSVG-0.07/Changes0000644000226200027340000000155410405515750013524 0ustar tomprogRevision history for Perl extension Image::LibRSVG. 0.07 - cpan release of 0.06 holds wrong version 0.06 - fixed loading of gz files with new version (RT 18146) - removed DEFINE from Makefile-call (old librvg installations can use 0.05) 0.05 - enabled new function "getBitmap" which returns the bitmap into a scalar - added new function "isGzCompressionSupported" to check if gzipped files can be passed - added some new tests 0.04 - fixed typo in POD (cpan-bug-id 6187) - fixed problems with detecting zlib support (now default is on and can be turned off by perl Makefile.PL-Param as shown in read me) 0.03 - added loading from string 0.02 - corrected wrong Modulenames in examples in POD - corrected typo in loadImage dimesion => dimension 0.01 - added support 4 librsvg 2