imgsizer-2.12/0000775000175000017500000000000014563157407011451 5ustar esresrimgsizer-2.12/NEWS0000664000175000017500000000255114563157407012153 0ustar esresr= imgsizer project news = 2.12: 2024-02-14:: Documentation refresh and markup fixes. 2.11: 2021-09-20:: Ubuntu has removed /usr/bin/python, move all shebangs to python3. 2.10: 2019-06-12:: Forward-ported to run under either current Python 2 or Python 3. 2.9: 2015-04-05:: pylint and test cleanup. 2.8: 2010-10-20:: Preferred style in HTML has changed, default to emitting lowercase tags. Changed license to BSD. 2.7: 2004-07-05:: Added capability to use PIL if both file(1) and identify(1) fail. Added BUGS section to manual page. 2.6: 2003-12-29:: Source RPMs no longer depend on --define myversion. 2.5: 2003-11-15:: Verify and merge Lucien Saviot's patch to produce XHTML from XHTML input. Also his change to handle spurious lin e breaks produced by Dave Raggett's tidy(1) utility. 2.4: 2003-04-25:: Documentation improvements. 2.3: 2002-07-30:: XML conversion of manual page. 2.2: 2001-09-06:: Documentation improvements. 2.1: 2001-07-30:: Build typo fix. 2.0: 2001-07-11:: RPM fix. 1.9: 2001-03-09:: Two bug fixes by Michael C. Toren . 1.8: 2000-08-31:: Build tweak. 1.7: 2000-08-19:: Michael C. Toren added -q and -l switches and two minor bug fixes. 1.6: 1999-06-11:: Remove some prerequisites and improve documentation. Some older history is in the source header comment. imgsizer-2.12/control0000664000175000017500000000114614563157407013056 0ustar esresr# This is not a real Debian control file, though the syntax is compatible. # It's project metadata for the shipper tool Package: imgsizer Description: Fill in WIDTH and HEIGHT attributes for IMG tags. This tool auto-generates or corrects WIDTH and HEIGHT parameters into HTML IMG tags, making page loading faster. XBS-Destinations: ubuntu-devel-discuss@lists.ubuntu.com Homepage: http://www.catb.org/~esr/imgsizer XBS-Repository-URL: https://gitlab.com/esr/imgsizer XBS-HTML-Target: index.html XBS-Debian-Packages: imgsizer XBS-Logo: crate.png #XBS-Project-Tags: HTML XBS-VC-Tag-Template: %(version)s imgsizer-2.12/test-converted.html0000644000175000017500000000247514563157407015313 0ustar esresrImgsizer Testfile Ok: absolute URL

Error: no src-tag

Warn: no quotes (we don't insert them)

A tag (alt), which should be skipped by imgsize
Dummy Picture
Warn: whitespace

Warn: whitespace and a newline

Ok: relative URL

Ok: also relative

Don't overwrite an existing single width-tag
Imgsizer should calculate the height-tag
Warn: A single existing height-tag
should be ignored and overwritten.
Both tags given: Don't overwrite anything

Paranoia ;-)

A given relative width
the img should be skipped.
Try a JPEG imgsizer-2.12/test-before.html0000644000175000017500000000230014563157407014547 0ustar esresrImgsizer Testfile Ok: absolute URL

Error: no src-tag

Warn: no quotes (we don't insert them)

A tag (alt), which should be skipped by imgsize
Dummy Picture
Warn: whitespace

Warn: whitespace and a newline

Ok: relative URL

Ok: also relative

Don't overwrite an existing single width-tag
Imgsizer should calculate the height-tag
Warn: A single existing height-tag
should be ignored and overwritten.
Both tags given: Don't overwrite anything

Paranoia ;-)

A given relative width
the img should be skipped.
Try a JPEG imgsizer-2.12/COPYING0000644000175000017500000000243614563157407012507 0ustar esresr BSD LICENSE Copyright (c) 2015, Eric S. Raymond All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. imgsizer-2.12/tnhd2.jpg0000644000175000017500000012616214563157407013200 0ustar esresrJFIFFCREATOR: XV Version 3.00 Rev: 3/30/93 Quality = 75, Smoothing = 0 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222W}" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?րOI֔t :PNz@!?('t 4@)A8qGҁCK)1p+!1(KF QR?:(7 CKҊ1_E( t~cSGZ@!)hCA LQZ>bJQҔg{ŲizvG:F@\I sWNzPwkHaAST5mCZ9{QF7wiLzR)zMaN?RHw7=Hi!sQOrAxc= 89#9A̲jvH`d- {]Bi$">IZoxbG+fI.H|;[+ m%KܤtǰQdܭc^1KfŽ)GȠt0fTVbpOK; 3ƛ#hE^z #iܬ -, N+R 2SIծM2)fP`QּU6M½dIS>eqii: ! O@2h#4'mǤt]za}]6׏xf}Zf2ϖ|5CMllf")Ll4MATu 4Pފ QKIE1BeX@%`:5[IRͣ?0d5s<+Sbl"Q 9`,zx 0xԧjTq]Ww jm2*_vr3[yr?^OtWyQ FGaRUq58f>l9v^a5qjb`. N~SWieuim1)m+ f-9'COu)Xb4dn q~n3]pӊ|Km7/>l=_zZ߈ľBoN3*=*u$40O /n[;U?\>TY\ǯ;4X8;dcһ R}_E% Z0I #6tg>|mkt]G_FDɻ;y5*bV"f!n!i9ϭ(Twv%\,r#M;D\i-I·ݵ`SwzXj0b97X5+IүcIFRa8]=5y;.s@8k':lX2?+ڊ;GqYb) iTƚc`Sj乨iȤ: -ΏnA5x?D,M7>@BnF+CFt['&c{'_e9&p*;aK.يwA벽hTʜY)zRR t(裥& ςO?!^[.vڂ ?^uko}jQ,H0U"44tb[9Nd}?ׇĪp3P3C9Mvz-L{|ÚuaDek>cdKD)h2\02H f*Us+fTw%ڄrH(m' <`V5-.iqԉ$,s^A, P+7sh427/^p>[q,K*iT$8'8_cpmg/LqKp)+)SQn&,O\'hLg 8#́^.!Ug\Q<+Ӽ=iu FUSֽCC`ִbxbȪ `R蝴?*+  5zЪթp%C\vQHye<)E}W^_[fG;(ydGGP+sjZXJFGuĪtYJnN6^ RǠQ׸I\Fi0)T`HyW)b+V*9 <r/"?):zU=Xѯ$o!򚴹nC8_;J@?ַׄ/nffq3+N ! t-G+wk:џ Ď x?'5FYg&;F' S[i4hpFd~4 D 8MF)u*r#ո704A#IfW͞g8 Zm@_8#}?κ嗨ŻEݬ{AJjn1N{=K!Aogr_|a>HӤt q*PG=8^LY$=ѡ4=Jܮ/3qv~6lSYO^ SN G󮇗.Ȭ2#GA5~΅};IHdvgsֽY[ ޣ6ҕD*)#6oh<3궑mdi0A+şkf_O~Aһas]kK":2ΛVnJo'_OAm*9+żqgFGIZeRDm9XÃoU7XtwVtb}9aacP9$Cma\~x4(}IQϠ_xDnPHnѕlUC B|7W|Fb/Lϔwp>jBH'?Z(ͶLZly;QK χ*F/iYTruR{һtL_ASΨys\ ^da+GǞ󶛩iWszj#TXmf\taםuJ:.M&x)s+\`UM\ēPi?W;U=_Pi?ZSٟ;|ջ_\+om<7p=<^ⳏjνrGs^w^\svJՕ*O N{1!8VM$Gx[V[Zp +^F4Or䶎}w2^NH>x\K!`bxF!$ 'M.f7пy:fs ^O5h>eăΟtJDx<+Ǎn qfG&z~:u [P3==Y~cW{-ca#^OQ4MlyUkWv:ar:K}i5L0#sڠ3໏Q,_tVڥ;[yFJ bsJU9U6I%cÛcMWk 9n/@VbI9A6Vj%Oi䞝k~ XLkuïkÜr}:V{N/x?vׁPDeOGNmG3U3^{^xn[xmGc^DG#ZrAYWJu}Bԣxf0Mz %bptú&?dCV4M=]m-a\䈐(&bV*rSaN4=+ک?Ôj΍{IҟĈRMesżѝpA~@8-ifDAM}.LFu|V5ķ7<^W;uwM?Eմ֗[G,lUѸ TGD?}!v^gAjWZglq<dtaW}hss:FO'ע|XߩY0cW[Ju_4fѴ ZnLBkt/#CpyM|w h9OII>VVH.bO]J܂8=xk \#~d~@\xrֹ^w\]K:MQ eI7i ?GҬ21kJO* 1J񯛳r6ZP:B85n ki"p6N2KT$CeNjojI/xWtQ^}>[r[ğzĶN,\x'JyH\>9ϩi;b k,ۧy3g5;ԋRqgtxĵǍn qq^|LƗ??pG &(r6i>Yc^;rFꬎ0!>!ҕԂ>g#i=֟$SH#^?q\DeNՏ}>NJ + 3F#WJ*)/#܍K_~y#=+?0L׸xU}W–f--$y:z/:LH{RHk:EUtA5htڟ@{"[36xI>+X3[>xJkj/?C?>׀q[_^j`4tb5k,gIA~f(An;5 5><"(;\o^}:C05͂wwkgcJϾI5oC%uh4]#l P1- ?(׆1lk1y$gٝ''D#Nӏ8G~zx^>JH.m&je r7z:G5'<-\U\qfkAsFt;B?!VCf:n.cr?B+> Ѱ` ✩v1ZL8jϊ$G^1H9yt+ =+j&v'l[\tavd_\p0+*-em(SY$l1R'ӵ[̖2p3x|WVR]*C+`ji7ty2?*pq޾mNHH9ZuZm} 9\¸*6;3&qg8c5|M3p #K MX~|q#: 3Ǻ揥A y9=&m- f Z*ee6ֹo&!\~]&c|A]_Lz:+(BTR-ֻC*M⸒9(i.%H79+׭JKs=sUG@_瞽s_EWOG $p 'i_;9reSkC_²y^(?}xq_:hVn#'-SsqAXeRRܬ;КY^I,z֗+MBܒqW+:9HԯM9ni$1#_/? +(YLJm #G?1^BA^潌8zN:jZ[ۍG±Ow;1@^F-k+~j%@P?(ݫo<=wZu֒70C!?xke aG!apcKBDfp_KMOB>#W%ÀH<׮|57g$SF:.453JaOϵ4ׂw&|I+ DKfy4`W⥴Ӭ.cUY}GzѬqr'mK&]]Z43›>OzN" Fq zY&9mzyG>.uh)D'1yxKANYb9f'+ x:QZ4h“jpG*Fb=jqh  hQ!#oLc]fL͞Slmb5)&Eu=w*RF3pq6*s>#Ѵ*aa `$(H>xb&rNjNZy"v8Dɪ(ZZs΋nzgZZ+>eeX܀N?0+Դm^ɺMyGy88]wthP]ZXaӮq^˛LӒ=1ZہiP9\8xM6ZA~@5fX5,T鸻wkaèy!"# marDq[/P2Ө`q. RH`7@aAOKy7>ٞ4DI]kP(V+ :s?r?:s tdf9#{^+Z9oao~xzEPc*?ָ2XŮePP~&V*:XR{bLhc 7l}Q]OGK[WƕyBjzΰ4{s8]f=1gl=H? ac &D{C.p0OvP0/%vʒr)^Q͌I}+E[&IO@~ǟέxOpHI`h_)*OVNVhQN9߉QboΞ/a^ݛē\Ǎ?VMZ$[V[#TDmuyxJNu6՗Ռ ?˷S׮<ɬ]U8eU^yJZXy?qs!,KWUue^M)\-AkvF{k6aeӭt`QPp\<.K:=ŚBWS*߆f 17=vh|Gqh405Z=WFWM?IFR"1+Ic\9e"+S9Eb8EPpV$DH)`{ןܦ՚CEbLl柌SH3 crxfi#Dq)M~i>d(\RKv.yw Qt<4eM'JZ\V@ stQO]\8'-I֌Q֎f-3Gv`*9i3KW`/8Ҋ\E؃4P .h)sIPM`h=)/j.E'&iz3E>wF}X>FE` Z()1iؤpB(QޝC@ #4`M7=)RӸ 94y*29 8SB1.)1N`-%8PP(ҎRu<unHA*GL5\#TI="M* kd?-4W[od?knq^h)Kݟ_4R׻Gd?^]ԽAGC˹܏h:~r9SxCLu A.d2X6vS]CmXiMx ˳sޟh(GgL4G=mVy5?F]IshD}]729$-zpEI$KY' F#9ϭ?RPsMy Iu\C.4y!>ׂ)1yfsQD)KE`TcۊV^]L.z~E]ž8w[vW_h^좰:_ȶhO#GcK0WI&R%( }i^`r-960-ErjfjY>%!aScǻqO{I^ڙk8kxO_ 0ǦYm-,&hMpğC^W)i.L|}o |/Q ߉OŦW+{ }]ΔxČFuy zÍ_PP{D _5)}kdž]cF1WH֔D+;/zLsH %cP1 4iRS6R0$pMp-( J^ԂhKGZApK@j1Aގ1\ı>??]j}vgg nrMI%uc^i=C8?mGÿO׫7gY?ӑھYߺp:h_(vt:=7(]ve?H8ma4fVO/fݷ9+5m pވ:i_RӇ`w*mme1Z2;p2)$rHOJ}ϋۻnXOȊC7c$u=LJa0/)BM*-/8o=^Xd$G"suԺO-x@kݿtM i> kCgEAozuCFaB뚪GJ]FXns\w}4 _!.v—Q_mWR%IfDIC9;>>v%SֽKB3#~ʈp"}R*gj'kUXrظRwWl=4 JJZ !"Lb)M%haJx78 < 4`<p RRAE!Zv 9 )LMyc нIE'JQM\RbHb@ A!TI=.qۊצymZ;f2H>qsG=1ӊhQȤp):qJ)1ɥ QKH)iR⒖PO֌fáe.KH#֪1r*kYK7+.mEy 7y@#$~j:tnP׹Dmym֦V[6FIڟk!a=٣ w:}0bnJS=}1p~5Ή^_M'a̞3ֳto-]g rHSH|~rQ̬]43Rx:TD&|$n' 'NAeW+mIۦH׽PԖI.uvA [:ޙ# Y*^ Ɋe?4 c5J8fxYN\iFTOn?y}]l|QI:I5Z]nfv 0 >zݽm, Gaq:fxw ΑnW BsCï)S22zn.!'5ƎFdX-`>o8}{,upf7`,@,o#׵;ppD$ףTY:ˣVk[0YJp8O@[hPwddⴼC'˩jW`0U _LV_ ѹc<,]gc A.sA@Wϱ (R) )4%QށM4Ӊ4L5!;S@;ž 6RԌZZJ-)!yoUuYga>xY:F'v\f(G~\0Y=jpTﳣ MW\E8½w^O x+[IL%HnNk"E;AF:$I]cɊz$1Xom5im/ -kPӖ.m @?3Qk}?;^gb~Wg9\#h _)W<1,Ҋz\O* [_\V6Z=ybG~7_H"IB;D5N?!e̮zi"GH""QS1wpf%wc`39n-.c6IN> 9/r䛷<ۻ9gͭ60|;3{WSjG+P8F1Kyn.>ר2<Jَ#/ycUle:8b%˕r[: d^4~%2+Y <4,dɝ~M[.%]pؿ6ͧsҴo̓}#]^ݕ3Iȱsםgb2%[(BƲD3Lg9cxNW/EqoNIМzgocPT%*J m#s_3.msڍ!IAڪH8gcg]Զw0@ S9RF3Jun MDMf\^<%&hЎ=5, 6૪JCac3܌tvcNFiKgB^ZYO; ho?:K $q#>5-WKa_\y0Ơ`HL reYߡM>ŧ2Z&=FpGקN[Ė:nd&^OEhk ֵ'VQX>ßV,. HűSA:WVhE\(Q%ј |rē0?.+t2"-b%KI)#w'G;C&=O^&']ZB; (C944Rbi A!isH}hF{Ӎ0 v))sژRii Z&iqHQ@@[ADf6#˕Bzb[x%syxۏ#bGj5gdʌ Em CD@ּ#gTu/:NJ{X/m%n췓§\y~&؈:0գMsD~?\>+%:b \d&N Q^kc[8nv>u,Y1c&6aWKfTQCtckZ%Ա[ꡲGDpwHEr7+Qk6dwtZG2T7٠3O?(\/c].KmfYfh~Ymp s[QNI4aX:׏%ΙɁ8-ԷN.o,JG~U\1{.IhQoU7L8XqA˚-ڕgYXOn E_49@$M\,3QW/ýKU$^xѴ? 1 >_=\w<5yAdCXFS#^@8j;_]:h}m#UoϚƾY[X\# w9ٰ@{{jTR$N̶/5~525JCqVY}גg9brs\  (--Z*qsjt&'Redaʖfz^[_Z>?ƹx!hOFJ m,X)1W_pjkVur1."mKl8#ERd{]xy]<= B ~I}տ^Z~gu:_&.pBGSňF=_$s֕wy wPO___\\ JRM5=|T5It-"vSe{}j6`r ?yRA_CvG -\x^IKG_yLbfs#X]4ɭޕ$e:Ϋš$w3*$QW`Ңl-DIu Sqܒ⏉2\D`Q m_5{R[Q ьl8壴#nZW4W#%*6AϸP};S|I$eTtRɻ Eլu{}x_¹K;+{? 4׶;(yAU{ gW8[sJDsIH4j@ f[ J3A:E1j3?4֚ p⚽3NpiފSғH E4\BWxiu2L#rNsP^C.F@ѧ`9ݴA9jmB;/ x{r`aOº:1(țn}:׍-m} 𜎇cIm}:泓篽oSjo{_|zz2Z3F0 @WLJB]IOL++a{o $w;sW:nY88J̷5@jM~au ?Vj e,w7n^ 珦i(7ѲG>V{Oh.Gt\=, VO5d~t#SfA1êqFF!^d   q*u,;Kzl}MTw(v,LfUYd=YOb}k#9x.5ݞc#*D1Y#WƝ}ENc !cEi:֜'22z/Mo(K'ձB-%O"$I 9$H~(Yc̣,W$O=ut˧E;`~+[+mާ Wq-~n1 _oO]]֒W^mC)̄!X9^$+)"oЎr4]rsl| )WI{!-ƟڵbC*K f?C?_rvN`z^ F#V?ixc:}\ps <;{L pNG'.'H9yN;gӷjf.VZ5Ͱo)@uϫBuBĴjH_skɲ`BeH$_38#J!;?v ?Z-1%OFϧ,2,O3^Yk~Sy*1԰A>؈&R;IU9ClPFlep;bw)*HzU,NYX0dBfJ?ƌ$thJڈmeċ8tv<šU12  f#iCHZ\[upAyV3K.\)Bfҭ  N@jն5幟 e Iw8"ؤt1i.'w,\(HγQZ.{Aqum}YYs9U ̶v "kҥAA]jmKZ-jZ6+A ߡc5Oaoͤ ،?3JU_" B&;GZ*t7, 4NQ`|܃w l[}ngdW2j^edM1`A®iR]@5qp<* 0IjTҴ[)gs71'999<ծo"G]N.("Px!bR=) 4!iFifN))í0 Pyъ@-Q@]=5M6{Fȿ+z0 t \ `n$/ﻪ1]]18ŖB%Hh`7NzK;}B?Xl4UP0Hqfqq鞴kwmg.iyiqs~dј©"Fn])|6{Rpl[']HSRᶂ-+Ȭc@:*2~ꡏݬ7# q{iqsڔ[x͠,# &\42o2[!Dg< |V{&ŞoMQޙt׌`h6 Wz|Z5[4JX4gֶ,m!Y"uU J+9ǮiR@2K>U| ֝,bzbѸxݷߓ7eTܫI:1=4h(M)F 3'ršna )ޝXmsqHF<2j%q2C^G{Z{6UxXryאgpwn ^xo Сh-C| r_YҋƑM³c)&Oz-4qtv_VXK}{dbq , k]đ׃ҰLV'$݀9 frzW_#H"ObjΤǶ:}s!# +R?T0ae 3€N[ASoCxc!XBpr@N q%RՎ9TCw6aIhiGujGYIccKy@s޾jT:Zܷғ842T HA4NRibiy D8t8t:Ru":R9u@(,F}r9{kk9.D-%19OHGV9=rvAkh\3d FzxL  18Xjv+ͽJf!qö6VJ{iPGNTt{kBvMР5xs]MbЉ ȿ֢>=l^Fu(;^hjE*Kk4QۋxS[Nzt-#?O OzT%Z(cϯ?tTJ]рWpR%H2~/G\kфH#ƩMӓ{_>";_{muk,W"<K.9I}7 HԴ򐈭b}UW3Zش eq30- Z=QΤM̖\(w-Pz"+3Х^ؗCUn'_,J10MT2\4Cv"]mTNO=۩-ӯ ,7`ױ+= sEe+/G݌sc'jE6im^nl)l?v/ KT+eñ_HgS.V| F2vCֹݑ68G9W|2kc8ntkg:=.u-2 jGAptK:hšx< !#isޚhRo

z vWYy>gH-m8 ST4KFm{x Hfp@G]MB.͞ofլamq.m3cн-&?`chkhh񈭢Tt}aڢTyyw^epr u۞{cSK仑lM?yBTԝk}F7֧^SN>g|v^X|OMۥC n:gm[k:|FA1@;TQWcu/݋NJ Xadp]߭ix7/u<7B4k' eQW:vf`~^zt?N 4m, Хm4k[ SJ+aʰLưdӮe[[b69{VxvfrAPן5'}OMyU4knFpU~'JvV֚(iD^ N OJ&7葷rϹ _EhnbK|vӸUfy<->-]]ۼH`0܌,쥊[]P[.ָ}ғ2?*#9R{TyS/ qjIz{d?qv09z"C)q(?Oa^[KsxAV-l:ӜcSʹٖ}U T|(z'$dDc)'1 } Wtk]}JDPo2=⹰1RbIR0I=2y+iTS?ykٜ `g9gP9O"GRWg bGđ3 yo³mCj,Ս2 ;&+ O PH if=BmCGhF?xG_M# ܕD#W %&4e2Ca}A44]JmR H>jW Ns#Fz/'N6,188Psڣ!L7c9Q da@=3Gf6 _5 ]XSFAXmFI- ,#g Z myl=dybՍQAG!In=+'n,aPs]~GU]1tГrʥk^*ȼxjݜ33<_ƷQ[%V G l\3RzWTwgUSO5M0iLns[Zk>Əicrsڮ˦Mx.嵆K|\ҭ0;=rjD$|5mS^5Ǘ1T DxG$t[3Ek O4Ig $cRp s-@74`υ$q*u+LxU]2$y :F52n!|lY}>)w5QY h$vvpOz=t/n5h-"fE^{w5%fU+Q𻳄s Fؐ8Wg\K%EV$m#8_w=Ju$RyfE6@{tr.ъ^TRl dG+7ԚKKZfKkv#bW<蔕Sq/VkrrVmu}nȤ`,y~Qűk}wPQyoEon/~+I/ 7MB1{#93ө< w{fRf!@fV0>b}{~My,ơ]ᜆlx8#vy<1]5FL?Q>y<sڎh9Hy.6Y(0<Wc9=e-ͨ*Qwƶ<&4b!Qip 8A:uI&0~^{`C׾xEM{Dĝc|/}{kh K 28#J:5 i1Uh՜FIS?oƼšk~RI$m ݈a}./g 43$pv`zM|oIOцR+'p]y[gW'?2;UwLc_C\C:,Q[i֖lZ"f,=>j4k*tGKޓ5 ޓ)M4I=O494xҘ:)}i)E(J9(0Ī Xb)Hcml%a;)8P[yGm&Vp9^S"j%/"u&F# 94O҆,m# r=2y#ؠy"۝L>V>,׭ƫxtA_N3zdnnu$gr^ Gib@>Dš}xUA ^Z'"`xyd}a4<4C>Fo\>w3ŢL L%lnW}!'ě ?JAOIo MZ,l5@&0}[We J c'{ZYjwvD!Uiu0n*?eyΞQGCk"ifɸ|ھ_3%Mud|ќ[ ̅|ݢiz=]Ü\dδt(3IhRM04}ҘGibt b(u E{ f O@*9y8ngcsW)5]6{;KҳܣEt*O`zVJoArB;3A * m7?_–Hq#o=_]э9Y Ĝqy &$y}ֵ{-u,Ā%¸~^޳mmBNU7vnڧ$5i^2#.@% &]+wC&&R?\ FUg4NzqDޤrDԾ+֖7H=05[[;sA:q M&Ut:jwTNTY]{[L$As#hMSXQwyv<''➐XHʩh:z]HqGwhG[َE̫"*ՠfD,ׂ3v$}uKMVxI9>2G]վth !O.;X¼Q)MI?cb mărz Sѣ0ˌtÞ@RaՆ# o#HH+~UfG29>?q<*iqBƁAeGj)RTՏb]nDdͰ-N||u,ӜĜO_֩@QWwmPs=˝cb޽!#y<=@7Qo-4>h,cko1y'wy9D2_V[$`Ccp56>hd*y x9ھkfLԄZpDFR:MPq1K!H~yXMZJ{ rv#?2'l~blmW#ˆATchD'q֯N"NLQQPnqTpXmރLiog+Pp?18)ʳZ%qI\RI.u N tS0Hb1N8&;۳gg8\I'Ԧqp l< * ;U;VjgAcgdW*nɟ?'y1%Y#/ Q !^Ffaϵ,dERK`}A{_X DOª8;?;8jw%̫pxO}u?Z't{Uۥ4olڸTGV;QOW,Z[ cp9Q6 \llԢ:^m4jm"`Q*LjPFP9F:mKEu;/hCw{pGeQ\&VeS F;g3^z$z9sR}pM֬[D2B2K{xZ Nڄ:/&U`㜐:5=ƣ?4>#jQ4.ʕ'8þ28rKi0=vr瓦{= r|zG-:.riz}5_D<}@IߥdjqC|!Yic(*\?-V]f$F4gw=zJפAs\!7ʥDŽIFC%]彴82)FY|ɝ,II}FYq!Feެ]YeGm I#l`rjkqsq^E*]3'6L?Z|I.`v!OuYG`:nRA:)Wda>GѺjw[V% <wHrԲNm2~~㩒$Tb`c}2 Ŝ8:%"J0~5|s]}E$+$Ҷ;*=eymαmu<n7 QuY٣Oa v=UsIyw-~xUCU;+l=CǯMw b06PWK>lk3?4D0d*(v8Hdڪ R2,Dɶ@b‘^Ahq }qeس̹f?^e}WO hf2Ȋ=\ 뱡>eo^t1 C:z:5(쭛>a՛OsV:'BLZ+s?u^ F-̪@$WS¦M(ch o FN3 $k<\41!AZF $(,X(^Ic>u%7u $yjZm&C* Ă:5}2X -f`Fm6G?3}q^w^kPDst2k"GoUzp)-Ѳ,<r+ڧ)唹LNS]B(^Id '˷03v K3wvIk$"@Wy=e ;WGx5 r#}G5ōSJi0i);טj4CNzB3LKI 4M8S "UҐiE )1K:sPn-9XnR-J{W|Q3!zIYUԫe<FAXi:n0,-?钟]xLD(U6,?ސg˟Ě}Y'RH>8;Hy#X`1>^0X^'-V6.RmtO,fI<|ҥy냌2G[Mz֋hI0\lQ_{wiy,u>[Y&y?*_ZpXs3].,-58[w;@2IϮ+KܴlE9;߹@+d5+("J)S\8 ::Y%YnQ69ewW M-"Emv%UVc)tKI$TdyLPn}Ek`\Z5ǖR[积Pk0iq4Y`n}qJsszw92Emm0/~y8.u;[4&N#Aڨ%U9瞟Z0ҌafB4 'לy U|xEu(zNMOS]>KI0}kJ9!̇-N÷/$PtokҶ{[mJ+&V9- 1OpG8ƻHEX/f|Z?-YcIǨ1FMq\[jh1y9Ny*xϩپ$$~`gn2inMUBQ97 uÜ};VFdiBAҵ4jeH=?ҲSW`97h?Rka U,JGO0?KQIYinIxgIH'>˽Q, ^DhydUmFb/<6WcsI>kj8_E=Ĺ_hKV'+m&JUZDv H k֙k0/[7`bsOogq.oeԦ9ko"-20 p3߭w¼nc%n}WۮW*]V c)Ȫw|#6|-bJf^J14mH\瞿h5oͱXpqH~jRY:ʲ3y39XpqSd89b:5W F]H83W-A奴DȒK+o;UU9Lwa+4ũ$d: F#6YTBzDrTKj pNO&$ EJ7G\w 5Y#URڞs1Jbl?vs~38#vmktt6193JVKT *K咘#9ǽ+B77%$w5ÿ6Z Yy9B>UNO⤱euE'lKy^Ϡz YHM1YUG4b} Fi!pfoRLv_]6!cFyGGxcx4]1nX(F`t^۱ϷLдInξ OzɯTrwc2ktPi#ǫ1囿Nsퟥ8 vq_5V&#Vs+VS! qOʴm-ESe-Pf0ސ(!J6) bwwSIo~isN<`Jz@iq@(\PzQޔڒ\P`&.éiYK$.G$~\|~dthם'x9AKsȮRI$̎}ŎrIkplI**$yb2}0;uE.&C$]qُS%uWdAoaGW \QWQE#X^ph$[FӶe/fR cEbK€ě#Izn䌻BW8b 3M|\$*ڵAQDPCB(#XG_Q/"g;v3G !Ēs~]bv 2{($_IiPU@#X?AW:ӽɫ8X䧖,t#gs#\CCQp*VTK^3vWndF{d@$Q,,KRiP6H;I{zVz39(ElFh4+3ߥ-Jizdu.pqNIϿ?ҔsHMM)3G\ POIL! !=AbRt4c֒CU[3C9` ꀔ7*P;pqѹ0H u}Pno dI4̾Q$V]Fݢg/8?Jgb)7EeCPzRcO7Os\#x7Ugmo,:rgN|챘.fEl=0];-mf@B Hv Sx]%B0=+7٣k"88NP 4iNSF:SOjLB^@;Q@HS%-QE’ ہ\}?*ZZbz^Ը?-0=?:_N4P!1߿3F)h .H~Tuwҟ LsJN 裨OEF(ԝ C? ZNSHh)4b@4v1 !bRJy޴hM8LDí;ړQ@-QHw(Q((QJ(P nU]۠1沼KMxvܯ2 QIAU<|#knq㞔ټ][ hV9\<9Yv(/_O'[TuWuTw8}{Vo!zO]pkRs>W v`y~<'oJoC$bMmqk<[pbcc5jZ>a}F›,AѰmde<Z~ʔuփri3jyS[Α!uI p6V]KdX'OBz~uLfE,#<6V'oڬz̟fkԖ?w&ҡ_“L/#SZLZ bf0[OiR\-\3Hn +~Y~)5=SPi ؽǒ8n3CgiLʄ/#0zt.JNKI뎹>IҊJC41E `aLFE44˜ M#tiiN)wO7P"qKښ)1@PxoR,YOB"Z>i`8QԞ.8^OIBM]豚<Gt E,z-z*(fu ȹ`?KIU oJ=ƥkWQâ* GOI]鎥r(RKJ3@ E#YU$׵c&ҵ%Oh3B8^е$_o~?λ^jW:$J N1k|BΗQ^yRJ;M{ i<Gٯ1mt=fNyΗ䛆BD֘3uF35֥e M5񯻑paj@W~ZmsVH$}oR8O*+utd?8CZCHo3(C ukƝ hfhtx;2eF:>2Žފ3)\3h6^I(e*H:VyEƩtͰ9};6p]Z'frȹS6Cm ^k";rR0jGf߉W¢Os2&=@!]oyTu#L\ub qa= f1z+zɍz)8+Լ7 O[wc`W^О:qWKs^9?1>=HQ;uO[_蠎F~|#6ݷ~[&Hؼxޥ{u-F]Q}k &cx7zq#;XUQNGj˒Y[rO [=rISj:% %s+ H]X&" GI8ͼ?^MO#)=6}x?{ơI] иP;|Ky^EKmn*sbXu_M,~uҰ<auxf+[ȚW%}k^ѳX|'uu })~Հ?)fV bR_:Qך871|CJiךtJ^ԀN(b3_Ú$4iVnw34C$j坝>M Y'b.Oz Znr{Y $&DWGeaGWM'N[yF6"I6m-򭠎󝑨֤(扣qVSG [[ hf-J]LM%,U@QVHZ( QE/cZZ1;hRSljj)VB!*zE.QKp (PKp3\RSmzRt.( ~4`R4=-hi94bҀI]?*Z)݌L~fCzi1ҜM!UC7 Fix up IMG tags in given documents to contain correct sizes. This code runs under either Python 2 or Python 3. Keep it that way! SPDX-License-Identifier: BSD-2-clause from __future__ import print_function Changelog: Originally created by Eric S. Raymond 30 Jul 1996 Modified by Erik Rossen 15 May 1999 Added the --nomagick switch, to use file(1) and rdjpgcom(1) to determine the image size instead of identify(1) from the ImageMagick suite. Modified by Michael C. Toren 18 Aug 2000 Fixed bug where the SRC attribute's value needed to be in quotes, improved command line parsing (but it could still use some work), added -q switch to omit quotes when generating tags, and -l switch to generate lowercase tags. -mct Modified by Michael C. Toren 19 Aug 2000 Improved the command line parsing some more, now looks for additional arguments via an IMGSIZER environmental variable, added the -d switch to set the DocumentRoot, -v switch to display version information, and -h switch to display usage information. -mct Modified by Michael C. Toren 23 Feb 2001 Fixed two bugs reported by Jeroen Valcke , one where the -d switch did not function properly if the img src attribute was quoted, and another where the &error sub was incorrectly reporting the line number an error occurred due to the input record separator being set to ">". Rewritten in Python by Eric S. Raymond 11 July 2001 Time to get rid of the dependency on httpget. The -l option is gone, too; instead, we deduce the right case by looking at the leading tag. -q is gone; we always emit without quotes. -m is gone too, instead we try commands in least to most expensive order, and notice when a command returns not to try it again. Fixes by ESR, 29 July 2001 Incorporated fixes by Peter S. Galbraith. Fixes by ESR, 25 April 2003 Merged amended versions of Lennart Poettering's fix for Debian bug 139714. and Jeroen N. Witmond's fix for Debian bug 168964. Added regression-test production. Enhancement by ESR, 14 Nov 2003 Verify and merge Lucien Saviot's patch to produce XHTML from XHTML input. Also his change to handle spurious lin e breaks produced by Dave Raggett's tidy(1) utility. Modified by Andrew Gwozdziewycz , 17 June 2004 Added support for the Python Imaging Library to determine size in case of failure from file(1), rdjpgcom(1) and identify(1). SPDX-License-Identifier: BSD-2-Clause """ # pylint: disable=invalid-name,missing-function-docstring,,redefined-outer-name,global-statement.too-many-branches,no-else-return,raise-missing-from,no-else-raise,consider-using-f-string,consider-using-with # pylint: disable=multiple-imports import sys, os, getopt, re, filecmp # Warning: In some Python 3 versions getstatusoutput() returns # status incorrectly so that a nonzero exit looks like the subprocess # was signaled! (Observed under 3.4.3; Debian bug #764848) try: from subprocess import getstatusoutput except ImportError: from commands import getstatusoutput try: from urllib.request import urlretrieve except ImportError: from urllib import urlretrieve version = "2.12" splash = """imgsizer version %s, Eric S. Raymond See for updates.""" usage = """Usage: imgsizer [OPTIONS] [HTML File] Options: -V, --version Display version information and exit. -h, --help Display usage information. -d , --document-root Directory where absolute image filenames (i.e, ones which contain a leading "/") may be found. -n, --no-overwrite Don't overwrite existing width and height tags if both are present. """ # Optimization latches -- if an attempt to invoke a command returns 127 # "not found" there will turn off and that command won't be tried again. magick = 1 # using ImageMagick by default rdjpgcom = 1 # using rdjpcom by default pythonimage = 1 # use python imaging library def attrformat(xc, dim): "Formst an attrubute" if lower: res = " " + dim else: res = " " + dim.upper() res = res + '="' + str(xc) + '"' return res def sizefix(infp, outfp): # Apply attrfix to the attributes in each image tag global lower while 1: ch = infp.read(1) if ch == "": return outfp.write(ch) if ch == "<": # within an HTML tag lead = infp.read(2) outfp.write(lead) if not lead in ("im", "IM"): continue # splitting the read this way copes with single-char tags like lead = lead + infp.read(1) outfp.write(lead[-1]) if not lead in ("img", "IMG"): continue # within an image tag lower = lead == "img" attributes = "" while 1: ch = infp.read(1) if ch == "": return if ch == ">": break if ch == "/": ch2 = infp.read(1) ch = ch + ch2 if ch2 == ">": break attributes = attributes + ch outfp.write(transform(attributes) + ch) x_match = re.compile(r" ([0-9]+) *x *([0-9]+)") rdjpg_match = re.compile(r" ([0-9]+)w *\* *([0-9]+)h") def imgsize(src): "Return the image size in pixels for a given image source." global magick, rdjpgcom, pythonimage try: if not ":" in src: src = "file:" + src (filename, _headers) = urlretrieve(src) except IOError: return None # Now let's see if we can get a size for the retrieved image. # Try file(1) first -- cheapest, as it doesn't read the whole image (status, output) = getstatusoutput("file " + filename) if status == 0: # file(1) works for every common image format other than JPEG if output.find("JPEG") == -1: sizes = x_match.search(output) if sizes: return (sizes.group(1), sizes.group(2)) elif rdjpgcom: # Use rdjpgcom(1) to handle JPEGs (status, output) = getstatusoutput("rdjpgcom -verbose " + filename) sizes = rdjpg_match.search(output) if sizes: return (sizes.group(1), sizes.group(2)) elif status == 127: rdjpgcom = 0 # Next try identify(1), more expensive but bulletproof if magick: (status, output) = getstatusoutput("identify " + filename) if status == 0: sizes = x_match.search(output) if sizes: return (sizes.group(1), sizes.group(2)) elif status == 127: sys.stderr.write("imgsizer: giving up on ImageMagick\n") magick = 0 # if that fails, try at _LAST_ resort Python Imaging Library # open doesn't actually load all the data, so it shouldn't be too expensive if pythonimage: try: # pylint: disable=import-outside-toplevel import Image pyimg = Image.open(filename) return pyimg.size except (ImportError, IOError): sys.stderr.write("imgsizer: giving up on Python Imaging Library\n") pythonimage = 0 # All attempts failed sys.stderr.write("imgsizer: couldn't analyze %s\n" % src) return None source = re.compile(r'SRC\s*=\s*"?([^" \t\n]*)"?', re.I) awidth = re.compile(r' *WIDTH\s*=\s*"?[0-9]*"?', re.I) aheight = re.compile(r' *HEIGHT\s*=\s*"?[0-9]*"?', re.I) pwidth = re.compile(r'WIDTH\s*=\s*"?[0-9]*%"?', re.I) pheight = re.compile(r'HEIGHT\s*=\s*"?[0-9]*%"?', re.I) def transform(attr): src = source.search(attr) # Must have a source part and no percents in existing width or height if not src or pwidth.search(attr) or pheight.search(attr): return attr if no_overwrite and awidth.search(attr) and aheight.search(attr): return attr # Correct the url for documentation root, if present url = src.group(1) if url[0] == "/" and root: url = os.path.join(root, url[1:]) # OK, get the size tuple if possible dimensions = imgsize(url) if not dimensions: return attr else: # Nuke any old size attr if not no_overwrite: attr = re.sub(awidth, "", attr) attr = re.sub(aheight, "", attr) # Compute image dimensions (xc, yc) = dimensions # Plug in the new attr return attr + attrformat(xc, "width") + attrformat(yc, "height") # Output lowercase tags by default. lower = 1 # Set the default DocumentRoot to the current working directory. root = "." out = "imgsizer-out$$" mydir = "." # NOTE: if you are doing .\" Date: 02/14/2024 .\" Manual: Web Tools .\" Source: imgsizer .\" Language: English .\" .TH "IMGSIZER" "1" "02/14/2024" "imgsizer" "Web Tools" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" imgsizer \- automatically splice in height and width params for HTML IMG tags .SH "SYNOPSIS" .HP \w'\fBimgsizer\fR\ 'u \fBimgsizer\fR [\fB\-d\fR\ \fIfile\fR] [\-\-document\-root\ \fIfile\fR] [\fB\-h\fR\ \fIfile\fR] [\-\-help\ \fIfile\fR] [\fB\-n\fR] [\fB\-\-no\-overwrite\fR] [\fIHTMLFile\fR] [\fB\-v\fR\ \fIfile\fR] [\-\-version] .SH "OPTIONS" .PP .HP \w'\ 'u \-V, \-\-version .RS 4 Display version information and exit\&. .RE .PP .HP \w'\ 'u \-h, \-\-help .RS 4 Display usage information\&. .RE .PP .HP \w'\ 'u \-d\ \fI,\fR \-\-document\-root\ \fI\fR .RS 4 Directory where absolute image filenames (i\&.e, ones which contain a leading "/") may be found\&. .RE .PP \fB\-n, \-\-no\-overwwrite\fR .RS 4 Don\*(Aqt overwrite existing width and height tags if both are present\&. .RE .SH "DESCRIPTION" .PP The \fBimgsizer\fR script automates away the tedious task of creating and updating the extension HEIGHT and WIDTH parameters in HTML IMG tags\&. These parameters help many browsers (including the Netscape/Mozilla family) to multi\-thread image loading, instead of having to load images in strict sequence in order to have each one\*(Aqs dimensions available so the next can be placed\&. This generally allows text on the remainder of the page to load much faster\&. .PP This script will try create such attributes for any IMG tag that lacks them\&. It will correct existing HEIGHT and WIDTH tags unless either contains a percent (%) sign, in which case the existing dimensions are presumed to be relative and left unaltered\&. .PP This script may be called with no arguments\&. In this mode, it filters HTML presented on stdin to HTML (unaltered except for added or corrected HEIGHT and WIDTH attributes) on stdout\&. If called with file arguments, it will attempt to transform each file in place\&. Each argument file is not actually modified until the script completes a successful conversion pass\&. .PP The \fB\-d\fR option sets the DocumentRoot, where images with an absolute filename (i\&.e\&., ones which contain a leading "/") may be found\&. If none is specified, the DocumentRoot defaults to the current working directory\&. .PP The \-n (no\-overwrite) opion prevents the program from overwriting existing width and height tags if both are present\&. .PP Additional options may also be specified in the environmental variable "IMGSIZER"\&. For example, to avoid typing "imgsizer \fB\-d\fR /var/www/docs" each time \fBimgsizer\fR is invoked, you might tell sh (or one of its descendants): .sp .if n \{\ .RS 4 .\} .nf IMGSIZER="\-d /var/www/docs"; export IMGSIZER .fi .if n \{\ .RE .\} .PP or, if you use csh: .sp .if n \{\ .RS 4 .\} .nf setenv IMGSIZER "\-d /var/www/docs" .fi .if n \{\ .RE .\} .PP This script is written in Python, and thus requires a Python interpreter on the host system\&. It also requires either the \fBidentify\fR(1) utility distributed in the open\-source ImageMagick suite of image\-display and manipulation tools, or a modern version of \fBfile\fR(1) and \fBrdjpgcom\fR(1)\&. These utilities are used to extract sizes from the images; \fBimgsizer\fR itself has no knowledge of graphics formats\&. The script will handle any image format known to \fBidentify\fR(1) including PNG, GIF, JPEG, XBM, XPM, PostScript, BMP, TIFF, and anything else even remotely likely to show up as an inline image\&. .SH "NOTE" .PP The \-q, \-l, and \-m options of the 1\&.0 versions are gone\&. What they used to do has been made unnecessary by smarter logic\&. .SH "BUGS" .PP The code uses regular expressions rather than true HTML/XML parsing\&. Some perverse but legal constructions, like extraneous space within quoted numeric attributes, will be mangled\&. .SH "AUTHOR" .PP Originally created by Eric S\&. Raymond \&. Additional code contributed by Erik Rossen, Michael C\&. Toren , and others\&. For updates, see <\m[blue]\fBhttp://www\&.catb\&.org/~esr\fR\m[]> .SH "SEE ALSO" .PP \fBidentify\fR(1), \fBfile\fR(1), \fIrdjpgcom(1)\&.\fR imgsizer-2.12/README0000664000175000017500000000121314563157407012326 0ustar esresr= imgsizer -- autogenerate WIDTH and HEIGHT for IMG tags = This is a little HTML optimization tool that will generate correct Netscape-style WIDTH and HEIGHT parameters for each of your IMG tags. This will enable the text parts of your page to load much faster. Put imgsizer on your execution path and the man page in a man source directory somewhere. `make install' will do the right thing on a Linux box. That's it. You will need either identify(1) from the ImageMagick tools or rdjpgcom(1) and a modern version of file(1) to make this work. If you are using Linux or any of the free BSDs these tools are probably already on your system. imgsizer-2.12/Makefile0000664000175000017500000000337114563157407013115 0ustar esresr# Makefile for the imgsizer distribution # Change this in NEWS file, too VERS=$(shell sed test-after.html @diff -c test-after.html test-converted.html @echo "No output (other than this) is good news" dist: imgsizer-$(VERS).tar.gz release: imgsizer-$(VERS).tar.gz imgsizer.html @[ $(VERS) = $(NEWSVERSION) ] || { echo "Version mismatch!"; exit 1; } shipper version=$(VERS) | sh -e -x refresh: imgsizer.html @[ $(VERS) = $(NEWSVERSION) ] || { echo "Version mismatch!"; exit 1; } shipper -N -w version=$(VERS) | sh -e -x imgsizer-2.12/test.png0000644000175000017500000000766014563157407013145 0ustar esresrPNG  IHDR@ș`PLTEfD3UUU"3DDU"f""w""3333D3D3DDUDUwffݙDfUU"̻DDD333"""#tEXtSoftwaregif2png 0.6 (beta)iIDATx흋v:EV{j3֮4|\ H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$8mQfY*L*M$W|[EI?|^?ACS{nC&jo&DP I 1Ƅ&~YvEZv(Šq!ګ*9ɱQmpn#S>+ihѬC"Дg;pnBjr.FXnFN@()vEK*`[2 >&l_$N% ;A&7M.G]eNf,`OvL.V>e kGiډǕpvi$X<Ӯt bƏmقke{0 vGOY4˻6GT$/I 2K[U##7 v̋=xw*׫y;D_܄dFpL^a]?:F5aCNsdhuXve/,CSkyj6B M#wEQt Z aTYg]C8'6W_Ӵ~3Hp/qj'@j Smu.K \6.6[i .A}`h6ږ[ Pė[߲&%BE.RX 1k~eFz\ #|%eY{屲)ܻBz%2ř;HO/ꕥ^X@ NEQ.06- /6{-D*QL/j}O|1SQ]U]H8ΜC7Tɛ~BsTW|#} ח-[Y`(Ηr9ϗeqnkʑ_(59Vl/{'lͪ$gdw9-p{!ݐpb0X:~=Ɋ|y qQǀ=1tKe_Z%5#n~}A~}XO}仵_>[.k`eF]fb0O+b5`ǂ`Wzmaj0z0.%0 zv^.Egs;D(|N܆`$Ax_Mom4NhP@(r^׮m[rK3e _I%m5y ;Mc.%t>5~smN)$M[$QK)NȖVWw&"\ h3[>9z!B0Mm}X`l.l' h_W`J3/C@wiP!WO0zZUlwS'OWA~K`[ӄ['QFN463ZgvA6K`dʤ.5xG F0}bV Q,akPu?HMM'`SaX˗ eQscB\vQ~{Yq[k:Z;kz'薆r`H+=r锩Ͻ,@/v/K`8,@d4a~8ۦ>b_qZnv^e8Η0j~~*4,7H ~]+~7Vx I; .S1gaCm8T&X3~dW`(Bn0AS}ROwjam8ˬ y%1@+#iŷ^B豒>Oa\G.窒DwYWwcoG}/V E .,tl}V'iT,P(GkPtZu&#'Jø| ,Poֱ_r[rBA8WR L|2;PCrg.;1Iye C~z >Uhm/+9NtZI0*ө^\kT{S)=ҩ8]OeVȗ)MJa1;]ƭj|r~W_zMӫ^k|uW}۸ѪF՗ϩCxĝ?Wy|wՕNF|ºW1??'lMW|MxV#]־R})y۾>$Pת)y:}̊Q1 }/l nk~*ބz3wקShzطǤ}wg'泔zC),gا=Mn>7hzjݾ {l^vI N,c槺]ow4F£z=|6|ФLĖ9ׂ0WpL"3Eg*x>%8SCD"HgIzV[73Ҁawj~a7ҠT53G_i׈D`Pu9;C|l!IENDB`imgsizer-2.12/imgsizer.xml0000664000175000017500000001455514563157407014036 0ustar esresr imgsizer 1 6 Sep 2001 imgsizer imgsizer Web Tools imgsizer automatically splice in height and width params for HTML IMG tags imgsizer file --document-root file file --help file HTMLFile file --version OPTIONS -V, --version Display version information and exit. -h, --help Display usage information. -d <directory>, --document-root <directory> Directory where absolute image filenames (i.e, ones which contain a leading "/") may be found. -n, --no-overwwrite Don't overwrite existing width and height tags if both are present. DESCRIPTION The imgsizer script automates away the tedious task of creating and updating the extension HEIGHT and WIDTH parameters in HTML IMG tags. These parameters help many browsers (including the Netscape/Mozilla family) to multi-thread image loading, instead of having to load images in strict sequence in order to have each one's dimensions available so the next can be placed. This generally allows text on the remainder of the page to load much faster. This script will try create such attributes for any IMG tag that lacks them. It will correct existing HEIGHT and WIDTH tags unless either contains a percent (%) sign, in which case the existing dimensions are presumed to be relative and left unaltered. This script may be called with no arguments. In this mode, it filters HTML presented on stdin to HTML (unaltered except for added or corrected HEIGHT and WIDTH attributes) on stdout. If called with file arguments, it will attempt to transform each file in place. Each argument file is not actually modified until the script completes a successful conversion pass. The <directory> option sets the DocumentRoot, where images with an absolute filename (i.e., ones which contain a leading "/") may be found. If none is specified, the DocumentRoot defaults to the current working directory. The -n (no-overwrite) opion prevents the program from overwriting existing width and height tags if both are present. Additional options may also be specified in the environmental variable "IMGSIZER". For example, to avoid typing "imgsizer /var/www/docs" each time imgsizer is invoked, you might tell sh (or one of its descendants): IMGSIZER="-d /var/www/docs"; export IMGSIZER or, if you use csh: setenv IMGSIZER "-d /var/www/docs" This script is written in Python, and thus requires a Python interpreter on the host system. It also requires either the identify1 utility distributed in the open-source ImageMagick suite of image-display and manipulation tools, or a modern version of file1 and rdjpgcom1. These utilities are used to extract sizes from the images; imgsizer itself has no knowledge of graphics formats. The script will handle any image format known to identify1 including PNG, GIF, JPEG, XBM, XPM, PostScript, BMP, TIFF, and anything else even remotely likely to show up as an inline image. NOTE The -q, -l, and -m options of the 1.0 versions are gone. What they used to do has been made unnecessary by smarter logic. BUGS The code uses regular expressions rather than true HTML/XML parsing. Some perverse but legal constructions, like extraneous space within quoted numeric attributes, will be mangled. AUTHOR Originally created by Eric S. Raymond <esr@thyrsus.com>. Additional code contributed by Erik Rossen, Michael C. Toren <michael@toren.net>, and others. For updates, see <http://www.catb.org/~esr> SEE ALSO identify1, file1, rdjpgcom(1). imgsizer-2.12/crate.png0000664000175000017500000003754414563157407013272 0ustar esresrPNG  IHDR,,Z DzTXtRaw profile type exifxڭirs^a9ntWD9DF$Yf)gSl[lMϟ竳~n>x.Ǽ;%ǟMy}ެ;Pul\_yY X7~,g%0Bk~b>tv_|l?Mal~o_57+n?_;gs3]Rw80ee%/ooe-9;kc[:do_^uJ_w|=˄o&^ \v7]qw xͿs~lżisp;Mӵk~96t\Y`b$_z{`"ޝ xfsر}~_|B934,6+,U̪&vi]vmCpI'rizO<^cW~R~p$1/3[]^l*\s`Χ>ܿI7?yu3r_xm[QuP6l'qbSQsbZ3`3DWzpv@Po(xv rRo6mcř2;d-8W4l3#;BLގ"b;$-*/BM}vx)b[v#2-̡U\j9_5'6sX/vߧQc4bK\eSZQ4TZzu(1ւL침>kmFKN E>p;$gװ`#=okdbՄ$'7'yBz'NE >rܘlŦ;v:d՝~֝%o}1X&q3*wH-Mt:#8Zg 0' u]G1M F>/jJ{w(% [T\24K|9UKfM0] ؠ6793$W_Lu. V)j u[41_)6pbZj]⚳2+dg=̨|]$=,Ew1 ݴX۫#coj0$VR\nd03:h1 (r #ZMVnTQv ɪʤ(c.hv3d TQ.~, t[z,?@,hJ2$n &ީÆܹw_sg/0J5S::.Er}("}ɡ>5ś cb V,@Br;AN9 We/9 *!J` RY!X46 J6oíd[Kchsf g^P5Eg6 ctC&q9]FQ=' BӘ\t$_>'־4AG(O} h1b>MAwyD3ϩL/31xQbq+JT4Wrao,@R[?}6|nPJ& CpŇSnm"b(Arq7!Pq G5hBWkmRTbqK沭 |%%J=QoLbNy`XuEIѽ)fMF=)O{FpllS\, +ێ %4!H^ЖEDuAvP3II!EfTnɌQ5($"8%`Ѹn[bc4(~  nxI+ypw&@0wЇ4ƭG}AЩ܎`Hڐ.V5#7?){@T ВAV?AE J\< au E5EtO-EX 4"8y1NRН ܩLtފ"{U"CCTC;CFh์}*do(T]$ D6R#r`#` < HH#*=NA9I'B\4;usz'|ZGDBPq#G^Y0BvrWB*u.~  "J0ocn޷jEVsf*쯞">+: ~:D=ի>j` xa%ȡ:*PbXI}ʲ)a ƀSܢ[OҀhb$+B>B8Qx+FS@nND )ufAI)8x 70uУac3D%{J}x` OxH8KRuZyqX/ V50 "$z RY~0!܀_Zɱl6$qS@7b֢#3UeՐjIoul*363p:-|SF48bR t"Lb#8![E$ S Yƃ#Say퐺:ٻ@ ; 1̸%"v% v` fFVO޶!*z`lgR2܁gpLತx Tc[\2*"vy9`d69YA=l ʢ eL(Cb…`D龟=+iYm7PF>+~XP@4H>2IiTBjlSnlV >MBHKuӠd+@9MɂMhSIfoU"\Y0UACJL8J/H1s;T w<ڐD!ξaQY3Q~u۰5QN:cjbr.;"DL"О3Xo4f5v S*R[C5L,k!NT-U6&o=yɣ܁"ihC+ÊȇmU֧'Pfa#vܼ,lt_ :D>Uz+]>Rkmī%{SаpAV-܂ǚ([0 Q4֋&6F..N]yO=He6O-01T*'&qRvHTK#@ ϡBG2GbrK,d |lK#Lv@ eVX>+Ɖքҙj7.){"4$Uo8֡ۀ>1|ZF1(@|PUx#HV& g%@jFd5f9G`vfkL42?m mt5XT?k_ˑ3?~DO( S?v g4K8aMwo{f`CV85c.Qr|zo "HG@I4GZn,;@X,#TLU+dm SYY XB'Hhq[z2K:ЦH  Щ7i)248()u3pq&T4YW<Ϫ4!A7SQxm?JʕI~;^hQ*%]]HJ::/C[j >9FJPCʨsznTY 6szr`0BhBָfQm҈YE~CSm8]5}n T_Z .`mWDvq<YٲMe PSn#^w&ɈEP`34mx j8~:H+w@_!$H-bRE Q٣M?Vp$,HU@h%,Wb~U<ҒS&[>I& e|N|o,?)} U!k,q!XtT b$ZYdg9dq){)u% ҒP{7xO>Gf6丫jڢ>Fve ° :.KCuBXY$\־-ZIKKY'o{g朥7’@J%1:|+n@C.B7,(69?6*@ɀNQ)TA 3ցOPl3 5Zz(ً6 ? l>hӖUw>Bܸ>S=SeWP؆]-CDŽeEv<мka+b~"Kg3}3N&tTCxAãĊ^a+Q ÒIxh(ڬ 6F:nWZMnI) `xqgo171&oDٸGO+մ Q&o06y X2ٕvVZTPEf??@d`qjT 6,4eRIᲷbZaS6:L5I͎HK( D3U^+?TaA8ρ6癩W._F(@%~hICz^F;wxcj K6 amEֱs>1z20kŪ2p/z) a! TЃ>cHL/󳡹ԪG]ua(ڔU8s2.BII0ξHqAD =Btʒ:>QhTDkD!Js_~ :|s?-iګ9w>^v6΀~m>S:RuTm8ԩ\dl0V2FN3ZkW=jwz_rԔ2A-jfLHBYiLC 15:}M[RF|\޳+Kfun=JLImYa_S:3:UǸ`8*}LU@<0%x%Dttzb]j~qyT[s WQA'd7BbHd(ܘC>DB/[]%1? xС-sBf,H|Nau7mmD,1M׾ c~3ױN-!MQ&O&$U'PCiMgװuy?>ݑ[drj*G*xv4Q-/*z )̬bKGD pHYs  tIME##ҏR9IDATXU]Gu?thAA4FIUr(b(;!Tc^cY3>'?䷑rݞ1Z f 8FfЄ@o %! n8`AJxkhp'^x J_8 (Zf^xoS\ϸ;n4M9)8B1ӻ!yBpҴw{@pw7 wpA2`9""`(hR0LSTTIS ͅ׸ eGD0D@UД0hQ! ըto NQ'qXi %#tzJඒw{4gzL=iafuὁ(mYX/.Fw)2ۊgz_I.4&M/d?O1"nd7򫯘NNqmrqW{cKR)h^MBL 1> `ݱvI Xo2nw^ qwj[zeO m=d7c*},iBRb=\#IќPMt3UER9TA5jBN 1~F!Ĝ-*"J]X2:d~O쐤q`M rXrΤM9ὓ4{u@gDw݄V;_|غwܸ7ͻKǥJy Xeh&U<Ӗ:ӖKܜU{./.ç_pdi)aiϷn\_]pz)L%huFv'wID1k2#XkիsӎcS ZS)x~yu!{%3yֺR؟cErR^?ES" mЅa3ڸLTy~"9uY\E:1ΕߝR 7^FJ̴9nXm0(*YGDg̰ry)09Tu:pMH9-EIFsL'݌[L󄊒sAD $C 6Nu%9:1nRQrXG+~Jc⒩r)Xw~^{ƷsnQQ0aBp7Zkˊnhġ4WrꌉƑ4P_uRԺ駼sf)I1֍f{v{KXkj=0XA nA~"JH$Qk'\ VܡhCNmOڗu4eSdCs$~_s/s]JjM35D|88c$!Z##nIbEò\HǛ=)H;yU_}JiVM-+N snZ3;|ӓC 1ˁ?|y%[Fw፷w%%c> IcpwcΊl6 -`Pr` '@\:&'O?ZZH4ܝT&ݎuw~͋gg(%G!܃Y a^huU0st3-Hz4 [&\Kg4ӌ;,7w^z&緙9U3=lR4K7 ìCX(>݈w;VM֎ֺ~̉.^ٓr00wp\,k5qZ=Yna DX/~ߜݻǽWT yGBme mS #;HհW.l `ӽB΅n?|%0'a*u7S|߸+!L]^-2J%BkGS z$*0'ı9)x=gw_b.i Wָ{u^(-)H֣M%h8R͎pXvTZg%WulqQo,(޽EJcsA4cVe>ggw9>7WuҶ4cC:Aʅ.TpՖq;H r,2$"|Wn޽;p–Vzx#B cG$:%PJ\6[894HEP¤uj5|ݻ"naC+rtڑsMg[5GgƲP}֍i4lL''hLeB5OO֭~uY8,g;"{"<Jk#՗ 8g9Z[t`:M,_?W乢0~Dia$f,=L3g<"H;}kVk$F@lJRBܩkCJG1n\{E<5$pMw;dʀ;8-ð!KIa Cm1lA(0:rsGQAܰ9uLݘ/ARUxX>2k160(~Hbcf5ې9vF)9:NFa%34ܲHd٨:Eǡ|MFx uf7 9wwQDS@VqݮX(r=ְ.[< .%6!RYH>p׌4`_~, o4z[_%V}XrZX+!o޿!%?0/)oz`_#9\